| | |

NVIDIA Jetson + Septentrio GNSS Receiver Integration: ROS 2 Driver Setup and RTK Positioning for Autonomous Robots

Building an autonomous robot that navigates reliably outdoors is harder than it looks. Wheel odometry drifts. LiDAR SLAM can fail in open fields or tunnels. Vision-based positioning loses depth in uniform terrain. The one sensor that gives you absolute, drift-free position anywhere on Earth is a high-precision GNSS receiver — but integrating one with an NVIDIA Jetson running ROS 2 is not a plug-and-play affair.

In this guide, we walk through every step of integrating a Septentrio mosaic-X5 or mosaic-G5 P3H GNSS receiver with an NVIDIA Jetson Orin Nano / Orin NX / AGX Orin, using the official Septentrio ROS 2 driver and the NTRIP correction pipeline. By the end, you will have a calibrated, RTK-capable position and heading stream publishing directly into your ROS 2 navigation stack — ready for autonomous drones, robot dogs, field robots, and autonomous ground vehicles (AGVs).

Why NVIDIA Jetson + Septentrio GNSS for Autonomous Robots?

The NVIDIA Jetson platform brings 40–275 TOPS of GPU-accelerated AI compute to edge robots. Pairing it with a Septentrio GNSS receiver creates a sensor fusion backbone that is hard to beat:

  • Absolute centimeter-level positioning — Septentrio mosaic-X5 delivers sub-6 cm RTK accuracy, ideal for precise path following in agriculture, surveying, and logistics
  • Dual-antenna heading — The mosaic-G5 P3H outputs true heading (0.7° at 1 m baseline), eliminating the need for a magnetometer on your robot
  • Anti-jamming and multipath resilience — AIM+ and APME+ technology means your robot keeps lock in urban canyons, near power lines, or under forest canopy
  • ROS 2 native driver — Septentrio maintains a septentrio_gnss_driver package for ROS 2 Humble, Iron, and Rolling
  • Serial protocol flexibility — Use UART, USB, or Ethernet to connect the GNSS receiver to the Jetson; all work out of the box with the SBF binary protocol

Whether you are building an autonomous lawn mower, a precision agriculture robot, or an inspection drone running perception models on a Jetson, this combination provides the ideal balance of compute and positioning.

Hardware Overview: Jetson Module and Septentrio GNSS Options

NVIDIA Jetson Modules for Robotics

Module AI Performance RAM Power Best For
Jetson Orin Nano 40 TOPS 8 GB 7–15 W Entry-level AGVs, lawn mowers
Jetson Orin NX 70–100 TOPS 8–16 GB 10–25 W Delivery robots, inspection drones
Jetson AGX Orin 200–275 TOPS 32–64 GB 15–60 W Autonomous truck, robot dog, multi-sensor fusion

Septentrio GNSS Receivers for Edge AI Robots

Product Weight Power Heading Key Feature
HB21 Box Receiver 165 g 1.5 W Yes (dual antenna) 4G LTE, data logging, all-in-one
HB6 Box Receiver 85 g 0.9 W No Ultra-compact, mosaic-X5 powered
EV322 Receiver 48 g 0.75 W Optional Lightest option, embeddable
Mosaic-X5 module (bare) 18 g 0.5 W No Raw module, full I/O flexibility
Mosaic-G5 P3H module (bare) 18 g 0.6 W Yes Heading + L1/L2/L5 + AIM+

For most Jetson-based robots, the HB6 Box Receiver or EV322 offers the best weight-to-performance ratio. If your robot needs heading without a magnetometer, choose the mosaic-G5 P3H based receiver.

Wiring and Physical Connection

Serial (UART) Connection to Jetson 40-Pin Header

GNSS Receiver Pin Jetson 40-Pin Header Jetson Pin #
TX (output) UART RX Pin 10 (UART0 RX)
RX (input) UART TX Pin 8 (UART0 TX)
GND GND Pin 6 or 9
VCC (3.3V or 5V) 3.3V or 5V Pin 1 (3.3V) or Pin 2 (5V)

Important: The Jetson 40-pin header uses 3.3V logic. If your GNSS receiver module outputs 5V, use a level shifter. The HB6 and HB21 box receivers have built-in voltage regulation — connect directly to 5V power.

USB Connection (Plug and Play)

The simplest method: connect the HB6, HB21, or EV322 via USB-C to the Jetson USB 3.0 port. The receivers enumerate as a virtual COM port (e.g., /dev/ttyACM0). No level shifting or wiring required.

Ethernet Connection

For long-range deployments where the GNSS receiver is mounted on a boom or mast separate from the Jetson, use the HB21 Ethernet port. Configure a static IP on the Jetson eth0 interface, then connect via TCP port 53580 for RTCM correction injection and SBF output streaming.

ROS 2 Driver Installation and Configuration

Step 1: Install the Septentrio ROS 2 Driver on Jetson

Septentrio provides a well-maintained ROS 2 driver that handles SBF binary parsing, NMEA output conversion, and RTCM correction forwarding. Install it on your Jetson running JetPack 6.0 (ROS 2 Humble or Iron):

# Source your ROS 2 environment
source /opt/ros/humble/setup.bash

# Create workspace and clone driver
mkdir -p ~/gnss_ws/src
cd ~/gnss_ws/src
git clone https://github.com/septentrio-gnss/septentrio_gnss_driver.git

# Install via apt (recommended)
sudo apt install ros-humble-septentrio-gnss-driver

# Or build from source
cd ~/gnss_ws
colcon build --packages-select septentrio_gnss_driver
source install/setup.bash

