| name | move-hand-and-fingers |
| description | Poses the wrist and individual fingers/thumb to make hand shapes — fist, open/flat hand, pointing one finger, thumbs-up, peace sign, counting, OK sign — and to curl or extend specific fingers. Use whenever a command mentions fingers, thumb, fist, pointing (with a finger), gestures, grabbing/gripping, open or close the hand, wrist, knuckles, or counting on fingers. |
| category | gesture |
| disable-model-invocation | true |
move-hand-and-fingers
Atomic primitive for the wrist + fingers. Joints per side:
- Wrist:
{Side}Hand
- Fingers (3 segments each, proximal→distal):
{Side}{Finger}{1,2,3} where
Finger ∈ Thumb, Index, Middle, Ring, Pinky and Side ∈ Left, Right.
e.g. RightIndex1, RightIndex2, RightIndex3, LeftThumb1, ...
Angles are ABSOLUTE local euler [x,y,z] deg, XYZ. A finger's local +Y points
out toward the fingertip; curling toward the palm is +X.
Curl rule (the core idea)
- Straight/extended finger: each segment
[0,0,0].
- Curled finger: positive X per segment. Light curl ≈
[40,0,0]; firm curl ≈
[80,0,0] on segments 1 & 2 and [70,0,0] on segment 3 (tip).
- Thumb is special: it sits across the palm and keeps a sideways splay on Z.
Rest:
RightThumb1:[0,0,40], LeftThumb1:[0,0,-40]. Curl the thumb with X
while keeping a Z splay (~±40).
Ground truth: point_down_left_index (left index extended, rest curled)
LeftIndex1:[0,0,0], LeftIndex2:[0,0,0], LeftIndex3:[0,0,0],
LeftMiddle1:[80,0,0], LeftMiddle2:[80,0,0], LeftMiddle3:[70,0,0],
LeftRing1:[80,0,0], LeftRing2:[80,0,0], LeftRing3:[70,0,0],
LeftPinky1:[80,0,0], LeftPinky2:[80,0,0], LeftPinky3:[70,0,0],
LeftThumb1:[60,0,40], LeftThumb2:[50,0,0]
Mirror the Left→Right names to do the same on the other hand.
Hand-shape recipes (substitute the Side)
- Point with the index finger: index segments
[0,0,0]; curl Middle/Ring/Pinky
to [80,0,0]/[80,0,0]/[70,0,0]; curl thumb in (Thumb1:[60,0,40],
Thumb2:[50,0,0]). (To aim it, also use move-arm to raise the arm and
move-hand-and-fingers wrist; e.g. "point up" → raise the arm + extend index.)
- Fist / grab / make a fist: ALL four fingers
[80,0,0]/[80,0,0]/[70,0,0],
thumb folded across Thumb1:[55,0,40],Thumb2:[45,0,0].
- Open / flat / spread hand: every finger segment
[0,0,0], thumb back to rest
splay (RightThumb1:[0,0,40] / LeftThumb1:[0,0,-40]).
- Thumbs-up: curl Index/Middle/Ring/Pinky into a fist (as above), thumb
EXTENDED straight (
Thumb1:[0,0,40] right / [0,0,-40] left, Thumb2:[0,0,0],
Thumb3:[0,0,0]). Pair with move-arm/wrist so the thumb points upward.
- Peace / "two" / victory: Index & Middle straight
[0,0,0], splay them
slightly on Z (Index [0,0,-12], Middle [0,0,12]); curl Ring/Pinky + thumb.
- Counting N: keep N fingers straight (start Index, then Middle, Ring, Pinky),
curl the rest; thumb adds the 5th.
- OK sign: Index curled to touch thumb (Index
[55,0,0]/[55,0,0]/[40,0,0],
thumb [40,0,40]), Middle/Ring/Pinky extended [0,0,0].
Wrist ({Side}Hand)
Rest [0,0,0]. Small motions only: flex/extend via X (±~30), side-to-side flick
via Z (±~25, as in a wave). Example wave flick: RightHand:[0,0,25] ↔ [0,0,-25].
Worked Actions
- "point your right index finger" →
{"durationMs":700,"pose":{"RightIndex1":[0,0,0],"RightIndex2":[0,0,0],"RightIndex3":[0,0,0],"RightMiddle1":[80,0,0],"RightMiddle2":[80,0,0],"RightMiddle3":[70,0,0],"RightRing1":[80,0,0],"RightRing2":[80,0,0],"RightRing3":[70,0,0],"RightPinky1":[80,0,0],"RightPinky2":[80,0,0],"RightPinky3":[70,0,0],"RightThumb1":[60,0,40],"RightThumb2":[50,0,0]}}
- "make a fist" (right) →
{"durationMs":500,"pose":{"RightIndex1":[80,0,0],"RightIndex2":[80,0,0],"RightIndex3":[70,0,0],"RightMiddle1":[80,0,0],"RightMiddle2":[80,0,0],"RightMiddle3":[70,0,0],"RightRing1":[80,0,0],"RightRing2":[80,0,0],"RightRing3":[70,0,0],"RightPinky1":[80,0,0],"RightPinky2":[80,0,0],"RightPinky3":[70,0,0],"RightThumb1":[55,0,40],"RightThumb2":[45,0,0]}}
Limits
Finger flexion stays in 0..90 per segment; fingers don't bend backward or sideways
beyond a few degrees. Emit only the finger joints you change.