Drive the duck
duck_driveCommand the simulated robot's walking velocity (forward, left, yaw) and optionally run it for a set duration, then stop and return the resulting state.
Instructions
Set the walking velocity intent. vx: forward m/s (max ±0.3; the policy tracks ~half the commanded speed, so command 0.25+ for a brisk walk), vy: leftward m/s (max ±0.2), wz: counterclockwise yaw rate rad/s (max ±1.5). Nonzero engages the walking policy; all-zero hands back to standing.
With duration_s (max 10): drive for that long, then stop and return the resulting state — one call instead of drive/poll/stop. Without it the intent persists until changed: the robot keeps walking between your tool calls, and the sim runs in real time, so returned state is already slightly stale when you read it.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| vx | Yes | ||
| vy | No | ||
| wz | No | ||
| duration_s | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ok | Yes | ||
| rpy_deg | Yes | Trunk orientation [roll, pitch, yaw], degrees | |
| sitting | Yes | ||
| upright | Yes | False once tilted past ~45 deg. There is no self-recovery policy: if the duck falls, use duck_reset. | |
| vel_cmd | Yes | Current sticky velocity intent [vx, vy, wz] | |
| behavior | Yes | Episodic trick currently running, else null | |
| position_m | Yes | Trunk world position [x, y, z], meters | |
| sim_time_s | Yes | Sim clock, seconds. The sim runs in real time; this snapshot is stale on arrival. | |
| ground_pick | Yes | ||
| vel_body_mps | Yes | ||
| yaw_rate_rps | Yes | Yaw rate, rad/s, counterclockwise positive | |
| active_policy | Yes | Which ONNX policy is driving: standing, walking, sit, ground_pick, kick_left/right, roulade | |
| ball_position_m | No | Ball world position [x, y, z], meters (ball scene only) | |
| trunk_height_mm | Yes | Trunk height above floor, mm (~116 standing) |