Part I · §1–§16 · The ROS 2 stack
How the OpenArm ROS 2 stack is built and run on zeus: the controller manager and its hardware plugin, simulation, commanding the arms, MoveIt, and bringing up the physical robot over CAN.
1Big picture
2The packagesIn openarm_ros2 (this repo, main) · Dependencies (cloned separately)
3Robot model: joints, limits, framesSelecting the model · Joint names (bimanual) · v1.0 joint limits (as actually loaded, per arm) · Which way each …
4ros2_control layerHardware components · What OpenArmHW actually does (real hardware) · Start-up on zeus (patched driver) · Controllers …
5Environment and containerCurrent container (openarm, image openarm-jazzy:rt2) · Why real-time scheduling, and why Docker doesn't allow it by …
6Launch files and argumentsOn zeus: use openarm_launch.sh · openarm_bringup/launch/openarm.bimanual.launch.py: robot only · …
7Running in simulation (mock hardware)
8Commanding the robot (sim and real)Trajectory action (recommended) · Trajectory topic (fire-and-forget) · Python (rclpy) action client · Reading state …
9MoveIt 2
10The physical robot: CAN setupHardware you need · Install the CAN tools on the host · Identify and name the adapters · Bring the interfaces up …
11The physical robot: zero calibrationOption A: automatic (mechanical stops), recommended by Enactic · Option B: manual · Option C: re-zero a single motor …
12The physical robot: bringing it up with ROS 2Pre-flight checklist · Launch · First motions · Stopping · Real-time tuning (recommended)
13Safety notes specific to this code
14Introspection and debugging cheat-sheet
15Troubleshooting
16Known issues and gaps in main