Ce tutoriel explique comment intégrer le u-blox ZED-F9P RTK GNSS Récepteur avec un robot exécutant ROS 2 (Jazzy). Vous apprendrez à connecter le matériel, à configurer le récepteur, à configurer un espace de travail ROS 2 et à lancer les nœuds nécessaires à la réception et au traitement de données GPS de haute précision avec corrections RTK via un NTRIP après-vente.
À la fin de ce guide, vous disposerez d'une configuration ROS 2 entièrement fonctionnelle diffusant des données RTK en temps réel à partir de votre récepteur RTK en fonction de u-blox ZED-F9P—adapté aux applications robotiques nécessitant une précision de positionnement au centimètre près.
Matériel requis:
- simpleRTK2B – Kit de démarrage de base
- cable USB compatible avec le port USB de votre récepteur pour connexion à un PC ou une plateforme embarquée
- un PC ou une plateforme embarquée avec accès Internet (nous utilisons un PC dans ce tutoriel)
Logiciel requis:
- Ubuntu 24.04 (installé nativement, dans une machine virtuelle ou via WSL)
- ROS 2 (Jazzy) (installé sur la plateforme Ubuntu)
Les ressources utiles
- Ressources utiles pour installer Ubuntu:
- Utilisation de WSL ou de machines virtuelles : Si vous souhaitez utiliser WSL ou des machines virtuelles, il est nécessaire de partager le récepteur RTK avec Ubuntu. Voici les instructions pour le partager avec le système :
- NTRIP Accès au service: Assurez-vous d'avoir accès et les informations d'identification pour NTRIP service. Vous avez besoin d'aide pour trouver un service correctionnel ? Consultez notre Liste de NTRIP services de correction dans votre pays.
- Configuration du récepteur RTK: Assurez-vous que votre récepteur RTK est configuré comme un Rover. Si vous avez besoin d'aide pour configurer un u-blox ZED-F9P en tant que Rover, consultez notre ZED-F9P Fichiers de configuration.
Comment mettre en place u-blox ZED-F9P Récepteur RTK avec ROS 2 ?
Configurer l'environnement ROS 2
- Lorsque l'environnement ROS 2 a été installé en suivant les instructions Guide d'installation de ROS2, par défaut il n'est pas actif lorsque vous ouvrez un terminal.
Pour résoudre ce problème, ouvrez Terminal et exécutez la commande suivante pour configurer Ubuntu afin de charger automatiquement l’environnement ROS 2 dans votre configuration de démarrage du terminal.
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
Pour appliquer les modifications, utilisez la commande ci-dessous. ROS 2 sera alors prêt à être utilisé à chaque ouverture d'un terminal.
source ~/.bashrc
- Pour gérer les dépendances dans ROS 2, mettez à jour votre liste de paquets et vos installations outils de développement ros, Qui comprend rosdep et d'autres outils de développement utiles pour ROS 2.
sudo apt update && sudo apt install ros-dev-tools
Connecter le récepteur RTK
- Branchez l'antenne RTK sur votre récepteur. Placez-la dans un endroit offrant une bonne vue du ciel ou près d'une fenêtre pour tester son fonctionnement.
- Connectez votre récepteur au PC via le port USB étiqueté «POWER+GPS. »
- Le récepteur devrait être configuré automatiquement. Pour le vérifier, ouvrez le Terminal et saisissez la commande. Vous devriez voir / dev / ttyACM0 (ou un appareil similaire, par exemple, / dev / ttyACM1).
ls /dev/ttyACM*

- Pour vérifier le flux GPS du récepteur RTK, exécutez la commande dans le terminal. Les données GPS brutes du récepteur s'affichent. Appuyez sur Ctrl + C arrêter.
sudo cat /dev/ttyACM0
- Conseil: Si vous ne voyez aucun résultat ou si le périphérique est manquant, assurez-vous que votre utilisateur dispose des autorisations appropriées (par exemple, s'il fait partie du groupe d'appels sortants). Vous pouvez vous ajouter avec la commande ci-dessous. Ensuite, déconnectez-vous et reconnectez-vous pour que les modifications soient prises en compte.
sudo usermod -a -G dialout $USER
- Presse Ctrl + X pour quitter le fichier et appuyez sur Y pour enregistrer le tampon modifié.
- Déconnectez (éteignez) le récepteur RTK et reconnectez-le (alimentez-le).
- Désormais, chaque fois qu'un récepteur RTK est connecté, il sera accessible à partir du «/dev/tty_Ardusimple« Lien ». Pour vérifier cela, saisissez les commandes :
sudo service udev reload
sudo service udev restart
sudo udevadm trigger
ls /dev/
Préparer un nouvel espace de travail ROS 2 pour le projet
- Pour créer un répertoire d'espace de travail, ouvrez un terminal et créez un dossier (par exemple, ros2_ws) avec un src sous-dossier:
mkdir -p ~/ros2_ws/src
- Accédez à votre espace de travail.
cd ~/ros2_ws
- Pour créer l'espace de travail, utilisez Colcon pour construire tous les packages à l'intérieur src:
colcon build
- Sourcez le fichier d'installation pour permettre à votre shell de reconnaître les packages nouvellement créés :
source install/setup.bash
- Ajoutez cette commande à votre ~/.bashrc (ou équivalent) pour générer automatiquement la source chaque fois que vous ouvrez un nouveau terminal.
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc

