imu-calib
Kalibr-compatible IMU intrinsic calibration for Rust: estimate the parameters, then apply them online.
Implements the model from Rehder et al., "Extending Kalibr: Calibrating the Extrinsics of Multiple IMUs and of Individual Axes", ICRA 2016, and reads and writes the YAML files Kalibr uses.
Noise parameters
Record at least 3 hours with the IMU undisturbed, away from vibration.
use ;
let mut estimator = new;
// for every sample of the recording:
estimator.push;
let result = estimator.finish?;
let noise = result.noise?;
println!;
println!;
write?;
Intrinsics
Needs no camera and no target. Hold the IMU still in at least nine well-spread orientations, rotating about a different axis between each one. Start at rest: the first seconds set the noise floor that tells a hold from a move.
GuidedCalibration prompts through it live:
use ;
let mut session = new;
// for every incoming sample:
match session.push
Apply
use ImuIntrinsics;
let intrinsics = from_kalibr_yaml?;
let corrector = intrinsics.corrector?; // build once
// per sample:
let = corrector.correct;
Kalibr interop
from_kalibr_yaml reads Kalibr's imu-<bagname>.yaml directly, including the
imu0: / imu1: nesting and every key of all three --imu-models:
let intrinsics = from_kalibr_yaml?;
let second = from_kalibr_yaml_named?;
let all = all_from_kalibr_yaml_str?;
Files written by this crate use Kalibr's layout, so the two are interchangeable.
To feed a Kalibr run, write the flat input file after the Allan step:
intrinsics.save_kalibr_input_yaml?;