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.