--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. Arm gains and stiffness live on the nested axol config and IK weights on kinematics — the same fields as teleop’s Robot and Kinematics parameters, with the same --axol. / --kinematics. prefixes. The command’s own flags are listed below.
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.
Lowering --speed alone does not slow a leg that is mostly reorientation, since --ang_speed may set its pace. --speed_scale (the Speed scale slider in the control panel) scales both, along with the moves to the first waypoint and back to rest, so it is the one knob for trying a new path slowly.
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.
