Dieses Tutorial erklärt die Integration des u-blox ZED-F9P RTK GNSS Empfänger mit einem Roboter, der ROS 2 (Jazzy) ausführt. Sie lernen, wie Sie die Hardware anschließen, den Empfänger konfigurieren, einen ROS 2-Arbeitsbereich einrichten und die erforderlichen Knoten starten, um hochpräzise GPS-Daten mit RTK-Korrekturen über einen NTRIP Bedienung.
Am Ende dieses Handbuchs verfügen Sie über ein voll funktionsfähiges ROS 2-Setup, das Echtzeit-RTK-Daten von Ihrem RTK-Empfänger streamt, basierend auf u-blox ZED-F9P– geeignet für Roboteranwendungen, die eine Positionierungsgenauigkeit im Zentimeterbereich erfordern.
Erforderliche Hardware:
- simpleRTK2B – Basis-Starterkit
- USB-Kabel Kompatibel mit dem USB-Anschluss Ihres Receivers zum Anschluss an einen PC oder eine eingebettete Plattform
- einen PC oder eine eingebettete Plattform mit Internetzugang (in diesem Tutorial verwenden wir einen PC)
Erforderliche Software:
- Ubuntu 24.04 (nativ installiert, in einer virtuellen Maschine oder über WSL)
- ROS 2 (Jazzy) (auf der Ubuntu-Plattform installiert)
Nützliche Adressen
- Hilfreiche Ressourcen zur Installation von Ubuntu:
- Verwenden von WSL oder virtuellen Maschinen: Wenn Sie WSL oder virtuelle Maschinen verwenden möchten, müssen Sie den RTK-Empfänger mit Ubuntu teilen. Hier finden Sie Anweisungen zur Freigabe:
- NTRIP Service-Zugang: Stellen Sie sicher, dass Sie Zugriff und Anmeldeinformationen haben, um NTRIP Service. Benötigen Sie Hilfe bei der Suche nach einem Korrekturservice, wenden Sie sich an unsere Liste von NTRIP Korrekturdienste in Ihrem Land.
- RTK-Empfängerkonfiguration: Stellen Sie sicher, dass Ihr RTK-Empfänger als Rover. Wenn Sie Hilfe bei der Konfiguration eines u-blox ZED-F9P als ein Rover, beziehen Sie sich auf unsere ZED-F9P Konfigurationsdateien.
Wie stellt man das ein u-blox ZED-F9P RTK-Empfänger mit ROS 2?
ROS 2-Umgebung einrichten
- Wenn die ROS 2-Umgebung installiert wurde, folgen Sie den ROS2-Installationshandbuch, standardmäßig ist es nicht aktiv, wenn Sie ein Terminal öffnen.
Um dies zu beheben, öffnen Sie das Terminal und führen Sie den folgenden Befehl aus, um Ubuntu so zu konfigurieren, dass die ROS 2-Umgebung automatisch in Ihre Terminal-Startkonfiguration geladen wird.
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
Um die Änderungen anzuwenden, verwenden Sie den folgenden Befehl. Danach ist ROS 2 jedes Mal einsatzbereit, wenn Sie ein Terminal öffnen.
source ~/.bashrc
- Um Abhängigkeiten in ROS 2 zu verwalten, aktualisieren Sie Ihre Paketliste und installieren ROS-Entwicklertools, Die umfasst Rosdep und andere nützliche Entwicklungstools für ROS 2.
sudo apt update && sudo apt install ros-dev-tools
RTK-Empfänger anschließen
- Schließen Sie die RTK-Antenne an Ihren Empfänger an. Platzieren Sie die Antenne an einem Ort mit guter Sicht zum Himmel oder in der Nähe eines Fensters, um die Funktionalität zu testen.
- Verbinden Sie Ihren Receiver über den mit „POWER+GPS"
- Der Empfänger sollte automatisch konfiguriert sein. Um dies zu überprüfen, öffnen Sie Terminal und geben Sie den Befehl ein. Sie sollten sehen / dev / ttyACM0 (oder ein ähnliches Gerät, zB / dev / ttyACM1).
ls /dev/ttyACM*

