Skip to content

Ground Vehicle Dead Reckoning

Overview

The IMX inertial navigation integrates IMU data to dead reckon (estimate position and velocity) when GPS position fix is not available. The amount of position error during dead reckoning can vary based on several factors including system runtime, motion experienced, and sensor bias stability.

Knowledge about the vehicle's kinematic constraints is applied to reduce drift and improve position estimation.

Installation

Important

It is critical to ensure the IMX remains fixed relative to the vehicle. Any shift or change in the IMX location relative to the vehicle will result in degraded or inaccurate dead reckoning solution.

Important

Heavy vibrations can degrade the IMX measurements and dead reckoning solution.

  1. Mount the IMX and GNSS antenna at fixed locations on the vehicle.
  2. Set the GPS antenna offsets relative to the IMX origin in meters. EvalTool > Data Sets > DID_FLASH_CONFIG > gps1AntOffsetX/Y/Z.

Enabling

Dead reckoning is enabled by setting the DID_FLASH_CONFIG.dynamicModel to 4 for ground vehicles. This is done automatically during Learning Mode and stored to flash memory.

Learning Mode

Learning mode is be used following installation or any change in the IMX position relative to the vehicle. Learning is used to estimate the vehicle kinematic calibration which is used during normal operation.

Learning Mode Instructions

  1. Start learning mode.
  2. Drive with sufficient motion for learning. This is identified with the EvalTool GV: Cal indicator in the INS tab turns GREEN (DID_GROUND_VEHICLE.status & GV_STATUS_LEARNING_CONVERGED is not zero). Either of the following patterns is typically adequate.
    • At least 200 meters straight, 5 left turns (+90 degrees) and 5 right turns
    • Three figure eight patterns.
  3. Stop learning and save kinematic calibration to flash memory.
Using the EvalTool

From the EvalTool INS tab:

  1. Press the GV: button to reveal the ground vehicle options.
  2. Press the Start button to clear and start learning.
  3. Press the Stop button to stop learning and save kinematic calibration to flash memory.
Using the DID_GROUND_VEHICLE Message
  1. Enable learning mode by setting the DID_GROUND_VEHICLE.mode to any of the following commands. The DID_GROUND_VEHICLE.mode value will toggle to 1 indicating the system is in learning mode and 0 to indicate learning mode is off.

    2 "Start" - Start with user supplied values in the DID_GROUND_VEHICLE.transform and enable learning mode.

    3 "Resume" - Start with the existing calibration and enable learning mode.

    4 "Clear & Start" - Set transform to zero and start with aggressive learning mode. This is the same as the "Start" button in the EvalTool INS tab.

    5 "Stop & Save" - End learning mode and save kinematic calibration to flash memory.

  2. Disable learning and save kinematic calibration to flash memory by setting DID_GROUND_VEHICLE.mode to 5.

Wheel Encoder Input (Optional)

Wheel encoder input is optional for dead reckoning operation. The implementation of wheel encoder input will improve dead reckoning performance. Encoders constrain drift along the axis of travel. The IMX-5 does not support direct wheel encoder input via I/O pins. To provide wheel encoder input, an external system must generate DID_WHEEL_ENCODER messagese that are then streamed into an IMX-5 port.

DID_WHEEL_ENCODER struct is defined below. Only omega_l and omega_r are required to be populated. All other value can be left as zero. Once populated, the full struct is streamed to the IMX-5 using the Set Data method from the SDK.

/** (DID_WHEEL_ENCODER) Message to communicate wheel encoder measurements to GPS-INS */
typedef struct PACKED
{
    /** (Do not use, internal development only) Time of measurement in current GPS week */
    double timeOfWeek;

    /** Status */
    uint32_t status;

    /** (Do not use, internal development only) Left wheel angle (rad) */
    float theta_l;

    /** (Do not use, internal development only) Right wheel angle (rad) */
    float theta_r;

    /** Left wheel angular rate (rad/s). Positive when wheel is turning toward the forward direction of the vehicle. Use WHEEL_CFG_BITS_DIRECTION_REVERSE_LEFT in DID_FLASH_CONFIG::wheelConfig to reverse this. */
    float omega_l;

    /** Right wheel angular rate (rad/s). Positive when wheel is turning toward the forward direction of the vehicle. Use WHEEL_CFG_BITS_DIRECTION_REVERSE_RIGHT in DID_FLASH_CONFIG::wheelConfig to reverse this. */
    float omega_r;

    /** (Do not use, internal development only) Left wheel revolution count */
    uint32_t wrap_count_l;

    /** (Do not use, internal development only) Right wheel revolution count */
    uint32_t wrap_count_r;

} wheel_encoder_t;

Examples

Dead reckoning examples can be found here.

Logo