Skip to content

Motion control

Choose between target motion, application-driven Servo, and SDK-managed drag control.

TaskEntry pointBehavior
Hand or local target motionmove_to(), move_joint(), move_finger(), move_thumb()Returns MotionHandle; can be waited on or cancelled
Continuous high-rate targetsopen_servo()Application owns send timing, timeout, and shutdown
SDK-managed dragstart_servo_drag()SDK owns the drag-control loop
Teaching and replayTeach / Replay APIsRecords 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.

Help