Configure an NTRIP-Based RTK GPS with a Serial Connection

A global positioning system (GPS) receives signals from satellites in the earth’s orbit to determine where it is and how fast it is going. All supported GPS models provide data for the Position, CompassHeading and LinearVelocity methods. You can obtain fix and correction data by using the sensor GetReadings method, which is available because GPSes wrap the sensor component.

The gps-nmea-rtk-serial and gps-nmea-rtk-pmtk movement sensor models support NTRIP-based real time kinematic positioning (RTK) GPS units (such as these).

The chip requires a correction source to get to the required positional accuracy. The gps-nmea-rtk-serial model uses an over-the-internet correction source and sends the data over a serial connection to the board.

Navigate to the Config tab of your machine’s page in the Viam app. Click on the Components subtab and click Create component. Select the movement-sensor type, then select the gps-nmea-rtk-serial model. Enter a name for your movement sensor and click Create.

Creation of a `gps-nmea-rtk-serial` movement sensor in the Viam app config builder.

Copy and paste the following attribute template into your movement sensor’s Attributes box. Then remove and fill in the attributes as applicable to your movement sensor, according to the table below.

{
  "serial_path": "<path_to_serial_port>",
  "serial_baud_rate": <int>,
  "ntrip_connect_attempts": <int>,
  "ntrip_mountpoint": "<identifier>",
  "ntrip_password": "<password for NTRIP server>",
  "ntrip_url": "<URL of NTRIP server>",
  "ntrip_username": "<username for NTRIP server>"
}
{
  "serial_path": "/dev/serial/by-path/usb-0:1.1:1.0",
  "serial_baud_rate": 115200,
  "ntrip_connect_attempts": 12,
  "ntrip_mountpoint": "MNTPT",
  "ntrip_password": "pass",
  "ntrip_url": "http://ntrip/url",
  "ntrip_username": "usr"
}
{
  "components": [
    {
      "name": "<your-sensor-name>",
      "model": "gps-nmea-rtk-serial",
      "type": "movement_sensor",
      "namespace": "rdk",
      "attributes": {
        "serial_path": "<path_to_serial_port>",
        "serial_baud_rate": <int>,
        "ntrip_connect_attempts": <int>,
        "ntrip_mountpoint": "<identifier>",
        "ntrip_password": "<password for NTRIP server>",
        "ntrip_url": "<URL of NTRIP server>",
        "ntrip_username": "<username for NTRIP server>"
      },
      "depends_on": [],
    }
  ]
}
{
  "components": [
    {
      "name": "my_GPS",
      "model": "gps-nmea-rtk-serial",
      "type": "movement_sensor",
      "namespace": "rdk",
      "attributes": {
        "serial_path": "/dev/serial/by-path/usb-0:1.1:1.0",
        "serial_baud_rate": 115200,
        "ntrip_connect_attempts": 12,
        "ntrip_mountpoint": "MNTPT",
        "ntrip_password": "pass",
        "ntrip_url": "http://ntrip/url",
        "ntrip_username": "usr"
      },
      "depends_on": []
    }
  ]
}

The "serial_path" filepath used in this example is specific to serial devices connected to Linux systems. The "serial_path" filepath on a macOS system might resemble "/dev/ttyUSB0" or "/dev/ttyS0".

The following attributes are available for a gps-nmea-rtk-pmtk movement sensor:

NameTypeInclusionDescription
serial_pathstringRequiredThe full filesystem path to the serial device, starting with /dev/. To find your serial device path, first connect the serial device to your machine, then:
  • On Linux, run ls /dev/serial/by-path/* to show connected serial devices, or look for your device in the output of sudo dmesg | grep tty. Example: "/dev/serial/by-path/usb-0:1.1:1.0".
  • On macOS, run ls /dev/tty* | grep -i usb to show connected USB serial devices, ls /dev/tty* to browse all devices, or look for your device in the output of sudo dmesg | grep tty. Example: "/dev/ttyS0".
serial_baud_rateintOptionalThe rate at which data is sent from the sensor.
Default: 38400
ntrip_urlstringRequiredThe URL of the NTRIP server from which you get correction data. Connects to a base station (maintained by a third party) for RTK corrections.
ntrip_usernamestringOptionalUsername for the NTRIP server.
ntrip_passwordstringOptionalPassword for the NTRIP server.
ntrip_connect_attemptsintOptionalHow many times to attempt connection before timing out.
Default: 10
ntrip_mountpointstringOptionalIf you know of an RTK mountpoint near you, write its identifier here. It will be appended to NTRIP address string (for example, “nysnet.gov/rtcm/NJMTPT1”) and that mountpoint’s data will be used for corrections.

Test the movement sensor

After you configure your movement sensor, navigate to the Control tab and select the dedicated movement sensor dropdown panel. This panel presents the data collected by the movement sensor. The sections in the panel include the position, linear velocity and compass heading.

The movement sensor component in the control tab


Have questions, or want to meet other people working on robots? Join our Community Discord.

If you notice any issues with the documentation, feel free to file an issue or edit this file.