- Um den GPS-Stream vom RTK-Empfänger zu überprüfen, führen Sie den Befehl im Terminal aus. Er zeigt die Rohdaten des GPS-Streams vom Empfänger an. Drücken Sie Ctrl + C stoppen.
sudo cat /dev/ttyACM0
- TIPP: Wenn keine Ausgabe angezeigt wird oder das Gerät fehlt, überprüfen Sie, ob Ihr Benutzer über die entsprechenden Berechtigungen verfügt (z. B. Mitglied der Dialout-Gruppe ist). Sie können sich mit dem folgenden Befehl selbst hinzufügen. Melden Sie sich anschließend ab und wieder an, damit die Änderungen wirksam werden.
sudo usermod -a -G dialout $USER
- Um zu verhindern, dass der RTK-Empfänger in einer anderen „ttyACM*“ jedes Mal, wenn es eingeschaltet ist, erstellen Sie eine udev-Regel (ein dynamischer Link), der einen Eintrag mit einem bestimmten Namen erstellt, indem vor dem Verbinden des RTK-Empfängers die folgende Datei hinzugefügt wird.
sudo nano /etc/udev/rules.d/50-ardusimple.rules
- Presse Strg + X um die Datei zu verlassen und drücken Sie Y um den geänderten Puffer zu speichern.
- Trennen Sie den RTK-Empfänger (schalten Sie die Stromversorgung ab) und schließen Sie ihn erneut an (Stromversorgung).
- Wenn nun ein RTK-Empfänger angeschlossen ist, ist er über die Schaltfläche „/dev/tty_Ardusimple”-Link. Um dies zu überprüfen, geben Sie die folgenden Befehle ein:
sudo service udev reload
sudo service udev restart
sudo udevadm trigger
ls /dev/
Bereiten Sie einen neuen ROS 2-Arbeitsbereich für das Projekt vor
- Um ein Arbeitsbereichsverzeichnis zu erstellen, öffnen Sie ein Terminal und erstellen Sie einen Ordner (z. B. ros2_ws) mit einer src Unterordner:
mkdir -p ~/ros2_ws/src
- Navigieren Sie zu Ihrem Arbeitsbereich.
cd ~/ros2_ws
- Um den Arbeitsbereich zu erstellen, verwenden Sie kolcon um alle Pakete darin zu erstellen src:
colcon build
- Geben Sie die Setup-Datei als Quelle ein, damit Ihre Shell die neu erstellten Pakete erkennt:
source install/setup.bash
- Fügen Sie diesen Befehl zu Ihrer ~/.bashrc (oder einem gleichwertigen Befehl) hinzu, um die Quelle automatisch zu verwenden, wenn Sie ein neues Terminal öffnen.
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc

- Jetzt haben Sie einen grundlegenden ROS2-Arbeitsbereich für die weitere Entwicklung und Integration mit ArduSimple RTK.
Starten Sie den Knoten auf ROS 2, um eine Verbindung zum RTK-Empfänger herzustellen
- Zum Klonen der u-blox Repository zu Ihrem ROS 2-Arbeitsbereich (~/ros2_ws/src):
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/KumarRobotics/ublox.git
- Einleiten Rosdep und laden Sie die neuesten Paketabhängigkeitsdefinitionen herunter.
sudo rosdep init
rosdep update

- Jetzt die u-blox Knoten ist in Ihrer ROS2-Umgebung verfügbar.
- Ändern Sie die Konfigurationsdatei, um Gerätepfade oder Parameter nach Bedarf zu aktualisieren (wir verwenden /dev/tty_Ardusimple). Das ublox_gps-Paket enthält eine Standardkonfigurationsdatei namens zed_f9p.yaml. Öffnen Sie die Konfigurationsdatei mit dem folgenden Befehl:
nano ~/ros2_ws/src/ublox/ublox_gps/config/zed_f9p.yaml
- Erstellen Sie die Pakete neu. Wir empfehlen die Verwendung eines separates Paket für Ihre benutzerdefinierten Konfigurations- und Startdateien, um die Übersicht zu behalten. Wir werden diesen Ansatz später besprechen.
cd ~/ros2_ws
colcon build
source install/setup.bash

