Skip to content
Borme ↗︎

XQ20 stereo headset

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

XQ20 head-worn stereo camera on its strap
Image: the supplier's XQ20 spec sheet
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

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.

The 3D scene MVIS recovered from unit B.
Reprojection median0.15 px
cam0–cam1 baseline60.3 mm
cam0 td+5.77 ms
cam0 lever arm36.2 mm

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.

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.

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

From above
xzcam0cam136.2 mm36.6 mmbaseline 60.3 mm20 mm
From the front
xycam0cam120 mm
CameraLever x, y, z (mm)Distance (mm)log(R) (rad)td (ms)Field of view
cam0−29.8, −9.8, +18.036.2[−0.007, −0.003, +0.003]+5.77122° × 91°
cam1+30.5, −9.7, +17.636.6[+0.002, +0.003, +0.003]+5.75122° × 91°

Solved by MVIS. Lever arms (camera–IMU position offsets) are in the IMU frame. Rotation is log(R), camera in the IMU frame.

From the supplier's sheet
Cameras2 × 1920×1200, H.265 MP4
Frame rate30 or 60 fps on the sheet; about 30 Hz in these recordings
Field of view123.6° on the sheet; axis not stated
IMU6-axis, 300 or 600 Hz on the sheet; 300.5 Hz measured
Storage and interfacemicroSD up to 128 GB, or UVC; Type-C
PowerNo battery
Weight180 g with strap
From the seller's listing
Model numberXQ20
Cameras2, dual 1080P, 2 MP, MP4
LensFisheye
Frame rate60 and 30 fps
Field of view160°; axis not stated
ShutterGlobal; not measured in these recordings
IMU300 Hz; stamped at measurement end, 50 ppm, 32-bit µs
Measured in these recordings
Calibrated field of viewcam0 122° × 91° · cam1 122° × 91°
Not published
OpenSensor part numbers
RecordingsUnit A: 158 s, 4,736 frames. Unit B: 119 s, 3,573 frames
FormatMP4 plus per-segment IMU CSV, converted to EuRoC layout
BoardAprilGrid 6×6, tag 35.2 mm, spacing 0.3
LicenceCC BY-NC 4.0; commercial use by request
HostedCalibench community, xq20/ (access by automatic approval)
AprilGrid 6 × 6, 264 × 264 mm. Standard pattern, to scale
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

0°15°30°45°60°75°90°0.00.40.81.21.6Ray angle from the optical axisImage radius / f

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.

Timing cam0 td +5.77 ms

The time offsets, to scale. td is the camera–IMU time offset, with t_imu = t_cam + td.

-10 ms-5 ms+0 ms+5 ms+10 mscam0 td+5.77cam1 td+5.75t_ga−1.03
Full results Every solved parameter

Rotation is log(R) in rad, camera in the IMU frame.

ParameterMVIS
cam0
fx px601.56
fy px601.47
cx px965.27
cy px632.09
k10.22798
k20.50518
k3−0.48094
k40.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 px0.189
cam1
fx px601.32
fy px601.33
cx px952.65
cy px563.80
k10.23524
k20.49043
k3−0.46904
k40.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 px0.177
IMU
t_ga ms−1.03 ± 0.50
  • 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.
  • 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.