Skip to content
v0.1Toolbox + public benchmark

OpenMVIS

Open-source multi-visual-inertial system calibration

    Cycling through seven recordings
    Sensors
    3 cam · 4 IMU
    Reproj median
    0.82 px
    Window
    80.0 s
    Base cam offset
    −2.77 ms
    Kalibr baseline
    Δp 2.6 mm
    Corners / frame
    93–119

    Recovered by MVIS from virig_4imus_3cams / april_01. The outlined camera is the one shown in 3-D; the board corners it detects take its colour.

    Details: all cameras and readout
    Base cam offset
    −2.77 ms
    Kalibr baseline
    Δp 2.6 mm
    Corners / frame
    93–119

    Recovered by MVIS from virig_4imus_3cams / april_01. Each camera has its own colour. The outlined camera is the one shown in 3-D, and the board corners it detects take that colour. In the camera views, coloured circles are detections and white crosses are reprojections.

      Calibrate a whole rig at once

      From one recording to a full sensor model.

      MVIS is the calibration library behind the Open MVIS benchmark. It solves camera intrinsics and distortion, extrinsics, time offsets, rolling-shutter readout, board poses, camera–IMU transforms, IMU intrinsics and biases in a single GTSAM factor graph.

      ROS1 and ROS2 bags are read through rosbags, alongside EuRoC/ASL folders, image folders and video, on a machine that has never had ROS installed.

      # cameras only
      $ mvis cam -c camera.yaml
      
      # cameras + IMUs, jointly
      $ mvis cam-imu -c cam_imu.yaml
      
      # apply the result and recalibrate; PASS / FAIL
      $ mvis roundtrip -c cam_imu.yaml

      One self-contained HTML report per run.

      What the graph estimates

      The state, not a sequence of stages.

      QuantitySymbolPerUnitNotes
      Intrinsics + distortionf, c, kcamerapxSix models, mixable within one rig
      Camera–IMU extrinsicsT_CtoIcameram · log(R) radEvery camera to the base IMU
      Camera time offsett_dcameramsRecovers USB lag of −124 ms on the ELP stereo
      Rolling-shutter readoutt_rcameramsEach corner projected at its own row time
      IMU–IMU extrinsicsT_IstoIaux IMUm · log(R) radPlus a per-IMU time offset
      IMU intrinsicsD_w, D_aIMUkalibr, rpng or calyx convention
      Gyro–accel offsett_gaIMUmsThe T265 reads −6.2 ms, stable to ~0.2 ms across bags
      Biasesb_g, b_aIMUrad/s · m/s²Along the whole trajectory
      Board pose + trajectoryT_BinW, T_ItoW(t)recordingm · log(R) radChessboard, AprilGrid or ArUco targets

      Camera models

      Six projection models.

      • radtanPinhole, radial–tangential
      • equidistantKannala–Brandt KB4 fisheye
      • fovField-of-view model
      • double_sphereWide-angle fisheye
      • eucmExtended unified camera
      • omni_radtanOmnidirectional

      Validated

      Checked against published calibrations.

      228

      regression runs across 65 dataset families, with zero failures

      <0.6%

      focal-length difference from the published TUM-VI and Intel T265 calibrations

      ≤2mm

      lever arm vs Kalibr on TUM-VI raw IMU bags, with ≤0.15 mm stereo baseline and ≤1 ms time offset

      VI-Rig with 4 IMUs and 5 cameras mounted on one frame
      VI-Rig: 4 IMUs and 5 cameras, one of the rigs in the Calibench roster.

      It checks its own work

      A low residual is not the test.

      mvis roundtrip applies a calibration to its own data and recalibrates. PASS needs the IMU intrinsics to collapse to identity and the stereo baseline to hold. See Round-trip validation.

      Inputs
      ROS1 and ROS2 bags, EuRoC/ASL, image folders, video
      Targets
      Chessboard, AprilGrid with Kalibr 2-bit border, ArUco
      Interop
      Reads and writes Kalibr camchain and camchain-imucam
      Export
      mvis apply-calib re-records a raw bag with the calibration applied

      Cite

      If you use the toolbox or the benchmark.

      Benchmark
      @misc{openmvis,
        title  = {{Open MVIS}: A Benchmark for Multi-Visual-Inertial Sensor Calibration},
        author = {{Open MVIS Contributors}},
        year   = {2026},
        url    = {https://openmvis.com}
      }
      Method
      @article{yang2024mvis,
        title   = {Multi-visual-inertial system: Analysis, calibration, and estimation},
        author  = {Yang, Yulin and Geneva, Patrick and Huang, Guoquan},
        journal = {The International Journal of Robotics Research},
        year    = {2024},
        doi     = {10.1177/02783649241245726}
      }

      Cite leaderboard results as Open MVIS leaderboard, vX.Y.