Skip to content

Config

SentiNAV Standalone uses a YAML configuration system.

Naming conventions

SentiNAV Standalone fuses GNSS and IMU data. In the config we use the following naming convention

  • moving_base: This is the main GNSS receiver which should transmit Position, Fix, DOP and RFISTATUS.
  • rover: Secondary GNSS receiver. Used to calculate heading. Should transmit RELPOS (relative position in NED to moving_base). Requires mounting:r_ob_rover to be set (and be very accurate)
  • imu: IMU unit.

Config parameters

  • use_full_ins: Use the full version of the INS filter (if false unfiltered GNSS data is used)
  • extract_geoid_params: Extracts geoide parameters from the files "egm96_lat_data.csv", "egm96_lon_data.csv" and "egm96grid_data.csv". If true, those files must be in the same directory as the SentiNAV executable and this allows SentiNAV to estimate height over mean sea level.
  • time_resolution: nanosecond/microsecond/millisecond/hundredsecond time resolution used in the nmea output of the filter
  • max_roll_deg: Maximum legal roll of the vehicle. If the filter estimates roll above this threshold it assumes something is wrong and re-initializes.
  • max_pitch_deg: Maximum legal pitch
  • max_vertical_velocity: maximum vertical (z-direction) velocity [m/s]
  • max_covariance_norm: Maximum norm of the position covariance in dead reckogning before re-initialising the filter.
  • alignment_ned_velocity_threshold: For velocities under this threshold the vehicle can be assumed to be at rest. [m/s]
  • alignment_ars_angular_velocity_threshold: Unused
  • fix_time_until_exit_idle: Required time with fix before initializing the filter [s]
  • gnss_message_timeout: Time with no GNSS messages before assuming fix is lost [s]
  • origin_local_ned_lat_lon_hei: origin of the local reference frame which some position estimates are relative to. See SentiProto for the output messages
  • imu_data_rate: IMU data rate. This is currently used to integrate the IMU measurements. Will be removed in a future release [hz]
  • mounting: Specify mounting parameters for the sensors. SentiNAV expects: r_ob_rover, r_ob_mb, r_ob_imu. Those are the vectors from the sensors to the Center of Origin (CO) of the veihcle [m]
  • tuning: The following are tuning parameters for SentiNAV

    • acc_noise_density: [m/s/sqrt(s)]
    • acc_vibration_scaling: []
    • acc_bias_instability: [m/s²]
    • acc_bias_scaling: []
    • acc_misalignment_err: [rad]
    • acc_scale_factor_err: [per cent decimal 0-1]
    • T_bias_acc: [s]
    • gyro_bias_init: [rad/s]
    • gyro_noise_density: [rad/sqrt(s)]
    • gyro_vibration_scaling: []
    • gyro_bias_instability: [rad/s]
    • gyro_bias_scaling: []
    • gyro_misalignment_err: [rad]
    • gyro_scale_factor_err: [per cent decimal 0-1]
    • T_bias_gyro: [s]
    • gyro_bias_init: [rad/s]
  • message_subscription_port: Here you must specify the local UDP port receveing the sensor data either from SentiBoard 2.0 or SentiUtils.

  • message_outputs: Here you specify the desired outputs from SentiNAV. SentiNAV has three timers which schedules outputs. At 1Hz, 10Hz and 100Hz. You can schedule a set of predefined output messages with one of the timers. Each message must also have a list of recipients specifed as [ip_address, port]. Supported output messages are:
    • states: INSStates in SentiProto
    • all_states: INSAllStates in SentiProto
    • covariance: INSCovariance in SentiProto
    • pos_states: INSPosStates in SentiProto
    • vel_states: INSVelStates in SentiProto
    • rotvel_states: INSRotVelStates in SentiProto
    • rfi_states: INSRfiStates in SentiProto
    • acc_states: INSAccStates in SentiProto
    • att_states: INSAttStates in SentiProto
    • nmea_gga: see Trimble for information on nmea-0183 message format
    • nmea_zda
    • nmea_rot
    • nmea_hdt
    • nmea prdid
    • nmea_ins: custom nmea message with fields listed in nmea_ins
    • mavlink: Outputs navigation data as mavlink packages.

