Skip to article frontmatterSkip to article content

PreintegrationParams

Open In Colab

Overview

The PreintegrationParams class holds the parameters required for Inertial Measurement Unit (IMU) preintegration in GTSAM. It configures how IMU measurements (accelerometer and gyroscope) are handled, including noise characteristics, gravity direction, and Coriolis effects.

This class extends PreintegratedRotationParams (which handles gyroscope-specific parameters) by adding parameters relevant to accelerometer measurements and the combined integration process.

A single PreintegrationParams object (usually created as a shared_ptr) is typically shared among multiple preintegration instances (PreintegratedImuMeasurements or PreintegratedCombinedMeasurements).

Key Parameters

In addition to parameters inherited from PreintegratedRotationParams (like gyroscopeCovariance, omegaCoriolis, body_P_sensor), PreintegrationParams includes:

  • accelerometerCovariance: A 3x3 matrix representing the continuous-time noise covariance of the accelerometer. Units: (m/s²)²/Hz.
  • integrationCovariance: A 3x3 matrix representing additional uncertainty introduced during the numerical integration process itself (often set to zero). Units: (m²/s⁶)/Hz ? (Consult documentation for precise interpretation).
  • use2ndOrderCoriolis: A boolean flag. If true, enables a more accurate (second-order) correction for Coriolis effects, which arise from the Earth’s rotation.
  • n_gravity: A 3D vector specifying the direction and magnitude of gravity in the navigation frame (e.g., [0, 0, -9.81] for ENU, [0, 0, 9.81] for NED). Units: m/s².

Key Functionality / API

  • Constructors:
    • PreintegrationParams(n_gravity): Main constructor requiring the gravity vector.
    • MakeSharedD(g=9.81): Convenience static method to create shared parameters for a Z-down (NED) navigation frame.
    • MakeSharedU(g=9.81): Convenience static method to create shared parameters for a Z-up (ENU) navigation frame.
  • Setters: Methods like setAccelerometerCovariance, setIntegrationCovariance, setUse2ndOrderCoriolis, setGyroscopeCovariance, setOmegaCoriolis, setBodyPSensor allow configuring the parameters after creation.
  • Getters: Corresponding methods like getAccelerometerCovariance, getIntegrationCovariance, getGravity, isUsing2ndOrderCoriolis allow retrieving parameter values.
  • print / equals: Standard methods for displaying parameters and comparing them.

Usage Example

Typically, you create parameters once using a convenience function and then adjust specific noise values.

from gtsam import PreintegrationParams
import numpy as np

# Create parameters for an ENU navigation frame (Z-up)
# Using standard gravity, g=9.81 m/s^2
params = PreintegrationParams.MakeSharedU(9.81)

# Set accelerometer noise characteristics (example values)
accel_noise_sigma = 0.01  # m/s^2 / sqrt(Hz)
params.setAccelerometerCovariance(np.eye(3) * accel_noise_sigma**2)

# Set gyroscope noise characteristics (example values)
gyro_noise_sigma = 0.001 # rad/s / sqrt(Hz)
params.setGyroscopeCovariance(np.eye(3) * gyro_noise_sigma**2)

# Set integration uncertainty (often zero)
params.setIntegrationCovariance(np.eye(3) * 1e-8)

# Optionally, set sensor pose relative to body
# params.setBodyPSensor(gtsam.Pose3(...))

# Optionally, enable 2nd order Coriolis correction
# params.setUse2ndOrderCoriolis(True)

print("IMU Preintegration Parameters:")
params.print()
IMU Preintegration Parameters:

gyroscopeCovariance:
[
1e-06     0     0
    0 1e-06     0
    0     0 1e-06
]
accelerometerCovariance:
[
0.0001      0      0
     0 0.0001      0
     0      0 0.0001
]
integrationCovariance:
[
1e-08     0     0
    0 1e-08     0
    0     0 1e-08
]
n_gravity = (    0     0 -9.81)

These parameters are then passed to PreintegratedImuMeasurements or PreintegratedCombinedMeasurements when they are constructed.