Control Joints Directly
goto and trajectory: per-joint targets, with the walking policy off.
When a gait won't do — a pose, a gesture, your own controller — drive the joints yourself.
Two verbs: goto moves to a pose for you,
trajectory sends one setpoint and expects you to
clock the next.
A trajectory turns the balance policy off
Every joint goes under position control and nothing keeps the robot upright. On a standing biped, use these only with the robot supported — a crane, a stand, a hand — or with gains you know hold the legs. A fall latches a fault-DAMP that lasts until the firmware restarts.
Move to a Pose
goto interpolates from where the robot is to where you asked, minimum-jerk, clocking
setpoints from a background thread at hz:
robot.goto(pose, duration=2.0) # blocks until every joint is within tolerance
robot.goto(pose, duration=2.0, wait=False) # returns immediatelypose is one radian value per motor in firmware order — robot.info.dof of them, named in
robot.info.joint_names. It holds the pose after arriving, by re-sending it, until another
verb takes over. goto refuses to plan from a reported pose older than half a second.
A goto is fenced: any verb from any thread — damp(), stand(), a velocity — stops the
goto thread before its next setpoint leaves.
Stream Your Own Setpoints
trajectory is the raw form. You clock it:
import time
for target in my_controller: # 50 Hz
robot.trajectory(target)
time.sleep(0.02)Two things will bite you:
- Keep sending. The edge DAMPs a trajectory about two seconds after the last setpoint. A stalled loop is a limp robot, not a frozen one.
kp=0is not "no gain". The firmware substitutes its own damping constants, which is limp. Leavekp/kdasNoneto use the robot's own per-joint gains.
Whoever Streams, Owns
A loop you clock yourself is not fenced the way goto is. While it streams, your loop is
the controller: a mode verb sent from another thread is overwritten by your next setpoint, and
nothing raises. Stop streaming, then send the verb. In an emergency, kill the process: the
edge DAMPs by itself about two seconds after the last setpoint. See
Safety.
Next
- Record a Session — capture what you sent and what came back
- Reference — full signatures
How is this guide?