Skip to content

Debug Commands

The controller accepts a set of text commands for running individual calibration steps, bench tuning, and diagnostics without going through a full calibration or pick and place.

Sending a command

Open the menu and choose Calibration and Maintenance. At the bottom is the Debug Command box. Type a command and press Send.

Most commands report their progress and results in the log, so open Toggle Log Panel from the same menu before sending one. An unrecognized command is silently ignored.

Commands marked motion task move the robot. Starting one cancels whatever motion is already running. Make sure the robot has room before sending one.

Commands that save files write them into the directory stringman-headless was started from.

Calibration steps

These run a single piece of the full calibration on its own, which is useful for re-tuning one thing or for working out which step fails in a particular room.

Command Description
spincal Calibrate the relationship between the wrist angle and the room's frame of reference. The gripper must be over the origin card.
spin-recover Motion task. Re-measure the same thing as spincal without the origin card, for when the card has been put away. The gantry flies a slow 40 cm circle once each way while the gripper camera watches the floor slide past. Park the gripper 0.25 to 2 m above floor with some visible texture, with room beside it towards the middle of the room. Swing cancellation is turned off while it runs, then re-tested with the corrected value and turned back on only if it damps swinging. Running it a second time should find almost nothing left to correct.
fingercal Calibrate the finger open and closed positions by closing the fingers until they meet. Takes up to 20 seconds.
swinglatencycal Motion task. Find the swing cancellation latency that damps swinging best, by trying several values and measuring the leftover swing for each. Saves the result to the config.
swinglatency SECONDS Set the swing cancellation latency directly, e.g. swinglatency 0.3, and save it to the config.
polecal [SECONDS] Motion task. Let the gripper swing freely and measure its effective pendulum length from the gyro. Records for 20 seconds unless another duration is given. Use after changing the pole or anything that moves the gripper's mass. Run it hanging clear, with room to swing.
findorigin Motion task. Search for the origin card and park where the gripper camera can see it. Starts low over the card's estimated position and widens the search upward, then in a spiral.
centerorigin Motion task. Nudge the gantry until the origin card is centered under the gripper camera. The card must already be in view.
eyelets Motion task. Collect eyelet calibration data using the currently calibrated anchor poses. The gantry moves through a diamond pattern with only the eyelet lines tight.
gripcards Motion task. Fly the gripper over each calibration card at several heights, recording what the gripper camera sees. Saves the survey to gripper_card_obs.pkl. The calibration cards must be in place.

Gripper and wrist

Command Description
upright Motion task. Raise the gripper slowly until its pole is within 10 degrees of vertical. Gives up after 1 m of travel or 6 seconds, stops the spools, and shows a popup.
reset_wrist Turn the wrist one revolution each way to leave the wire with no net twist, then re-establish the neutral wrist position.
untwist TURNS Turn the wrist through whole revolutions to relieve accumulated cable twist, e.g. untwist 2.
spind Print the gripper camera's current rotation relative to the room, with intermediate values, to the controller's terminal (not the log panel).

Lines and tension

Line numbers run from 0 to 3. Lines 0 and 1 are the two spools on anchor 0, and lines 2 and 3 are the two spools on anchor 1.

Command Description
stow Turn off tension regulation, reel in every line until tight, then disable the motors. If they don't reel all the way in, turn torque on and run it again.
tensionreg on / tensionreg off Enable or disable onboard tension regulation on both spools of every anchor. The same as the Tension reg toggle in the menu.
holdtension LINE NEWTONS Stop one line and make its anchor hold it at a fixed tension, e.g. holdtension 2 5. For bench testing.
holdtension LINE off Clear the tension hold on that line.
setvar KEY VALUE Send a live config override to every connected component, e.g. setvar MAX_ACCEL 2. Numbers are sent as numbers and anything else as text. Used for bench tuning onboard constants without restarting firmware. The override is not saved, and is lost when the component reconnects or restarts.
savevar KEY VALUE The same as setvar, but also saves the override to the robot config, so it is sent again every time a component connects.
spoollog / spoollog off Start or stop recording everything the spools report, where the gantry is, and what each line was told to do, to spool_diag_TIMESTAMP.jsonl. Anchors with recent firmware add raw torque readings while it runs. Useful when reporting a problem with line tension or derailment.

Diagnostics and maintenance

Command Description
pull_logs Download recent logs from every connected component into pulled_logs_TIMESTAMP.zip, one file per component named by its IP address. Includes the thermal watchdog log when a component has one. Attach this when reporting a problem.
sync_timezone Set every connected component's timezone to match the computer running the controller, so log timestamps line up.
linear Motion task. Measure how level the gantry stays while moving. Flies to the route source at 1.5 m, pauses, then crosses to the route destination while comparing the laser rangefinder against the ideal constant height. Choose a source and destination with a clear path between them first. Aborts if it comes within 0.2 m of the floor or 0.4 m of the ceiling.
goalseek Motion task. Measure how accurately the gripper parks over a floor tag. Cycles through the gamepad, trash, hamper and toys tags several times each and reports the RMS error in cm. The tags must have saved positions.
ferry Motion task. Repeatedly grasp objects at the hamper tag and drop them at the trash tag, until stopped.
droppoint Run the drop point model on its own and show where pick and place would drop, without picking anything up. Send it again to stop.

Grasp model

These run the visual servoing grasp model outside of pick and place, to check how a model behaves.

Command Description
servowatch Motion task. Run the model and show its output on the gripper camera overlay without moving anything. Park over an object and check where the arrow points. Runs until stopped.
servocenter Motion task. Let the model steer sideways and turn the wrist only, with no descent and no finger movement. Park somewhere safe above an object and watch whether it settles over it. Runs until stopped.
servograsp Motion task. Make one full grasp attempt from the current position. Park roughly over the object first.
servoloop Motion task. Grasp, drop, and repeat, keeping score of the hit rate, until stopped.

Training data capture

These capture camera frames for building synthetic training data. They save to the plates directory.

Warning

Run these with the gripper's face cover removed. The gripper can overheat with the cover on during a long capture.

When floorplates or objectplates finishes, the wrist turns back to where it started. It eases in and out of that turn so as not to set the gripper swinging, but it can be up to a full revolution.

Command Description
floorplates Motion task. Capture bare floor at a range of heights. Park the gripper over clean, clear floor first. Only height and wrist angle change.
objectplates Motion task. Capture one object on the green board. First place the object's intended grasp point directly under the camera and turn the wrist to the ideal grasping angle.
fingerplates Motion task. Capture frames used to cut out the fingers from the camera image, turning the wrist at each finger angle. Park the gripper over the green backdrop first. Anything under the fingers that isn't green will be mistaken for part of the gripper.