Questo tutorial spiega come integrare il u-blox ZED-F9P RTK GNSS ricevitore con un robot che esegue ROS 2 (Jazzy). Imparerai come collegare l'hardware, configurare il ricevitore, impostare un'area di lavoro ROS 2 e avviare i nodi necessari per ricevere ed elaborare dati GPS ad alta precisione con correzioni RTK tramite un NTRIP servizio.
Alla fine di questa guida, avrai una configurazione ROS 2 completamente funzionale che trasmette in streaming i dati RTK in tempo reale dal tuo ricevitore RTK in base a u-blox ZED-F9P—adatto per applicazioni robotiche che richiedono una precisione di posizionamento centimetrica.
Hardware richiesto:
- simpleRTK2B – Kit di base per principianti
- cavo USB compatibile con la porta USB del ricevitore per il collegamento a un PC o piattaforma integrata
- un PC o una piattaforma embedded con accesso a Internet (in questo tutorial utilizzeremo un PC)
Software richiesto:
- Ubuntu 24.04 (installato in modo nativo, in una macchina virtuale o tramite WSL)
- ROS 2 (Jazzy) (installato sulla piattaforma Ubuntu)
Risorse utili
- Risorse utili per installare Ubuntu:
- Utilizzo di WSL o macchine virtuali: Se si desidera utilizzare WSL o macchine virtuali, è necessario condividere il ricevitore RTK con Ubuntu. Ecco le istruzioni su come condividerlo con il sistema:
- NTRIP Accesso al servizio: Assicurati di avere accesso e credenziali per NTRIP servizio. Hai bisogno di aiuto per trovare un servizio di correzione, fai riferimento al nostro Lista di NTRIP servizi di correzione nel vostro paese.
- Configurazione del ricevitore RTK: Assicurati che il tuo ricevitore RTK sia configurato come RoverSe hai bisogno di aiuto per configurare un u-blox ZED-F9P come Rover, fare riferimento al nostro ZED-F9P File di configurazione.
Come impostare u-blox ZED-F9P Ricevitore RTK con ROS 2?
Configurazione dell'ambiente ROS 2
- Una volta installato l'ambiente ROS 2 seguendo le istruzioni Guida all'installazione di ROS2, per impostazione predefinita non è attivo quando si apre un terminale.
Per risolvere questo problema, apri il Terminale ed esegui il seguente comando per configurare Ubuntu in modo che carichi automaticamente l'ambiente ROS 2 nella configurazione di avvio del Terminale.
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
Per applicare le modifiche, utilizzare il comando seguente. Dopodiché, ROS 2 sarà pronto all'uso ogni volta che si apre un Terminale.
source ~/.bashrc
- Per gestire le dipendenze in ROS 2, aggiorna l'elenco dei pacchetti e le installazioni ros-dev-tools, Che comprende rosata e altri utili strumenti di sviluppo per ROS 2.
sudo apt update && sudo apt install ros-dev-tools
Collegare il ricevitore RTK
- Collega l'antenna RTK al ricevitore. Posiziona l'antenna in un punto con una buona visuale del cielo o vicino a una finestra per testarne la funzionalità.
- Collega il ricevitore al PC tramite la porta USB contrassegnata con “POWER+GPS. "
- Il ricevitore dovrebbe essere configurato automaticamente. Per verificarlo, apri il Terminale e digita il comando. Dovresti vedere / dev / ttyACM0 (o un dispositivo simile, ad esempio, / dev / ttyACM1).
ls /dev/ttyACM*

