GPS/GNSS Synchronization Guide

For more information on how to physically connect a GPS to your Ouster sensor and synchronise the Ouster sensor timestamp to an NMEA sentence, please refer to your sensor’s Hardware User Manual.

Configuring the Ouster Sensor

Now that everything is configured and verified on the GPS side and you have connected everything to the Ouster sensor, it is time to configure the Ouster sensor to synchronize its timestamp with the GPS.

  • Set the timestamp_mode to TIME_FROM_SYNC_PULSE_IN

    • TCP command: set_config_param timestamp_mode TIME_FROM_SYNC_PULSE_IN

  • Set the multipurpose_io_mode to INPUT_NMEA_UART

    • TCP command: set_config_param multipurpose_io_mode INPUT_NMEA_UART

  • Set the polarity of the sync_pulse_in pin to match the GPS PPS polarity

    • TCP command: set_config_param sync_pulse_in_polarity <ACTIVE_HIGH or ACTIVE_LOW>

  • Set the polarity of the multipurpose_io pin to match the GPS NMEA UART polarity

    • TCP command: set_config_param nmea_in_polarity <ACTIVE_HIGH or ACTIVE_LOW>

  • Set the nmea_baud_rate to match the GPS NMEA baud rate

    • TCP command: set_config_param nmea_baud_rate <BAUD_11520 or BAUD_9600>

  • Set the nmea_leap_seconds to match the current leap seconds as defined by TIA at this website, at time of writing this the leap seconds are 37

    • TCP command: set_config_param nmea_leap_seconds 37

  • Reinitialize and write the configuration

    • TCP command: reinitialize

    • TCP command: save_config_params

Checking for Sync

Once you have completed all the above you should be able to check for synchronization

  • Check the output from the TCP command: get_time_info

    • Verify that the sensor is locked onto the PPS signal.

      • ”sync_pulse_in”: { “locked”: 1 }

      • if not check the polarity and change it if necessary.

    • Verify that the sensor is locked on the NMEA signal.

      • “nmea”: { “locked”: 1 }

      • if not check the polarity and baud rate and change them if necessary.

    • Verify that last_read_message looks like a valid GPRMC sentence.

      • “decoding”: {“last_read_message”: “GPRMC,024041.00,A,5107.0017737,N,11402.3291611, W,0.080,323.3,020420,0.0,E,A*20”}

    • Verify that timestamp time has updated to a reasonable GPS time.

      • “timestamp”: {“time”: 1585881641.96139565999999, “mode”: “TIME_FROM_SYNC_PUSLE_IN”, “time_options”: { “sync_pulse_in”: 1585881641}}

Example output from get_time_info:

{
   "timestamp":{
      "time":1585881641.96139565999999,
      "mode":"TIME_FROM_SYNC_PUSLE_IN",
      "time_options":{
         "sync_pulse_in":1585881641,
         "internal_osc":302,
         "ptp_1588":309
      }
   },
   "sync_pulse_in":{
      "locked":1,
      "diagnostics":{
         "last_period_nsec":10,
         "count_unfiltered":832,
         "count":832
      },
      "polarity":"ACTIVE_HIGH"
   },
   "multipurpose_io":{
      "mode":"INPUT_NMEA_UART",
      "sync_pulse_out":{
         "pulse_width_ms":10,
         "angle_deg":360,
         "frequency_hz":1,
         "polarity":"ACTIVE_HIGH"
      },
      "nmea":{
         "locked":1,
         "baud_rate":"BAUD_9600",
         "diagnostics":{
            "io_checks":{
               "bit_count":2938457,
               "bit_count_unfilterd":2938457,
               "start_char_count":832,
               "char_count":66526
            },
            "decoding":{
               "last_read_message":"GPRMC,024041.00,A,5107.0017737,N,11402.3291611,W,
                                   0.080,323.3,020420,0.0,E,A*20",
               "date_decoded_count":832,
               "not_valid_count":0,
               "utc_decoded_count":832
            }
         },
         "leap_seconds":37,
         "ignore_valid_char":0,
         "polarity":"ACTIVE_HIGH"
      }
   }
}