- Vous disposez désormais d'un espace de travail ROS2 de base configuré pour un développement et une intégration ultérieurs avec ArduSimple RTK.
Démarrer le nœud sur ROS 2 pour se connecter au récepteur RTK
- Pour cloner le u-blox référentiel dans votre espace de travail ROS 2 (~/ros2_ws/src) :
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/KumarRobotics/ublox.git
- Lancer rosdep et téléchargez les dernières définitions de dépendances de packages.
sudo rosdep init
rosdep update

- Maintenant le u-blox Node est disponible dans votre environnement ROS2.
- Modifiez le fichier de configuration pour mettre à jour les chemins ou les paramètres des périphériques selon les besoins (nous utiliserons /dev/tty_Ardusimple). Le package ublox_gps inclut un fichier de configuration par défaut nommé zed_f9p.yaml. Ouvrez le fichier de configuration avec la commande :
nano ~/ros2_ws/src/ublox/ublox_gps/config/zed_f9p.yaml
- Reconstruisez les paquets. Nous recommandons d'utiliser un emballage séparé pour vos fichiers de configuration et de lancement personnalisés afin de les organiser. Nous aborderons cette approche plus tard.
cd ~/ros2_ws
colcon build
source install/setup.bash

- Pour éviter l'arrêt du nœud, ouvrez un nouveau terminal et initialisez l'espace de travail à l'aide de la commande ci-dessous. Si ce nœud est arrêté, u-blox l'appareil ne publiera plus ses sujets ni ne fournira ses services.
source ~/ros2_ws/install/setup.bash
- Pour arrêter le flux, appuyez sur Ctrl + C.
- Consultez la liste des services disponibles fournis par le nœud.
ros2 service list
- Maintenant vous avez le u-blox Nœud ROS 2 exécutant et publiant des données en temps réel à partir de votre récepteur RTK.
Important:- N'arrêtez pas le u-blox nœud. Ce nœud doit être en cours d'exécution avant de suivre les étapes de lancement du NTRIP client, car le serveur de correction a besoin de données GPS en direct pour calculer et envoyer les corrections RTCM.
- Vue d'ensemble u-blox le nœud doit rester actif pour visualiser la sortie GPS à l'aide de l'écho de sujet ros2, comme indiqué à l'étape précédente.
Démarrer Node sur ROS 2 pour l'utiliser NTRIP les corrections
Remarque : Assurez-vous que le nœud de connexion GPS est déjà en cours d'exécution, car il est nécessaire pour transmettre des données de correction.
- Accédez au répertoire de l’espace de travail ROS2 et clonez la branche ROS 2.
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/LORD-MicroStrain/ntrip_client.git
- Pour éviter de fermer le nœud, ouvrez un nouveau terminal et initialisez l'espace de travail.
Remarque : Si le nœud est arrêté, le u-blox l'appareil cessera de recevoir les données de correction. u-blox le nœud doit être en cours d'exécution avant de lancer le NTRIP client, car il fournit les données GPS nécessaires au serveur de correction. Si le u-blox le nœud est arrêté, il ne publiera plus les sujets et services requis et le récepteur rtk cessera de recevoir les données de correction.
source ~/ros2_ws/install/setup.bash
- Pour éviter de fermer le nœud, ouvrez un nouveau terminal et initialisez l'espace de travail.
Remarque : Si le nœud est arrêté, le u-blox l'appareil cessera de recevoir les données de correction. u-blox le nœud doit être en cours d'exécution avant de lancer le NTRIP client, car il fournit les données GPS nécessaires au serveur de correction. Si le u-blox le nœud est arrêté, il ne publiera plus les sujets et services requis et le récepteur rtk cessera de recevoir les données de correction.
source ~/ros2_ws/install/setup.bash
- Afficher la liste des sujets disponibles.
ros2 topic list
- Principaux sujets que vous pourriez voir :
- /rtcm: Publie les données de correction RTCM (mavros_msgs/RTCM ou rtcm_msgs/Message, selon la configuration).
- /nmea: S'abonne aux phrases NMEA locales et les transmet au serveur.
- /ublox_gps_node/fix:Peut également transmettre des données de position globale si elles ne sont pas déjà au format NMEA.
- Si tout est fait correctement, avec succès, vous verrez le nœud publier les corrections RTCM sur le /rtcm sujet. Utilisation ntrip_client Nœud, vous pouvez intégrer les données de correction RTCM dans votre projet ROS 2 pour permettre un positionnement précis avec le récepteur RTK.
ros2 topic echo /rtcm
- À l’aide de ce nœud, vous pouvez intégrer les données de correction RTCM dans votre projet ROS 2 pour permettre un positionnement précis avec le récepteur RTK.
Création d'un package de lancement combiné
Nous allons créer un package dédié contenant un seul fichier de lancement pour l'exécution tous les deux le ublox_gps nœud (publiant des données GPS) et le ntrip_client nœud (gérant les corrections RTK) simultanément. Cette approche permet d'organiser votre espace de travail et de démarrer facilement tous les nœuds requis avec une seule commande.
- Ouvrez un nouveau terminal, accédez à votre espace de travail ROS2 et créez un nouveau paquet. Pour un nanofichier de lancement basé sur Python, exécutez les commandes suivantes :
cd ~/ros2_ws/src
ros2 pkg create combined_rtk --build-type ament_python
- Créez un répertoire de lancement et un fichier de lancement Python à l'intérieur du nouveau package.
mkdir -p combined_rtk/launch
nano ~/ros2_ws/src/combined_rtk/launch/combined_nodes.launch.py
- Copiez le code de l'exemple ci-dessous et collez-le dans le fichier. Voici ce que ce code fait :
- ublox_gps Nœud : publie les données GPS brutes de votre ArduSimple appareil.
- ntrip_client Nœud : se connecte au NTRIP caster/server et publie les corrections RTCM sur /rtcm (et peut également s'abonner à /nmea ou /fix si nécessaire).
- Shebang (#!/usr/bin/env python3) – Garantit que le fichier s’exécute en tant que script Python.
- Description du lancement – Définit les nœuds à démarrer.
- Nœud paramètres – Définit les paramètres spécifiques au nœud (par exemple, périphérique, hôte, port, authentification).
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
])
- Open configuration.py.
nano ~/ros2_ws/src/combined_rtk/setup.py
- Copiez le code ci-dessous et collez-le dans le configuration.py Fichier pour inclure les fichiers de lancement et les dépendances. Fermez le fichier et enregistrez les modifications.
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': [
],
},
)
- Lancez les deux ublox_gps et mes ntrip_client Nœuds avec une seule commande :
ros2 launch combined_rtk combined_nodes.launch.py
- Vous devriez voir les journaux des deux nœuds dans votre terminal, indiquant que :
- ublox_gps lit les données GPS à partir du périphérique spécifié (par exemple, /dev/tty_Ardusimple).
- ntrip_client est connecté à votre NTRIP serveur et publication des corrections RTCM sur /rtcm (et éventuellement abonnement à /nmea si configuré).
- Pour vérifier les sujets, les services et l'état de l'appareil, ouvrez un nouveau terminal et initialisez :
source install/setup.bash
- Vue d'ensemble ublox_gps Node publie des diagnostics sur un sujet comme /diagnostic. Pour vérifier les informations de diagnostic :
ros2 topic echo /diagnostics
Il comprend des messages d'état tels que la précision horizontale, la précision verticale et « 3D fix » lorsque le récepteur a une position valide, ou « fix not ok » lorsque le GPS n'est pas encore correctement fixé.
- Conseils clés pour vérifier l’état de la correction :
- Écran tactile /ublox_gps_node/fix dans les messages NavSatFix (champ status.status) ou les messages de diagnostic pour des statuts textuels plus détaillés.
- Vue d'ensemble /diagnostic le sujet fournit souvent un résumé lisible comme « correction 3D ».
- Utilisez /ublox/navpvt pour obtenir des informations détaillées :
- Le champ fix_type doit être 3 pour la correction 3D.
- Le champ des drapeaux doit indiquer que des corrections sont utilisées.
- Le champ flags2 indique l'état RTK : 67 RTK Float, 128 RTK Fix. Si la valeur est nettement inférieure, cela signifie probablement qu'aucune correction RTK n'est appliquée.
- Assurez-vous que votre antenne a une vue dégagée sur le ciel et votre NTRIP caster les informations d'identification sont correctes pour obtenir un correctif RTK stable.
Si vous souhaitez suivre ce tutoriel, nous avons tous les produits en stock et prêts à être expédiés :
-
Promo!Fabriqué en EuropeRTK starter kits
simpleRTK2B – Basic Starter Kit
À partir de 199,00€ Ce produit a plusieurs variantes. Les options peuvent être choisies sur la page produit