Wrist motion recorded live
One 6-DoF IMU on each wrist runs at 200 Hz and ships as its own stream, measured during capture, not inferred from RGB.
Wrist trajectories

What a wrist trajectory delivery includes
One 6-DoF IMU on each wrist runs at 200 Hz and ships as its own stream, measured during capture, not inferred from RGB.
Per-joint 3D hand pose with a visibility flag, plus grasp and release events, add the finger-level detail the wrist path leaves out.
Sub-actions carry start and end times with a verb and a noun, on the same nanosecond timeline as every stream.
The skill spec names which wrist and hand fields you need, so the order matches your embodiment.
Definition
Egocentric video with wrist trajectories is first-person footage of a task, recorded from a head-mounted camera, delivered together with the motion of the wearer’s wrists over time. The wrist trajectory is the coarse path of the hand: where it went, how fast, and how it was oriented on the way to an object.
The site is specific about how that signal is produced. Firsthand records wrist-level motion as 6-DoF IMU streams, streams/imu_wrist_l and streams/imu_wrist_r, at 200 Hz, one IMU on each wrist. The site describes these streams as giving the coarse trajectory that finer hand-joint detail sits on top of. Hand joints, contact events and action segments are delivered alongside.
This page is for robot learning, VLA and humanoid teams that want to specify those fields and order them collected, fast and on demand, as a custom collection.
Why it matters
A policy trained from human demonstration needs an action signal, and human footage has no robot joint log. The site’s pretraining guide explains that the action has to be represented some other way, and that for egocentric video the two stand-ins are wrist-level pose and hand pose.
Wrist-level motion is also the more portable of the two. The guide notes that a wrist label does not encode any one gripper’s joint layout, so the same trajectory can act as a coarse target for a human arm, a parallel-jaw gripper or a dexterous hand. For fine manipulation, finger-level hand pose matters more, so a spec should state both requirements rather than assume one implies the other.
The second reason is provenance. NVIDIA’s EgoScale represents action as wrist-level 6-DoF motion plus hand pose and, per the site’s guides, produced those labels after capture with off-the-shelf SLAM and hand-pose estimation across a 20,854-hour corpus. Firsthand records labels on a synchronized rig during capture instead. The site treats both as legitimate.
Capture
Wrist motion comes from three Bosch BMI088 IMUs running at 200 Hz on the instrumented rig, one on the head and one on each wrist. Each is 6-DoF, bias-calibrated and hardware-timestamped on the same clock domain as the cameras and depth stream, writing int64 nanosecond timestamps.
Hand joints are tracked live against the captured depth stream, per hand, and stored as annotations/hand_joints: 21 joints per hand, in metres, in the head-camera frame, as float32 with shape [T, 2, 21, 3]. A per-joint hand_visible flag records occlusion rather than estimating through it. Two wrist-mounted cameras at 1920×1080 and 60 fps add a close optical view of each hand; they are a separate optional stream, covered below.
The site does not state how a wrist pose is computed from the IMU streams, which coordinate frame the wrist motion uses, or any accuracy, smoothing or filtering figure. Those details are set per program in the skill spec.
Fields
The field table lists what travels with the wrist streams, using the names and shapes the episode schema states. A dexterous-hand program will normally add hand joints and visibility.
Action segments use a taxonomy of 97 verbs and 512 nouns, with start and end to the frame, human-reviewed. Contact events are recorded on grasp and release alongside hand pose and depth.
Differentiation
Three nearby pages are easy to confuse with this one. A wrist trajectory is motion, not a picture: it comes from the wrist IMUs. Wrist camera data is the optical stream from the two wrist-mounted cameras, which show the hand and the object up close but are not a trajectory. Hand tracking data is the 21-joint skeleton of each hand, which describes finger shape in the head-camera frame.
In practice these combine. The differentiation table shows what each covers, so you can specify the fields you need rather than discover a gap later.
Synchronization
Every sensor runs in one PTP clock domain and exposures are hardware-triggered. The site states a 1.12 ms median offset, 1.94 ms at the 99th percentile and a 2.0 ms ceiling, measured as the absolute timestamp offset between the head camera and every other stream.
The streams run at different rates: head and wrist cameras at 60 fps, depth at 30 fps and the IMUs at 200 Hz. Wrist IMU samples therefore outnumber video frames for the same span, and the site advises resampling or windowing the IMU to the frame you need rather than assuming a one-to-one mapping. The head-camera frame count T indexes hand_joints, while action segments are start_ns and end_ns pairs on the same timeline.
Formats
All formats are exported from the same QA-passed episodes as projections of the canonical episode schema, so switching formats does not change what a wrist or hand label contains. The format table lists what the site states for each.
If you plan to work with the wrist IMU streams directly, ask for HDF5 or zarr: its streams/ and annotations/ groups mirror the episode schema and carry per-stream nanosecond timestamps. For the other formats, the site states how hand joints and actions are carried but not a dedicated wrist IMU key, so where the wrist signal sits in an RLDS, LeRobot or WebDataset delivery is set per program in the skill spec.
Quality
Quality is checked at the episode level, and the gates are machine-checked at ingest. They are a sync breach beyond the 2.0 ms ceiling for more than three consecutive frames, calibration drift beyond tolerance, the manipulated object out of frame for more than 15 percent of the episode, more than 35 percent invalid depth pixels in the manipulation region, an undocumented bystander, and a mismatch against the named skill spec.
Calibration brackets the session: per-camera reprojection must stay under 0.28 px RMS, and drift is written into the episode as calib_drift_mm. A human reviewer then checks each episode against the task spec. Rejected episodes go to the reject log, which ships with every batch, and are recaptured at our cost. Only validated hours are billed.
The site states no accuracy or error figure for wrist trajectories specifically, so none is quoted. Any tolerance on the wrist signal is set per program in the skill spec and confirmed on the first batch.
Skill spec
Every custom collection starts with a written skill spec: the tasks, the setting, the object set, the capture tier, the annotation depth and the accept criteria, signed before capture begins. For a wrist trajectory order it also names which wrist and hand fields you need, the delivery format you load from, and every detail the site does not state, as the final table shows.
Collection and licence
Paid, consented contributors perform the real task against your spec while wearing the rig. We do not capture robot or teleoperation data, and we do not capture at a customer’s own facility. Every episode is tied to a signed contributor release, and faces, plates and screens in frame are detected and irreversibly blurred at ingest, with a reviewer confirming the result.
The dataset ships under a perpetual, irrevocable, worldwide commercial licence that is non-exclusive by default, with the buyer owning the resulting dataset and exclusivity available. Where coverage is deep, the median time from signed spec to first validated batch is a median of 48 hours; where it is thin, turnaround runs three to four weeks while recruiting expands in parallel. Billing is per validated hour, not per raw hour recorded.
Getting started
Write down the tasks, environments and objects your model needs, list the wrist and hand fields you want, and name the delivery format. Most orders begin with a Spec Pilot: a small, fast first batch that proves the spec and accept criteria hold on real footage before you scale.
At a glance
Every collection runs through the same seven-stage end-to-end custom collection pipeline. End-to-end custom data collection is a managed service that takes an AI data need from problem to owned dataset in a single accountable pipeline.
Field map
| Field | What it encodes | Delivery field | Stated spec |
|---|---|---|---|
| Wrist motion | 6-DoF acceleration and rotation of each wrist | streams/imu_wrist_l, streams/imu_wrist_r | 200 Hz, Bosch BMI088, one per wrist |
| Hand joints | Per-joint 3D hand pose | annotations/hand_joints | float32 [T, 2, 21, 3], metres, head-camera frame |
| Joint visibility | Occlusion flagged per joint | annotations/hand_visible | Recorded alongside hand_joints |
| Contact events | Grasp and release | annotations/contact_events | Recorded with hand pose and depth |
| Action segments | Sub-action boundaries with verb and noun | annotations/action_segments | list[{start_ns, end_ns, verb, noun}]; 97 verbs, 512 nouns |
| Wrist cameras | Close optical view of each hand | streams/wrist_l, streams/wrist_r | 1920×1080 at 60 fps |
| Timestamps | Per-stream time | *_timestamp_ns | int64 nanoseconds, PTP domain |
| Calibration | Intrinsics and extrinsics | calibration/ | rms_reproj_px under 0.28 |
Differentiation
| Data type | What it is | Role of wrist motion |
|---|---|---|
| Wrist trajectory data (this page) | Wrist-level motion as a delivered signal | The primary field, with hand joints and actions beside it |
| Hand tracking data | 21-joint 3D hand skeleton with visibility flags | Finger shape in the head-camera frame; wrist motion is a separate stream |
| Wrist camera data | Two wrist-mounted 1080p/60 cameras | An optical view, not a trajectory |
| Action-labeled video | The full label set: hand pose, wrist trajectories, contacts, segments | One part of a broader bundle |
| Contact event data | Grasp and release timing | Gives the moment the wrist path ends in contact |
Formats
| Format | Wrist and hand fields as stated | Dedicated wrist IMU key stated? |
|---|---|---|
| HDF5 / zarr | streams/, annotations/ and calibration/ groups mirror the episode schema; int64 nanosecond timestamps | Yes, via streams/imu_wrist_l/r in the mirrored schema |
| RLDS | Step keys observation.hand_joints and action; int64 nanosecond timestamps per stream | No; set per program in the skill spec |
| LeRobot | observation.images.wrist_l/r, observation.state (hand joints flattened, then body joints), action | No; set per program in the skill spec |
| WebDataset | Per-sample keys head.jpg, wrist_l.jpg, wrist_r.jpg, depth.png, ann.json; ann.json carries hand_joints, action, contact_events | No; set per program in the skill spec |
| Rerun .rrd | Entities include world/hands; all streams on one nanosecond timeline | Not stated; for inspection, not training |
Stated vs per program
| Detail | Stated on the site | Set per program in the skill spec |
|---|---|---|
| Wrist motion source | 6-DoF IMU per wrist at 200 Hz | Not applicable |
| Wrist pose derived from the IMU | Not stated | Yes |
| Coordinate frame for wrist motion | Not stated | Yes |
| Accuracy, smoothing or filtering | Not stated | Yes |
| Wrist IMU key in RLDS, LeRobot, WebDataset | Not stated | Yes |
| Fields included | Wrist, hand joints, contacts, segments | Which of them your order needs |
FAQ
Sources
Tell us the tasks, environments and the wrist and hand fields your model needs, and the format you load from. A first validated batch arrives in a median of 48 hours where coverage is deep.