Part I: The ROS 2 stack · §16 of 43
openarm.reposonly listsopenarm_can.openarm_descriptionmust be cloned separately, and the repo’s.docker/Dockerfilenever runsvcs import(you patched both).description_filelaunch argument is declared but unused. Both launch files default toarm_type=openarm_v2.0.arm_prefixnamespacing refers toopenarm_bimanual_controllers_namespaced.yaml, which doesn’t exist.- MoveIt gripper controllers are
GripperCommandbut the bringup runs gripper JTCs (§9). openarm_hardwareuses the Humble-eraon_init(HardwareInfo)signature (deprecation warnings on Jazzy). It doesn’t implementon_shutdown/on_error.return_to_zero()sends the gripper0.044as a raw motor angle (no joint→motor conversion), so during activation the gripper goes to ≈ closed, not “open”. After activation, gripper commands are converted correctly. (The zeus patch ramps the gripper but keeps this target.)return_to_zero()(upstream) first sends a full-stiffness command to 0 before reading the positions, then ramps to 0 in only 2 s, and never checks that the motors replied or how far the arm is from zero. Patched on zeus (§4).OpenArmHWsends the torque-on command only inon_activate: motors powered later stay disabled while ROS keeps commanding them.ros2_control_node(Jazzy) can segfault on Ctrl+C inJointTrajectoryController::updatebefore the hardware is deactivated, leaving motors enabled (§12.4).config/arm/joint_limits.yamldoesn’t match the limits the URDF actually uses for joints 1–2 (per-arm offsets and mirroring inopenarm_arm.xacro), which is easy to misread (§3).openarm-can-cli:monitor/diagnose/motor_statusenable the motors,monitordecodes all motors as DM4310,set_zerodefaults to all 8 motors (§10.5).- Gripper joint↔motor mapping is a linear approximation (source comment: “the mappings are approximates”). Gripper velocity/effort states are always 0.
*_forward_velocity_controlleris declared but never spawned. Because MIT mode always includes thekp·(q_cmd − q)term andq_cmdkeeps its last value, using it alone doesn’t give true velocity control. Don’t use it on hardware without modifyingOpenArmHW.- No gravity compensation (
tau_ff = 0). - JTC tolerances all 0, so failures are never detected (§4).
- All four bringup JTCs set
interpolation_method: none, so single-point and sparse goals step to the target aftertime_from_startinstead of moving there. Changed tosplineson zeus (§4). - The Python calibration tools need the
openarm_canPython bindings, whichcolcon builddoesn’t produce.