Package Summary
Tags | No category tags. |
Version | 0.1.1 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | A framework for orchestration |
Checkout URI | https://github.com/osrf/nexus.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-07-29 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Teo Koon Peng
Authors
nexus_demos
Launch system and workcell orchestrators and all mock nodes
The launch.py script will launch the system orchestrator and 2 workcells orchestrators (each with a IRB910SC and IRB1300 robot), along with a Zenoh bridge to link selected ROS endpoints between them. These 3 orchestrators and their accompany components will be in different ROS_DOMAIN_IDs. To launch these components individually, use the following examples given.
NOTE: The ROS_DOMAIN_ID occupied by the Zenoh bridges during launch time may be different from the
domain
values in the Zenoh bridge configurations. This is because the launch file overrides the domain ID of the zenoh bridges to ensure that it is same as that of the orchestrator.
Method 1: Launch system orchestrator, IRB1300 workcell and IRB910SC Workcell together with Zenoh bridge
NOTE: Before running any of these commands, you must set the rmw implmentation to cyclonedds with
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
(If testing with real hardware, specify the argumentsuse_fake_hardware=False
,robot1_ip=<IP>
androbot2_ip=<IP>
)
ros2 launch nexus_demos launch.py headless:=False
Method 2: Launch System Orchestrator and 1 Workcell without Zenoh bridge (Same ROS_DOMAIN_ID)
Launch with Workcell 1
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=true run_workcell_2:=false
Launch with Workcell 2
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=false run_workcell_2:=true
Testing with real hardware
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=True run_workcell_2:=False use_fake_hardware:=False robot1_ip:=<IP_ADDR>
Launch Orchestrators individually
System Orchestrator
ros2 launch nexus_demos control_center.launch.py ros_domain_id:=0 headless:=False
IRB910SC Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_1 ros_domain_id:=1 support_package:=abb_irb910sc_support robot_xacro_file:=irb910sc_3_45.xacro moveit_config_package:=abb_irb910sc_3_45_moveit_config controllers_file:=abb_irb910sc_controllers.yaml moveit_config_file:=abb_irb910sc_3_45.srdf.xacro tf_publisher_launch_file:=irb910sc_tf.launch.py planner_config_package:=nexus_demos planner_config_file:=irb910sc_planner_params.yaml sku_detection_params_file:=irb910sc_detection.yaml zenoh_config_file:=workcell_1.json5 headless:=False
IRB1300 Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_2 ros_domain_id:=2 support_package:=abb_irb1300_support robot_xacro_file:=irb1300_10_115.xacro moveit_config_package:=abb_irb1300_10_115_moveit_config controllers_file:=abb_irb1300_controllers.yaml moveit_config_file:=abb_irb1300_10_115.srdf.xacro tf_publisher_launch_file:=irb1300_tf.launch.py sku_detection_params_file:=irb1300_detection.yaml zenoh_config_file:=workcell_2.json5 headless:=False
Submit a job
Note: Set your ROS_DOMAIN_ID environment variable to that of the system orchestrator before executing the work order
place_on_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '23', work_order: '$(cat config/place_on_conveyor.json)'}}"
pick_from_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '24', work_order: '$(cat config/pick_from_conveyor.json)'}}"
Debugging
workcell
Send a request to a specific workcell, eg. test_workcell
.
ros2 action send_goal /test_workcell/request nexus_orchestrator_msgs/action/WorkcellTask "$(cat config/workcell_task.yaml)" -f
mock gripper and mock detection
Gripper position from 0 to gripper_max_value
:
ros2 run nexus_demos mock_gripper --ros-args -p gripper_max_value:=0.5
To transition lifecycle states
ros2 lifecycle set /mock_gripper configure
ros2 lifecycle set /mock_gripper activate
Call the action
```bash ros2 action send_goal /mock_gripper/command control_msgs/action/GripperCommand “{command: {position: 0.42}}” -f
mock vision system
Define the mock detections:
```yaml keys:
- sku_id1
File truncated at 100 lines see the full file
Changelog for package nexus_demos
0.1.1 (2023-11-20)
0.1.0 (2023-11-06)
- Provides test cases and a demo setup to validate core functionalities in NEXUS.
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/rmf_transporter.launch.xml
-
- bidding_time_window [default: 2.0]
- building_map_name [default: depot]
- building_map_prefix_path [default: $(find-pkg-share nexus_demos)/config/rmf/maps/$(var building_map_name)]
- building_map_file [default: $(var building_map_prefix_path)/$(var building_map_name).building.yaml]
- fleet_adapter_config_file [default: $(find-pkg-share nexus_demos)/config/rmf/deliveryRobot_config.yaml]
- nav_graph_file [default: $(var building_map_prefix_path)/nav_graphs/0.yaml]
- gz_world_file [default: $(var building_map_prefix_path)/$(var building_map_name).world]
- gz_model_path [default: $(var building_map_prefix_path)/models]
- initial_map [default: L1]
- server_uri [default: ]
- sim_update_rate [default: 100]
- headless [default: true]
- use_simulator [default: true]
- use_unique_hex_string_with_task_id [default: true]
Messages
Services
Plugins
Recent questions tagged nexus_demos at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.1 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | A framework for orchestration |
Checkout URI | https://github.com/osrf/nexus.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-07-29 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Teo Koon Peng
Authors
nexus_demos
Launch system and workcell orchestrators and all mock nodes
The launch.py script will launch the system orchestrator and 2 workcells orchestrators (each with a IRB910SC and IRB1300 robot), along with a Zenoh bridge to link selected ROS endpoints between them. These 3 orchestrators and their accompany components will be in different ROS_DOMAIN_IDs. To launch these components individually, use the following examples given.
NOTE: The ROS_DOMAIN_ID occupied by the Zenoh bridges during launch time may be different from the
domain
values in the Zenoh bridge configurations. This is because the launch file overrides the domain ID of the zenoh bridges to ensure that it is same as that of the orchestrator.
Method 1: Launch system orchestrator, IRB1300 workcell and IRB910SC Workcell together with Zenoh bridge
NOTE: Before running any of these commands, you must set the rmw implmentation to cyclonedds with
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
(If testing with real hardware, specify the argumentsuse_fake_hardware=False
,robot1_ip=<IP>
androbot2_ip=<IP>
)
ros2 launch nexus_demos launch.py headless:=False
Method 2: Launch System Orchestrator and 1 Workcell without Zenoh bridge (Same ROS_DOMAIN_ID)
Launch with Workcell 1
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=true run_workcell_2:=false
Launch with Workcell 2
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=false run_workcell_2:=true
Testing with real hardware
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=True run_workcell_2:=False use_fake_hardware:=False robot1_ip:=<IP_ADDR>
Launch Orchestrators individually
System Orchestrator
ros2 launch nexus_demos control_center.launch.py ros_domain_id:=0 headless:=False
IRB910SC Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_1 ros_domain_id:=1 support_package:=abb_irb910sc_support robot_xacro_file:=irb910sc_3_45.xacro moveit_config_package:=abb_irb910sc_3_45_moveit_config controllers_file:=abb_irb910sc_controllers.yaml moveit_config_file:=abb_irb910sc_3_45.srdf.xacro tf_publisher_launch_file:=irb910sc_tf.launch.py planner_config_package:=nexus_demos planner_config_file:=irb910sc_planner_params.yaml sku_detection_params_file:=irb910sc_detection.yaml zenoh_config_file:=workcell_1.json5 headless:=False
IRB1300 Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_2 ros_domain_id:=2 support_package:=abb_irb1300_support robot_xacro_file:=irb1300_10_115.xacro moveit_config_package:=abb_irb1300_10_115_moveit_config controllers_file:=abb_irb1300_controllers.yaml moveit_config_file:=abb_irb1300_10_115.srdf.xacro tf_publisher_launch_file:=irb1300_tf.launch.py sku_detection_params_file:=irb1300_detection.yaml zenoh_config_file:=workcell_2.json5 headless:=False
Submit a job
Note: Set your ROS_DOMAIN_ID environment variable to that of the system orchestrator before executing the work order
place_on_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '23', work_order: '$(cat config/place_on_conveyor.json)'}}"
pick_from_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '24', work_order: '$(cat config/pick_from_conveyor.json)'}}"
Debugging
workcell
Send a request to a specific workcell, eg. test_workcell
.
ros2 action send_goal /test_workcell/request nexus_orchestrator_msgs/action/WorkcellTask "$(cat config/workcell_task.yaml)" -f
mock gripper and mock detection
Gripper position from 0 to gripper_max_value
:
ros2 run nexus_demos mock_gripper --ros-args -p gripper_max_value:=0.5
To transition lifecycle states
ros2 lifecycle set /mock_gripper configure
ros2 lifecycle set /mock_gripper activate
Call the action
```bash ros2 action send_goal /mock_gripper/command control_msgs/action/GripperCommand “{command: {position: 0.42}}” -f
mock vision system
Define the mock detections:
```yaml keys:
- sku_id1
File truncated at 100 lines see the full file
Changelog for package nexus_demos
0.1.1 (2023-11-20)
0.1.0 (2023-11-06)
- Provides test cases and a demo setup to validate core functionalities in NEXUS.
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/rmf_transporter.launch.xml
-
- bidding_time_window [default: 2.0]
- building_map_name [default: depot]
- building_map_prefix_path [default: $(find-pkg-share nexus_demos)/config/rmf/maps/$(var building_map_name)]
- building_map_file [default: $(var building_map_prefix_path)/$(var building_map_name).building.yaml]
- fleet_adapter_config_file [default: $(find-pkg-share nexus_demos)/config/rmf/deliveryRobot_config.yaml]
- nav_graph_file [default: $(var building_map_prefix_path)/nav_graphs/0.yaml]
- gz_world_file [default: $(var building_map_prefix_path)/$(var building_map_name).world]
- gz_model_path [default: $(var building_map_prefix_path)/models]
- initial_map [default: L1]
- server_uri [default: ]
- sim_update_rate [default: 100]
- headless [default: true]
- use_simulator [default: true]
- use_unique_hex_string_with_task_id [default: true]
Messages
Services
Plugins
Recent questions tagged nexus_demos at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.1 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | A framework for orchestration |
Checkout URI | https://github.com/osrf/nexus.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-07-29 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Teo Koon Peng
Authors
nexus_demos
Launch system and workcell orchestrators and all mock nodes
The launch.py script will launch the system orchestrator and 2 workcells orchestrators (each with a IRB910SC and IRB1300 robot), along with a Zenoh bridge to link selected ROS endpoints between them. These 3 orchestrators and their accompany components will be in different ROS_DOMAIN_IDs. To launch these components individually, use the following examples given.
NOTE: The ROS_DOMAIN_ID occupied by the Zenoh bridges during launch time may be different from the
domain
values in the Zenoh bridge configurations. This is because the launch file overrides the domain ID of the zenoh bridges to ensure that it is same as that of the orchestrator.
Method 1: Launch system orchestrator, IRB1300 workcell and IRB910SC Workcell together with Zenoh bridge
NOTE: Before running any of these commands, you must set the rmw implmentation to cyclonedds with
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
(If testing with real hardware, specify the argumentsuse_fake_hardware=False
,robot1_ip=<IP>
androbot2_ip=<IP>
)
ros2 launch nexus_demos launch.py headless:=False
Method 2: Launch System Orchestrator and 1 Workcell without Zenoh bridge (Same ROS_DOMAIN_ID)
Launch with Workcell 1
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=true run_workcell_2:=false
Launch with Workcell 2
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=false run_workcell_2:=true
Testing with real hardware
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=True run_workcell_2:=False use_fake_hardware:=False robot1_ip:=<IP_ADDR>
Launch Orchestrators individually
System Orchestrator
ros2 launch nexus_demos control_center.launch.py ros_domain_id:=0 headless:=False
IRB910SC Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_1 ros_domain_id:=1 support_package:=abb_irb910sc_support robot_xacro_file:=irb910sc_3_45.xacro moveit_config_package:=abb_irb910sc_3_45_moveit_config controllers_file:=abb_irb910sc_controllers.yaml moveit_config_file:=abb_irb910sc_3_45.srdf.xacro tf_publisher_launch_file:=irb910sc_tf.launch.py planner_config_package:=nexus_demos planner_config_file:=irb910sc_planner_params.yaml sku_detection_params_file:=irb910sc_detection.yaml zenoh_config_file:=workcell_1.json5 headless:=False
IRB1300 Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_2 ros_domain_id:=2 support_package:=abb_irb1300_support robot_xacro_file:=irb1300_10_115.xacro moveit_config_package:=abb_irb1300_10_115_moveit_config controllers_file:=abb_irb1300_controllers.yaml moveit_config_file:=abb_irb1300_10_115.srdf.xacro tf_publisher_launch_file:=irb1300_tf.launch.py sku_detection_params_file:=irb1300_detection.yaml zenoh_config_file:=workcell_2.json5 headless:=False
Submit a job
Note: Set your ROS_DOMAIN_ID environment variable to that of the system orchestrator before executing the work order
place_on_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '23', work_order: '$(cat config/place_on_conveyor.json)'}}"
pick_from_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '24', work_order: '$(cat config/pick_from_conveyor.json)'}}"
Debugging
workcell
Send a request to a specific workcell, eg. test_workcell
.
ros2 action send_goal /test_workcell/request nexus_orchestrator_msgs/action/WorkcellTask "$(cat config/workcell_task.yaml)" -f
mock gripper and mock detection
Gripper position from 0 to gripper_max_value
:
ros2 run nexus_demos mock_gripper --ros-args -p gripper_max_value:=0.5
To transition lifecycle states
ros2 lifecycle set /mock_gripper configure
ros2 lifecycle set /mock_gripper activate
Call the action
```bash ros2 action send_goal /mock_gripper/command control_msgs/action/GripperCommand “{command: {position: 0.42}}” -f
mock vision system
Define the mock detections:
```yaml keys:
- sku_id1
File truncated at 100 lines see the full file
Changelog for package nexus_demos
0.1.1 (2023-11-20)
0.1.0 (2023-11-06)
- Provides test cases and a demo setup to validate core functionalities in NEXUS.
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/rmf_transporter.launch.xml
-
- bidding_time_window [default: 2.0]
- building_map_name [default: depot]
- building_map_prefix_path [default: $(find-pkg-share nexus_demos)/config/rmf/maps/$(var building_map_name)]
- building_map_file [default: $(var building_map_prefix_path)/$(var building_map_name).building.yaml]
- fleet_adapter_config_file [default: $(find-pkg-share nexus_demos)/config/rmf/deliveryRobot_config.yaml]
- nav_graph_file [default: $(var building_map_prefix_path)/nav_graphs/0.yaml]
- gz_world_file [default: $(var building_map_prefix_path)/$(var building_map_name).world]
- gz_model_path [default: $(var building_map_prefix_path)/models]
- initial_map [default: L1]
- server_uri [default: ]
- sim_update_rate [default: 100]
- headless [default: true]
- use_simulator [default: true]
- use_unique_hex_string_with_task_id [default: true]
Messages
Services
Plugins
Recent questions tagged nexus_demos at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.1 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | A framework for orchestration |
Checkout URI | https://github.com/osrf/nexus.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-07-29 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Teo Koon Peng
Authors
nexus_demos
Launch system and workcell orchestrators and all mock nodes
The launch.py script will launch the system orchestrator and 2 workcells orchestrators (each with a IRB910SC and IRB1300 robot), along with a Zenoh bridge to link selected ROS endpoints between them. These 3 orchestrators and their accompany components will be in different ROS_DOMAIN_IDs. To launch these components individually, use the following examples given.
NOTE: The ROS_DOMAIN_ID occupied by the Zenoh bridges during launch time may be different from the
domain
values in the Zenoh bridge configurations. This is because the launch file overrides the domain ID of the zenoh bridges to ensure that it is same as that of the orchestrator.
Method 1: Launch system orchestrator, IRB1300 workcell and IRB910SC Workcell together with Zenoh bridge
NOTE: Before running any of these commands, you must set the rmw implmentation to cyclonedds with
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
(If testing with real hardware, specify the argumentsuse_fake_hardware=False
,robot1_ip=<IP>
androbot2_ip=<IP>
)
ros2 launch nexus_demos launch.py headless:=False
Method 2: Launch System Orchestrator and 1 Workcell without Zenoh bridge (Same ROS_DOMAIN_ID)
Launch with Workcell 1
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=true run_workcell_2:=false
Launch with Workcell 2
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=false run_workcell_2:=true
Testing with real hardware
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=True run_workcell_2:=False use_fake_hardware:=False robot1_ip:=<IP_ADDR>
Launch Orchestrators individually
System Orchestrator
ros2 launch nexus_demos control_center.launch.py ros_domain_id:=0 headless:=False
IRB910SC Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_1 ros_domain_id:=1 support_package:=abb_irb910sc_support robot_xacro_file:=irb910sc_3_45.xacro moveit_config_package:=abb_irb910sc_3_45_moveit_config controllers_file:=abb_irb910sc_controllers.yaml moveit_config_file:=abb_irb910sc_3_45.srdf.xacro tf_publisher_launch_file:=irb910sc_tf.launch.py planner_config_package:=nexus_demos planner_config_file:=irb910sc_planner_params.yaml sku_detection_params_file:=irb910sc_detection.yaml zenoh_config_file:=workcell_1.json5 headless:=False
IRB1300 Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_2 ros_domain_id:=2 support_package:=abb_irb1300_support robot_xacro_file:=irb1300_10_115.xacro moveit_config_package:=abb_irb1300_10_115_moveit_config controllers_file:=abb_irb1300_controllers.yaml moveit_config_file:=abb_irb1300_10_115.srdf.xacro tf_publisher_launch_file:=irb1300_tf.launch.py sku_detection_params_file:=irb1300_detection.yaml zenoh_config_file:=workcell_2.json5 headless:=False
Submit a job
Note: Set your ROS_DOMAIN_ID environment variable to that of the system orchestrator before executing the work order
place_on_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '23', work_order: '$(cat config/place_on_conveyor.json)'}}"
pick_from_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '24', work_order: '$(cat config/pick_from_conveyor.json)'}}"
Debugging
workcell
Send a request to a specific workcell, eg. test_workcell
.
ros2 action send_goal /test_workcell/request nexus_orchestrator_msgs/action/WorkcellTask "$(cat config/workcell_task.yaml)" -f
mock gripper and mock detection
Gripper position from 0 to gripper_max_value
:
ros2 run nexus_demos mock_gripper --ros-args -p gripper_max_value:=0.5
To transition lifecycle states
ros2 lifecycle set /mock_gripper configure
ros2 lifecycle set /mock_gripper activate
Call the action
```bash ros2 action send_goal /mock_gripper/command control_msgs/action/GripperCommand “{command: {position: 0.42}}” -f
mock vision system
Define the mock detections:
```yaml keys:
- sku_id1
File truncated at 100 lines see the full file
Changelog for package nexus_demos
0.1.1 (2023-11-20)
0.1.0 (2023-11-06)
- Provides test cases and a demo setup to validate core functionalities in NEXUS.
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/rmf_transporter.launch.xml
-
- bidding_time_window [default: 2.0]
- building_map_name [default: depot]
- building_map_prefix_path [default: $(find-pkg-share nexus_demos)/config/rmf/maps/$(var building_map_name)]
- building_map_file [default: $(var building_map_prefix_path)/$(var building_map_name).building.yaml]
- fleet_adapter_config_file [default: $(find-pkg-share nexus_demos)/config/rmf/deliveryRobot_config.yaml]
- nav_graph_file [default: $(var building_map_prefix_path)/nav_graphs/0.yaml]
- gz_world_file [default: $(var building_map_prefix_path)/$(var building_map_name).world]
- gz_model_path [default: $(var building_map_prefix_path)/models]
- initial_map [default: L1]
- server_uri [default: ]
- sim_update_rate [default: 100]
- headless [default: true]
- use_simulator [default: true]
- use_unique_hex_string_with_task_id [default: true]
Messages
Services
Plugins
Recent questions tagged nexus_demos at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.1 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | A framework for orchestration |
Checkout URI | https://github.com/osrf/nexus.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-07-29 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Teo Koon Peng
Authors
nexus_demos
Launch system and workcell orchestrators and all mock nodes
The launch.py script will launch the system orchestrator and 2 workcells orchestrators (each with a IRB910SC and IRB1300 robot), along with a Zenoh bridge to link selected ROS endpoints between them. These 3 orchestrators and their accompany components will be in different ROS_DOMAIN_IDs. To launch these components individually, use the following examples given.
NOTE: The ROS_DOMAIN_ID occupied by the Zenoh bridges during launch time may be different from the
domain
values in the Zenoh bridge configurations. This is because the launch file overrides the domain ID of the zenoh bridges to ensure that it is same as that of the orchestrator.
Method 1: Launch system orchestrator, IRB1300 workcell and IRB910SC Workcell together with Zenoh bridge
NOTE: Before running any of these commands, you must set the rmw implmentation to cyclonedds with
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
(If testing with real hardware, specify the argumentsuse_fake_hardware=False
,robot1_ip=<IP>
androbot2_ip=<IP>
)
ros2 launch nexus_demos launch.py headless:=False
Method 2: Launch System Orchestrator and 1 Workcell without Zenoh bridge (Same ROS_DOMAIN_ID)
Launch with Workcell 1
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=true run_workcell_2:=false
Launch with Workcell 2
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=false run_workcell_2:=true
Testing with real hardware
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=True run_workcell_2:=False use_fake_hardware:=False robot1_ip:=<IP_ADDR>
Launch Orchestrators individually
System Orchestrator
ros2 launch nexus_demos control_center.launch.py ros_domain_id:=0 headless:=False
IRB910SC Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_1 ros_domain_id:=1 support_package:=abb_irb910sc_support robot_xacro_file:=irb910sc_3_45.xacro moveit_config_package:=abb_irb910sc_3_45_moveit_config controllers_file:=abb_irb910sc_controllers.yaml moveit_config_file:=abb_irb910sc_3_45.srdf.xacro tf_publisher_launch_file:=irb910sc_tf.launch.py planner_config_package:=nexus_demos planner_config_file:=irb910sc_planner_params.yaml sku_detection_params_file:=irb910sc_detection.yaml zenoh_config_file:=workcell_1.json5 headless:=False
IRB1300 Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_2 ros_domain_id:=2 support_package:=abb_irb1300_support robot_xacro_file:=irb1300_10_115.xacro moveit_config_package:=abb_irb1300_10_115_moveit_config controllers_file:=abb_irb1300_controllers.yaml moveit_config_file:=abb_irb1300_10_115.srdf.xacro tf_publisher_launch_file:=irb1300_tf.launch.py sku_detection_params_file:=irb1300_detection.yaml zenoh_config_file:=workcell_2.json5 headless:=False
Submit a job
Note: Set your ROS_DOMAIN_ID environment variable to that of the system orchestrator before executing the work order
place_on_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '23', work_order: '$(cat config/place_on_conveyor.json)'}}"
pick_from_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '24', work_order: '$(cat config/pick_from_conveyor.json)'}}"
Debugging
workcell
Send a request to a specific workcell, eg. test_workcell
.
ros2 action send_goal /test_workcell/request nexus_orchestrator_msgs/action/WorkcellTask "$(cat config/workcell_task.yaml)" -f
mock gripper and mock detection
Gripper position from 0 to gripper_max_value
:
ros2 run nexus_demos mock_gripper --ros-args -p gripper_max_value:=0.5
To transition lifecycle states
ros2 lifecycle set /mock_gripper configure
ros2 lifecycle set /mock_gripper activate
Call the action
```bash ros2 action send_goal /mock_gripper/command control_msgs/action/GripperCommand “{command: {position: 0.42}}” -f
mock vision system
Define the mock detections:
```yaml keys:
- sku_id1
File truncated at 100 lines see the full file
Changelog for package nexus_demos
0.1.1 (2023-11-20)
0.1.0 (2023-11-06)
- Provides test cases and a demo setup to validate core functionalities in NEXUS.
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/rmf_transporter.launch.xml
-
- bidding_time_window [default: 2.0]
- building_map_name [default: depot]
- building_map_prefix_path [default: $(find-pkg-share nexus_demos)/config/rmf/maps/$(var building_map_name)]
- building_map_file [default: $(var building_map_prefix_path)/$(var building_map_name).building.yaml]
- fleet_adapter_config_file [default: $(find-pkg-share nexus_demos)/config/rmf/deliveryRobot_config.yaml]
- nav_graph_file [default: $(var building_map_prefix_path)/nav_graphs/0.yaml]
- gz_world_file [default: $(var building_map_prefix_path)/$(var building_map_name).world]
- gz_model_path [default: $(var building_map_prefix_path)/models]
- initial_map [default: L1]
- server_uri [default: ]
- sim_update_rate [default: 100]
- headless [default: true]
- use_simulator [default: true]
- use_unique_hex_string_with_task_id [default: true]
Messages
Services
Plugins
Recent questions tagged nexus_demos at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.1 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | A framework for orchestration |
Checkout URI | https://github.com/osrf/nexus.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-07-29 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Teo Koon Peng
Authors
nexus_demos
Launch system and workcell orchestrators and all mock nodes
The launch.py script will launch the system orchestrator and 2 workcells orchestrators (each with a IRB910SC and IRB1300 robot), along with a Zenoh bridge to link selected ROS endpoints between them. These 3 orchestrators and their accompany components will be in different ROS_DOMAIN_IDs. To launch these components individually, use the following examples given.
NOTE: The ROS_DOMAIN_ID occupied by the Zenoh bridges during launch time may be different from the
domain
values in the Zenoh bridge configurations. This is because the launch file overrides the domain ID of the zenoh bridges to ensure that it is same as that of the orchestrator.
Method 1: Launch system orchestrator, IRB1300 workcell and IRB910SC Workcell together with Zenoh bridge
NOTE: Before running any of these commands, you must set the rmw implmentation to cyclonedds with
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
(If testing with real hardware, specify the argumentsuse_fake_hardware=False
,robot1_ip=<IP>
androbot2_ip=<IP>
)
ros2 launch nexus_demos launch.py headless:=False
Method 2: Launch System Orchestrator and 1 Workcell without Zenoh bridge (Same ROS_DOMAIN_ID)
Launch with Workcell 1
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=true run_workcell_2:=false
Launch with Workcell 2
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=false run_workcell_2:=true
Testing with real hardware
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=True run_workcell_2:=False use_fake_hardware:=False robot1_ip:=<IP_ADDR>
Launch Orchestrators individually
System Orchestrator
ros2 launch nexus_demos control_center.launch.py ros_domain_id:=0 headless:=False
IRB910SC Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_1 ros_domain_id:=1 support_package:=abb_irb910sc_support robot_xacro_file:=irb910sc_3_45.xacro moveit_config_package:=abb_irb910sc_3_45_moveit_config controllers_file:=abb_irb910sc_controllers.yaml moveit_config_file:=abb_irb910sc_3_45.srdf.xacro tf_publisher_launch_file:=irb910sc_tf.launch.py planner_config_package:=nexus_demos planner_config_file:=irb910sc_planner_params.yaml sku_detection_params_file:=irb910sc_detection.yaml zenoh_config_file:=workcell_1.json5 headless:=False
IRB1300 Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_2 ros_domain_id:=2 support_package:=abb_irb1300_support robot_xacro_file:=irb1300_10_115.xacro moveit_config_package:=abb_irb1300_10_115_moveit_config controllers_file:=abb_irb1300_controllers.yaml moveit_config_file:=abb_irb1300_10_115.srdf.xacro tf_publisher_launch_file:=irb1300_tf.launch.py sku_detection_params_file:=irb1300_detection.yaml zenoh_config_file:=workcell_2.json5 headless:=False
Submit a job
Note: Set your ROS_DOMAIN_ID environment variable to that of the system orchestrator before executing the work order
place_on_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '23', work_order: '$(cat config/place_on_conveyor.json)'}}"
pick_from_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '24', work_order: '$(cat config/pick_from_conveyor.json)'}}"
Debugging
workcell
Send a request to a specific workcell, eg. test_workcell
.
ros2 action send_goal /test_workcell/request nexus_orchestrator_msgs/action/WorkcellTask "$(cat config/workcell_task.yaml)" -f
mock gripper and mock detection
Gripper position from 0 to gripper_max_value
:
ros2 run nexus_demos mock_gripper --ros-args -p gripper_max_value:=0.5
To transition lifecycle states
ros2 lifecycle set /mock_gripper configure
ros2 lifecycle set /mock_gripper activate
Call the action
```bash ros2 action send_goal /mock_gripper/command control_msgs/action/GripperCommand “{command: {position: 0.42}}” -f
mock vision system
Define the mock detections:
```yaml keys:
- sku_id1
File truncated at 100 lines see the full file
Changelog for package nexus_demos
0.1.1 (2023-11-20)
0.1.0 (2023-11-06)
- Provides test cases and a demo setup to validate core functionalities in NEXUS.
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/rmf_transporter.launch.xml
-
- bidding_time_window [default: 2.0]
- building_map_name [default: depot]
- building_map_prefix_path [default: $(find-pkg-share nexus_demos)/config/rmf/maps/$(var building_map_name)]
- building_map_file [default: $(var building_map_prefix_path)/$(var building_map_name).building.yaml]
- fleet_adapter_config_file [default: $(find-pkg-share nexus_demos)/config/rmf/deliveryRobot_config.yaml]
- nav_graph_file [default: $(var building_map_prefix_path)/nav_graphs/0.yaml]
- gz_world_file [default: $(var building_map_prefix_path)/$(var building_map_name).world]
- gz_model_path [default: $(var building_map_prefix_path)/models]
- initial_map [default: L1]
- server_uri [default: ]
- sim_update_rate [default: 100]
- headless [default: true]
- use_simulator [default: true]
- use_unique_hex_string_with_task_id [default: true]
Messages
Services
Plugins
Recent questions tagged nexus_demos at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.1 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | A framework for orchestration |
Checkout URI | https://github.com/osrf/nexus.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-07-29 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Teo Koon Peng
Authors
nexus_demos
Launch system and workcell orchestrators and all mock nodes
The launch.py script will launch the system orchestrator and 2 workcells orchestrators (each with a IRB910SC and IRB1300 robot), along with a Zenoh bridge to link selected ROS endpoints between them. These 3 orchestrators and their accompany components will be in different ROS_DOMAIN_IDs. To launch these components individually, use the following examples given.
NOTE: The ROS_DOMAIN_ID occupied by the Zenoh bridges during launch time may be different from the
domain
values in the Zenoh bridge configurations. This is because the launch file overrides the domain ID of the zenoh bridges to ensure that it is same as that of the orchestrator.
Method 1: Launch system orchestrator, IRB1300 workcell and IRB910SC Workcell together with Zenoh bridge
NOTE: Before running any of these commands, you must set the rmw implmentation to cyclonedds with
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
(If testing with real hardware, specify the argumentsuse_fake_hardware=False
,robot1_ip=<IP>
androbot2_ip=<IP>
)
ros2 launch nexus_demos launch.py headless:=False
Method 2: Launch System Orchestrator and 1 Workcell without Zenoh bridge (Same ROS_DOMAIN_ID)
Launch with Workcell 1
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=true run_workcell_2:=false
Launch with Workcell 2
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=false run_workcell_2:=true
Testing with real hardware
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=True run_workcell_2:=False use_fake_hardware:=False robot1_ip:=<IP_ADDR>
Launch Orchestrators individually
System Orchestrator
ros2 launch nexus_demos control_center.launch.py ros_domain_id:=0 headless:=False
IRB910SC Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_1 ros_domain_id:=1 support_package:=abb_irb910sc_support robot_xacro_file:=irb910sc_3_45.xacro moveit_config_package:=abb_irb910sc_3_45_moveit_config controllers_file:=abb_irb910sc_controllers.yaml moveit_config_file:=abb_irb910sc_3_45.srdf.xacro tf_publisher_launch_file:=irb910sc_tf.launch.py planner_config_package:=nexus_demos planner_config_file:=irb910sc_planner_params.yaml sku_detection_params_file:=irb910sc_detection.yaml zenoh_config_file:=workcell_1.json5 headless:=False
IRB1300 Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_2 ros_domain_id:=2 support_package:=abb_irb1300_support robot_xacro_file:=irb1300_10_115.xacro moveit_config_package:=abb_irb1300_10_115_moveit_config controllers_file:=abb_irb1300_controllers.yaml moveit_config_file:=abb_irb1300_10_115.srdf.xacro tf_publisher_launch_file:=irb1300_tf.launch.py sku_detection_params_file:=irb1300_detection.yaml zenoh_config_file:=workcell_2.json5 headless:=False
Submit a job
Note: Set your ROS_DOMAIN_ID environment variable to that of the system orchestrator before executing the work order
place_on_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '23', work_order: '$(cat config/place_on_conveyor.json)'}}"
pick_from_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '24', work_order: '$(cat config/pick_from_conveyor.json)'}}"
Debugging
workcell
Send a request to a specific workcell, eg. test_workcell
.
ros2 action send_goal /test_workcell/request nexus_orchestrator_msgs/action/WorkcellTask "$(cat config/workcell_task.yaml)" -f
mock gripper and mock detection
Gripper position from 0 to gripper_max_value
:
ros2 run nexus_demos mock_gripper --ros-args -p gripper_max_value:=0.5
To transition lifecycle states
ros2 lifecycle set /mock_gripper configure
ros2 lifecycle set /mock_gripper activate
Call the action
```bash ros2 action send_goal /mock_gripper/command control_msgs/action/GripperCommand “{command: {position: 0.42}}” -f
mock vision system
Define the mock detections:
```yaml keys:
- sku_id1
File truncated at 100 lines see the full file
Changelog for package nexus_demos
0.1.1 (2023-11-20)
0.1.0 (2023-11-06)
- Provides test cases and a demo setup to validate core functionalities in NEXUS.
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/rmf_transporter.launch.xml
-
- bidding_time_window [default: 2.0]
- building_map_name [default: depot]
- building_map_prefix_path [default: $(find-pkg-share nexus_demos)/config/rmf/maps/$(var building_map_name)]
- building_map_file [default: $(var building_map_prefix_path)/$(var building_map_name).building.yaml]
- fleet_adapter_config_file [default: $(find-pkg-share nexus_demos)/config/rmf/deliveryRobot_config.yaml]
- nav_graph_file [default: $(var building_map_prefix_path)/nav_graphs/0.yaml]
- gz_world_file [default: $(var building_map_prefix_path)/$(var building_map_name).world]
- gz_model_path [default: $(var building_map_prefix_path)/models]
- initial_map [default: L1]
- server_uri [default: ]
- sim_update_rate [default: 100]
- headless [default: true]
- use_simulator [default: true]
- use_unique_hex_string_with_task_id [default: true]
Messages
Services
Plugins
Recent questions tagged nexus_demos at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.1 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | A framework for orchestration |
Checkout URI | https://github.com/osrf/nexus.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-07-29 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Teo Koon Peng
Authors
nexus_demos
Launch system and workcell orchestrators and all mock nodes
The launch.py script will launch the system orchestrator and 2 workcells orchestrators (each with a IRB910SC and IRB1300 robot), along with a Zenoh bridge to link selected ROS endpoints between them. These 3 orchestrators and their accompany components will be in different ROS_DOMAIN_IDs. To launch these components individually, use the following examples given.
NOTE: The ROS_DOMAIN_ID occupied by the Zenoh bridges during launch time may be different from the
domain
values in the Zenoh bridge configurations. This is because the launch file overrides the domain ID of the zenoh bridges to ensure that it is same as that of the orchestrator.
Method 1: Launch system orchestrator, IRB1300 workcell and IRB910SC Workcell together with Zenoh bridge
NOTE: Before running any of these commands, you must set the rmw implmentation to cyclonedds with
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
(If testing with real hardware, specify the argumentsuse_fake_hardware=False
,robot1_ip=<IP>
androbot2_ip=<IP>
)
ros2 launch nexus_demos launch.py headless:=False
Method 2: Launch System Orchestrator and 1 Workcell without Zenoh bridge (Same ROS_DOMAIN_ID)
Launch with Workcell 1
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=true run_workcell_2:=false
Launch with Workcell 2
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=false run_workcell_2:=true
Testing with real hardware
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=True run_workcell_2:=False use_fake_hardware:=False robot1_ip:=<IP_ADDR>
Launch Orchestrators individually
System Orchestrator
ros2 launch nexus_demos control_center.launch.py ros_domain_id:=0 headless:=False
IRB910SC Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_1 ros_domain_id:=1 support_package:=abb_irb910sc_support robot_xacro_file:=irb910sc_3_45.xacro moveit_config_package:=abb_irb910sc_3_45_moveit_config controllers_file:=abb_irb910sc_controllers.yaml moveit_config_file:=abb_irb910sc_3_45.srdf.xacro tf_publisher_launch_file:=irb910sc_tf.launch.py planner_config_package:=nexus_demos planner_config_file:=irb910sc_planner_params.yaml sku_detection_params_file:=irb910sc_detection.yaml zenoh_config_file:=workcell_1.json5 headless:=False
IRB1300 Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_2 ros_domain_id:=2 support_package:=abb_irb1300_support robot_xacro_file:=irb1300_10_115.xacro moveit_config_package:=abb_irb1300_10_115_moveit_config controllers_file:=abb_irb1300_controllers.yaml moveit_config_file:=abb_irb1300_10_115.srdf.xacro tf_publisher_launch_file:=irb1300_tf.launch.py sku_detection_params_file:=irb1300_detection.yaml zenoh_config_file:=workcell_2.json5 headless:=False
Submit a job
Note: Set your ROS_DOMAIN_ID environment variable to that of the system orchestrator before executing the work order
place_on_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '23', work_order: '$(cat config/place_on_conveyor.json)'}}"
pick_from_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '24', work_order: '$(cat config/pick_from_conveyor.json)'}}"
Debugging
workcell
Send a request to a specific workcell, eg. test_workcell
.
ros2 action send_goal /test_workcell/request nexus_orchestrator_msgs/action/WorkcellTask "$(cat config/workcell_task.yaml)" -f
mock gripper and mock detection
Gripper position from 0 to gripper_max_value
:
ros2 run nexus_demos mock_gripper --ros-args -p gripper_max_value:=0.5
To transition lifecycle states
ros2 lifecycle set /mock_gripper configure
ros2 lifecycle set /mock_gripper activate
Call the action
```bash ros2 action send_goal /mock_gripper/command control_msgs/action/GripperCommand “{command: {position: 0.42}}” -f
mock vision system
Define the mock detections:
```yaml keys:
- sku_id1
File truncated at 100 lines see the full file
Changelog for package nexus_demos
0.1.1 (2023-11-20)
0.1.0 (2023-11-06)
- Provides test cases and a demo setup to validate core functionalities in NEXUS.
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/rmf_transporter.launch.xml
-
- bidding_time_window [default: 2.0]
- building_map_name [default: depot]
- building_map_prefix_path [default: $(find-pkg-share nexus_demos)/config/rmf/maps/$(var building_map_name)]
- building_map_file [default: $(var building_map_prefix_path)/$(var building_map_name).building.yaml]
- fleet_adapter_config_file [default: $(find-pkg-share nexus_demos)/config/rmf/deliveryRobot_config.yaml]
- nav_graph_file [default: $(var building_map_prefix_path)/nav_graphs/0.yaml]
- gz_world_file [default: $(var building_map_prefix_path)/$(var building_map_name).world]
- gz_model_path [default: $(var building_map_prefix_path)/models]
- initial_map [default: L1]
- server_uri [default: ]
- sim_update_rate [default: 100]
- headless [default: true]
- use_simulator [default: true]
- use_unique_hex_string_with_task_id [default: true]
Messages
Services
Plugins
Recent questions tagged nexus_demos at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.1 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | A framework for orchestration |
Checkout URI | https://github.com/osrf/nexus.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-07-29 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Teo Koon Peng
Authors
nexus_demos
Launch system and workcell orchestrators and all mock nodes
The launch.py script will launch the system orchestrator and 2 workcells orchestrators (each with a IRB910SC and IRB1300 robot), along with a Zenoh bridge to link selected ROS endpoints between them. These 3 orchestrators and their accompany components will be in different ROS_DOMAIN_IDs. To launch these components individually, use the following examples given.
NOTE: The ROS_DOMAIN_ID occupied by the Zenoh bridges during launch time may be different from the
domain
values in the Zenoh bridge configurations. This is because the launch file overrides the domain ID of the zenoh bridges to ensure that it is same as that of the orchestrator.
Method 1: Launch system orchestrator, IRB1300 workcell and IRB910SC Workcell together with Zenoh bridge
NOTE: Before running any of these commands, you must set the rmw implmentation to cyclonedds with
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
(If testing with real hardware, specify the argumentsuse_fake_hardware=False
,robot1_ip=<IP>
androbot2_ip=<IP>
)
ros2 launch nexus_demos launch.py headless:=False
Method 2: Launch System Orchestrator and 1 Workcell without Zenoh bridge (Same ROS_DOMAIN_ID)
Launch with Workcell 1
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=true run_workcell_2:=false
Launch with Workcell 2
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=false run_workcell_2:=true
Testing with real hardware
ros2 launch nexus_demos launch.py headless:=False use_zenoh_bridge:=False run_workcell_1:=True run_workcell_2:=False use_fake_hardware:=False robot1_ip:=<IP_ADDR>
Launch Orchestrators individually
System Orchestrator
ros2 launch nexus_demos control_center.launch.py ros_domain_id:=0 headless:=False
IRB910SC Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_1 ros_domain_id:=1 support_package:=abb_irb910sc_support robot_xacro_file:=irb910sc_3_45.xacro moveit_config_package:=abb_irb910sc_3_45_moveit_config controllers_file:=abb_irb910sc_controllers.yaml moveit_config_file:=abb_irb910sc_3_45.srdf.xacro tf_publisher_launch_file:=irb910sc_tf.launch.py planner_config_package:=nexus_demos planner_config_file:=irb910sc_planner_params.yaml sku_detection_params_file:=irb910sc_detection.yaml zenoh_config_file:=workcell_1.json5 headless:=False
IRB1300 Workcell
ros2 launch nexus_demos workcell.launch.py workcell_id:=workcell_2 ros_domain_id:=2 support_package:=abb_irb1300_support robot_xacro_file:=irb1300_10_115.xacro moveit_config_package:=abb_irb1300_10_115_moveit_config controllers_file:=abb_irb1300_controllers.yaml moveit_config_file:=abb_irb1300_10_115.srdf.xacro tf_publisher_launch_file:=irb1300_tf.launch.py sku_detection_params_file:=irb1300_detection.yaml zenoh_config_file:=workcell_2.json5 headless:=False
Submit a job
Note: Set your ROS_DOMAIN_ID environment variable to that of the system orchestrator before executing the work order
place_on_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '23', work_order: '$(cat config/place_on_conveyor.json)'}}"
pick_from_conveyor
work order:
ros2 action send_goal /system_orchestrator/execute_order nexus_orchestrator_msgs/action/ExecuteWorkOrder "{order: {work_order_id: '24', work_order: '$(cat config/pick_from_conveyor.json)'}}"
Debugging
workcell
Send a request to a specific workcell, eg. test_workcell
.
ros2 action send_goal /test_workcell/request nexus_orchestrator_msgs/action/WorkcellTask "$(cat config/workcell_task.yaml)" -f
mock gripper and mock detection
Gripper position from 0 to gripper_max_value
:
ros2 run nexus_demos mock_gripper --ros-args -p gripper_max_value:=0.5
To transition lifecycle states
ros2 lifecycle set /mock_gripper configure
ros2 lifecycle set /mock_gripper activate
Call the action
```bash ros2 action send_goal /mock_gripper/command control_msgs/action/GripperCommand “{command: {position: 0.42}}” -f
mock vision system
Define the mock detections:
```yaml keys:
- sku_id1
File truncated at 100 lines see the full file
Changelog for package nexus_demos
0.1.1 (2023-11-20)
0.1.0 (2023-11-06)
- Provides test cases and a demo setup to validate core functionalities in NEXUS.
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/rmf_transporter.launch.xml
-
- bidding_time_window [default: 2.0]
- building_map_name [default: depot]
- building_map_prefix_path [default: $(find-pkg-share nexus_demos)/config/rmf/maps/$(var building_map_name)]
- building_map_file [default: $(var building_map_prefix_path)/$(var building_map_name).building.yaml]
- fleet_adapter_config_file [default: $(find-pkg-share nexus_demos)/config/rmf/deliveryRobot_config.yaml]
- nav_graph_file [default: $(var building_map_prefix_path)/nav_graphs/0.yaml]
- gz_world_file [default: $(var building_map_prefix_path)/$(var building_map_name).world]
- gz_model_path [default: $(var building_map_prefix_path)/models]
- initial_map [default: L1]
- server_uri [default: ]
- sim_update_rate [default: 100]
- headless [default: true]
- use_simulator [default: true]
- use_unique_hex_string_with_task_id [default: true]