Skip to content

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.

DependencyRequiredNotes
Pythonyes
GTSAM 4.2yesFactor-graph optimisation, native SO(3)/SE(3)
NumPy < 2yesGTSAM 4.2 from pip is built against the NumPy 1.x ABI
OpenCVyesDetection and PnP initialisation
aprilgridfor AprilGridpip install -e ".[apriltag]"
opencv-contribfor ArUcopip install -e ".[aruco]"
rosbagsto read bagsPure Python — no ROS installation
pytestdevpip install -e ".[dev]"
QuantityScopeNotes
Camera intrinsics + distortionper cameraSix models, mixable across a rig
Camera extrinsicsper cameraAgainst reference_camera
Camera–camera time offsetspairwiseoptimize_time_offset
Rolling-shutter readoutper RS cameraSolved jointly, not corrected after
Board posesper frameWritten to *_full.yaml for replay
Camera–IMU extrinsics T_CtoIper camera
Camera–IMU time offset tdper camera
IMU intrinsics Dw / Da / Tgper IMUThree conventions
IMU biases b_g / b_aper IMU
Gyro↔accel offset t_gabase IMUsolve.estimate_t_ga

radtan · equidistant (KB4, recommended for fisheye) · fov · double_sphere · eucm · omni_radtan (experimental). Details: Camera model.

kalibr · rpng · calyx — a convention, not a quality lever. See IMU model.

Detection is streaming — one image at a time — so memory is bounded regardless of dataset size.

source_typeInput
imagesFolder sorted by filename (.jpg .jpeg .png .bmp .tiff .tif)
timestamped_imagesFolder + CSV of filename,timestamp
rosbag_topicROS1 bag; several cameras from one file
ros2bagROS2 SQLite bag directory
eurocEuRoC / ASL — TUM-VI, EuRoC MAV, Monado SLAM
videoVideo file
Boardboard_typeRequired fields
AprilGridapriltagrows, cols, tag_size (m), tag_spacing (ratio), tag_family
Chessboardchessboardrows, cols (inner corners), square_size (m)
ArUcoarucorows, cols, marker_size, marker_separation, aruco_dict

Kalibr target YAMLs load directly.

The released MVIS datasets come from a self-built VI-Rig. It is not required — it is what the shipped example configs assume.

VI-Rig with 4 IMUs and 5 cameras
SensorRate (Hz)TopicResolution
MicroStrain GX3-25500/gx3_25/data
MicroStrain GX3-35100/gx3_35/imu/data
Xsens MTI-100400/imu/data
RealSense T265 IMU200/t265/imu
FLIR BlackFly30/blackfly/image_raw720×540
RealSense T265 L / R30/t265/fisheye{1,2}/image_raw848×800
ELP L / R (rolling shutter)25/elp/split_sync_image_node/{left,right}/image_raw640×480