GNSS

A Novatel PwrPak7D GPS unit (with Tallysman VSP6337L dual antennas) is installed. While the GPS unit is in the trunk of the vehicle, the two antennas are located on the two rear corners of the vehicle roof.

Installation

The required ROS2 drivers were installed from https://github.com/novatel/novatel_oem7_driver/discussions/73 and executed as outlined below.

  1. ROS2 driver installation:

sudo apt-get install ros-humble-novatel-oem7-driver

  1. Verify installation by locating the package:

ros2 pkg prefix novatel_oem7_driver

  1. Test the package using:

ros2 launch novatel_oem7_driver oem7_net.launch.py oem7_ip_addr:=192.168.1.20 oem7_port:=3001 oem7_if:=Oem7ReceiverTcp

NOTE: Parameters for the above launch file include:

  • 192.168.1.20: IP address of the GPS receiver (i.e. device location on local network)

  • 3001: Port number used for communication (listening for commands and sending data) with the GPS receiver (this is usually a value between 3001 and 3007 but the default port of 3001 should work)

  • Oem7ReceiverTcp: Specifies that the interface type used to communicate with the GPS receiver is a TCP connection

Usage

The GPS publishes to the topic /novatel/oem7/gps.

After launching the package (refer to step 3 under Installation), the following commands can be used to get the details of the ROS2 GPS messages:

  1. Information on the GPS receiver’s sensor data (position, velocity, accuracy, etc…):

ros2 interface show gps_msgs/msg/GPSFix

  1. Information on the status and health information of the GPS receiver and its satellite signal:

ros2 interface show gps_msgs/msg/GPSStatus

Topic information

The following table presents a description of the GNSS data attributes included in the topic information (values of which could be obtained by the terminal command ros2 topic echo /novatel/oem7/gps):

Attribute

Description

status.header.stamp.sec

The seconds part of the time when the GNSS message was recorded.

status.header.stamp.nanosec

The fractional part of the timestamp in nanoseconds, adding precision to the recorded time. Together with sec, it gives the exact time.

status.header.frame_id

The name of the coordinate frame for the GNSS data (e.g., ‘gps’, ‘map’), to which the measurement data are in reference to. An empty value means the data is in the default form (not referenced to any predefine frame)

status.satellites_used

The number of satellites whose signals were used to calculate the GNSS position fix. More satellites usually mean better accuracy.

status.satellite_used_prn

A list of Pseudo Random Numbers (PRNs) of satellites used for the fix. Each satellite has a unique PRN for identifying it.

status.satellites_visible

The total number of satellites that the GNSS receiver could detect at the time of measurement, whether or not they were used for the fix.

status.satellite_visible_prn

A list of Pseudo Random Numbers for all visible satellites. This includes satellites that were detected but not necessarily used for position calculation.

status.satellite_visible_z

Elevation angles (in degrees) of the visible satellites relative to the receiver. Higher values indicate satellites higher in the sky.

status.satellite_visible_azimuth

Azimuth angles (in degrees) showing the compass direction (0° - 360°) where the visible satellites are located relative to the receiver.

status.satellite_visible_snr

Signal-to-Noise Ratios (SNR) of the visible satellites. Higher SNR means better signal strength, which usually results in better accuracy.

status.status

A numerical code indicating the GNSS fix status. Refer to the NovAtel BESTPOS Status Codes (Solution Status table) for a description of each code.

status.motion_source*

Specifies the source of motion data (e.g., speed). It is represented by a numerical code that identifies the sensor or method used.

status.orientation_source*

Specifies the source of orientation data (e.g., roll, pitch, yaw). This is represented by a numerical code.

status.position_source*

Specifies the source of position data (such as GNSS, odometry, or other localization methods), represented by a numerical code.

latitude

Latitude (in degrees) representing the receiver’s north-south position on the Earth’s surface. Positive values are north of the equator.

longitude

