Calibrated collection

Calibrated Egocentric Video Data

Footage is only half of what a robot-learning team needs; the other half is the camera geometry that lets you use it. We collect custom first-person video on demand against your written skill spec and deliver it with per-camera intrinsics, extrinsics between the head, wrist and depth streams, and timestamps on one PTP clock. Every episode is gated on calibration before it ships.
Delivered
Intrinsics + extrinsics per episode
Reprojection gate
RMS under 0.28 px
Sync
Median 1.12 ms, 2.0 ms ceiling
First batch
Median 48 h in deep-coverage settings
A head-mounted egocentric rig capturing synchronized RGB, depth and IMU streams during a manipulation task.
Head, wrist and depth streams are calibrated to one reference frame and stamped on one clock before they are delivered.

What a calibrated delivery includes

Footage with the geometry attached.

01

Intrinsics for every camera

Each camera on the rig, head and wrist, gets its own independent intrinsic solve, so lens distortion can be modeled per camera rather than assumed.

02

Extrinsics in one frame

Every camera is expressed relative to the head camera, whose frame is the identity. Wrist and head views can be related to each other directly.

03

Checked at both ends of capture

An opening and a closing solve bracket the capture. The drift between them is measured, written to episode metadata and gated before the episode ships.

04

On the same clock as the pixels

All streams are hardware-triggered onto one PTP clock domain, with int64 nanosecond timestamps per stream, so calibrated geometry and timing agree.

Definition

What is calibrated egocentric video data?

Calibrated egocentric video data is first-person task footage delivered together with the calibration of the cameras that recorded it. On Firsthand’s rig that means per-camera intrinsics (focal length, principal point and lens distortion coefficients), extrinsics that place the second head camera and both wrist cameras relative to the head camera, depth registered to the head-camera frame, and per-stream timestamps on one PTP clock.

This page sells the collection: fast, on-demand, custom collection scoped to your skill spec, with calibration delivered as part of every episode. It is not the how-to and it is not the definition. The guide on calibrating head and wrist cameras teaches the method, and the camera calibration glossary entry defines the terms. Here the focus is what you receive and how to order it.

Why it matters

Why does camera calibration matter for robot learning?

A manipulation policy has to relate what the head cameras see to what the wrist cameras see. The site’s calibration guide puts it this way: what matters is knowing exactly how a pixel in one camera’s frame relates to a pixel in another camera’s frame, so that hand pose, object pose and depth all agree across every stream.

The site’s glossary states the cost of getting it wrong: uncalibrated or drifted camera parameters make depth, hand pose and object pose unreliable, because triangulation and rectification depend on knowing where each camera is and how its lens distorts the image. Hand joints, for example, are recorded in metres in the head-camera frame, and that only means what it claims if the intrinsics and extrinsics are accurate.

The site states the dependency but does not quantify how much it changes model performance, and this page does not either.

Calibration fields

Which calibration fields does Firsthand deliver?

Each episode’s calibration record follows the calibration/ group of the episode schema: intrinsics, extrinsics (SE3) and rms_reproj_px. Intrinsics are solved independently for every camera: fx, fy, cx, cy and the distortion coefficients k1, k2, p1, p2, k3. Extrinsics are a 4×4 SE(3) pose per camera, with the head-camera frame as the identity and every other camera expressed relative to it.

Depth is registered to the head-camera frame using the same solved extrinsics as the video streams. The stereo baseline, the fixed distance between the two lenses of the head pair, is measured every session and shipped with the episode. The first table below lists each field, what the site states about it and what it is used for.

The procedure

How is the rig calibrated around each capture?

The capture page describes the procedure. A checkerboard target, 9×6 with 30 mm squares, is recorded in 40 poses spanning the full frustum of every camera. Intrinsics are solved per camera, and the session does not start unless RMS reprojection lands under 0.28 px. Extrinsics are then solved against the shared target and expressed in the head-camera frame. IMU alignment estimates gyro bias and accelerometer scale from a 60 s static hold plus a figure-eight excitation.

The entire procedure repeats at the end of the session. The difference between the opening and closing extrinsics is the drift for that episode, written into episode metadata as calib_drift_mm. Both solves ship with the episode, so you can re-run the reprojection check on your own copy of the data rather than relying on a pass or fail label.

Calibration and sync

How do calibration and time sync work together?

Calibration says where each camera is; synchronization says when it fired. The guide states that both have to hold, because a calibrated extrinsic between two cameras only describes the scene correctly if both captured it at the same instant. Firsthand runs the head-mounted stereo pair, both wrist cameras, the depth sensor and the head and wrist IMUs on one PTP clock domain, with a PTP grandmaster in the belt pack and a hardware trigger line to every sensor.

