struct mola::LidarOdometry::Parameters::InitialLocalizationOptions

Overview

#include <LidarOdometry.h>

struct InitialLocalizationOptions
{
    // fields

    InitLocalization method = InitLocalization::FixedPose;
    mrpt::math::TPose3D fixed_initial_pose;
    std::optional<mrpt::math::CMatrixDouble66> initial_pose_cov;
    uint32_t additional_uncertainty_after_reloc_how_many_timesteps = 5;
    uint32_t additional_map_freeze_after_reloc_how_many_timesteps = 0;
    double imu_initial_calibration_window_seconds = 1.0;
    uint32_t imu_initial_calibration_min_samples = 20;
    double imu_initial_calibration_max_dispersion_deg = 1.5;
    double imu_initial_calibration_dispersion_timeout = 5.0;
    uint32_t imu_initial_calibration_sample_count = 50;
    double imu_initial_calibration_max_age = 0.75;
    bool imu_initial_calibration_legacy_mode = false;
    bool use_imu_orientation = true;
    double from_state_estimator_max_position_sigma = 0.5;
    double from_state_estimator_max_orientation_sigma_deg = 3.0;
    double from_state_estimator_timeout = 60.0;

    // methods

    void initialize(const Yaml& c);
};

Fields

double imu_initial_calibration_window_seconds = 1.0

Seconds of accelerometer data to average while stationary to estimate Pitch & Roll. This is the knob that actually determines accuracy: the error is dominated by platform motion during the window, not by sensor noise, so what matters is the DURATION and not how many samples the sensor happens to deliver in it.

uint32_t imu_initial_calibration_min_samples = 20

Minimum number of samples inside the window above. A sanity floor to reject a degenerate handful of samples; it is not what sets the averaging time.

double imu_initial_calibration_max_dispersion_deg = 1.5

Maximum RMS angular dispersion [deg] of the accelerometer directions in the window for it to be accepted as measuring gravity. While it is exceeded, initialization is deferred and retried with a fresher window, instead of freezing an attitude taken while the platform was being jostled. 0 disables the gate.

double imu_initial_calibration_dispersion_timeout = 5.0

How long [s] the dispersion gate above may defer initialization before accepting the most recent window anyway, so a permanently dynamic start still initializes. 0 waits indefinitely for a quiet window.

uint32_t imu_initial_calibration_sample_count = 50

DEPRECATED, use imu_initial_calibration_window_seconds instead. Number of IMU (accelerometer) samples to accumulate to estimate Pitch & Roll. Couples the averaging time to the sensor rate, and cannot be satisfied at all by a low-rate IMU if the samples do not fit within imu_initial_calibration_max_age. Only honored when it is set in the YAML and imu_initial_calibration_window_seconds is not.

double imu_initial_calibration_max_age = 0.75

Maximum time span (in seconds) for the “imu_initial_calibration_sample_count” IMU samples. Only used by that deprecated path: in time-window mode the buffer horizon is the window itself.

bool imu_initial_calibration_legacy_mode = false

Set by initialize() when only the deprecated sample-count parameter is present in the YAML, in which case the legacy readiness rule is preserved as-is.

bool use_imu_orientation = true

If provided by the IMU, prefer gravity-aligned orientation from the sensor instead of accelerometer data.

double from_state_estimator_max_position_sigma = 0.5

Maximum position sigma (m) to accept state estimator as converged Used when method == FromStateEstimator

double from_state_estimator_max_orientation_sigma_deg = 3.0

Maximum orientation sigma (deg) to accept state estimator as converged Used when method == FromStateEstimator

double from_state_estimator_timeout = 60.0

Timeout (seconds) waiting for state estimator to converge If <=0, wait indefinitely