XQ20 stereo headset
Head-worn stereo fisheye camera with a 6-axis IMU, recording to a memory card

- Cameras
- 2 × 1920×1200, H.265Supplier's sheet
- Shutter
- Global, not measuredListing ↗︎
- Field of view
- Calibrated 122° × 91°Measured
160° on the listing, 123.6° on the sheet, axes not statedListing ↗︎ - Baseline
- 60.3 mmMeasured
- IMU
- 6-axis, 300 or 600 HzSupplier's sheet
- Output
- MP4 on microSD, or UVCSupplier's sheet
Supplier values from their spec sheet, received 2026-10-21 · Borme's listing, read 2026-11-04 · 2 units · Data on Hugging Face
Demo and values
Section titled “Demo and values”Head-worn stereo fisheye camera with a 6-axis IMU, recording to a memory card. Borme, a brand of Shenzhen Feikasi Industrial Co., Ltd., sells it as the XQ20. Two units were calibrated.
Reprojection is how far, in pixels, the detected corners lie from where the solve puts them. td is the camera–IMU time offset, and the lever arm is the camera–IMU position offset.
No independent reference. These values show what MVIS solved, not how close they are to the truth.
Calibration process
Section titled “Calibration process”The path of the rig around the board, as MVIS solved it. To explore it:
- Press Play or drag the bar to follow the path.
- Use the view buttons to change the view.
- Pick a camera card to put that camera on the frustum, the pyramid that shows its view.
Each card draws the board from the solved pose, with the corners MVIS detected. We publish no camera images.
Solved rig
Section titled “Solved rig”The solved rig in 3D, to scale. Tap a sensor to see its values. In full screen you can rotate and zoom. Grid squares are 20 mm.
To scale, from above and the front
| Camera | Lever x, y, z (mm) | Distance (mm) | log(R) (rad) | td (ms) | Field of view |
|---|---|---|---|---|---|
| cam0 | −29.8, −9.8, +18.0 | 36.2 | [−0.007, −0.003, +0.003] | +5.77 | 122° × 91° |
| cam1 | +30.5, −9.7, +17.6 | 36.6 | [+0.002, +0.003, +0.003] | +5.75 | 122° × 91° |
| Camera | Lever x, y, z (mm) | Distance (mm) | log(R) (rad) | td (ms) | Field of view |
|---|---|---|---|---|---|
| cam0 | −29.7, −9.4, +21.1 | 37.6 | [−0.001, −0.003, +0.004] | +5.78 | 122° × 91° |
| cam1 | +30.4, −9.1, +20.6 | 37.8 | [+0.001, +0.009, +0.004] | +5.79 | 122° × 91° |
Solved by MVIS. Lever arms (camera–IMU position offsets) are in the IMU frame. Rotation is log(R), camera in the IMU frame.
Specifications
Section titled “Specifications”| From the supplier's sheet | |
|---|---|
| Cameras | 2 × 1920×1200, H.265 MP4 |
| Frame rate | 30 or 60 fps on the sheet; about 30 Hz in these recordings |
| Field of view | 123.6° on the sheet; axis not stated |
| IMU | 6-axis, 300 or 600 Hz on the sheet; 300.5 Hz measured |
| Storage and interface | microSD up to 128 GB, or UVC; Type-C |
| Power | No battery |
| Weight | 180 g with strap |
| From the seller's listing | |
| Model number | XQ20 |
| Cameras | 2, dual 1080P, 2 MP, MP4 |
| Lens | Fisheye |
| Frame rate | 60 and 30 fps |
| Field of view | 160°; axis not stated |
| Shutter | Global; not measured in these recordings |
| IMU | 300 Hz; stamped at measurement end, 50 ppm, 32-bit µs |
| Measured in these recordings | |
| Calibrated field of view | cam0 122° × 91° · cam1 122° × 91° |
| Not published | |
| Open | Sensor part numbers |
Dataset
Section titled “Dataset”| Recordings | Unit A: 158 s, 4,736 frames. Unit B: 119 s, 3,573 frames |
| Format | MP4 plus per-segment IMU CSV, converted to EuRoC layout |
| Board | AprilGrid 6×6, tag 35.2 mm, spacing 0.3 |
| Licence | CC BY-NC 4.0; commercial use by request |
| Hosted | Calibench community, xq20/ (access by automatic approval) |
Detailed results
Section titled “Detailed results”Lens Calibrated field of view
Calibrated field of view, horizontal × vertical. cam0: 122° × 91°, corners reach 64° from the axis · cam1: 122° × 91°, corners reach 64° from the axis
Calibrated field of view, horizontal × vertical. cam0: 122° × 91°, corners reach 62° from the axis · cam1: 122° × 91°, corners reach 65° from the axis
cam0 cam1
We read these from the calibrated lens fit at the image edges, through the principal point (where the optical axis meets the image). ~ marks an axis past where the corners reached, so the fit is extrapolated there. Past the fit means an edge lies beyond where the fit holds, so we give no value.
IMU Gyro–accel time offset t_ga −1.03 ms
This solve pinned the IMU intrinsics at identity, so it estimated no scales. t_ga, the time offset between the gyroscope and accelerometer channels: −1.03 ± 0.50 ms.
This solve pinned the IMU intrinsics at identity, so it estimated no scales. t_ga, the time offset between the gyroscope and accelerometer channels: −0.91 ± 0.57 ms.
Timing cam0 td +5.77 ms
The time offsets, to scale. td is the camera–IMU time offset, with t_imu = t_cam + td.
Full results Every solved parameter
Rotation is log(R) in rad, camera in the IMU frame.
| Parameter | MVIS |
|---|---|
| cam0 | |
| fx px | 601.56 |
| fy px | 601.47 |
| cx px | 965.27 |
| cy px | 632.09 |
| k1 | 0.22798 |
| k2 | 0.50518 |
| k3 | −0.48094 |
| k4 | 0.17631 |
| Lever x mm | −29.78 |
| Lever y mm | −9.79 |
| Lever z mm | +18.01 |
| log(R) rad | [−0.0073, −0.0032, +0.0029] |
| td ms | +5.770 |
| Reprojection px | 0.189 |
| cam1 | |
| fx px | 601.32 |
| fy px | 601.33 |
| cx px | 952.65 |
| cy px | 563.80 |
| k1 | 0.23524 |
| k2 | 0.49043 |
| k3 | −0.46904 |
| k4 | 0.17017 |
| Lever x mm | +30.53 |
| Lever y mm | −9.72 |
| Lever z mm | +17.63 |
| log(R) rad | [+0.0017, +0.0032, +0.0034] |
| td ms | +5.745 |
| Reprojection px | 0.177 |
| IMU | |
| t_ga ms | −1.03 ± 0.50 |
| Parameter | MVIS |
|---|---|
| cam0 | |
| fx px | 601.89 |
| fy px | 601.82 |
| cx px | 931.24 |
| cy px | 638.43 |
| k1 | 0.23827 |
| k2 | 0.48362 |
| k3 | −0.46317 |
| k4 | 0.17010 |
| Lever x mm | −29.68 |
| Lever y mm | −9.42 |
| Lever z mm | +21.08 |
| log(R) rad | [−0.0012, −0.0028, +0.0042] |
| td ms | +5.783 |
| Reprojection px | 0.185 |
| cam1 | |
| fx px | 603.23 |
| fy px | 603.21 |
| cx px | 1004.48 |
| cy px | 568.93 |
| k1 | 0.23483 |
| k2 | 0.50385 |
| k3 | −0.49249 |
| k4 | 0.18194 |
| Lever x mm | +30.42 |
| Lever y mm | −9.10 |
| Lever z mm | +20.59 |
| log(R) rad | [+0.0015, +0.0092, +0.0038] |
| td ms | +5.794 |
| Reprojection px | 0.192 |
| IMU | |
| t_ga ms | −0.91 ± 0.57 |
Limits
Section titled “Limits”- No independent reference. These values show what MVIS solved, not how close they are to the truth.
- The supplier's IMU noise file (gyro 0.002, accel 0.02) is tuned for Kalibr, about 10× and 3× the noise measured at rest. Used as is in MVIS, it put unit A's lever arm 20 to 45 mm too far forward. These results use the measured noise with a 2 to 3× margin.
- With IMU intrinsics free, the lever arm's y shifts about 9 mm on both units, more than its 3.5 mm uncertainty. Pinned, it agrees with the supplier's Kalibr, so these results pin the IMU intrinsics.
- The listing says 1080P and 160°, and the supplier's sheet says 1920×1200 and 123.6°. These recordings are 1920×1200. The listing's shutter value wasn't tested here.
How it was run
Section titled “How it was run”- cam0 at 30 Hz, cam1 at 10 Hz, t_ga estimated, camera intrinsics free, IMU intrinsics pinned. IMU noise padded from the measured noise: gyro 6e-4 rad/s/√Hz, accel 0.015 m/s²/√Hz. Batch of 2026-11-07.