Longitude (in degrees) representing the receiver’s east-west position on the Earth’s surface. Positive values are east of the prime meridian.

altitude

Altitude (in meters) above mean sea level. Indicates the receiver’s vertical position.

track

Direction of movement (in degrees) of the receiver relative to true north (i.e. heading). For example, 0° means moving north, 90° means east.

speed

The speed of the receiver’s movement over the ground, measured in m/s

climb

The rate of the receiver’s vertical movement (climbing or descending), measured in m/s. Positive values indicate upward movement.

pitch

The tilt angle (in degrees) of the receiver relative to the lateral axis plane. Positive pitch indicates the front is pointing upwards.

roll

The tilt angle (in degrees) of the reciever relative to the longitudinal axis. Positive roll indicates tilting to the right.

dip

The angle (in degrees) between the of the receiver’s horizontal plane and the direction of the Earth’s magnetic field at a given location. Positive dip indicates magnetic field lines pointing downwards into the Earth’s surface (common in the northern hemisphere).

time

GNSS-provided time (in epoch seconds). This timestamp is in Unix time format. It is useful for synchronizing data with other sensors.

gdop

Geometric Dilution of Precision: A measure of overall accuracy based on satellite geometry (DOP Guide). Lower values mean better accuracy.

pdop

Position Dilution of Precision: Measures accuracy of 3D position. (DOP Guide). Lower values mean better position accuracy.

hdop

Horizontal Dilution of Precision: Reflects accuracy of the horizontal position. (DOP Guide). Lower values mean better horizontal accuracy.

vdop

Vertical Dilution of Precision: Reflects accuracy of vertical position. (DOP Guide). Lower values mean better vertical accuracy.

tdop

Time Dilution of Precision: Reflects accuracy of time synchronization. (DOP Guide). Lower values mean better timing accuracy.

err

General estimate of the uncertainty in the position fix (in meters).

err_horz

Estimated horizontal position error (in meters) which indicates the uncertainty in the latitude and longitude measurements.

err_vert

Estimated vertical position error (in meters) which indicates the uncertainty in the altitude measurements.

err_track

Estimated error (in degrees) in the calculated direction of travel (heading).

err_speed

Estimated error (in m/s) in the reported speed of the receiver.

err_climb

Estimated error (in m/s) in the climb rate (vertical speed).

err_time

Estimated error (in seconds) in the GNSS-provided time (accurate time synchronization is critical for sensor fusion and data alignment)

err_pitch

Estimated error (in degrees) of the forward tilt angle (pitch measurement).

err_roll

Estimated error (in degrees) of the side-to-side tilt angle (roll measurement).

err_dip

Estimated error (in degrees) of inclination of the magnetic field (dip measurement).

position_covariance

A 3x3 matrix that provides the statistical uncertainty for the position estimates along x, y, and z axes.

position_covariance_type

Indicates the type of covariance provided. A value of 2 corresponds to a diagonal position covariance matrix.

NOTE: Float values of 0.0 for corresponding attributes above may typically mean that no measurement was obtained.

‘ * ‘: guide for numerical codes not located

Resources

Note that the gps_msgs package, which includes the GPSFix and GPSStatus message types, is yet to have a complete ROS 2 documentation page for the topic information. The most detailed available documentation is mainly from ROS 1 (from which the package was ported), which is partially applicable (albeit some differences to the message structure).

For detailed information on the web for the GNSS package and topic information, you can refer to the following resources:

  1. Github repository (humble branch): https://github.com/novatel/novatel_oem7_driver/tree/humble

  2. ROS Wiki: https://wiki.ros.org/novatel_oem7_driver

  3. ROS Index (humble): https://index.ros.org/r/novatel_oem7_driver/github-novatel-novatel_oem7_driver/#humble

  4. Commands and logs: https://docs.novatel.com/OEM7/Content/PDFs/OEM7_Commands_Logs_Manual.pdf