Skip to content

Install and first check

Calibrex has three commands that chain: calibrex estimate (no calibration yet), calibrex check (is the deployed one still right?) and calibrex drift (did it change between recordings?). This page installs it and runs the first check; the workflow page shows all three with real outputs.

Calibrex is alpha research software with a ROS-independent core. The supported no-source install is the versioned wheel attached to the GitHub release.

Install

python -m pip install "https://github.com/rsasaki0109/Calibrex/releases/download/v0.5.1/calibrex-0.5.1-py3-none-any.whl"

Check a recording

Point calibrex check at a bag that records /tf_static and the sensor topics (see your bag format). It reads the deployed transforms, checks every sensor pair it can find, and writes a self-contained HTML report.

calibrex check my_bag/ --html check.html

Each pair gets a per-axis verdict. A pass covers only the axes the data can judge: pairs with partial coverage name the axes they could not check, and a pair the data cannot judge reads inconclusive rather than pass.

Your bag format

The bag is read as it is, with no conversion and no ROS installation; the format is detected from the file: rosbag2 (.db3), ROS 2 MCAP (chunks none, zstd, lz4) and ROS 1 .bag (chunks none, bz2, lz4). calibrex check my_bag/ --plan shows which sensor pairs the bag can be checked for without running an estimator (details). The ROS 1 and MCAP-lz4 readers, camera-LiDAR (rotation only) and the Autoware Velodyne decoder are on main and ship with the release after v0.5.1; to use them now, install from the repository: python -m pip install "git+https://github.com/rsasaki0109/Calibrex.git".

Autoware bags record raw Velodyne packets; tools/velodyne_scan_to_pointcloud2.py (in the repository) writes a derived bag with one point cloud per sensor, after which lidar-lidar gives real verdicts (the Autoware section).

No calibration yet?

Without a calibration, estimate one from the bag, then check it on another recording:

calibrex estimate my_bag/ --output est/ --html est.html     # frames.yaml, static transforms, URDF
calibrex check other_bag/ --tf est/frames.yaml --html check.html
calibrex drift day1/ day2/ day3/ --output drift/            # did it change over time?

Axes the data did not observe are marked NOT MEASURED, never written as measured.

Next steps