| name | move-arm |
| description | Poses one or both arms by rotating the shoulder/upper-arm and bending the elbow — raising forward, out to the side, or overhead, reaching, and folding the forearm. Use whenever a command mentions arms, raising/lifting/lowering an arm or hand, reaching, stretching out, elbows, shrugging, crossing arms, flexing/biceps, or holding the arms in a position. |
| category | upper-body |
| disable-model-invocation | true |
move-arm
Atomic primitive for the arm chain. Per side the joints are
{Side}Shoulder, {Side}UpperArm, {Side}Forearm, {Side}Hand
(Side = Left or Right). The shoulder (gleno-humeral) joint is the
UpperArm; the elbow is the Forearm. Leave Shoulder at its rest
value unless shrugging. (For wrist/finger detail use move-hand-and-fingers.)
Angles are ABSOLUTE local euler degrees [x,y,z], applied XYZ. Each arm joint's
local +Y points down the bone toward the hand, so arm axes are NOT
world-aligned — trust the calibrated numbers below over world intuition.
Rest (arms hanging straight down)
LeftUpperArm:[0,0,90], RightUpperArm:[0,0,-90], both *Forearm:[0,0,0].
Raising in the FRONTAL plane (down ↔ side ↔ overhead) — controlled by Z on UpperArm
This is the calibrated axis. Ground truth from tpose and arms_up:
| Posture | LeftUpperArm | RightUpperArm |
|---|
| down (rest) | [0,0,90] | [0,0,-90] |
| straight out to the side, horizontal (T-pose) | [0,0,0] | [0,0,0] |
| straight up overhead (arms_up) | [0,0,-90] | [0,0,90] |
Interpolate for partial lifts: left side at 45° above horizontal ≈ [0,0,-45];
right ≈ [0,0,45]. Sign rule: to lift, the LEFT upper-arm Z goes more
NEGATIVE, the RIGHT upper-arm Z goes more POSITIVE.
Raising FORWARD (in front of the body) — X on UpperArm from the T-pose base (z=0)
- Arm straight forward, horizontal (pointing ahead):
LeftUpperArm:[90,0,0],
RightUpperArm:[90,0,0].
- Arm forward and up ~45° (reach toward something high in front):
LeftUpperArm:[90,0,-45], RightUpperArm:[90,0,45].
- Arm reaching backward: use
x:-90.
Bending the ELBOW — Z on Forearm
From wave_right (RightUpperArm:[0,0,-10], RightForearm:[0,0,90]):
- straight elbow:
*Forearm:[0,0,0].
- elbow bent ~90° (forearm folds up/in):
RightForearm:[0,0,90],
LeftForearm:[0,0,-90] (mirror sign).
- fully folded (hand to shoulder): right
~[0,0,140], left ~[0,0,-140].
Worked Actions
- "raise your right arm to the side":
{"durationMs":700,"pose":{"RightUpperArm":[0,0,0]}}
- "raise both arms straight up":
{"durationMs":700,"pose":{"LeftUpperArm":[0,0,-90],"RightUpperArm":[0,0,90]}}
- "reach your left arm forward":
{"durationMs":700,"pose":{"LeftUpperArm":[90,0,0],"LeftForearm":[0,0,0]}}
- "bend your right elbow":
{"durationMs":600,"pose":{"RightForearm":[0,0,90]}}
- "flex your right bicep": upper arm out + elbow folded ->
{"durationMs":800,"pose":{"RightUpperArm":[0,0,30],"RightForearm":[0,0,130]},"say":"Check it out."}
Limits & posture
Keep shoulder elevation within ~|180|, elbow flexion 0..150 (elbows don't
hyperextend). For symmetric commands ("raise both arms") mirror the Z signs as in
the table. Only emit the joints you change; omit the rest.