diff --git a/nexus_integration_tests/CMakeLists.txt b/nexus_integration_tests/CMakeLists.txt index ea520122..2e1404cf 100644 --- a/nexus_integration_tests/CMakeLists.txt +++ b/nexus_integration_tests/CMakeLists.txt @@ -115,7 +115,7 @@ add_custom_target(generate_zenoh_bridge_configs ALL COMMAND ros2 run nexus_network_configuration nexus_network_configuration -n ${nexus_network_cfg_path} -o ${zenoh_cfg_output_dir} ) -install(DIRECTORY launch config rviz scripts DESTINATION share/${PROJECT_NAME}) +install(DIRECTORY launch config rviz scripts maps DESTINATION share/${PROJECT_NAME}) # Install the zenoh config directory containing generated configs. message("zenoh_cfg_output_dir: " ${zenoh_cfg_output_dir}) install(DIRECTORY ${zenoh_cfg_output_dir} DESTINATION share/${PROJECT_NAME}/config/) @@ -177,3 +177,86 @@ if(BUILD_TESTING) endif() ament_package() + +# Modified from rmf_demos_maps +# Get absolute path of the building map +set(building_map "maps/depot/depot.building.yaml") +get_filename_component(building_map_path ${building_map} REALPATH) + +# Get the output world name +string(REGEX REPLACE "\\.[^.]*\.[^.]*$" "" no_extension_path ${building_map_path}) +string(REGEX MATCH "[^\/]+$" world_name ${no_extension_path}) + +set(output_world_name ${world_name}) +set(output_dir ${CMAKE_CURRENT_BINARY_DIR}/maps/${output_world_name}) +set(output_world_path ${output_dir}/${output_world_name}.world) +set(output_model_dir ${output_dir}/models) + +############################################################################## +# Generate Gz world and download Models +############################################################################## + +message("BUILDING WORLDFILE WITH COMMAND: ros2 run rmf_building_map_tools building_map_generator gazebo ${building_map_path} ${output_world_path} ${output_model_dir}") +if (NO_DOWNLOAD_MODELS) + add_custom_command( + DEPENDS ${building_map_path} + COMMAND ros2 run rmf_building_map_tools building_map_generator gazebo ${building_map_path} ${output_world_path} ${output_model_dir} + OUTPUT ${output_world_path} + ) +else() + message("DOWNLOADING MODELS WITH COMMAND: ros2 run rmf_building_map_tools building_map_model_downloader ${building_map_path}") + add_custom_command( + DEPENDS ${building_map_path} + COMMAND ros2 run rmf_building_map_tools building_map_generator gazebo ${building_map_path} ${output_world_path} ${output_model_dir} + COMMAND ros2 run rmf_building_map_tools building_map_model_downloader ${building_map_path} -e ~/.gazebo/models + OUTPUT ${output_world_path} + ) +endif() + +############################################################################## +# Make changes to generated world file. To be removed after +# rmf_traffic_editor#524 has been released, to use custom template files +############################################################################## + +# Insert Depot model +set(inserted_depot_phony ${output_dir}/inserted_depot_phony) +add_custom_command( + DEPENDS ${output_world_path} + COMMAND sed -i 's|<\/light>|<\/light>\\nhttps:\/\/fuel.gazebosim.org\/1.0\/OpenRobotics\/models\/Depot<\/uri>15.15 -7.525 0 0 0 0<\/pose><\/include>|g' ${output_world_path} + OUTPUT ${inserted_depot_phony} +) +add_custom_target(insert_depot_into_${output_world_name} ALL + DEPENDS ${inserted_depot_phony} +) + +# Change camera view +set(replace_camera_view_phony ${output_dir}/replace_camera_view_phony) +add_custom_command( + DEPENDS ${output_world_path} + COMMAND sed -i 's|.*<\/camera_pose>|1.6679 -8.2494 4.3953 0 0.4919176 0<\/camera_pose>|g' ${output_world_path} + OUTPUT ${replace_camera_view_phony} +) +add_custom_target(replace_camera_pose_in_${output_world_name} ALL + DEPENDS ${replace_camera_view_phony} +) + +############################################################################## +# Generate the nav graphs +############################################################################## + +set(output_nav_graphs_dir ${output_dir}/nav_graphs/) +set(output_nav_graphs_phony ${output_nav_graphs_dir}/phony) +add_custom_command( + OUTPUT ${output_nav_graphs_phony} + COMMAND ros2 run rmf_building_map_tools building_map_generator nav ${building_map_path} ${output_nav_graphs_dir} + DEPENDS ${building_map_path} ${output_world_path} +) + +add_custom_target(generate_${output_world_name}_nav_graphs ALL + DEPENDS ${output_nav_graphs_phony} +) + +install( + DIRECTORY ${output_dir} + DESTINATION share/${PROJECT_NAME}/maps +) diff --git a/nexus_integration_tests/config/depot/deliveryRobot_config.yaml b/nexus_integration_tests/config/depot/deliveryRobot_config.yaml new file mode 100644 index 00000000..2fcea949 --- /dev/null +++ b/nexus_integration_tests/config/depot/deliveryRobot_config.yaml @@ -0,0 +1,46 @@ +# FLEET CONFIG ================================================================= +# RMF Fleet parameters + +rmf_fleet: + name: "deliveryRobot" + limits: + linear: [0.7, 0.75] # velocity, acceleration + angular: [0.6, 2.0] # velocity, acceleration + profile: # Robot profile is modelled as a circle + footprint: 0.6 # radius in m + vicinity: 0.8 # radius in m + reversible: True # whether robots in this fleet can reverse + # TODO Update battery parameters with actual specs + battery_system: + voltage: 24.0 # V + capacity: 40.0 # Ahr + charging_current: 8.8 # A + mechanical_system: + mass: 70.0 # kg + moment_of_inertia: 40.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 + max_delay: 15.0 # allowed seconds of delay of the current itinerary before it gets interrupted and replanned + 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 + finishing_request: "charge" # [park, charge, nothing] + robots: + deliveryRobot1: + charger: "deliveryRobotCharger1" + deliveryRobot2: + charger: "deliveryRobotCharger2" + +fleet_manager: + ip: "127.0.0.1" + port: 22012 + user: "some_user" + password: "some_password" + robot_state_update_frequency: 10.0 diff --git a/nexus_integration_tests/launch/depot.launch.xml b/nexus_integration_tests/launch/depot.launch.xml new file mode 100644 index 00000000..d39b4bf2 --- /dev/null +++ b/nexus_integration_tests/launch/depot.launch.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nexus_integration_tests/launch/include/depot/depot.rviz b/nexus_integration_tests/launch/include/depot/depot.rviz new file mode 100644 index 00000000..50fe7029 --- /dev/null +++ b/nexus_integration_tests/launch/include/depot/depot.rviz @@ -0,0 +1,229 @@ +Panels: + - Class: rviz_common/Displays + Help Height: 138 + Name: Displays + Property Tree Widget: + Expanded: + - /MarkerArray3/Topic1 + - /MarkerArray4/Topic1 + Splitter Ratio: 0.5 + Tree Height: 303 + - 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 + - Class: nexus_rviz_plugins/NEXUSPanel + Name: NEXUSPanel +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: + body: true + name: true + nose: 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: + {} + 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: + deliveryRobot/labels/L1: true + deliveryRobot/lanes/L1: true + deliveryRobot/waypoints/L1: 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: + coe_door: true + coe_door_text: true + hardware_door: true + hardware_door_text: true + main_door: true + main_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.699999988079071 + Binary representation: false + Binary threshold: 100 + Class: rviz_default_plugins/Map + Color Scheme: map + Draw Behind: true + Enabled: true + Name: Map + Topic: + Depth: 5 + Durability Policy: Transient Local + Filter size: 10 + 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 + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: MarkerArray + Namespaces: + body: true + name: true + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /workcell_markers + 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 + Covariance x: 0.25 + Covariance y: 0.25 + Covariance yaw: 0.06853891909122467 + 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: 74.29730224609375 + Target Frame: + Value: TopDownOrtho (rviz_default_plugins) + X: 14.163299560546875 + Y: -7.102552890777588 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + DoorPanel: + collapsed: false + Height: 1215 + Hide Left Dock: false + Hide Right Dock: true + NEXUSPanel: + collapsed: false + QMainWindow State: 000000ff00000000fd0000000400000000000001ff00000465fc020000000afb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073000000006e00000191000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fc0000003d00000341000002080100001cfa000000000100000003fb0000001a005300630068006500640075006c006500500061006e0065006c0100000000ffffffff0000018e00fffffffb000000120044006f006f007200500061006e0065006c0100000000ffffffff0000015800fffffffb000000120052004d0046002000500061006e0065006c0100000000000003340000000000000000fb00000014004e004500580055005300500061006e0065006c01000003840000011e0000009c00ffffff000000010000015f00000765fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000006e00000765000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004420000003efc0100000002fb0000000800540069006d00650100000000000004420000000000000000fb0000000800540069006d006501000000000000045000000000000000000000064f0000046500000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + SchedulePanel: + collapsed: false + Selection: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: true + Width: 2132 + X: 0 + Y: 27 diff --git a/nexus_integration_tests/maps/depot/depot.building.yaml b/nexus_integration_tests/maps/depot/depot.building.yaml new file mode 100644 index 00000000..8e203e69 --- /dev/null +++ b/nexus_integration_tests/maps/depot/depot.building.yaml @@ -0,0 +1,132 @@ +coordinate_system: reference_image +crowd_sim: + agent_groups: + - {agents_name: [deliveryRobot1, deliveryRobot2], agents_number: 2, group_id: 0, profile_selector: external_agent, state_selector: external_static, x: 0, y: 0} + agent_profiles: + - {ORCA_tau: 1, ORCA_tauObst: 0.40000000000000002, 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.10000000000000001 +graphs: + {} +levels: + L1: + drawing: + filename: depot_scan.png + elevation: 0 + lanes: + - [14, 22, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [22, 15, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [32, 33, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [33, 22, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [32, 34, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [33, 39, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [39, 18, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [39, 23, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [23, 21, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [23, 40, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [40, 20, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [22, 41, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [29, 41, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [41, 42, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [42, 30, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [42, 43, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [43, 31, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [32, 44, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [44, 16, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [44, 24, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [24, 17, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [24, 45, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [45, 19, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [34, 46, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [46, 25, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [46, 26, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [26, 27, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [26, 47, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [47, 28, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [32, 48, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [33, 49, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [40, 50, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [50, 51, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [51, 45, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [51, 35, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [50, 36, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [43, 52, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [52, 50, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [52, 37, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [47, 53, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [53, 51, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + - [53, 38, {bidirectional: [4, true], demo_mock_floor_name: [1, ""], demo_mock_lift_name: [1, ""], graph_idx: [2, 0], mutex: [1, ""], orientation: [1, ""], speed_limit: [3, 0]}] + layers: + {} + measurements: + - [0, 1, {distance: [3, 30.199999999999999]}] + models: + - {dispensable: false, model_name: OpenRobotics/FoodCourtTable1, name: OpenRobotics/FoodCourtTable1, static: true, x: 172.245, y: 77.856999999999999, yaw: -1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/FoodCourtTable1, name: OpenRobotics/FoodCourtTable1, static: true, x: 202.22999999999999, y: 77.543999999999997, yaw: -1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/FoodCourtTable1, name: OpenRobotics/FoodCourtTable1, static: true, x: 233.27799999999999, y: 77.787000000000006, yaw: -1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/FoodCourtTable1, name: OpenRobotics/FoodCourtTable1, static: true, x: 233.08099999999999, y: 227.29900000000001, yaw: -1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/FoodCourtTable1, name: OpenRobotics/FoodCourtTable1, static: true, x: 170.91800000000001, y: 227.88, yaw: -1.5708, z: 0} + - {dispensable: false, model_name: OpenRobotics/FoodCourtTable1, name: OpenRobotics/FoodCourtTable1, static: true, x: 200.86500000000001, y: 227.678, yaw: -1.5708, z: 0} + vertices: + - [0.104, 307.17000000000002, 0, ""] + - [604.029, 307.00799999999998, 0, ""] + - [2.0099999999999998, 1.994, 0, ""] + - [602.91899999999998, 1.0029999999999999, 0, ""] + - [603.96900000000005, 301.74000000000001, 0, ""] + - [1.7090000000000001, 304.33499999999998, 0, ""] + - [147.125, 72.120000000000005, 0, ""] + - [157.90799999999999, 72.030000000000001, 0, ""] + - [158.08799999999999, 82.813999999999993, 0, ""] + - [146.76499999999999, 82.903999999999996, 0, ""] + - [147.178, 222.09899999999999, 0, ""] + - [158.00399999999999, 222.04900000000001, 0, ""] + - [158.05500000000001, 233.12899999999999, 0, ""] + - [147.02600000000001, 233.02699999999999, 0, ""] + - [115.205, 288.38099999999997, 0, deliveryRobotCharger1, {is_charger: [4, true], is_holding_point: [4, true], is_parking_spot: [4, true], spawn_robot_name: [1, deliveryRobot1], spawn_robot_type: [1, DeliveryRobot]}] + - [140.63999999999999, 288.38099999999997, 0, deliveryRobotCharger2, {is_charger: [4, true], is_holding_point: [4, true], is_parking_spot: [4, true], spawn_robot_name: [1, deliveryRobot2], spawn_robot_type: [1, DeliveryRobot]}] + - [172.816, 93.954999999999998, 0, workcell_1, {dropoff_ingestor: [1, workcell_1], is_holding_point: [4, false], is_parking_spot: [4, false], pickup_dispenser: [1, workcell_1]}] + - [203.01499999999999, 93.954999999999998, 0, workcell_2, {dropoff_ingestor: [1, workcell_2], is_holding_point: [4, false], is_parking_spot: [4, false], pickup_dispenser: [1, workcell_2]}] + - [171.20500000000001, 211.53, 0, workcell_4] + - [233.88499999999999, 94.088999999999999, 0, workcell_3] + - [232.946, 210.72399999999999, 0, workcell_6] + - [201.00200000000001, 210.99299999999999, 0, workcell_5] + - [129.33600000000001, 263.25999999999999, 0, ""] + - [201.50200000000001, 191.55000000000001, 0, ""] + - [202.22999999999999, 112.71599999999999, 0, ""] + - [172.14500000000001, 61.473999999999997, 0, ""] + - [202.95699999999999, 45.524999999999999, 0, ""] + - [202.61199999999999, 61.340000000000003, 0, ""] + - [233.61699999999999, 61.473999999999997, 0, ""] + - [171.87700000000001, 244.279, 0, ""] + - [201.53899999999999, 244.279, 0, ""] + - [234.01900000000001, 244.00999999999999, 0, ""] + - [129.02199999999999, 112.849, 0, ""] + - [129.02199999999999, 192.608, 0, ""] + - [128.39400000000001, 47.220999999999997, 0, ""] + - [277.78199999999998, 112.36499999999999, 0, "", {is_holding_point: [4, true], is_parking_spot: [4, true]}] + - [277.17099999999999, 190.756, 0, "", {is_holding_point: [4, true], is_parking_spot: [4, true]}] + - [276.28899999999999, 261.47699999999998, 0, "", {is_holding_point: [4, true], is_parking_spot: [4, true]}] + - [271.67399999999998, 33.701999999999998, 0, "", {is_holding_point: [4, true], is_parking_spot: [4, true]}] + - [170.51900000000001, 191.94900000000001, 0, ""] + - [232.31899999999999, 191.471, 0, ""] + - [170.75800000000001, 262.577, 0, ""] + - [201.06100000000001, 262.577, 0, ""] + - [233.989, 261.86099999999999, 0, ""] + - [173.14400000000001, 112.73, 0, ""] + - [234.70500000000001, 112.492, 0, ""] + - [172.667, 46.874000000000002, 0, ""] + - [233.751, 45.680999999999997, 0, ""] + - [108.16800000000001, 113.374, 0, "", {is_holding_point: [4, true], is_parking_spot: [4, true]}] + - [106.72, 192.43000000000001, 0, "", {is_holding_point: [4, true], is_parking_spot: [4, true]}] + - [257.82799999999997, 191.16300000000001, 0, ""] + - [257.55700000000002, 112.70399999999999, 0, ""] + - [258.10000000000002, 261.74900000000002, 0, ""] + - [252.398, 44.832999999999998, 0, ""] +lifts: {} +name: depot diff --git a/nexus_integration_tests/maps/depot/depot_scan.png b/nexus_integration_tests/maps/depot/depot_scan.png new file mode 100644 index 00000000..bfc74d93 Binary files /dev/null and b/nexus_integration_tests/maps/depot/depot_scan.png differ diff --git a/nexus_integration_tests/package.xml b/nexus_integration_tests/package.xml index 2cb79d99..3c1c8039 100644 --- a/nexus_integration_tests/package.xml +++ b/nexus_integration_tests/package.xml @@ -9,6 +9,7 @@ nexus_endpoints nexus_network_configuration + rmf_building_map_tools ament_cmake @@ -42,6 +43,10 @@ nexus_workcell_orchestrator nexus_zenoh_bridge_dds_vendor + + rmf_demos + rmf_demos_gz + ament_cmake_catch2 ament_index_cpp rcpputils