Step 2: Configure the Launch File

Create a launch file that connects the driver to your GNSS receiver:

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='septentrio_gnss_driver',
            executable='septentrio_receiver_node',
            name='gnss_receiver',
            output='screen',
            parameters=[{
                'device': '/dev/ttyACM0',
                'baudrate': 460800,
                'frame_id': 'gnss_link',
                'nmea_output': True,
                'rtcm_topic': '/rtcm_corrections',
                'posacc_tolerance': 0.1,
                'nav_frq': 10,
            }]
        )
    ])

Step 3: Launch and Verify the Stream

ros2 launch septentrio_gnss_driver septentrio_receiver.launch.py

# In another terminal, check the streams
ros2 topic echo /gnss/navpvt  # Position, velocity, time
ros2 topic echo /gnss/navheading  # Heading (dual-antenna only)
ros2 topic echo /gnss/rtcm_status  # RTK correction status

You should see navpvt messages with fix_type=RTK_FIXED when RTK corrections are active, giving you centimeter-level accuracy in ROS 2.

Integrating GNSS Into Your Robot Navigation Stack

Sensor Fusion: GNSS + IMU + Odometry with robot_localization

The robot_localization package is the standard ROS 2 sensor fusion framework for outdoor robots. It fuses GNSS position with IMU data, wheel odometry, and visual odometry into a single, smooth state estimate using an Extended Kalman Filter (EKF).

RTK Correction Injection from NTRIP

Your Jetson can act as an NTRIP client to stream RTCM corrections to the GNSS receiver:

ros2 run septentrio_gnss_driver ntrip_client \
  --ros-args \
  -p host:=ntrip.cors.net \
  -p port:=2101 \
  -p mountpoint:=RTCM3_CMR \
  -p username:=your_user \
  -p password:=your_pass \
  -p rtcm_topic:=/rtcm_corrections

The Septentrio receiver inputs the corrections and automatically transitions to RTK fixed mode within 10–30 seconds.

Performance Benchmarks

RTK Convergence Time

Condition Time to RTK Fixed Horizontal Accuracy (RMS)
Cold start, open sky 35–50 s 0.8 cm
Warm start, CORS NTRIP 10–20 s 0.6 cm
Hot start, cached ephemeris 3–8 s 0.5 cm
Urban canyon, limited sky view 20–40 s 2.5 cm
Under light tree canopy 15–30 s 1.8 cm

CPU and Power Impact on Jetson

A standard robot running the Septentrio ROS 2 driver plus robot_localization plus RTK correction streaming uses approximately:

  • Jetson Orin Nano: ~8% CPU, 0.5 W additional power
  • Jetson Orin NX: ~4% CPU, 0.5 W additional power
  • Jetson AGX Orin: ~2% CPU, negligible additional power

The GNSS processing overhead is minimal — leaving the vast majority of Jetson compute for AI inference, computer vision, and navigation planning.

Related Products

  • HB21 GNSS Box Receiver — All-in-one RTK receiver with 4G LTE, heading, and data logging — ideal for Jetson + cellular field robots
  • HB6 GNSS Box Receiver — Compact RTK receiver powered by Septentrio Mosaic X5 — perfect lightweight companion for Orin Nano robots
  • EV322 GNSS Receiver — Lightweight RTK receiver for UAVs and autonomous systems — embeddable in custom Jetson carrier boards
  • AIM+ Anti-Jamming Technology — advanced interference and spoofing protection for autonomous robots operating in contested RF environments

Browse the full GNSS receiver collection at uav-gnss.com for professional UAV applications.

Frequently Asked Questions

1. Can the Septentrio ROS 2 driver run on Jetson Orin Nano with JetPack 6.0?

Yes. The Septentrio ROS 2 driver fully supports ROS 2 Humble and Iron on JetPack 6.0. Install via apt (ros-humble-septentrio-gnss-driver) or build from source with colcon. The driver has been tested on Orin Nano, Orin NX, and AGX Orin with serial, USB, and Ethernet connections.

2. Do I need a level shifter to connect a bare mosaic-X5 module to a Jetson GPIO UART?

If your mosaic-X5 module operates at 3.3V logic, no level shifter is needed. The Jetson 40-pin header is also 3.3V logic. However, if you are using an older evaluation board or a third-party carrier that outputs 5V on the TX pin, a bi-directional 3.3V/5V level shifter is required.

3. Does the Septentrio driver support dual-antenna heading output in ROS 2?

Yes. The mosaic-G5 P3H receiver outputs true heading via the SBF NAVHeading block, which the Septentrio ROS 2 driver publishes on the /gnss/navheading topic. This provides absolute heading (0.7 deg at 1 m baseline) without needing an onboard magnetometer.

4. How do I stream NTRIP corrections through the Jetson to the Septentrio receiver?

The Septentrio ROS 2 driver includes a built-in ntrip_client node. Configure it with your CORS NTRIP credentials, host, port, and mountpoint. The receiver transitions to RTK fixed mode within 10–30 seconds after receiving valid corrections.

5. What pinout should I use when connecting the HB6 box receiver to a Jetson Orin via UART?

The HB6 box receiver uses a standard 6-pin JST-GH connector. Wire HB6 TX (white) to Jetson pin 10 (UART0 RX), HB6 RX (green) to Jetson pin 8 (UART0 TX), HB6 GND (black) to Jetson pin 6, and HB6 VCC (red) to Jetson pin 2 (5V). No level shifter is required as the HB6 operates at 3.3V logic on the data lines. Alternatively, use USB-C for simpler plug-and-play.

Further Reading

Similar Posts