OpenArm ROS 2 Guide (v1.0 bimanual, Jazzy, main branch)
Current version: V3
Earlier versions are kept unchanged in the version archive.
What changed in V3 (2026-10-09)
- New: Part III (§30–§43), a complete, beginner-level guide to running a trained policy with
lerobot-rollout: concepts, checking the model files, every flag, what happens when, a first run in small steps, tuning, evaluation, DAgger, troubleshooting. It replaces the old §24.4–§24.11, which were short. §24.5 “Which policy” is now §24.4.- Correction:
lerobot-rolloutrefuses recording datasets whose name doesn’t start withrollout_. The V2.2 examples (eval_…,hil_…) would have failed at start-up. Fixed in §37 and §38.- Correction:
lerobot-recordappends a date-time tag to the dataset name unless--dataset.no_stamp=true, so the V2.2 training command couldn’t find the dataset under the name it was recorded with. §24.1 now usesno_stamp.- New pitfall: zeus logs in to a Wayland session, where the LeRobot keyboard controls (episodic, DAgger) probably don’t work (§37.3).
What changed in V2.2 (2026-10-09)
- Correction: V2.1 said that with
interpolation_method: nonethe trajectory controller “ramps linearly” to the first point overtime_from_start. That was wrong. It holds the current position for the wholetime_from_startand then jumps to the target (confirmed in sim, see log 2026-10-09). On real motors that’s a full-speed step. Fixed in §4, §8.1, §12.3 and §16.- New: how to switch the bringup controllers to
interpolation_method: splines, and how to check it (§4). This is now a pre-flight item for the real robot (§12.1).- Correction: the §12.1 checklist said
can0= right arm. On zeus it’s the reverse (left =can0, §22).
A practical reference for the OpenArm ROS 2 stack as installed in the openarm container on zeus: how it is built, how to run it in simulation, how to command it, and how to bring up and command the physical OpenArm v1.0 over SocketCAN. Part II covers teleoperation, data collection and policy learning with Hugging Face LeRobot, installed on the host, and how it relates to the ROS 2 stack. Part III is a step-by-step guide to running a trained policy on the robot with LeRobot, written for someone doing it for the first time.
Versions this guide was written against (inside the container,
/root/ros2_ws/src):
Repo Commit Date enactic/openarm_ros2(main)b9d7a672026-10-06 enactic/openarm_descriptionc1030412026-10-02 enactic/openarm_canf340d4b(v1.4.0)2026-09-16 huggingface/lerobot(main, host, conda envlerobot)b863b42(v0.6.2)2026-10-08 ROS 2 Jazzy, ros2_control 4.x, MoveIt 2. Everything below was checked against these sources. Where behaviour could not be verified without hardware, it is marked ⚠ verify.
Contents
- 1Big picture
- 2The packages
- 3Robot model: joints, limits, frames
- 4ros2_control layer
- 5Environment and container
- 6Launch files and arguments
- 7Running in simulation (mock hardware)
- 8Commanding the robot (sim and real)
- 9MoveIt 2
- 10The physical robot: CAN setup
- 11The physical robot: zero calibration
- 12The physical robot: bringing it up with ROS 2
- 13Safety notes specific to this code
- 14Introspection and debugging cheat-sheet
- 15Troubleshooting
- 16Known issues and gaps in main
- 17What LeRobot is and where it sits
- 18Teleop hardware options
- 19Installation on zeus
- 20Conventions: LeRobot vs ROS 2
- 21Calibration and the shared motor zero
- 22Bus and port layout
- 23Step-by-step teleoperation
- 24Recording, training and running policies
- 25Switching between LeRobot and ROS 2
- 26Teleop safety notes
- 27LeRobot troubleshooting
- 28Enactic's own openarm_teleop
- 29Quick reference card
- 30What running a policy means
- 31What you need before the first run
- 32The lerobot-rollout command, flag by flag
- 33What happens when you run it
- 34Pre-flight checklist (every policy run)
- 35Your first run on zeus, step by step
- 36Tuning how the policy moves
- 37Measuring how well it works: episodic evaluation
- 38Making it better: corrections with the Minis (DAgger)
- 39Running a single-arm policy
- 40Big VLAs: RTC and running the model on another machine
- 41Policy troubleshooting
- 42Policy safety notes
- 43Policy cheat-sheet