Skip to main content

LiDAR Camera Calibrator

A PySide6 desktop application for manual refinement of static LiDAR-to-camera calibration over synchronized sequences.

It is built for teams that need to inspect and tighten a calibration after a vehicle rig is assembled: for high-quality labeling, sensor validation, map/vehicle experiments, or testing a new calibration hypothesis. Most rigs do not change frequently, so a careful manual refinement pass can be a practical way to get the alignment needed for a specific dataset or workflow.

Use the data you already have. Normalize raw files, Python/NumPy arrays, custom lazy loaders, or standard Foxglove MCAP into the generic sensor contract. KITTI is included as an optional, tested example pipeline.

Main workspace: navigable LiDAR scene, synchronized camera previews, scene inspector, and timeline.

Calibration workspace: projected LiDAR points on the selected camera with live extrinsic and intrinsic controls.

Features

  • manual extrinsic and optional intrinsic refinement for arbitrary named cameras;
  • synchronized LiDAR, camera, and interpolated ego-pose timeline;
  • navigable CPU-rendered 3D point-cloud view and camera overlays;
  • direction-explicit transforms using P_target = T_target_from_source @ P_source;
  • undo/redo, numerical editing, resets, comparison view, and JSON export/reload;
  • strict, versioned lidar-camera-scene/1 MCAP boundary;
  • staged 10-frame startup and continuously replenished 40-frame rolling cache;
  • package-embeddable Python API with no required application-specific CLI.

Installation

Published releases can be installed with uv:

uv add lidar-camera-calibrator

For development from a checkout:

uv sync --locked
uv run python examples/numpy_scene.py --frames 100 --launch

Manual calibration workflow

Convert application-owned data to the canonical scene profile, then launch the viewer:

from lidar_camera_calibrator import CalibrationConfig, launch_calibrator, write_profile_mcap

source_config = build_source_config_from_your_data()
write_profile_mcap(source_config, "scene.mcap")
result = launch_calibrator(
    "scene.mcap",
    CalibrationConfig(initial_override="calibration.json"),
)

SourceAdapterConfig accepts ordinary Python sequences and NumPy arrays. Your integration decides how proprietary logs, folders, databases, ROS exports, or other formats are read. The package validates and synchronizes the resulting sensor values before atomically writing canonical MCAP.

For standard Foxglove JSON/base64 MCAP:

from lidar_camera_calibrator import foxglove_source_config, write_profile_mcap

source = foxglove_source_config("recording.mcap")
write_profile_mcap(source, "scene.mcap")

The viewer itself deliberately accepts only canonical scene MCAP:

python -m lidar_camera_calibrator scene.mcap

Documentation

Build the GitHub Pages site locally with:

uv sync --only-group docs
uv run --no-sync mkdocs serve

Platform status

Platform Status
Linux Validated development platform
Windows Supported CPU path; synchronous preparation is retained for safety, with full release workflow validation pending
macOS Expected to work with the CPU/PySide6 stack, but currently experimental until CI and real GUI smoke testing are complete

No native GPU renderer is currently shipped. The complete CPU workspace is the default on every platform.

Development data

KITTI-specific helpers exist to exercise a known public dataset and regression-test transforms, synchronization, conversion, and rendering. They are optional:

from lidar_camera_calibrator import kitti_source_config

New integrations should normally use SourceAdapterConfig directly or add a focused source adapter that produces it.

License

Licensed under the Apache License 2.0.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lidar_camera_calibrator-0.1.0.tar.gz (1.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lidar_camera_calibrator-0.1.0-py3-none-any.whl (125.8 kB view details)

Uploaded Python 3

File details

Details for the file lidar_camera_calibrator-0.1.0.tar.gz.

File metadata

  • Download URL: lidar_camera_calibrator-0.1.0.tar.gz
  • Upload date:
  • Size: 1.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Omarchy","version":"4.0.1","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for lidar_camera_calibrator-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3914c0ba68e7fb836b7fa921b5a17a2f22bd76b7174c40ae702c103416667d7d
MD5 4e6e185d146e289a46f65a3892b0a5ac
BLAKE2b-256 a6a53cef52100608d6e6ed23797d52ec90d67f34165576c19e31b4f72463b255

See more details on using hashes here.

File details

Details for the file lidar_camera_calibrator-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: lidar_camera_calibrator-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 125.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Omarchy","version":"4.0.1","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for lidar_camera_calibrator-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 278deb45b7b8d8df8b4d2112b0ffa9679304a04d933a0b24286f7fba4e2bf001
MD5 c3918b2e56373415bc8cc7c715326e45
BLAKE2b-256 18432de74061f300de3c2cf8f9543da27a635d777319a6c7e93dfdd959436d76

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.1

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page