--min_travel and --min_rotation the leg pins that arm where it is instead.
Arm stiffness is the robot’s own, shared with every other operation — the control panel’s setting, or --axol.left_stiffness / --axol.right_stiffness. A stiffer arm holds a planned path more closely; a softer one sags off it, but rings less when something disturbs it and yields if the path meets an obstacle. Hand-guiding is unaffected either way, since gravity compensation zeroes the position gain on free joints.
This command is configured via draccus — see Command configuration.
Driving a session
On the terminal, single keys on stdin:
The same actions are buttons in the control panel — the running session publishes them, so a path can be taught and replayed with no terminal at all.
Grasping
A gripper is open or closed, nothing in between, and each one is worked on its own —[ for the left, ] for the right — so one arm can carry something while the other is still being guided. Both start open. Whatever state a gripper is in when you record is what that waypoint asks for, so a path always says what both grippers should be doing:
torque_limit, shared with every other operation and settable from the control panel. Force only exists where a command asks for more travel than the object allows, which is why closing records fully closed rather than wherever the fingers stopped against the object — reproducing the stall position would bring them to rest touching it under no load at all. Set the torque for the object; the opening is only ever open or closed.
Flags
Choosing a speed
The default puts the gripper at the same 0.47 m/s the robot already reaches driving itself between poses, and the straight lines are just as straight at any speed — the solver samples a leg by distance travelled, not by clock, so its accuracy does not change when you speed it up. What changes is acceleration, which grows with the square of the speed: 2 m/s² at the default, 8 at--speed 0.5, 16 at --speed 0.7. Past that a leg is over in a fraction of a second and the dwell at each waypoint dominates the cycle anyway.
The waypoint file
Waypoints are stored as the joint angles the arms actually reported, so a path is exact and can be edited or checked into a repository:SHOULDER_1 … WRIST_3, joint frame, 0 = rest) followed by the gripper normalised to [0, 1]. The Cartesian pose the gripper travels through is derived from these by forward kinematics at planning time. The joint angles are what the arm reported; the gripper is the opening to command there — 0.0 for a grasp, whatever the fingers close to — so editing a path by hand means editing intent, not a measurement.
Playback starts by moving to the first waypoint with a collision-aware joint-space move, and parks at the rest pose when the path finishes or is stopped. Quitting straight out of teaching skips that move — your hands are on a limp arm, so nothing stiffens up and drives home.
