Requirements
CamCalib is pure Python and runs on Windows, macOS, and Linux via
pip install. There is no ROS dependency and nothing to compile. Build steps
are in Installation.
Dependencies
Section titled “Dependencies”| Dependency | Required | Notes |
|---|---|---|
| Python | yes | — |
| GTSAM 4.2 | yes | Factor-graph optimisation, native SO(3)/SE(3) |
| NumPy < 2 | yes | GTSAM 4.2 from pip is built against the NumPy 1.x ABI |
| OpenCV | yes | Detection and PnP initialisation |
aprilgrid | for AprilGrid | pip install -e ".[apriltag]" |
opencv-contrib | for ArUco | pip install -e ".[aruco]" |
rosbags | to read bags | Pure Python — no ROS installation |
pytest | dev | pip install -e ".[dev]" |
What can be calibrated
Section titled “What can be calibrated”| Quantity | Scope | Notes |
|---|---|---|
| Camera intrinsics + distortion | per camera | Six models, mixable across a rig |
| Camera extrinsics | per camera | Against reference_camera |
| Camera–camera time offsets | pairwise | optimize_time_offset |
| Rolling-shutter readout | per RS camera | Solved jointly, not corrected after |
| Board poses | per frame | Written to *_full.yaml for replay |
Camera–IMU extrinsics T_CtoI | per camera | — |
Camera–IMU time offset td | per camera | — |
IMU intrinsics Dw / Da / Tg | per IMU | Three conventions |
IMU biases b_g / b_a | per IMU | — |
Gyro↔accel offset t_ga | base IMU | solve.estimate_t_ga |
Camera models
Section titled “Camera models”radtan · equidistant (KB4, recommended for fisheye) · fov ·
double_sphere · eucm · omni_radtan (experimental). Details:
Camera model.
IMU-intrinsics conventions
Section titled “IMU-intrinsics conventions”kalibr · rpng · calyx — a convention, not a quality lever. See
IMU model.
Input formats
Section titled “Input formats”Detection is streaming — one image at a time — so memory is bounded regardless of dataset size.
source_type | Input |
|---|---|
images | Folder sorted by filename (.jpg .jpeg .png .bmp .tiff .tif) |
timestamped_images | Folder + CSV of filename,timestamp |
rosbag_topic | ROS1 bag; several cameras from one file |
ros2bag | ROS2 SQLite bag directory |
euroc | EuRoC / ASL — TUM-VI, EuRoC MAV, Monado SLAM |
video | Video file |
Calibration boards
Section titled “Calibration boards”| Board | board_type | Required fields |
|---|---|---|
| AprilGrid | apriltag | rows, cols, tag_size (m), tag_spacing (ratio), tag_family |
| Chessboard | chessboard | rows, cols (inner corners), square_size (m) |
| ArUco | aruco | rows, cols, marker_size, marker_separation, aruco_dict |
Kalibr target YAMLs load directly.
Reference rig
Section titled “Reference rig”The released MVIS datasets come from a self-built VI-Rig. It is not required — it is what the shipped example configs assume.
| Sensor | Rate (Hz) | Topic | Resolution |
|---|---|---|---|
| MicroStrain GX3-25 | 500 | /gx3_25/data | — |
| MicroStrain GX3-35 | 100 | /gx3_35/imu/data | — |
| Xsens MTI-100 | 400 | /imu/data | — |
| RealSense T265 IMU | 200 | /t265/imu | — |
| FLIR BlackFly | 30 | /blackfly/image_raw | 720×540 |
| RealSense T265 L / R | 30 | /t265/fisheye{1,2}/image_raw | 848×800 |
| ELP L / R (rolling shutter) | 25 | /elp/split_sync_image_node/{left,right}/image_raw | 640×480 |