struct mola::state_estimation_smoother::Parameters::ImuPreintegration
Overview
IMU preintegration between consecutive keyframes: every kinematic link whose interval is covered by raw readings gets an on-manifold preintegration factor (gtsam::ImuFactor on the raw accelerometer and gyroscope readings), and every keyframe gets a gyroscope and accelerometer bias variable, chained by a random walk. The reference frame is assumed gravity-aligned (z up). Default off.
#include <Parameters.h> struct ImuPreintegration { // fields bool enabled = false; std::string sensor_label_re = ".*"; double gyro_noise_density = 2.4e-4; double accel_noise_density = 1.6e-3; double gyro_bias_random_walk = 2e-5; double accel_bias_random_walk = 3e-4; double integration_sigma = 1e-4; double gravity = 9.80665; double initial_gyro_bias_sigma = 0.02; double initial_accel_bias_sigma = 0.2; double linear_kinematics_sigma_scale = 10.0; double max_reading_gap = 0.1; double min_sigma_rotation = 2e-4; double min_sigma_position = 1e-3; double min_sigma_velocity = 5e-3; double min_link_duration = 2e-3; };
Fields
std::string sensor_label_re = ".*"
IMUs used (regex of labels)
double gyro_noise_density = 2.4e-4
[rad/s/sqrt(Hz)]
double accel_noise_density = 1.6e-3
[m/s^2/sqrt(Hz)]
double gyro_bias_random_walk = 2e-5
[rad/s^2/sqrt(Hz)]
double accel_bias_random_walk = 3e-4
[m/s^3/sqrt(Hz)]
double integration_sigma = 1e-4
position integration noise
double gravity = 9.80665
[m/s^2]
double initial_gyro_bias_sigma = 0.02
[rad/s]
double initial_accel_bias_sigma = 0.2
[m/s^2]
double linear_kinematics_sigma_scale = 10.0
The constant-velocity linear factors of a link (velocity and position integration) contradict any acceleration the IMU measures: their sigmas are multiplied by this while preintegration is on. They stay, weak, so a link without IMU data is still determined.
double max_reading_gap = 0.1
Largest gap between consecutive readings integrated across [s].
double min_sigma_rotation = 2e-4
Floor of the preintegrated uncertainty, added to it: unmodeled errors (timing, extrinsics, vibration), and numerical conditioning, since keyframes can be milliseconds apart. Rotation [rad], position [m], velocity [m/s].
double min_link_duration = 2e-3
Links shorter than this get no preintegration factor [s].