Glossary
What Is Hand-Eye Calibration?
Last reviewed: October 2026
Short answer
Hand-eye calibration solves the fixed transform between a mounted camera and the frame it rides on — a wrist camera and the gripper, or a head camera and the head mount — so pixels seen by that camera can be placed in the robot or body frame. OpenCV’s calibrateHandEye function solves it as the equation AX = XB.
01
Why does egocentric capture need head and wrist camera extrinsics?
An egocentric rig has more than one eye. The head view shows where the person is looking, and the wrist views stay close to the hand. A model has to know how a point in one view relates to the same point in another, or hand pose, object pose and depth disagree across streams. The site states that this relationship is extrinsic calibration: a 4×4 SE(3) transform per camera in one shared frame. Calibrating each camera alone gives its lens distortion, not where it sits relative to the others.
02
How does Firsthand calibrate head and wrist cameras?
Firsthand states a head-mounted global-shutter camera plus two wrist cameras and a depth sensor. The head-to-wrist-to-depth transforms are solved against a shared calibration target and expressed in the head-camera frame, which is the identity, so every other camera is a 4×4 SE(3) pose relative to it. Calibration runs twice per episode, before and after capture, because a worn head mount can flex and a wrist camera can shift. The site does not describe this as an AX = XB solve or name a solver. It is multi-camera extrinsic calibration, closely related to hand-eye calibration but not OpenCV’s gripper-to-camera formulation.
03
What is hand-eye calibration?
Hand-eye calibration finds the fixed rigid transform between a camera, the eye, and the hand or gripper it is mounted on. OpenCV’s documentation describes calibrateHandEye as computing the camera-to-gripper transformation for a camera mounted on a robot gripper, which it calls eye-in-hand. It calls a static camera watching a pattern on the end-effector eye-to-hand.
Because the transform is fixed, wherever the hand moves, the camera pose follows it. The problem is also known as solving AX = XB, where X is the unknown camera-to-gripper transform.
04
How is hand-eye calibration solved?
OpenCV describes the procedure. A static calibration pattern gives the target-to-camera transform at each pose, for example by PnP from 2D-3D correspondences. The gripper is moved to acquire several poses, and the gripper-to-base transform is recorded each time, for example from robot kinematics. The function then returns the camera-to-gripper rotation and translation.
OpenCV implements five methods: three that estimate rotation and then translation, and two that estimate both at once. It states that at least 2 motions with non-parallel rotation axes are needed, so at least 3 different poses, and strongly recommends many more.
05
How is calibration quality checked?
The check the site states is RMS reprojection error: project the known target points back into each camera and measure how far they land from where they were observed. Firsthand gates every episode on RMS reprojection under 0.28 px, checked at both the opening and closing solve.
A second check catches a rig that calibrated well and then shifted during the session: drift between the opening and closing extrinsics. An episode ships only if drift is within tolerance, and failures go to the reject log. The tolerance value is not stated.
06
How does calibration ship with a dataset?
Each episode carries a calibration/ group with intrinsics, extrinsics (SE3) and rms_reproj_px. Both the opening and closing solves ship, so a buyer can re-run the reprojection check on their own copy. Measured drift is carried as calib_drift_mm in the episode metadata, so you can filter on calibration quality before training.
The site does not state the transform direction or translation units, so confirm your loader treats the head-camera frame as the identity and test the path on a pilot batch.
07
How do you request custom collection with calibrated rigs?
Custom and on-demand collections are scoped by a written skill spec. Put the calibration requirements in it: which calibration fields you need delivered, which checks you will re-run, and any tolerance tighter than the stated 0.28 px gate. The site lists fields, not numeric calibration values, so anything beyond them is agreed in the spec. Request a custom dataset to start a pilot.
08
Calibration terms at a glance
| Term | What it is | Where stated |
|---|---|---|
| Intrinsics | One camera’s lens and sensor: fx, fy, cx, cy plus distortion coefficients | OpenCV; Firsthand lists fx, fy, cx, cy, k1, k2, p1, p2, k3 |
| Extrinsics | Rotation and translation placing a camera relative to a frame, as one 4×4 transform | OpenCV; Firsthand states 4×4 SE(3) per camera |
| Hand-eye transform | Fixed transform between a camera and the gripper it is mounted on | OpenCV calibrateHandEye |
| Head and wrist extrinsics | Each camera’s pose in the head-camera frame, which is the identity | Firsthand site |
| Reprojection error | Pixel gap between observed target points and model-projected points | OpenCV; Firsthand gate under 0.28 px RMS |
| Drift | Change between the opening and closing solves | Firsthand: episode_metadata.calib_drift_mm |
10
Robot hand-eye calibration versus a worn head and wrist rig
| Aspect | Robot hand-eye (OpenCV) | Firsthand head and wrist rig |
|---|---|---|
| Camera mount | On a robot gripper (eye-in-hand) or static (eye-to-hand) | Head-mounted camera plus two wrist cameras |
| Unknown solved | Camera-to-gripper transform | Each camera’s pose in the head-camera frame |
| Pose source | Gripper-to-base poses, for example from robot kinematics | Not stated |
| Target | Static calibration pattern seen from several poses | Shared calibration target; type Not stated |
| Formulation and solver | AX = XB; five implemented methods | Not stated |
| Output | Camera-to-gripper rotation and translation | 4×4 SE(3) per camera in calibration/ extrinsics |
11
What this site states and does not state about head and wrist calibration
| Item | Status | Field |
|---|---|---|
| Frame | Head-camera frame is the identity; other cameras relative to it | calibration/ extrinsics |
| Solves | Before and after each capture, both shipped | calibration/ |
| Reprojection gate | RMS under 0.28 px | calibration/rms_reproj_px |
| Drift | Measured between opening and closing solve | episode_metadata.calib_drift_mm |
| Solver, target type and number of views | Not stated | Not stated |
| Extrinsic values, direction and translation units | Not stated | Not stated |
| Drift tolerance and accuracy beyond 0.28 px | Not stated | Not stated |
12
Frequently asked questions
- What is hand-eye calibration?
- It solves the fixed transform between a camera and the gripper or hand it is mounted on. OpenCV’s calibrateHandEye returns the camera-to-gripper transform by solving AX = XB.
- What are head and wrist camera extrinsics?
- They are the 4×4 SE(3) poses that place each camera relative to the head camera. Firsthand states the head-camera frame as the identity, with the wrist cameras expressed relative to it.
- Does Firsthand use OpenCV’s calibrateHandEye?
- Not stated. The site describes extrinsics solved against a shared calibration target and gated on reprojection error, but names no solver or AX = XB formulation.
- How does Firsthand check its calibration?
- Each episode is gated on RMS reprojection under 0.28 px at the opening and closing solves, and open-to-close drift must be within tolerance. Failures go to the reject log.
- Can I re-check the calibration myself?
- Yes. Both solves ship in the calibration/ group with rms_reproj_px, and drift is carried as calib_drift_mm, so you can re-run the reprojection check on your own copy.
- Can I request custom collection with specific calibration requirements?
- Yes. Custom and on-demand collections are scoped by a written skill spec, so list the calibration fields and checks you need and request a custom dataset to start a pilot.
Related terms