IMU PreIntegration Error
Overview
IMU preintegration error metrics contains all the relevant information to compute a preintegration cost based on a series of navigation states and IMU measurements.
In MetriCal, an IMU's navigation states represent key points in time where the IMU's position and velocity can be temporally related to another component, e.g. a camera. MetriCal uses these moments to define a preintegration window for the IMU, which in turn will produce a local increment, also known as a preintegrated measurement.
See the Analysis section for a more detailed explanation of preintegration.
Definition
IMU preintegration error metrics contain the following fields:
Field | Type | Description |
---|---|---|
nav_component_id | UUID | The UUID of the IMU component this metric was generated from. |
initial_gyro_bias | An array of 3 float values | The XYZ components denoting the initial gyro bias (units of radians / second) |
initial_accelerometer_bias | An array of 3 float values | The XYZ components denoting the initial accelerometer bias (units of meters / seconds2) |
start_navigation_states | An array of extrinsics-velocity objects | The inferred starting navigation states. |
end_navigation_states | An array of extrinsics-velocity objects | The inferred ending navigation states. |
local_increments | An array of extrinsics-velocity objects | The local increments of the preintegration before bias correction. |
misalignments | An array of extrinsics-velocity objects | The residual errors of the preintegration. The misalignment between the preintegration and the inferred preintegration based on the navigation states. |
preintegration_times | An array of floats | The preintegration horizon. The change in time between the start and end navigation states. |
gyro_biases | An array of arrays of 3 float values | An array of the inferred XYZ gyro biases of the preintegration. |
accelerometer_biases | An array of arrays of 3 float values | An array of the inferred XYZ accelerometer biases of the preintegration. |
Analysis
Navigation States and Preintegration
In order to understand preintegration, it's helpful to understand what would happen without it. In a naive IMU integration, every new IMU measurement is integrated back into the same starting frame to produce a new navigation state. This is called IMU mechanization.
However, this approach has some serious problems. For one, any measurements out-of-sequence will make the computation more difficult, since every measurement state relies on the one before it. Moreover, IMU measurements will only help us propagate our navigation state estimate, not correct it. In such mechanized motion models, every subsequent navigation state becomes more uncertain if we don't have any auxiliary information to correct the state.
Instead, MetriCal uses preintegration to solve these problems. Preintegration is the process of reorganizing the state integration from a global frame into local increments between navigation states.
This small reformulation allows us to address most of the problems created by global state propagation, and is more computationally efficient to boot. Because of this shift in thinking, local increments don't even need to account for the starting navigation state's velocity nor correct specific-force measurements to accelerations. The local increment is simply the integral of intrinsically corrected IMU measurements between the start and the end navigation states. MetriCal optimizes the calibration and start and end navigation states to align with this preintegrated local increment.
If you want to learn more about IMU preintegration, we wrote a whole series on IMUs on the Tangram Vision Blog! There's a lot to know; we don't get to preintegration until Part 5.