Skip to content
简体中文

Motion Control

Run target trajectories, streaming servo control, managed drag, teaching, and replay.

Available for supported 21 DOF products. Motion on PB1, PT1, DB1, and DT1 is unverified.

Check the product support matrix

Run these fragments with a connected hand. Python runs inside an async function; C++ requires revo3/revo3.hpp, iostream, vector, chrono, and stdexcept; handle SdkError at the application boundary.

state = await hand.state.snapshot()
target = list(state.positions_deg)
handle = await hand.motion.move_to(target, duration=1.0)
result = await handle.wait(timeout=3.0)
print(result)
const auto state = hand.state().snapshot();
const auto layout = hand.joint_layout();
if (!layout) throw std::runtime_error("Joint layout is unavailable");
std::vector<float> target(
state.motors.positions_deg,
state.motors.positions_deg + layout->joint_count);
auto handle = hand.motion().move_to(target, std::chrono::seconds(1));
const auto result = handle.wait(std::chrono::seconds(3));
Operation Parameters Returns
Motion.move_to(target, duration) Target angles (degrees); duration (Python seconds / C++ duration) OperationHandle
OperationHandle.wait(timeout) Wait limit (Python seconds / C++ duration) OperationState

Find full signatures, defaults, units, and Python / C++ differences by operation:

A trajectory and ServoSession cannot control the same Hand concurrently; conflicts return ControlConflict. A wait timeout or Indeterminate result does not prove motion has stopped. Read actual state before recovery.

Errors, Timeouts, and Retries · Language Binding Differences