Every delivered stream carries int64 nanosecond timestamps in that domain, so sync error can be recomputed from the data. The stated figures are a 1.12 ms median and 1.94 ms p99 against a 2.0 ms ceiling; the capture page lists any stream exceeding the ceiling for more than three consecutive frames as a reject reason.

Rig streams

Which streams does the calibration cover?

The rig the site describes has a global-shutter head camera at 4K and 60 fps with a 120° horizontal field of view, two wrist cameras at 1920×1080 and 60 fps, a depth stream at 848×480 and 30 fps in metric millimetres, and 6-DoF IMUs on the head and both wrists at 200 Hz. The second table maps each stream to its role in the calibration. Streams beyond RGB are added where the spec calls for them.

Formats

Which formats carry the calibration?

The episode schema is the canonical layout and every delivery format is a projection of it. In HDF5 and zarr, the calibration/ group mirrors the schema and carries both the opening and closing solves for drift checks. In RLDS, episode_metadata.calib_drift_mm lets you filter on calibration quality before training. The head-camera frame is the identity for all extrinsics in the schema.

The guide notes consistent stream naming across HDF5, RLDS and WebDataset delivery. How the full calibration record is laid out in LeRobot and WebDataset deliveries is not stated beyond the format pages, so it is set per program in the skill spec. Name the format you load from in the spec, and the calibration layout is agreed with it.

Calibrated vs uncalibrated

Calibrated vs uncalibrated video: what changes for a model team?

Delivered calibration changes what your team does before training, not what your model is. With it, a team can undistort frames using the delivered coefficients, transform wrist-camera hand poses into the head-camera frame, check depth alignment, and filter episodes on calib_drift_mm. Without it, each of those steps depends on geometry the team has to assume or re-estimate.

The third table sets the two side by side. It states what each step needs, not a measured accuracy gain; the site publishes no such benchmark, and none is claimed here.

Quality gates

How is calibration checked, and what happens if it fails?

Calibration is part of the validated hour. The site defines a validated hour as 60 minutes of footage that has passed QA against your spec: sync within the ceiling, calibration solved and within drift tolerance, coverage cells filled and consent documented. Calibration drift, where the closing solve differs from the opening solve beyond tolerance, is a listed reject reason.

Rejected episodes go to the reject log and are recaptured at the provider’s cost. Billing is per validated hour, and the site states that rejected episodes, recaptures, calibration time and travel are never billed.

Agreed per spec

What is set per program rather than stated up front?

Some calibration details are not fixed on this site and are agreed in the skill spec instead. The last table separates what the site states from what is set per program.

Getting started

How do you order a calibrated custom collection?

Send the tasks, the environments and regions, the streams and labels, and the delivery format you need, and name the calibration outputs you want in the spec. If you have no written spec yet, the first draft is written with you on a call. The site states the order flow as spec, quote, Spec Pilot, scale, with the quote scoped against the spec.

Where coverage for your tasks and regions is deep, the median time from signed spec to first validated batch is 48 hours; where it is thin, turnaround runs three to four weeks. Delivered data ships under a perpetual, buyer-owned license.

At a glance

What you get.

Intrinsics
fx, fy, cx, cy, k1, k2, p1, p2, k3 per camera
Extrinsics
4×4 SE(3) per camera; head-camera frame is identity
Solves
Opening and closing solve around every capture
Acceptance gate
RMS reprojection under 0.28 px; drift within tolerance
Drift field
calib_drift_mm in episode metadata
Depth
Registered to the head-camera frame
Timestamps
int64 nanoseconds per stream, one PTP domain
Stated sync
Median 1.12 ms, p99 1.94 ms, 2.0 ms ceiling
Delivery
RLDS · LeRobot · WebDataset · HDF5
Drift tolerance value, calibration layout in LeRobot and WebDataset
Set per program in the skill spec
Spec to first batch
a median of 48 hours (deep coverage)
License
Perpetual, buyer-owned

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.

Calibration fields

Calibration fields the site states, and what each is used for

Field names and gates as stated on the site’s calibration, capture and format pages.
Calibration fieldWhat the site statesWhat it is used for
Intrinsicsfx, fy, cx, cy, k1, k2, p1, p2, k3, solved independently per cameraMapping 3D points onto each camera’s sensor; undistorting frames
Extrinsics4×4 SE(3) pose per camera; head-camera frame is identityRelating a pixel in one camera to the same point in another
Stereo baselineFixed distance between the two lenses; measured every session and shipped with the episodeConverting disparity into metric depth
Depth alignmentDepth registered to the head-camera frame using the solved extrinsicsKeeping depth aligned with RGB and pose
rms_reproj_pxIn the calibration/ group; acceptance gate is under 0.28 pxChecking the solve before training
calib_drift_mmDifference between opening and closing extrinsics, in episode metadataFiltering episodes on calibration quality
IMU alignmentGyro bias and accelerometer scale from a 60 s static hold plus figure-eightAligning inertial data with the cameras
*_timestamp_nsint64 nanoseconds per stream, shared PTP domainRecomputing sync error from the data