Tuning and mounting

To achieve the best possible performance from SentiNAV it is of the utmost importance that the configured mounting lever arms, IMU orientation parameters, and the IMU tuning parameteres match the actual mounting and IMU used on the vehicle.

A wrongly configured lever arm is just as detriemental to the navigtation estimate output that a badly synchronized data stream will be, hence you should either use CAD models or calibration software to accurately deteremine these config parameters.

Tip

For the IMUs listed in the Plug-and-Play parsing sections of SentiUtils we have available pre-set tuning parameters. Reach out to your SentiSystems Point-of-Contact for more information or help with determining your IMU's tuning parameters.

Example Config

This example config file can also be accessed here: config/sentinav_example_config.yaml

## SentiNAV configuration file

# EKF INS filter parameters
sentinav:
  use_full_ins: true                  # Use full EKF INS. False = INS MVP
  extract_geoid_params: true          # Extract geoid params from files
  time_resolution: microsecond
  max_roll_deg: 30                    # Max allowable roll (re-init if exceeded)
  max_pitch_deg: 30                   # Max allowable pitch
  max_vertical_velocity: 3            # Max vertical velocity [m/s]
  max_covariance_norm: 8000           # Max norm during dead reckoning
  alignment_ned_velocity_threshold: 0.5 # Threshold for ALIGNMENT state
  alignment_ars_angular_velocity_threshold: 0.5 # Threshold for ALIGNMENT
  fix_time_until_exit_idle: 3
  gnss_message_timeout: 10
  gnss_mb_sensor_id: 0                # SensorID of MovingBase GNSS
  imu_data_rate: 100                  # Estimated IMU rate [Hz]

  ## Mounting
  mounting:
    r_ob_rover: [-4.854, 0.775, 0.0] # Lever arm from CO to rover antenna
    r_ob_mb:    [4.854, 0.775, 0.0]  # Lever arm from CO to moving base
    r_ob_imu:   [-4.854, 0.0, 0.0]   # Lever arm from CO to IMU
    imu:        [0, 180, 0]           # IMU orientation relative body frame

  ## Tuning
  tuning:
    attitude_vector_measurement_scaling: 1.2
    acc_noise_density: [0.001166667, 0.001166667, 0.001166667] 
    acc_vibration_scaling: 5
    acc_bias_instability: [0.000490332, 0.000490332, 0.000490332]
    acc_bias_scaling: 1.10
    acc_misalignment_err: 0.0012
    acc_scale_factor_err: 0.0002
    T_bias_acc: 3600
    acc_bias_init: [0.068646550, 0.068646550, 0.068646550]

    gyro_noise_density: [0.000043633, 0.000043633, 0.000043633]
    gyro_vibration_scaling: 5
    gyro_bias_instability: [0.000001454, 0.000001454, 0.000001454]
    gyro_bias_scaling: 1.10
    gyro_misalignment_err: 0.0012
    gyro_scale_factor_err: 0.0005
    T_bias_gyro: 3600
    gyro_bias_init: [0.001745329, 0.001745329, 0.001745329]

  ## Message Subscription Port
  message_subscription_port: 3001

  ## Message Outputs
  message_outputs:
    - timer1hz:
      - all_states:
          - [127.0.0.1, 3000]
      - imu_bias_states:
          - [127.0.0.1, 3000]
      - nmea_gga:
          - [127.0.0.1, 40002]
      - nmea_zda:
          - [127.0.0.1, 40005]
    - timer100hz:
      - states:
          - [127.0.0.1, 40000]

NMEA_INS

ID: $STINS

Field:

  1. UTC timestamp (same format as NMEA_GGA)
  2. Latitude
  3. Latitude direction (N/S)
  4. Longitude
  5. Longitude direction (E/W)
  6. GPS Quality indicator - same format as GGA
  7. Number of satellites in use - same format as GGA
  8. HDOP - same format as GGA
  9. Surge velocity
  10. Sway velocity
  11. Surge acceleration
  12. Sway acceleration
  13. Heading
  14. Rate of turn
  15. Roll angle
  16. Pitch angle
  17. Checksum