Guide
3D Hand Pose Estimation for Robotics
Short answer
3D hand pose estimation recovers the metric 3D positions of hand and finger joints across a clip, per hand, so a manipulation policy can learn exactly how a hand is shaped around an object at contact rather than just that a hand is present. Firsthand delivers it as handJoints[2][21][3] with per-joint visibility flags, aligned to depth and RGB.
Last reviewed:
What is 3D hand pose estimation?
Hand pose estimation recovers the 3D positions of hand and finger joints across a clip, usually as a per-frame skeleton in metric units. For manipulation, it is the difference between a model knowing a hand is present in frame and knowing exactly how that hand is shaped around an object at the moment of contact.
On its own, RGB video leaves a model to infer 3D hand structure it often cannot see reliably through occlusion, motion blur, and self-contact between fingers. 3D hand pose data replaces that inference with a measured joint skeleton, tracked separately for each hand.
Why do manipulation policies need it?
Manipulation policies need the fine geometry of grasp and release: finger spread at approach, contact points at grip, and the release trajectory as an object is set down. A dataset that only labels object bounding boxes and a coarse hand mask cannot teach that geometry.
Two-handed and bimanual tasks raise the bar further. Per-hand pose with visibility flags lets a policy learn coordination and handoff between hands, including which hand is occluded or out of frame at any given instant, rather than collapsing both hands into one signal.
How is 3D hand pose delivered?
- Structure
- handJoints[2][21][3] — two hands, 21 joints per hand, 3D coordinates per joint
- Units
- Metric, in the head-camera reference frame
- Per-joint flag
- Visibility flag on every joint, so occlusion is explicit rather than guessed
- Alignment
- Aligned to depth and RGB on the same hardware clock as the rest of the capture
- Format
- RLDS and LeRobot, matching the rest of the delivered episode
3D hand pose data as delivered
How do you spec a dataset for 3D hand pose?
A skill spec that calls for 3D hand pose should name the tasks where grasp and contact geometry actually matter, whether one or both hands need tracking, and any occlusion-heavy moments (reaching into a container, working behind another object) that should be captured deliberately rather than avoided.
Bimanual tasks are the clearest case for per-hand pose: coordination and handoff between two hands cannot be learned from a single collapsed hand signal.
FAQ
3D Hand Pose Estimation for Robotics, answered.
01What is the difference between hand detection and hand pose estimation?
Hand detection locates a bounding box or mask around a hand in frame. Hand pose estimation goes further, recovering the 3D position of every finger and hand joint, so the model knows the exact shape and orientation of the hand, not just that one is present.
02Does Firsthand track both hands separately?
Yes. 3D hand pose is delivered as handJoints[2][21][3] — two hands, 21 joints each, in metric 3D — with an independent visibility flag per joint, so each hand is tracked on its own even during bimanual or asymmetric two-handed work.
03What happens when a hand is occluded?
Every joint carries a visibility flag. Occluded joints are marked as such rather than silently interpolated, so a model training on the data can distinguish a genuinely observed joint position from one that was not visible in that frame.
04What reference frame is hand pose data delivered in?
Hand joint positions are delivered in metric units in the head-camera frame, aligned to the depth and RGB streams captured on the same hardware clock, so all three signals stay consistent frame to frame.
05Can 3D hand pose data be captured on demand for a specific task?
Yes. Hand pose is captured as part of a normal episode alongside video, depth, and other synchronized streams, so it can be specified for any task in a custom collection, including bimanual manipulation where per-hand tracking matters most.
Sources
Where is this documented?
- RLDS (GitHub) (opens in a new tab)Reinforcement Learning Datasets format used for delivery. github.com
- LeRobot (GitHub) (opens in a new tab)Hugging Face robot learning framework and dataset format. github.com
Check it against the sample pack.
40 episodes across 4 environments, delivered in the exact schema these guides describe.