diff --git a/README.md b/README.md index 40cde67e..b7ee00a8 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,7 @@ By specifying `server_uri`, the fleetadapter will update `rmf-web` `api-server` * [Hotel World](#Hotel-World) * [Office World](#Office-World) +* [Home World](#Home-World) * [Airport Terminal World](#Airport-Terminal-World) * [Clinic World](#Clinic-World) @@ -157,7 +158,32 @@ To run a scenario with multiple task requests, load [office_tasks.json](https:// The office demo can be run in secure mode using ROS 2 DDS-Security integration. Click [here](docs/secure_office_world.md) to learn more. --- +### Home World +This demo world shows robot inside a home environment where the robot is configured to serve beverages to multiple drop points and also perform looping tasks. + +```bash +source ~/rmf_demos_ws/install/setup.bash +ros2 launch rmf_demos_gz home.launch.xml +``` +2 types of Tasks are defined: **Delivery** and **Loop** + +To send task requests, open rmf_demos web panel: https://open-rmf.github.io/rmf-panel-js/ + +![](../media/home_world.gif?raw=true) + +To submit a delivery task, select ```Delivery``` from the ```Select a request type``` dropdown list. Next, select ```your desired coke delivery location``` from the ```Select delivery task``` list. Choose a desired start time for task and click submit. + +Or, submit a task via CLI: + +```bash +ros2 run rmf_demos_tasks dispatch_patrol -p kitchen dining_table -n 2 --use_sim_time +ros2 run rmf_demos_tasks dispatch_delivery -p kitchen -ph coke_dispenser -d bedroom_1 -dh coke_ingestor_bedroom_1 --use_sim_time +``` + +To submit a **loop task**, select ```Loop``` from the ```Select a request type``` dropdown list. Choose desired start and end locations and click submit. + +--- ### Airport Terminal World This demo world shows robot interaction on a much larger map, with a lot more lanes, destinations, robots and possible interactions between robots from different fleets, robots and infrastructure, as well as robots and users. In the illustrations below, from top to bottom we have how the world looks like in `traffic_editor`, the schedule visualizer in `rviz`, and the full simulation in `gazebo`, diff --git a/rmf_demos/config/home/tinyRobot_config.yaml b/rmf_demos/config/home/tinyRobot_config.yaml new file mode 100644 index 00000000..0e039c12 --- /dev/null +++ b/rmf_demos/config/home/tinyRobot_config.yaml @@ -0,0 +1,56 @@ +# FLEET CONFIG ================================================================= +# RMF Fleet parameters + +rmf_fleet: + name: "tinyRobot" + fleet_manager: + ip: "127.0.0.1" + port: 22011 + user: "some_user" + password: "some_password" + limits: + linear: [0.5, 0.75] # velocity, acceleration + angular: [0.6, 2.0] # velocity, acceleration + profile: # Robot profile is modelled as a circle + footprint: 0.3 # radius in m + vicinity: 0.5 # radius in m + reversible: True # whether robots in this fleet can reverse + battery_system: + voltage: 12.0 # V + capacity: 24.0 # Ahr + charging_current: 5.0 # A + mechanical_system: + mass: 20.0 # kg + moment_of_inertia: 10.0 #kgm^2 + friction_coefficient: 0.22 + ambient_system: + power: 20.0 # W + tool_system: + power: 0.0 # W + recharge_threshold: 0.10 # Battery level below which robots in this fleet will not operate + recharge_soc: 1.0 # Battery level to which robots in this fleet should be charged up to during recharging tasks + publish_fleet_state: 10.0 # Publish frequency for fleet state, ensure that it is same as robot_state_update_frequency + account_for_battery_drain: True + task_capabilities: # Specify the types of RMF Tasks that robots in this fleet are capable of performing + loop: True + delivery: True + clean: False + finishing_request: "park" # [park, charge, nothing] + +# TinyRobot CONFIG ================================================================= + +robots: + # Here the user is expected to append the configuration for each robot in the + # fleet. + # Configuration for tinyRobot + tinyRobot: + robot_config: + max_delay: 15.0 # allowed seconds of delay of the current itinerary before it gets interrupted and replanned + rmf_config: + robot_state_update_frequency: 10.0 + start: + map_name: "L1" + waypoint: "tinyRobot_charger" + orientation: 0.0 # radians + charger: + waypoint: "tinyRobot_charger" diff --git a/rmf_demos/launch/home.launch.xml b/rmf_demos/launch/home.launch.xml new file mode 100644 index 00000000..0e0b8a36 --- /dev/null +++ b/rmf_demos/launch/home.launch.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rmf_demos/launch/include/home/home.rviz b/rmf_demos/launch/include/home/home.rviz new file mode 100644 index 00000000..8c96ba20 --- /dev/null +++ b/rmf_demos/launch/include/home/home.rviz @@ -0,0 +1,217 @@ +Panels: + - Class: rviz_common/Displays + Help Height: 138 + Name: Displays + Property Tree Widget: + Expanded: + - /MarkerArray3/Topic1 + - /MarkerArray4/Topic1 + Splitter Ratio: 0.5 + Tree Height: 270 + - Class: rviz_common/Selection + Name: Selection + - Class: rviz_common/Tool Properties + Expanded: + - /2D Goal Pose1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.5886790156364441 + - Class: rviz_common/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 + - Class: rmf_visualization_rviz2_plugins/SchedulePanel + Finish: 600 + Map: L1 + Name: SchedulePanel + Topic: /rmf_visualization/parameters + - Class: rmf_visualization_rviz2_plugins/DoorPanel + Name: DoorPanel +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz_default_plugins/Grid + Color: 160; 160; 164 + Enabled: false + Line Style: + Line Width: 0.029999999329447746 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: false + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: MarkerArray + Namespaces: + fleet_markers: true + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /fleet_markers + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: MarkerArray + Namespaces: + participant 0: true + participant location 0: true + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /schedule_markers + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: MarkerArray + Namespaces: + labels: true + map: true + Topic: + Depth: 5 + Durability Policy: Transient Local + History Policy: Keep Last + Reliability Policy: Reliable + Value: /map_markers + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: MarkerArray + Namespaces: + front_door: true + front_door_text: true + dining_door: true + dining_door_text: true + bathroom_door: true + bathroom_door_text: true + bd1_door: true + bd1_door_text: true + bd2_door: true + bd2_door_text: true + kitchen_door: true + kitchen_door_text: true + bd2_toilet_door: true + bd2_toilet_door_text: true + laundry_door: true + laundry_door_text: true + bd1_cloth_door: true + bd1_cloth_door_text: true + + Topic: + Depth: 5 + Durability Policy: Transient Local + History Policy: Keep Last + Reliability Policy: Reliable + Value: /building_systems_markers + Value: true + - Alpha: 0.7 + Class: rviz_default_plugins/Map + Color Scheme: map + Draw Behind: true + Enabled: true + Name: Map + Topic: + Depth: 5 + Durability Policy: Transient Local + History Policy: Keep Last + Reliability Policy: Reliable + Value: /floorplan + Update Topic: + Depth: 5 + Durability Policy: Transient Local + History Policy: Keep Last + Reliability Policy: Reliable + Value: /floorplan_updates + Use Timestamp: false + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Fixed Frame: map + Frame Rate: 30 + Name: root + Tools: + - Class: rviz_default_plugins/Interact + Hide Inactive Objects: true + - Class: rviz_default_plugins/MoveCamera + - Class: rviz_default_plugins/Select + - Class: rviz_default_plugins/FocusCamera + - Class: rviz_default_plugins/Measure + Line color: 128; 128; 0 + - Class: rviz_default_plugins/SetInitialPose + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /initialpose + - Class: rviz_default_plugins/SetGoal + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /goal_pose + - Class: rviz_default_plugins/PublishPoint + Single click: true + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /clicked_point + Transformation: + Current: + Class: rviz_default_plugins/TF + Value: true + Views: + Current: + Angle: 0 + Class: rviz_default_plugins/TopDownOrtho + Enable Stereo Rendering: + Stereo Eye Separation: 0.05999999865889549 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.009999999776482582 + Scale: 95.94175720214844 + Target Frame: + Value: TopDownOrtho (rviz_default_plugins) + X: 14.163299560546875 + Y: -7.102552890777588 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + DoorPanel: + collapsed: false + Height: 1726 + Hide Left Dock: false + Hide Right Dock: true + QMainWindow State: 000000ff00000000fd00000004000000000000033400000622fc0200000009fb0000001200530065006c0065006300740069006f006e00000001e10000009b000000b000fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073000000006e000001910000018200fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fc0000006e000006220000062201000039fa000000020100000003fb0000001a005300630068006500640075006c006500500061006e0065006c0100000000ffffffff0000028300fffffffb000000120044006f006f007200500061006e0065006c0100000000ffffffff0000029300fffffffb000000120052004d0046002000500061006e0065006c0100000000000003340000033400ffffff000000010000015f00000765fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000006e000007650000013200fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004420000003efc0100000002fb0000000800540069006d00650100000000000004420000000000000000fb0000000800540069006d00650100000000000004500000000000000000000006440000062200000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + SchedulePanel: + collapsed: false + Selection: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: true + Width: 2436 + X: 4064 + Y: 116 diff --git a/rmf_demos_dashboard_resources/CMakeLists.txt b/rmf_demos_dashboard_resources/CMakeLists.txt index 5f6e458f..06402491 100644 --- a/rmf_demos_dashboard_resources/CMakeLists.txt +++ b/rmf_demos_dashboard_resources/CMakeLists.txt @@ -9,6 +9,7 @@ ament_package() set(outputs ${CMAKE_CURRENT_SOURCE_DIR}/airport_terminal/main.json ${CMAKE_CURRENT_SOURCE_DIR}/office/main.json + ${CMAKE_CURRENT_SOURCE_DIR}/home/main.json ) if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.12) @@ -32,5 +33,6 @@ install(DIRECTORY office hotel clinic + home DESTINATION share/${PROJECT_NAME} ) diff --git a/rmf_demos_dashboard_resources/home/dashboard_config.json b/rmf_demos_dashboard_resources/home/dashboard_config.json new file mode 100644 index 00000000..c1ae8e4a --- /dev/null +++ b/rmf_demos_dashboard_resources/home/dashboard_config.json @@ -0,0 +1,52 @@ +{ + "world_name" : "Home World", + "valid_task": ["Delivery", "Loop"], + "task": { + "Delivery": { + "option": { + "coke_to_dining_table": { + "pickup_place_name": "kitchen", + "pickup_dispenser": "coke_dispenser", + "dropoff_place_name": "dining_table", + "dropoff_ingestor": "coke_ingestor_dining_table" + }, + "coke_to_family_table": { + "pickup_place_name": "kitchen", + "pickup_dispenser": "coke_dispenser", + "dropoff_place_name": "family_table", + "dropoff_ingestor": "coke_ingestor_family_table" + }, + "coke_to_bedroom_1": { + "pickup_place_name": "kitchen", + "pickup_dispenser": "coke_dispenser", + "dropoff_place_name": "bedroom_1", + "dropoff_ingestor": "coke_ingestor_bedroom_1" + }, + "coke_to_bedroom_2": { + "pickup_place_name": "kitchen", + "pickup_dispenser": "coke_dispenser", + "dropoff_place_name": "bedroom_2", + "dropoff_ingestor": "coke_ingestor_bedroom_2" + } + } + }, + "Loop": { + "places": [ + "kitchen", + "dining_table", + "family_table", + "bedroom_1", + "bedroom_2", + "tinyRobot_charger" + ] + }, + "Clean": { + }, + "Station": { + }, + "Patrol": { + }, + "Charging": { + } + } +} diff --git a/rmf_demos_dashboard_resources/home/main.json b/rmf_demos_dashboard_resources/home/main.json new file mode 100644 index 00000000..d834f4c6 --- /dev/null +++ b/rmf_demos_dashboard_resources/home/main.json @@ -0,0 +1 @@ +{"dispensers": {}, "robots": {}, "logos": {}} \ No newline at end of file diff --git a/rmf_demos_gz/launch/home.launch.xml b/rmf_demos_gz/launch/home.launch.xml new file mode 100644 index 00000000..37207036 --- /dev/null +++ b/rmf_demos_gz/launch/home.launch.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/rmf_demos_maps/maps/home/home.building.yaml b/rmf_demos_maps/maps/home/home.building.yaml new file mode 100644 index 00000000..04f56ee6 --- /dev/null +++ b/rmf_demos_maps/maps/home/home.building.yaml @@ -0,0 +1,204 @@ +coordinate_system: reference_image +crowd_sim: + agent_groups: + - {agents_name: [tinyRobot], agents_number: 1, group_id: 0, profile_selector: external_agent, state_selector: external_static, x: 0, y: 0} + agent_profiles: + - {ORCA_tau: 1, ORCA_tauObst: 0.4, class: 1, max_accel: 0, max_angle_vel: 0, max_neighbors: 10, max_speed: 0, name: external_agent, neighbor_dist: 5, obstacle_set: 1, pref_speed: 0, r: 0.25} + enable: 0 + goal_sets: [] + model_types: [] + obstacle_set: {class: 1, file_name: L1_navmesh.nav, type: nav_mesh} + states: + - {final: 1, goal_set: -1, name: external_static, navmesh_file_name: ""} + transitions: [] + update_time_step: 0.1 +graphs: + {} +levels: + L1: + doors: + - [21, 22, {motion_axis: [1, start], motion_degrees: [3, 90], motion_direction: [2, -1], name: [1, front_door], plugin: [1, normal], right_left_ratio: [3, 1], type: [1, hinged]}] + - [25, 24, {motion_axis: [1, start], motion_degrees: [3, 90], motion_direction: [2, -1], name: [1, dining_door], plugin: [1, normal], right_left_ratio: [3, 1], type: [1, double_hinged]}] + - [7, 10, {motion_axis: [1, start], motion_degrees: [3, 90], motion_direction: [2, -1], name: [1, bathroom_door], plugin: [1, normal], right_left_ratio: [3, 1], type: [1, hinged]}] + - [14, 4, {motion_axis: [1, start], motion_degrees: [3, 90], motion_direction: [2, -1], name: [1, bd1_door], plugin: [1, normal], right_left_ratio: [3, 1], type: [1, hinged]}] + - [17, 50, {motion_axis: [1, start], motion_degrees: [3, 90], motion_direction: [2, -1], name: [1, bd2_door], plugin: [1, normal], right_left_ratio: [3, 1], type: [1, hinged]}] + - [37, 30, {motion_axis: [1, start], motion_degrees: [3, 90], motion_direction: [2, 1], name: [1, laundry_door], plugin: [1, normal], right_left_ratio: [3, 1], type: [1, hinged]}] + - [16, 13, {motion_axis: [1, start], motion_degrees: [3, 90], motion_direction: [2, 1], name: [1, bd1_cloth_door], plugin: [1, normal], right_left_ratio: [3, 1], type: [1, sliding]}] + - [38, 39, {motion_axis: [1, start], motion_degrees: [3, 90], motion_direction: [2, 1], name: [1, bd2_toilet_door], plugin: [1, normal], right_left_ratio: [3, 1], type: [1, hinged]}] + - [31, 27, {motion_axis: [1, start], motion_degrees: [3, 90], motion_direction: [2, -1], name: [1, kitchen_door], plugin: [1, normal], right_left_ratio: [3, 1], type: [1, sliding]}] + drawing: + filename: home.png + elevation: 0 + floors: + - parameters: {ceiling_scale: [3, 1], ceiling_texture: [1, white_beige_tiles], indoor: [2, 0], texture_name: [1, white_beige_tiles], texture_rotation: [3, 0], texture_scale: [3, 1]} + vertices: [1, 20, 23, 26, 28, 29, 43, 42, 41, 2] + lanes: + - [51, 52, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""], speed_limit: [3, 0]}] + - [52, 53, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""], speed_limit: [3, 0]}] + - [53, 54, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""], speed_limit: [3, 0]}] + - [54, 55, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""], speed_limit: [3, 0]}] + - [52, 56, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""], speed_limit: [3, 0]}] + - [53, 57, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""], speed_limit: [3, 0]}] + - [57, 58, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""], speed_limit: [3, 0]}] + - [58, 59, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""], speed_limit: [3, 0]}] + - [59, 60, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""], speed_limit: [3, 0]}] + - [58, 61, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""], speed_limit: [3, 0]}] + - [61, 62, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""], speed_limit: [3, 0]}] + - [62, 63, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""], speed_limit: [3, 0]}] + - [52, 64, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], orientation: [1, ""], speed_limit: [3, 0]}] + layers: + {} + measurements: + - [18, 19, {distance: [3, 8]}] + models: + - {dispensable: false, model_name: OpenRobotics/BathroomSink, name: OpenRobotics/BathroomSink, static: true, x: 187.438, y: 442.767, yaw: -3.1416, z: 0.5} + - {dispensable: false, model_name: OpenRobotics/Bookshelf, name: OpenRobotics/Bookshelf, static: true, x: 113.643, y: 296.654, yaw: 0, z: 0} + - {dispensable: false, model_name: OpenRobotics/CoffeeTable, name: OpenRobotics/CoffeeTable, static: true, x: 157.92, y: 637.5839999999999, yaw: 1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/Drawer, name: OpenRobotics/Drawer, static: true, x: 244.998, y: 42.801, yaw: -0, z: 0} + - {dispensable: false, model_name: OpenRobotics/Drawer, name: OpenRobotics/Drawer, static: true, x: 341.319, y: 65.80800000000001, yaw: -0, z: 0} + - {dispensable: false, model_name: OpenRobotics/Fridge, name: OpenRobotics/Fridge, static: true, x: 351.262, y: 324.696, yaw: -0, z: 0} + - {dispensable: false, model_name: OpenRobotics/KitchenCountertop, name: OpenRobotics/KitchenCountertop, static: true, x: 450.146, y: 320.268, yaw: -1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/KitchenSink, name: OpenRobotics/KitchenSink, static: true, x: 351.548, y: 420.501, yaw: 1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/Sofa, name: OpenRobotics/Sofa, static: true, x: 153.467, y: 725.756, yaw: 1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/MiniSofa, name: OpenRobotics/MiniSofa, static: true, x: 65.17, y: 619.966, yaw: 3.1416, z: 0} + - {dispensable: false, model_name: OpenRobotics/MiniSofa, name: OpenRobotics/MiniSofa, static: true, x: 65.17, y: 672.444, yaw: 3.1416, z: 0} + - {dispensable: false, model_name: OpenRobotics/Toilet, name: OpenRobotics/Toilet, static: true, x: 109.318, y: 419.216, yaw: 1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/TrashBin, name: OpenRobotics/TrashBin, static: true, x: 390.035, y: 433.377, yaw: 1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/Chair, name: OpenRobotics/Chair, static: true, x: 374.387, y: 644.167, yaw: 0.588, z: 0} + - {dispensable: false, model_name: OpenRobotics/Chair, name: OpenRobotics/Chair, static: true, x: 483.649, y: 704.804, yaw: -2.7744, z: 0} + - {dispensable: false, model_name: OpenRobotics/Chair, name: OpenRobotics/Chair, static: true, x: 482.505, y: 654.4640000000001, yaw: -2.3562, z: 0} + - {dispensable: false, model_name: OpenRobotics/Chair, name: OpenRobotics/Chair, static: true, x: 376.675, y: 707.665, yaw: 0, z: 0} + - {dispensable: false, model_name: OpenRobotics/NormalBed, name: OpenRobotics/NormalBed, static: true, x: 61.018, y: 85.014, yaw: -1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/NormalBed, name: OpenRobotics/NormalBed, static: true, x: 134.114, y: 85.014, yaw: -1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/NormalBed, name: OpenRobotics/NormalBed, static: true, x: 353.859, y: 123.846, yaw: -0, z: 0} + - {dispensable: false, model_name: OpenRobotics/LampAndStand, name: OpenRobotics/LampAndStand, static: true, x: 209.75, y: 47.06, yaw: 1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/LampAndStand, name: OpenRobotics/LampAndStand, static: true, x: 304.741, y: 68.032, yaw: 1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/LampAndStand, name: OpenRobotics/LampAndStand, static: true, x: 65.413, y: 729.269, yaw: 1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/BathroomSink, name: OpenRobotics/BathroomSink, static: true, x: 574.91, y: 183.995, yaw: 3.0916, z: 0.5} + - {dispensable: false, model_name: OpenRobotics/Toilet, name: OpenRobotics/Toilet, static: true, x: 576.144, y: 76.66800000000001, yaw: -1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/MaleVisitorSit, name: OpenRobotics/MaleVisitorSit, static: true, x: 76.51600000000001, y: 674.9880000000001, yaw: 1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/VisitorKidSit, name: OpenRobotics/VisitorKidSit, static: true, x: 185.077, y: 708.297, yaw: 3.1416, z: 0} + - {dispensable: false, model_name: OpenRobotics/AdjTable, name: OpenRobotics/AdjTable, static: true, x: 475.212, y: 75.00700000000001, yaw: 0, z: 0} + - {dispensable: false, model_name: OpenRobotics/MonitorAndKeyboard, name: OpenRobotics/MonitorAndKeyboard, static: true, x: 138.599, y: 477.357, yaw: 1.5708, z: 0.64} + - {dispensable: false, model_name: OpenRobotics/MetalCabinet, name: OpenRobotics/MetalCabinet, static: true, x: 570, y: 250, yaw: -1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/TeleportDispenser, name: coke_dispenser, static: true, x: 452.797, y: 329.132, yaw: 1.5708, z: 0.751} + - {dispensable: false, model_name: OpenRobotics/Coke, name: Coke, static: false, x: 452.753, y: 328.915, yaw: 1.5708, z: 0.751} + - {dispensable: false, model_name: OpenRobotics/TeleportIngestor, name: coke_ingestor_family_table, static: true, x: 157.696, y: 637.547, yaw: 1.5708, z: 0.375} + - {dispensable: false, model_name: OpenRobotics/Cafe table, name: OpenRobotics/Cafe table, static: true, x: 429.304, y: 652.748, yaw: 1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/Cafe table, name: OpenRobotics/Cafe table, static: true, x: 429.304, y: 712.813, yaw: 1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/TeleportIngestor, name: coke_ingestor_dining_table, static: true, x: 428.566, y: 645.3339999999999, yaw: 1.5708, z: 0.777} + - {dispensable: false, model_name: OpenRobotics/TeleportIngestor, name: coke_ingestor_bedroom_1, static: true, x: 244.556, y: 48.886, yaw: 1.5708, z: 0.64} + - {dispensable: false, model_name: OpenRobotics/TeleportIngestor, name: coke_ingestor_bedroom_2, static: true, x: 451.879, y: 83.94799999999999, yaw: 1.5708, z: 0.805} + - {dispensable: false, model_name: OpenRobotics/Drawer, name: OpenRobotics/Drawer, static: true, x: 124.921, y: 480.796, yaw: -0, z: 0} + - {dispensable: false, model_name: OpenRobotics/Drawer, name: OpenRobotics/Drawer, static: true, x: 152.076, y: 480.726, yaw: 0, z: 0} + vertices: + - [16.799, 120.244, 0, ""] + - [16.799, 10.155, 0, ""] + - [277.894, 10.155, 0, ""] + - [277.894, 225.462, 0, ""] + - [267.665, 235.691, 0, ""] + - [16.799, 453.969, 0, ""] + - [237.162, 453.969, 0, ""] + - [237.162, 400.44, 0, ""] + - [17.746, 336.311, 0, ""] + - [236.632, 336.311, 0, ""] + - [236.632, 343.201, 0, ""] + - [236.632, 311.401, 0, ""] + - [215.433, 288.082, 0, ""] + - [185.753, 288.082, 0, ""] + - [225.502, 277.482, 0, ""] + - [17.746, 287.022, 0, ""] + - [50.075, 287.022, 0, ""] + - [286.981, 234.023, 0, ""] + - [16.559, 884.103, 0, ""] + - [537.62, 884.103, 0, ""] + - [16.799, 774.886, 0, ""] + - [240.416, 774.886, 0, ""] + - [314.169, 774.886, 0, ""] + - [538.302, 774.886, 0, ""] + - [538.302, 675.272, 0, ""] + - [538.302, 560.332, 0, ""] + - [538.302, 454.012, 0, ""] + - [538.302, 405.163, 0, ""] + - [701.133, 454.012, 0, ""] + - [701.133, 192.524, 0, ""] + - [688.681, 192.524, 0, ""] + - [537.3440000000001, 340.03, 0, ""] + - [537.3440000000001, 311.295, 0, ""] + - [596.729, 311.295, 0, ""] + - [596.729, 191.566, 0, ""] + - [537.3440000000001, 191.566, 0, ""] + - [537.3440000000001, 227.964, 0, ""] + - [630.254, 191.566, 0, ""] + - [537.3440000000001, 150.38, 0, ""] + - [537.3440000000001, 91.952, 0, ""] + - [537.3440000000001, 41.187, 0, ""] + - [278.729, 41.187, 0, ""] + - [616.8440000000001, 41.187, 0, ""] + - [616.8440000000001, 193.482, 0, ""] + - [327.579, 454.012, 0, ""] + - [317.042, 454.012, 0, ""] + - [317.042, 311.295, 0, ""] + - [340.988, 288.307, 0, ""] + - [538.302, 288.307, 0, ""] + - [538.302, 277.771, 0, ""] + - [327.579, 274.898, 0, ""] + - [450.342, 388.613, 0, kitchen, {is_charger: [4, false], is_holding_point: [4, true], is_parking_spot: [4, false]}] + - [449.66, 522.6799999999999, 0, ""] + - [278.885, 521.713, 0, "", {is_charger: [4, false], is_holding_point: [4, false], is_parking_spot: [4, false]}] + - [278.971, 636.1319999999999, 0, ""] + - [212.733, 636.552, 0, family_table, {is_holding_point: [4, true], is_parking_spot: [4, false]}] + - [450.342, 589.269, 0, dining_table, {is_holding_point: [4, true], is_parking_spot: [4, false]}] + - [278.971, 371.412, 0, ""] + - [278.971, 286.579, 0, ""] + - [180.256, 191.46, 0, ""] + - [231.423, 122.019, 0, bedroom_1, {is_holding_point: [4, true], is_parking_spot: [4, false]}] + - [372.133, 191.003, 0, ""] + - [486.346, 191.917, 0, ""] + - [486.803, 133.897, 0, bedroom_2, {is_holding_point: [4, true], is_parking_spot: [4, false]}] + - [502.509, 522.922, 0, tinyRobot_charger, {is_charger: [4, true], is_holding_point: [4, true], is_parking_spot: [4, true], spawn_robot_name: [1, tinyRobot], spawn_robot_type: [1, TinyRobot]}] + walls: + - [0, 1, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [1, 2, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [2, 3, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [3, 4, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [0, 5, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [5, 6, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [6, 7, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [8, 9, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [9, 10, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [9, 11, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [11, 12, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [12, 13, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [12, 14, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [15, 16, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [3, 17, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [5, 20, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [20, 21, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [22, 23, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [23, 24, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [25, 26, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [26, 27, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [26, 28, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [28, 29, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [29, 30, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [31, 32, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [32, 33, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [33, 34, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [34, 35, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [35, 36, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [34, 37, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [35, 38, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [39, 40, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [40, 41, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [40, 42, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [42, 43, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [44, 45, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [45, 46, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [46, 47, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [47, 48, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [48, 49, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [48, 32, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] + - [47, 50, {alpha: [3, 1], texture_height: [3, 2.5], texture_name: [1, default], texture_scale: [3, 1], texture_width: [3, 1]}] +lifts: {} +name: home diff --git a/rmf_demos_maps/maps/home/home.png b/rmf_demos_maps/maps/home/home.png new file mode 100644 index 00000000..45b281c5 Binary files /dev/null and b/rmf_demos_maps/maps/home/home.png differ