Wrist trajectories

Egocentric Video with Wrist Trajectories

A policy learns where the hand went from the wrist, and how the fingers were shaped from the hand joints. We collect custom first-person video on demand against your written skill spec, with wrist motion recorded live on each wrist, 3D hand joints, contact events and action segments delivered beside it on one PTP clock.
Wrist motion
6-DoF IMU per wrist, 200 Hz
Hand joints
21 per hand, metres
Sync
Median 1.12 ms, 2.0 ms ceiling
License
Buyer-owned
A contributor wearing a head-mounted capture rig performs a manual task, beside a graphic of synchronized wrist-motion, hand-pose and action-segment layers.
Wrist motion is recorded live on the wrist and stamped on the same clock as the video, not estimated from RGB afterwards.

What a wrist trajectory delivery includes

The path of the hand, with the labels that explain it.

01

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.

02

Hand joints and contact beside it

Per-joint 3D hand pose with a visibility flag, plus grasp and release events, add the finger-level detail the wrist path leaves out.

03

Action segments on the same clock

Sub-actions carry start and end times with a verb and a noun, on the same nanosecond timeline as every stream.

04

You specify the fields

The skill spec names which wrist and hand fields you need, so the order matches your embodiment.

Definition

What is egocentric video with wrist trajectories?

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

Why do robot learning teams want wrist trajectory data?

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

How are wrist trajectories captured in a Firsthand collection?

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

Which action fields ship alongside wrist trajectories?

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

How is this different from wrist camera and hand tracking data?

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

How are wrist trajectories synchronized with video, depth and IMU?

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

What formats carry wrist trajectory fields?

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

How is wrist trajectory data quality checked?

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

What does the skill spec fix for a wrist trajectory order?

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

How is a custom wrist trajectory dataset collected and licensed?

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

How do you request a custom wrist trajectory dataset?

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

What you get.

Wrist motion
Bosch BMI088, 6-DoF, 200 Hz, one on each wrist
Wrist stream keys
streams/imu_wrist_l, streams/imu_wrist_r (HDF5 / zarr)
Hand joints
21 per hand, metres, head-camera frame, per-joint visibility flag
Also delivered
Contact events, action segments (97 verbs, 512 nouns), wrist cameras at 1920×1080/60
Clock
One PTP domain; median 1.12 ms, p99 1.94 ms, 2.0 ms ceiling
Formats
RLDS, LeRobot, WebDataset, HDF5 / zarr
Wrist pose derivation, coordinate frame, accuracy, smoothing
Set per program in the skill spec
Spec to first batch
a median of 48 hours (deep coverage)
License
Perpetual, irrevocable, buyer-owned, non-exclusive by default

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

Wrist and action fields with their delivery field names

Field names, shapes and rates as the episode schema and capture specs state them.
FieldWhat it encodesDelivery fieldStated spec
Wrist motion6-DoF acceleration and rotation of each wriststreams/imu_wrist_l, streams/imu_wrist_r200 Hz, Bosch BMI088, one per wrist
Hand jointsPer-joint 3D hand poseannotations/hand_jointsfloat32 [T, 2, 21, 3], metres, head-camera frame
Joint visibilityOcclusion flagged per jointannotations/hand_visibleRecorded alongside hand_joints
Contact eventsGrasp and releaseannotations/contact_eventsRecorded with hand pose and depth
Action segmentsSub-action boundaries with verb and nounannotations/action_segmentslist[{start_ns, end_ns, verb, noun}]; 97 verbs, 512 nouns
Wrist camerasClose optical view of each handstreams/wrist_l, streams/wrist_r1920×1080 at 60 fps
TimestampsPer-stream time*_timestamp_nsint64 nanoseconds, PTP domain
CalibrationIntrinsics and extrinsicscalibration/rms_reproj_px under 0.28

Differentiation

Wrist trajectories vs the neighbouring data types

What each related collection page covers, and the role wrist trajectories play in it.
Data typeWhat it isRole of wrist motion
Wrist trajectory data (this page)Wrist-level motion as a delivered signalThe primary field, with hand joints and actions beside it
Hand tracking data21-joint 3D hand skeleton with visibility flagsFinger shape in the head-camera frame; wrist motion is a separate stream
Wrist camera dataTwo wrist-mounted 1080p/60 camerasAn optical view, not a trajectory
Action-labeled videoThe full label set: hand pose, wrist trajectories, contacts, segmentsOne part of a broader bundle
Contact event dataGrasp and release timingGives the moment the wrist path ends in contact

Formats

How each format carries wrist and hand fields

What the site states per format; unstated details are set per program.
FormatWrist and hand fields as statedDedicated wrist IMU key stated?
HDF5 / zarrstreams/, annotations/ and calibration/ groups mirror the episode schema; int64 nanosecond timestampsYes, via streams/imu_wrist_l/r in the mirrored schema
RLDSStep keys observation.hand_joints and action; int64 nanosecond timestamps per streamNo; set per program in the skill spec
LeRobotobservation.images.wrist_l/r, observation.state (hand joints flattened, then body joints), actionNo; set per program in the skill spec
WebDatasetPer-sample keys head.jpg, wrist_l.jpg, wrist_r.jpg, depth.png, ann.json; ann.json carries hand_joints, action, contact_eventsNo; set per program in the skill spec
Rerun .rrdEntities include world/hands; all streams on one nanosecond timelineNot stated; for inspection, not training

Stated vs per program

What the site states and what is set per program

Details not stated on this site are agreed in the written skill spec and confirmed on the Spec Pilot batch.
DetailStated on the siteSet per program in the skill spec
Wrist motion source6-DoF IMU per wrist at 200 HzNot applicable
Wrist pose derived from the IMUNot statedYes
Coordinate frame for wrist motionNot statedYes
Accuracy, smoothing or filteringNot statedYes
Wrist IMU key in RLDS, LeRobot, WebDatasetNot statedYes
Fields includedWrist, hand joints, contacts, segmentsWhich of them your order needs

FAQ

Egocentric video with wrist trajectories, answered.

What is egocentric video with wrist trajectories?
First-person task footage delivered with the motion of the wearer’s wrists over time. On Firsthand’s rig that is a 6-DoF IMU stream on each wrist at 200 Hz, delivered beside hand joints, contact events and action segments.
How are the wrist trajectories produced?
They are recorded live during capture by an IMU on each wrist, not estimated from RGB afterwards. How a wrist pose is derived from those streams is set per program in the skill spec.
Is a wrist trajectory the same as hand pose?
No. Hand pose is the per-joint 3D position of the fingers, 21 joints per hand. Wrist motion is the coarse path of the hand. A dexterous task usually wants both; simple pick-and-place may need little more than the wrist.
Is this the same as wrist camera data?
No. Wrist cameras are an optical stream that shows each hand and the object up close. A wrist trajectory is motion from the wrist IMUs. You can order either or both.
How closely are wrist streams synchronized with the video?
The site states a 1.12 ms median offset, 1.94 ms at the 99th percentile and a 2.0 ms ceiling, with every stream on one PTP clock domain. The IMUs run at 200 Hz against 60 fps video, so resample or window them to the frame you need.
Which format should I choose to work with wrist data?
HDF5 or zarr if you want the wrist IMU streams directly, since its groups mirror the episode schema. Where the wrist signal sits in RLDS, LeRobot or WebDataset is set per program in the skill spec.
Is there an accuracy figure for the wrist trajectory?
The site states none for wrist trajectories, so none is quoted. Any tolerance you need is set in the skill spec and confirmed on the first batch.

Sources

Where are the wrist action and format claims documented?

Request a custom wrist trajectory dataset.

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.