Rig streams

Rig streams and their role in the calibration

Stream specifications as stated on the site; the role column describes how each is handled in calibration.
StreamWhat the site statesRole in the calibration
Head cameraGlobal-shutter, 4K at 60 fps, 120° HFOVReference frame; identity extrinsics
Second head cameraPart of the head-mounted stereo pairExtrinsics relative to the head camera; baseline measured
Wrist camerasTwo, 1920×1080 at 60 fpsExtrinsics solved relative to the head camera
Depth848×480 at 30 fps, metric millimetres plus confidenceRegistered to the head-camera frame
IMUs6-DoF, 200 Hz, head and both wristsAligned during calibration
ClockOne PTP domain, hardware-triggeredTies every stream to the same instant

Calibrated vs uncalibrated

What a model team does with and without delivered calibration

This compares the work each step needs. It reports no measured accuracy difference, because the site publishes none.
StepWithout delivered calibrationWith delivered calibration
Undistorting framesDistortion coefficients must be estimated or assumedDelivered per camera in the calibration record
Relating head and wrist viewsCamera-to-camera transform must be estimatedDelivered as SE(3) extrinsics in the head-camera frame
Using depth with RGBAlignment must be checked by the teamDepth is registered to the head-camera frame
Filtering bad episodesNo drift measure to filter oncalib_drift_mm and the opening and closing solves
Checking syncDepends on what timestamps are providedPer-stream int64 ns timestamps on one PTP domain

Formats

What each format states about calibration

Claims as stated on the site’s format pages; unstated layout is set per program.
FormatWhat the site statesSet per program
Episode schemacalibration/ group: intrinsics, extrinsics (SE3), rms_reproj_px; head frame is identityDrift tolerance value
HDF5 / zarrcalibration/ group mirrors the schema and carries both opening and closing solvesAnything beyond the format page
RLDSepisode_metadata.calib_drift_mm; int64 ns timestamps per streamWhere full intrinsics and extrinsics are stored
WebDatasetConsistent stream naming with HDF5 and RLDSCalibration record layout
LeRobotNot stated for calibration fieldsCalibration record layout

Agreed per spec

What the site states vs what is set per program

Details the site does not fix are agreed in the skill spec.
DetailWhat the site statesWhere it is set
Reprojection gateRMS under 0.28 pxStated; confirmed in the spec
Drift tolerance valueDrift must be within tolerance; no number statedSet per program in the skill spec
Calibration layout per formatStated for HDF5/zarr, RLDS and the schema onlySet per program in the skill spec
Recalibration beyond the opening and closing solvesNot statedSet per program in the skill spec
Calibration target beyond the stated checkerboardNot statedSet per program in the skill spec
Hours, price and turnaroundNo list price; median 48 h where deep, three to four weeks where thinThe quote and the Spec Pilot

FAQ

Calibrated egocentric video data, answered.

What is calibrated egocentric video data?
First-person task footage delivered with the calibration of the cameras that recorded it: per-camera intrinsics, extrinsics relative to the head camera, and per-stream timestamps on one PTP clock. It lets pixels from different streams be related in space and time.
Does Firsthand deliver camera intrinsics and extrinsics?
Yes. The episode schema carries intrinsics, extrinsics (SE3) and rms_reproj_px in its calibration/ group, and the calibration guide states that both the opening and closing solves ship with every episode.
How accurate is the calibration?
The stated acceptance gate is RMS reprojection under 0.28 px with drift within tolerance, or the episode is rejected. The tolerance value is not stated on the site and is set per program in the skill spec. No other accuracy figure is published.
How often is the rig calibrated?
Every capture is bracketed by an opening and a closing calibration solve, and the drift between them is written to episode metadata. No other recalibration interval is stated; anything further is set per program in the skill spec.
Which formats carry the calibration?
HDF5 and zarr carry a calibration/ group with both solves, and RLDS carries calib_drift_mm in episode metadata. The calibration layout for LeRobot and WebDataset is not stated beyond the format pages and is set per program in the skill spec.
How fast and how priced is a calibrated collection?
Where coverage is deep, the median from signed spec to first validated batch is 48 hours; where thin, three to four weeks. There is no list price: you are quoted against your spec and billed per validated hour, and calibration time is never billed.

Sources

Where are the calibration method and delivery formats documented?

Request a custom calibrated dataset.

Tell us the tasks, environments, streams and format you need, and the calibration outputs you want in the spec. We scope a Spec Pilot or a quote against it.