Part I: The ROS 2 stack · §6 of 43
On zeus: use openarm_launch.sh
bash /root/scripts/openarm_launch.sh real # real robot
bash /root/scripts/openarm_launch.sh sim # simulation (mock hardware)It runs the bringup launch below with zeus’s fixed settings, so they’re never typed by hand:
real:arm_type:=v10 use_fake_hardware:=false left_can_interface:=can0 right_can_interface:=can1 can_fd:=true. zeus’s cables are the reverse of the ROS defaults (§22); a launch typed without these arguments on 2026-10-10 sent the right arm’s motions to the left arm (log).- Refuses to start if a launch is already running, or (for
real) ifcan0/can1aren’t up. - Saves the output to
/root/launch_<mode>_<date>.logwithtee -i. - For
real, reminds you to power the arms first and prints the identification step (§12.2).
Stop the real robot with bash /root/scripts/openarm_stop.sh, not Ctrl+C (§12.4). The MoveIt demo isn’t covered by the wrapper yet: on the real robot it needs the same CAN arguments.
openarm_bringup/launch/openarm.bimanual.launch.py: robot only
Starts robot_state_publisher, ros2_control_node (controller manager), RViz (openarm_description/rviz/bimanual.rviz), and after 1 s the spawners for joint_state_broadcaster, both arm controllers and both gripper controllers.
| Argument | Default | Notes |
|---|---|---|
arm_type | openarm_v2.0 | Use v10. |
use_fake_hardware | true | false = real motors via CAN. |
robot_controller | joint_trajectory_controller | or forward_position_controller. |
right_can_interface | can0 | zeus: can1 (cabling reversed, §22) |
left_can_interface | can1 | zeus: can0 |
can_fd | true | false = classic CAN 2.0 (must match how the motors are configured). |
arm_prefix | "" | Puts everything under a namespace and switches to openarm_bimanual_controllers_namespaced.yaml. That file doesn’t exist on main, so leave this empty. |
controllers_file | openarm_bimanual_controllers.yaml | |
runtime_config_package | openarm_bringup | |
description_package | openarm_description | |
description_file | v20.urdf.xacro | Ignored. |
openarm_bimanual_moveit_config/launch/demo.launch.py: robot + MoveIt
Starts everything above (its own robot_state_publisher and controller manager, at 100 Hz) plus move_group and RViz with the MotionPlanning panel. Same arguments (arm_type, use_fake_hardware, can_fd, CAN interfaces, robot_controller).
Run one or the other, never both at once. Each starts its own controller manager, and two
/controller_managernodes conflict.
Other launch files in the MoveIt package (move_group.launch.py, moveit_rviz.launch.py, spawn_controllers.launch.py, static_virtual_joint_tfs.launch.py, setup_assistant.launch.py) are MoveIt Setup Assistant boilerplate and not needed for normal use.