| name | duck-under |
| description | Ducks low and moves forward under a low obstacle, then stands back up, via a translating sequence that dips root.y. Use when a command mentions duck under, go under, limbo under low, crouch under the bar, or pass beneath something. |
| category | locomotion |
| disable-model-invocation | true |
| subskills | ["bend-knees","move-torso","balance-and-posture"] |
duck-under
Drop into a deep crouch (root.y~-0.4), travel forward under the obstacle, then rise.
Composes: bend-knees + move-torso + balance-and-posture
How
- Use a
sequence with loop:false. Frame root is ABSOLUTE; compute the travel axis from state.position+state.faceDeg (0=+Z, 90=+X). The example assumes origin facing +Z.
- Deep crouch with a forward torso (
Spine+X~30) and bent legs; advance z; then return to rest and root.y:0.
durationMs ~1800.
Example
- "duck under it" ->
{"durationMs":1800,"say":"Ducking under.","sequence":{"loop":false,"frames":[{"t":0,"pose":{"LeftUpLeg":[55,0,0],"LeftLeg":[80,0,0],"RightUpLeg":[55,0,0],"RightLeg":[80,0,0],"Spine":[30,0,0]},"root":{"y":-0.4,"z":0.3}},{"t":0.5,"pose":{"LeftUpLeg":[55,0,0],"RightUpLeg":[55,0,0],"Spine":[30,0,0]},"root":{"y":-0.4,"z":0.9}},{"t":1,"pose":{"LeftUpLeg":[0,0,180],"LeftLeg":[0,0,0],"RightUpLeg":[0,0,180],"RightLeg":[0,0,0],"Spine":[0,0,0]},"root":{"y":0,"z":1.4}}]}}
Limits & posture
Keep ≥1 foot grounded except at a jump's airborne apex; stay inside human joint ranges and keep weight over the support — see balance-and-posture.