Motion control
Choose between target motion, application-driven Servo, and SDK-managed drag control.
| Task | Entry point | Behavior |
|---|---|---|
| Hand or local target motion | move_to(), move_joint(), move_finger(), move_thumb() | Returns MotionHandle; can be waited on or cancelled |
| Continuous high-rate targets | open_servo() | Application owns send timing, timeout, and shutdown |
| SDK-managed drag | start_servo_drag() | SDK owns the drag-control loop |
| Teaching and replay | Teach / Replay APIs | Records and replays full-hand trajectories |
Do not emulate Servo by repeatedly calling move_to(). Target operations may preempt one another, so check the final OperationState.
Preflight
- Match every target array to
joint_layout. - Read State and preserve joints that should not change.
- Check Health and motor fault codes.
- Pass degree, rpm, and mA values directly; do not apply register scaling.
- Use a bounded wait for every motion.
Wait for the result
python
handle = await hand.motion.move_joint(
joint_index=0,
target_position=20.0,
duration=1.0,
)
result = await handle.wait(timeout=3.0)
if result != sdk.OperationState.Succeeded:
raise RuntimeError(f"Motion ended in {result}")Timeout only stops the caller from waiting; it does not guarantee that physical motion stopped. For Indeterminate, read State before retrying. See the Motion API.