← Back to Projects

LiDAR–Camera Calibration

Target-based calibration of six camera intrinsics and camera–LiDAR extrinsics for an autonomous-driving sensor rig

Method
Hybrid ChArUco/reflective target, geometric filtering of LiDAR returns, and robust multi-frame optimization for camera–LiDAR extrinsics.
Stack
Python, OpenCV, NumPy, SciPy, scikit-learn, Rerun
Hardware
Six Teledyne FLIR Blackfly S cameras and an Ouster OS1-64 LiDAR

I developed a calibration pipeline for the sensor rig on Bodhyaan, the autonomous vehicle from I-Hub Data at IIIT Hyderabad. The platform combines six Teledyne FLIR Blackfly S cameras with Edmund Optics lenses and an Ouster OS1 64-channel LiDAR.

The goal was to recover accurate camera intrinsics and the rigid LiDAR-to-camera transformations needed to project 3D LiDAR measurements into every image. The intrinsic calibration achieved a reported reprojection error below 0.05; the units and averaging method are not specified here.

Validation criteria

Configured acceptance thresholds used to reject unreliable observations.
CheckThresholdMeaning
Image-side target poseAt least 8 corners; RMSE ≤ 1.5 pxRequires enough ChArUco observations and limits image reprojection error for the board pose.
LiDAR board fitRMSE ≤ 2 cmLimits the residual between detected circle centers and the fitted rigid target geometry.
Target geometryMaximum spacing error ≤ 4 cmRejects detections whose pairwise circle spacing disagrees with the known target.
Final extrinsic inliersReprojection residual ≤ 6 pxFilters correspondences after robust optimization, before the final least-squares fit.

These are filtering thresholds, not measured calibration accuracy. Camera intrinsic calibration and camera–LiDAR extrinsic alignment are separate evaluations. The campus-drive video below provides a qualitative check of LiDAR-to-image alignment. Calibration code and parameters ↗

Sensor platform

A target visible to both sensors

A standard printed board is easy for a camera to detect but gives weak and ambiguous LiDAR returns. I built a 0.96 m square hybrid target with a ChArUco pattern, a retroreflective outer border, and four 24 cm reflective circles. The circle centers form a cross with 0.6 m horizontal and vertical spacing, giving both sensors the same known geometry.

RGB and LiDAR comparison before and after adding retroreflective material to the target.

Calibration pipeline

Diagnostics and output

The pipeline reports aggregate and per-frame reprojection statistics, board-fit residuals, inlier counts, and pose-consistency checks. Rerun views overlay the target and projected LiDAR centers, visualize residual vectors in 2D and 3D, and make problematic frames easy to inspect.

The final artifact stores both camera-from-LiDAR and LiDAR-from-camera 4×4 transforms, rotation and translation vectors, camera intrinsics and distortion, per-frame transforms, and per-point error and inlier metadata in NPZ, with optional JSON export.

Road-test result

LiDAR points projected into the camera view during a complete drive around the IIIT Hyderabad campus. Open on YouTube ↗