- Per controllare il flusso GPS dal ricevitore RTK, eseguire il comando nel Terminale. Verrà visualizzato il flusso di dati GPS grezzi dal ricevitore. Premere Ctrl + C fermare.
sudo cat /dev/ttyACM0
- Suggerimento: Se non vedi alcun output o il dispositivo è mancante, assicurati che l'utente disponga delle autorizzazioni appropriate (ad esempio, che faccia parte del gruppo dialout). Puoi aggiungerti con il comando seguente. Successivamente, disconnettiti e accedi nuovamente affinché le modifiche abbiano effetto.
sudo usermod -a -G dialout $USER
- Stampa Ctrl + X per uscire dal file e premere Y per salvare il buffer modificato.
- Scollegare (togliere l'alimentazione) il ricevitore RTK e ricollegarlo (accenderlo).
- Ora ogni volta che un ricevitore RTK è collegato, sarà accessibile da “/dev/tty_Ardusimple" link. Per verificarlo, inserisci i comandi:
sudo service udev reload
sudo service udev restart
sudo udevadm trigger
ls /dev/
Preparare un nuovo spazio di lavoro ROS 2 per il progetto
- Per creare una directory dell'area di lavoro, aprire un terminale e creare una cartella (ad esempio, ros2_ws) con un src sottocartella:
mkdir -p ~/ros2_ws/src
- Accedi alla tua area di lavoro.
cd ~/ros2_ws
- Per creare l'area di lavoro, utilizzare colc per costruire tutti i pacchetti all'interno src:
colcon build
- Ottieni il file di installazione per consentire alla tua shell di riconoscere i pacchetti appena creati:
source install/setup.bash
- Aggiungi questo comando al tuo file ~/.bashrc (o equivalente) per generare automaticamente la sorgente ogni volta che apri un nuovo terminale.
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc

- Ora hai un'area di lavoro ROS2 di base impostata per ulteriore sviluppo e integrazione con ArduSimple RTK.
Avvia il nodo su ROS 2 per connetterti al ricevitore RTK
- Per clonare il u-blox repository nel tuo spazio di lavoro ROS 2 (~/ros2_ws/src):
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/KumarRobotics/ublox.git
- Iniziato rosata e scarica le ultime definizioni delle dipendenze del pacchetto.
sudo rosdep init
rosdep update

- Ora il u-blox Il nodo è disponibile nel tuo ambiente ROS2.
- Modificare il file di configurazione per aggiornare i percorsi o i parametri del dispositivo secondo necessità (useremo /dev/tty_Ardusimple). Il pacchetto ublox_gps include un file di configurazione predefinito denominato zed_f9p.yamlAprire il file di configurazione con il comando:
nano ~/ros2_ws/src/ublox/ublox_gps/config/zed_f9p.yaml
- Ricostruisci i pacchetti. Ti consigliamo di utilizzare un pacchetto separato per i tuoi file di configurazione e di avvio personalizzati, per mantenere tutto organizzato. Discuteremo di questo approccio più avanti.
cd ~/ros2_ws
colcon build
source install/setup.bash

- Per evitare di arrestare il nodo, apri un nuovo terminale e inizializza l'area di lavoro utilizzando il comando seguente. Se questo nodo viene arrestato, u-blox il dispositivo non pubblicherà più i suoi argomenti né fornirà più i suoi servizi.
source ~/ros2_ws/install/setup.bash
- Per interrompere lo streaming, premere Ctrl + C.
- Visualizza l'elenco dei servizi disponibili forniti dal Nodo.
ros2 service list
- Ora hai il u-blox Nodo ROS 2 che esegue e pubblica dati in tempo reale dal ricevitore RTK.
Importante:- Non fermare il u-blox nodo. Questo nodo deve essere in esecuzione prima di seguire i passaggi per avviare il NTRIP client, poiché il server di correzione necessita di dati GPS in tempo reale per calcolare e inviare correzioni RTCM.
- u-blox il nodo deve rimanere attivo per visualizzare l'output GPS utilizzando l'eco dell'argomento ros2, come mostrato nel passaggio precedente.
Avvia il nodo su ROS 2 da utilizzare NTRIP correzioni
Nota: Assicurarsi che il nodo di connessione GPS sia già in esecuzione, poiché è necessario per trasmettere i dati di correzione.
- Passare alla directory dell'area di lavoro ROS2 e clonare il ramo ROS 2.
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/LORD-MicroStrain/ntrip_client.git
- Per evitare di chiudere il Nodo, apri un nuovo Terminale e inizializza l'area di lavoro.
Nota: Se il nodo viene arrestato, il u-blox il dispositivo smetterà di ricevere i dati di correzione. u-blox il nodo deve essere in esecuzione prima di avviare il NTRIP client, in quanto fornisce i dati GPS necessari al server di correzione. Se il u-blox Se il nodo viene arrestato, non pubblicherà più gli argomenti e i servizi richiesti e il ricevitore RTK smetterà di ricevere dati di correzione.
source ~/ros2_ws/install/setup.bash
- Per evitare di chiudere il Nodo, apri un nuovo Terminale e inizializza l'area di lavoro.
Nota: Se il nodo viene arrestato, il u-blox il dispositivo smetterà di ricevere i dati di correzione. u-blox il nodo deve essere in esecuzione prima di avviare il NTRIP client, in quanto fornisce i dati GPS necessari al server di correzione. Se il u-blox Se il nodo viene arrestato, non pubblicherà più gli argomenti e i servizi richiesti e il ricevitore RTK smetterà di ricevere dati di correzione.
source ~/ros2_ws/install/setup.bash
- Visualizza l'elenco degli argomenti disponibili.
ros2 topic list
- Argomenti chiave che potresti vedere:
- /rtcm: Pubblica i dati di correzione RTCM (mavros_msgs/RTCM o rtcm_msgs/Message, a seconda della configurazione).
- /nmea: Si abbona alle frasi NMEA locali e le inoltra al server.
- /ublox_gps_node/correggi: Può anche inoltrare dati sulla posizione globale se non sono già in formato NMEA.
- Se tutto è stato eseguito correttamente, con successo, vedrai il Node pubblicare le correzioni RTCM sul /rtcm argomento. Utilizzando ntrip_client Node, puoi integrare i dati di correzione RTCM nel tuo progetto ROS 2 per consentire un posizionamento preciso con il ricevitore RTK.
ros2 topic echo /rtcm
- Utilizzando questo nodo è possibile integrare i dati di correzione RTCM nel progetto ROS 2 per consentire un posizionamento preciso con il ricevitore RTK.
Creazione di un pacchetto di lancio combinato
Creeremo un pacchetto dedicato che contiene un singolo file di avvio per l'esecuzione entrambi , il ublox_gps nodo (pubblicazione dati GPS) e il ntrip_client nodo (che gestisce le correzioni RTK) simultaneamente. Questo approccio mantiene l'area di lavoro organizzata e semplifica l'avvio di tutti i nodi necessari con un unico comando.
- Apri un nuovo Terminale, accedi all'area di lavoro di ROS2 e crea un nuovo pacchetto. Per un nanofile di avvio basato su Python, esegui i comandi:
cd ~/ros2_ws/src
ros2 pkg create combined_rtk --build-type ament_python
- Creare una directory di avvio e un file di avvio Python all'interno del nuovo pacchetto.
mkdir -p combined_rtk/launch
nano ~/ros2_ws/src/combined_rtk/launch/combined_nodes.launch.py
- Copia il codice dall'esempio qui sotto e incollalo nel file. Il codice fa:
- ublox_gps Nodo: pubblica i dati GPS grezzi dal tuo ArduSimple dispositivo.
- ntrip_client Nodo: si collega al NTRIP caster/server e pubblica le correzioni RTCM su /rtcm (e puoi anche iscriverti a /nmea o /fix se necessario).
- Shebang (#!/usr/bin/env python3) – Garantisce che il file venga eseguito come uno script Python.
- Descrizione del lancio – Definisce da quali nodi iniziare.
- Nodo parametri – Imposta parametri specifici del nodo (ad esempio dispositivo, host, porta, autenticazione).
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
])
- Apri setup.py.
nano ~/ros2_ws/src/combined_rtk/setup.py
- Copia il codice qui sotto e incollalo nel setup.py file per includere i file di avvio e le dipendenze. Chiudi il file e salva le modifiche.
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': [
],
},
)
- Avvia entrambi i ublox_gps e ntrip_client Nodi con un comando:
ros2 launch combined_rtk combined_nodes.launch.py
- Dovresti vedere i log di entrambi i nodi nel tuo terminale, che indicano che:
- ublox_gps sta leggendo i dati GPS dal dispositivo specificato (ad esempio, /dev/tty_Ardusimple).
- ntrip_client è connesso al tuo NTRIP server e pubblicazione delle correzioni RTCM su /rtcm (ed eventualmente sottoscrizione a /nmea se configurato).
- Per verificare argomenti, servizi e stato del dispositivo, apri un nuovo terminale e inizializza:
source install/setup.bash
- ublox_gps Il nodo pubblica la diagnostica su un argomento come /diagnostica. Per controllare le informazioni diagnostiche:
ros2 topic echo /diagnostics
Include messaggi di stato quali precisione orizzontale, precisione verticale e "correzione 3D" quando il ricevitore ha una posizione valida, oppure "correzione non corretta" quando il GPS non è ancora stato fissato correttamente.
- Suggerimenti chiave per verificare lo stato della correzione:
- Monitorare /ublox_gps_node/correggi nei messaggi NavSatFix (campo status.status) o nei messaggi diagnostici per stati più dettagliati basati su testo.
- /diagnostica l'argomento spesso fornisce un riassunto leggibile come "correzione 3D".
- Usa il /ublox/navpvt per ottenere informazioni dettagliate:
- Il campo fix_type dovrebbe essere 3 per la correzione 3D.
- Il campo flag dovrebbe indicare che vengono utilizzate delle correzioni.
- Il campo flags2 include lo stato RTK: 67 RTK Float, 128 RTK Fix. Se il valore è significativamente inferiore, è probabile che non vengano applicate correzioni RTK.
- Assicurati che la tua antenna abbia una visuale libera del cielo e del tuo NTRIP caster le credenziali siano corrette per ottenere una correzione RTK stabile.
Se vuoi seguire questo tutorial, abbiamo tutti i prodotti in magazzino e pronti per essere spediti:
-
Sconto!Made in EuropeRTK starter kits
simpleRTK2B – Basic Starter Kit
Da 199,00€ Questo prodotto ha più varianti. Le opzioni possono essere scelte sulla pagina del prodotto