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.
No independent reference. These values show what MVIS solved, not how close they are to the truth.
Calibration process
Section titled “Calibration process”The solved path of the rig around the board. Press Play or drag the bar to follow it, and use the buttons to change the view.
Solved rig
Section titled “Solved rig”The solved rig in 3D, to scale. Tap a sensor for its values. Full screen lets you 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 | −31.0, +1.2, +47.0 | 56.3 | [−0.002, −0.005, +0.004] | +5.74 | 122° × 91° |
| cam1 | +29.4, +1.3, +46.8 | 55.3 | [+0.007, +0.002, +0.004] | +5.71 | 122° × 91° |
| Camera | Lever x, y, z (mm) | Distance (mm) | log(R) (rad) | td (ms) | Field of view |
|---|---|---|---|---|---|
| cam0 | −29.4, −0.7, +19.6 | 35.4 | [−0.001, −0.007, +0.006] | +5.72 | 122° × 91° |
| cam1 | +30.6, −0.2, +19.4 | 36.3 | [+0.001, +0.005, +0.006] | +5.73 | 122° × 91° |
Solved by MVIS. Lever arms 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
Read from the calibrated lens fit at the image edges, through the principal point. ~ marks an axis past the range the corners reached, where the fit is extrapolated. Past the fit means an edge lies beyond where the fit holds, so no value is given.
IMU Gyro-to-accel offset −0.79 ms
Scale as deviation from 1. Model: calyx. Gyro-to-accel time offset t_ga: −0.79 ± 0.73 ms.
Scale as deviation from 1. Model: calyx. Gyro-to-accel time offset t_ga: −0.73 ± 0.84 ms.
Timing cam0 td +5.74 ms
Offsets to scale, 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.80 |
| fy px | 601.71 |
| cx px | 965.21 |
| cy px | 632.15 |
| k1 | 0.22812 |
| k2 | 0.50495 |
| k3 | −0.48030 |
| k4 | 0.17579 |
| Lever x mm | −30.96 |
| Lever y mm | +1.20 |
| Lever z mm | +47.01 |
| log(R) rad | [−0.0020, −0.0047, +0.0036] |
| td ms | +5.739 |
| Reprojection px | 0.184 |
| cam1 | |
| fx px | 601.49 |
| fy px | 601.48 |
| cx px | 952.61 |
| cy px | 563.74 |
| k1 | 0.23534 |
| k2 | 0.49056 |
| k3 | −0.46937 |
| k4 | 0.17021 |
| Lever x mm | +29.38 |
| Lever y mm | +1.27 |
| Lever z mm | +46.78 |
| log(R) rad | [+0.0070, +0.0016, +0.0041] |
| td ms | +5.713 |
| Reprojection px | 0.173 |
| IMU | |
| t_ga ms | −0.79 ± 0.73 |
| Parameter | MVIS |
|---|---|
| cam0 | |
| fx px | 602.18 |
| fy px | 602.10 |
| cx px | 931.24 |
| cy px | 638.42 |
| k1 | 0.23846 |
| k2 | 0.48461 |
| k3 | −0.46532 |
| k4 | 0.17088 |
| Lever x mm | −29.45 |
| Lever y mm | −0.65 |
| Lever z mm | +19.63 |
| log(R) rad | [−0.0015, −0.0069, +0.0065] |
| td ms | +5.721 |
| Reprojection px | 0.181 |
| cam1 | |
| fx px | 603.51 |
| fy px | 603.48 |
| cx px | 1004.48 |
| cy px | 568.91 |
| k1 | 0.23505 |
| k2 | 0.50468 |
| k3 | −0.49419 |
| k4 | 0.18252 |
| Lever x mm | +30.65 |
| Lever y mm | −0.19 |
| Lever z mm | +19.39 |
| log(R) rad | [+0.0012, +0.0051, +0.0061] |
| td ms | +5.731 |
| Reprojection px | 0.192 |
| IMU | |
| t_ga ms | −0.73 ± 0.84 |
Limits
Section titled “Limits”- No independent reference. These values show what MVIS solved, not how close they are to the truth.
- Unit A lever z sits about 25 mm above unit B, beyond the roughly 10 mm uncertainty for this motion. This is still open.
- 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.
- Accel z scale stays near 0.93 to 0.94 because z barely sees gravity in this motion, so it isn't a sensor property.
How it was run
Section titled “How it was run”- cam0 at 30 Hz, cam1 at 10 Hz, t_ga on, camera intrinsics free. Batch of 2026-11-03.