- Um ein Anhalten des Knotens zu vermeiden, öffnen Sie ein neues Terminal und initialisieren Sie den Arbeitsbereich mit dem folgenden Befehl. Wenn dieser Knoten angehalten wird, u-blox Das Gerät wird seine Themen nicht mehr veröffentlichen oder seine Dienste bereitstellen.
source ~/ros2_ws/install/setup.bash
- Um den Stream zu stoppen, drücken Sie Ctrl + C.
- Zeigen Sie die Liste der vom Knoten bereitgestellten verfügbaren Dienste an.
ros2 service list
- Jetzt haben Sie die u-blox ROS 2-Knoten führt Echtzeitdaten von Ihrem RTK-Empfänger aus und veröffentlicht sie.
Wichtig:- Stoppen Sie nicht die u-blox Knoten. Dieser Knoten muss ausgeführt werden, bevor die Schritte zum Starten des NTRIP Client, da der Korrekturserver Live-GPS-Daten benötigt, um RTCM-Korrekturen zu berechnen und zu senden.
- Der u-blox Der Knoten muss aktiv bleiben, um die GPS-Ausgabe mithilfe des ROS2-Themas Echo zu visualisieren, wie im vorherigen Schritt gezeigt.
Starten Sie Node auf ROS 2 zur Verwendung NTRIP Korrekturen
Hinweis: Stellen Sie sicher, dass der GPS-Verbindungsknoten bereits läuft, da dieser für die Übertragung von Korrekturdaten erforderlich ist.
- Navigieren Sie zum ROS2-Arbeitsbereichsverzeichnis und klonen Sie den ROS 2-Zweig.
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/LORD-MicroStrain/ntrip_client.git
- Um das Schließen des Knotens zu vermeiden, öffnen Sie ein neues Terminal und initialisieren Sie den Arbeitsbereich.
Hinweis: Wenn der Knoten gestoppt wird, u-blox Gerät empfängt keine Korrekturdaten mehr. Das u-blox Knoten muss laufen, bevor der NTRIP Client, da er die notwendigen GPS-Daten an den Korrekturserver liefert. Wenn der u-blox Wenn der Knoten gestoppt wird, veröffentlicht er die erforderlichen Themen und Dienste nicht mehr und der RTK-Empfänger empfängt keine Korrekturdaten mehr.
source ~/ros2_ws/install/setup.bash
- Um das Schließen des Knotens zu vermeiden, öffnen Sie ein neues Terminal und initialisieren Sie den Arbeitsbereich.
Hinweis: Wenn der Knoten gestoppt wird, u-blox Gerät empfängt keine Korrekturdaten mehr. Das u-blox Knoten muss laufen, bevor der NTRIP Client, da er die notwendigen GPS-Daten an den Korrekturserver liefert. Wenn der u-blox Wenn der Knoten gestoppt wird, veröffentlicht er die erforderlichen Themen und Dienste nicht mehr und der RTK-Empfänger empfängt keine Korrekturdaten mehr.
source ~/ros2_ws/install/setup.bash
- Liste der verfügbaren Themen anzeigen.
ros2 topic list
- Wichtige Themen, die Ihnen möglicherweise begegnen:
- /rtcm: Veröffentlicht RTCM-Korrekturdaten (je nach Konfiguration entweder mavros_msgs/RTCM oder rtcm_msgs/Message).
- /nmea: Abonniert lokale NMEA-Sätze und leitet sie an den Server weiter.
- /ublox_gps_node/fix: Kann auch globale Positionsdaten weiterleiten, wenn diese nicht bereits im NMEA-Format vorliegen.
- Wenn alles richtig und erfolgreich durchgeführt wurde, sehen Sie, dass der Knoten RTCM-Korrekturen auf dem /rtcm Thema. Verwenden ntrip_client Node, Sie können RTCM-Korrekturdaten in Ihr ROS 2-Projekt integrieren, um eine präzise Positionierung mit RTK-Empfänger zu ermöglichen.
ros2 topic echo /rtcm
- Mit diesem Knoten können Sie RTCM-Korrekturdaten in Ihr ROS 2-Projekt integrieren, um eine präzise Positionierung mit RTK-Empfänger zu ermöglichen.
Erstellen eines kombinierten Startpakets
Wir erstellen ein dediziertes Paket, das eine einzelne Startdatei zum Ausführen enthält beide ublox_gps Knoten (Veröffentlichung von GPS-Daten) und der ntrip_client Knoten (zur Handhabung von RTK-Korrekturen) gleichzeitig. Dieser Ansatz hält Ihren Arbeitsbereich übersichtlich und erleichtert das Starten aller erforderlichen Knoten mit einem Befehl.
- Öffnen Sie ein neues Terminal, navigieren Sie zu Ihrem ROS2-Arbeitsbereich und erstellen Sie ein neues Paket. Führen Sie für ein Python-basiertes Start-Nanofile die folgenden Befehle aus:
cd ~/ros2_ws/src
ros2 pkg create combined_rtk --build-type ament_python
- Erstellen Sie im neuen Paket ein Startverzeichnis und eine Python-Startdatei.
mkdir -p combined_rtk/launch
nano ~/ros2_ws/src/combined_rtk/launch/combined_nodes.launch.py
- Kopieren Sie den Code aus dem folgenden Beispiel und fügen Sie ihn in die Datei ein. Der Code bewirkt Folgendes:
- ublox_gps Knoten: Veröffentlicht GPS-Rohdaten von Ihrem ArduSimple Gerät.
- ntrip_client Knoten: Verbindet sich mit dem NTRIP caster/server und veröffentlicht RTCM-Korrekturen auf /rtcm (und kann bei Bedarf auch /nmea oder /fix abonnieren).
- Shebang (#!/usr/bin/env python3) – Stellt sicher, dass die Datei als Python-Skript ausgeführt wird.
- Startbeschreibung – Definiert, welche Knoten gestartet werden sollen.
- Knoten Parameter – Legt knotenspezifische Parameter fest (z. B. Gerät, Host, Port, Authentifizierung).
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import SetEnvironmentVariable
def generate_launch_description():
# ---------------------------------------------
# Node configuration for ublox_gps
# ---------------------------------------------
ublox_node = Node(
package='ublox_gps', # ROS 2 package containing the ublox GPS driver
executable='ublox_gps_node', # Executable name for the ublox GPS node
name='ublox_gps_node', # Name assigned to the node
output='screen', # Output log to screen
parameters=[{ # Node parameters defined inline
'debug': 0, # Debug level (0 = none)
'device': '/dev/tty_Ardusimple', # Serial port where GPS is connected
'frame_id': 'gps', # Frame ID to tag published GPS messages
'uart1': {
'baudrate': 9600 # Baudrate for UART1
},
'tmode3': 1, # Survey-in mode (TMODE3 = 1)
'sv_in': { # Survey-in configuration
'reset': True, # Reset survey-in every startup
'min_dur': 300, # Minimum duration for survey-in (seconds)
'acc_lim': 3.0 # Accuracy limit for survey-in (meters)
},
'inf': {
'all': True # Enable all INF messages on console
},
'publish': {
'all': True, # Publish all available messages
'aid': {
'hui': False # Do not publish aiding HUI messages
},
'nav': {
'posecef': False # Do not publish NAV-POSECEF messages
}
}
}]
)
# ---------------------------------------------
# Environment variable to control NTRIP client debug
# ---------------------------------------------
set_debug_env = SetEnvironmentVariable(
name='NTRIP_CLIENT_DEBUG', # Name of the environment variable
value='false' # Disable debug output
)
# ---------------------------------------------
# Node configuration for NTRIP client
# ---------------------------------------------
ntrip_node = Node(
package='ntrip_client', # ROS 2 package containing the NTRIP client
executable='ntrip_ros.py', # Python script for the NTRIP client
name='ntrip_client', # Name assigned to the node
output='screen', # Output log to screen
parameters=[{ # Parameters required for NTRIP connection
'host': 'ppntrip.services.u-blox.com', # NTRIP caster hostname
'port': 2101, # NTRIP port (integer)
'mountpoint': 'NEAR-RTCM', # Mountpoint on the NTRIP caster
'ntrip_version': 'None', # Optional NTRIP version
'authenticate': True, # Use authentication (username/password)
'username': user', # Auth username
'password': 'password', # Auth password
'ssl': False, # SSL not used
'cert': 'None', # No client certificate
'key': 'None', # No client key
'ca_cert': 'None', # No custom CA certificate
'rtcm_frame_id': 'odom', # Frame ID for published RTCM messages
'nmea_max_length': 128, # Max NMEA sentence length
'nmea_min_length': 3, # Min NMEA sentence length
'rtcm_message_package': 'rtcm_msgs', # Use the rtcm_msgs message format
'reconnect_attempt_max': 10, # Max reconnect attempts before giving up
'reconnect_attempt_wait_seconds': 5, # Wait time between reconnects
'rtcm_timeout_seconds': 4 # Max time without RTCM before reconnect
}],
remappings=[
('/fix', '/ublox_gps_node/fix') # Remap /fix topic to /ublox_gps_node/fix
]
)
# Return the full launch description with all configured actions
return LaunchDescription([
set_debug_env, # Set environment variable for NTRIP debug
ublox_node, # Launch ublox GPS node
ntrip_node # Launch NTRIP client node
])
- Öffne setup.py.
nano ~/ros2_ws/src/combined_rtk/setup.py
- Kopieren Sie den untenstehenden Code und fügen Sie ihn in das setup.py Datei, um Startdateien und Abhängigkeiten einzuschließen. Schließen Sie die Datei und speichern Sie die Änderungen.
import os
import glob
from setuptools import find_packages, setup
package_name = 'combined_rtk'
setup(
name=package_name,
version='0.0.0',
packages=find_packages(exclude=['test']),
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name, ['package.xml']),
(os.path.join('share', package_name), ['package.xml', *glob.glob('launch/*')]),
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='jmnavarrete',
maintainer_email='jmnavarrete@todo.todo',
description='TODO: Package description',
license='TODO: License declaration',
tests_require=['pytest'],
entry_points={
'console_scripts': [
],
},
)
- Starten Sie sowohl ublox_gps und ntrip_client Knoten mit einem Befehl:
ros2 launch combined_rtk combined_nodes.launch.py
- Sie sollten in Ihrem Terminal Protokolle von beiden Knoten sehen, die Folgendes anzeigen:
- ublox_gps liest GPS-Daten vom angegebenen Gerät (z. B. /dev/tty_Ardusimple).
- ntrip_client ist mit deinem verbunden NTRIP Server und Veröffentlichung von RTCM-Korrekturen auf /rtcm (und möglicherweise Abonnement von /nmea, falls konfiguriert).
- Um Themen, Dienste und Gerätestatus zu überprüfen, öffnen Sie ein neues Terminal und initialisieren Sie:
source install/setup.bash
- Der ublox_gps Node veröffentlicht Diagnosen zu einem Thema wie /Diagnose. So prüfen Sie Diagnoseinformationen:
ros2 topic echo /diagnostics
Es enthält Statusmeldungen wie horizontale Genauigkeit, vertikale Genauigkeit und „3D-Fix“, wenn der Empfänger eine gültige Position hat, oder „Fix nicht ok“, wenn das GPS noch nicht richtig fixiert ist.
- Wichtige Tipps zum Überprüfen des Fixstatus:
- Überwachen /ublox_gps_node/fix in NavSatFix-Nachrichten (Feld „status.status“) oder Diagnosenachrichten für detailliertere textbasierte Status.
- Der /Diagnose Das Thema bietet oft eine lesbare Zusammenfassung wie „3D-Fix“.
- Wasser /ublox/navpvt um detaillierte Informationen zu erhalten:
- Das Feld „fix_type“ sollte für 3D-Fix 3 sein.
- Das Flag-Feld sollte anzeigen, dass Korrekturen verwendet werden.
- Das Feld „flags2“ enthält den RTK-Status: 67 RTK Float, 128 RTK Fix. Ist der Wert deutlich niedriger, bedeutet dies wahrscheinlich, dass keine RTK-Korrekturen angewendet werden.
- Stellen Sie sicher, dass Ihre Antenne freie Sicht auf den Himmel und Ihre NTRIP caster Die Anmeldeinformationen sind korrekt, um einen stabilen RTK-Fix zu erreichen.
Wenn Sie diesem Tutorial folgen möchten, haben wir alle Produkte auf Lager und versandbereit:
-
Rabatt!Made in EuropeRTK starter kits
simpleRTK2B – Basic Starter Kit
Ab 199,00€ Dieses Produkt hat mehrere Varianten. Die Optionen können auf der Produktseite ausgewählt werden