In deze tutorial wordt uitgelegd hoe u de u-blox ZED-F9P RTK GNSS ontvanger met een robot die ROS 2 (Jazzy) draait. Je leert hoe je de hardware aansluit, de ontvanger configureert, een ROS 2-werkruimte instelt en de benodigde knooppunten start om zeer nauwkeurige GPS-gegevens met RTK-correcties te ontvangen en te verwerken via een NTRIP service te halen.
Aan het einde van deze handleiding beschikt u over een volledig functionele ROS 2-installatie die realtime RTK-gegevens streamt van uw RTK-ontvanger op basis van u-blox ZED-F9P—geschikt voor roboticatoepassingen waarbij een positioneringsnauwkeurigheid tot op de centimeter vereist is.
Vereiste hardware:
- simpleRTK2B – Basisstartpakket
- USB-kabel compatibel met de USB-poort van uw ontvanger voor aansluiting op een pc of ingebed platform
- een pc of embedded platform met internettoegang (in deze tutorial gebruiken we een pc)
Vereiste software:
- Ubuntu 24.04 (native geïnstalleerd, in een virtuele machine of via WSL)
- ROS 2 (Jazzy) (geïnstalleerd op Ubuntu-platform)
Handige adressen
- Nuttige bronnen voor het installeren van Ubuntu:
- WSL of virtuele machines gebruiken: Als u WSL of virtuele machines wilt gebruiken, moet u de RTK-ontvanger delen met Ubuntu. Er zijn instructies voor het delen met het systeem:
- NTRIP Servicetoegang: Zorg ervoor dat u toegang en inloggegevens hebt om NTRIP service. Heeft u hulp nodig bij het vinden van een correctieservice? Raadpleeg dan onze Lijst van NTRIP correctiediensten in uw land.
- RTK-ontvangerconfiguratie: Zorg ervoor dat uw RTK-ontvanger is geconfigureerd als een RoverAls u hulp nodig hebt bij het configureren van een u-blox ZED-F9P een Rover, zie onze ZED-F9P Configuratiebestanden.
Hoe te installeren u-blox ZED-F9P RTK-ontvanger met ROS 2?
ROS 2-omgeving instellen
- Wanneer de ROS 2-omgeving is geïnstalleerd volgens de onderstaande instructies, ROS2 installatiehandleiding, is standaard niet actief wanneer u een terminal opent.
Om dit probleem te verhelpen, opent u Terminal en voert u de volgende opdracht uit om Ubuntu zo te configureren dat de ROS 2-omgeving automatisch in de opstartconfiguratie van uw Terminal wordt geladen.
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
Gebruik de onderstaande opdracht om de wijzigingen toe te passen. Hierna is ROS 2 klaar voor gebruik telkens wanneer u een terminal opent.
source ~/.bashrc
- Om afhankelijkheden in ROS 2 te beheren, moet u uw pakketlijst en installaties bijwerken ros-dev-tools, Waaronder rozep en andere nuttige ontwikkeltools voor ROS 2.
sudo apt update && sudo apt install ros-dev-tools
RTK-ontvanger aansluiten
- Sluit de RTK-antenne aan op je ontvanger. Plaats de antenne op een plek met goed zicht op de hemel of in de buurt van een raam om de functionaliteit te testen.
- Sluit uw ontvanger aan op de pc via de USB-poort met het label “POWER+GPS. '
- De ontvanger zou automatisch geconfigureerd moeten zijn. Om dit te controleren, opent u Terminal en typt u de opdracht. U zou het volgende moeten zien: / dev / ttyACM0 (of een soortgelijk apparaat, bijvoorbeeld / dev / ttyACM1).
ls /dev/ttyACM*

- Om de GPS-stream van de RTK-ontvanger te controleren, voert u de opdracht uit in de Terminal. De ruwe GPS-gegevens die vanaf de ontvanger worden gestreamd, worden weergegeven. Druk op CTRL + C stoppen.
sudo cat /dev/ttyACM0
- Tip: Als u geen uitvoer ziet of het apparaat ontbreekt, controleer dan of uw gebruiker de juiste rechten heeft (bijvoorbeeld omdat hij/zij deel uitmaakt van de dialout-groep). U kunt uzelf toevoegen met de onderstaande opdracht. Meld u daarna af en weer aan om de wijzigingen door te voeren.
sudo usermod -a -G dialout $USER
- Om te voorkomen dat de RTK-ontvanger in een andere “ttyACM*”elke keer dat het apparaat wordt ingeschakeld, maak een udev-regel (een dynamische koppeling) die een item met een specifieke naam aanmaakt door het volgende bestand toe te voegen voordat u de RTK-ontvanger aansluit.
sudo nano /etc/udev/rules.d/50-ardusimple.rules
- Media Ctrl + X om het bestand te verlaten en druk op Y om gewijzigde buffer op te slaan.
- Haal de stekker van de RTK-ontvanger uit het stopcontact en sluit hem weer aan.
- Wanneer nu een RTK-ontvanger wordt aangesloten, is deze toegankelijk via de “/dev/tty_Ardusimple"link. Om dit te controleren, voer je de volgende commando's in:
sudo service udev reload
sudo service udev restart
sudo udevadm trigger
ls /dev/
Een nieuwe ROS 2-werkruimte voor het project voorbereiden
- Om een werkruimtemap te maken, opent u een terminal en maakt u een map (bijvoorbeeld ros2_ws) met een src submap:
mkdir -p ~/ros2_ws/src
- Navigeer naar uw werkruimte.
cd ~/ros2_ws
- Om de werkruimte te bouwen, gebruikt u dikke darm om alle pakketten binnenin te bouwen src:
colcon build
- Zorg ervoor dat het installatiebestand is opgeslagen, zodat uw shell de nieuw gebouwde pakketten herkent:
source install/setup.bash
- Voeg deze opdracht toe aan uw ~/.bashrc (of een equivalent) zodat de bron automatisch wordt aangeroepen wanneer u een nieuwe terminal opent.
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc

- Nu hebt u een basis ROS2-werkruimte ingesteld voor verdere ontwikkeling en integratie met ArduSimple RTK.
Start Node op ROS 2 om verbinding te maken met de RTK-ontvanger
- Om de u-blox repository naar uw ROS 2-werkruimte (~/ros2_ws/src):
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/KumarRobotics/ublox.git
- ingewijde rozep en download de nieuwste pakket afhankelijkheidsdefinities.
sudo rosdep init
rosdep update

- Nu de u-blox Node is beschikbaar in uw ROS2-omgeving.
- Wijzig het configuratiebestand om de apparaatpaden of parameters indien nodig bij te werken (we zullen /dev/tty_Ardusimple). Het ublox_gps-pakket bevat een standaardconfiguratiebestand met de naam zed_f9p.yamlOpen het configuratiebestand met de opdracht:
nano ~/ros2_ws/src/ublox/ublox_gps/config/zed_f9p.yaml
- Bouw de pakketten opnieuw. We raden aan een apart pakket voor je aangepaste configuratie- en startbestanden om alles georganiseerd te houden. We bespreken deze aanpak later.
cd ~/ros2_ws
colcon build
source install/setup.bash

- Om te voorkomen dat het knooppunt stopt, opent u een nieuwe terminal en initialiseert u de werkruimte met behulp van de onderstaande opdracht. Als dit knooppunt wordt gestopt, u-blox Het apparaat zal dan geen onderwerpen meer publiceren en geen diensten meer aanbieden.
source ~/ros2_ws/install/setup.bash
- Om de stream te stoppen, drukt u op CTRL + C.
- Bekijk de lijst met beschikbare services die Node levert.
ros2 service list
- Nu heb je de u-blox ROS 2 Node voert realtime gegevens van uw RTK-ontvanger uit en publiceert deze.
Belangrijk:- Stop niet met de u-blox knooppunt. Dit knooppunt moet actief zijn voordat u de stappen voor het starten van het knooppunt uitvoert. NTRIP client, omdat de correctieserver live GPS-gegevens nodig heeft om RTCM-correcties te berekenen en te verzenden.
- De u-blox Node moet actief blijven om GPS-uitvoer te visualiseren met behulp van Ros2 Topic Echo, zoals weergegeven in de vorige stap.
Start Node op ROS 2 om te gebruiken NTRIP correcties
Opmerking: Controleer of het GPS-verbindingsknooppunt actief is, aangezien dit nodig is om correctiegegevens te verzenden.
- Navigeer naar de ROS2-werkruimtemap en kloon de ROS 2-branch.
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/LORD-MicroStrain/ntrip_client.git
- Om te voorkomen dat de Node wordt gesloten, opent u een nieuwe Terminal en initialiseert u de werkruimte.
Opmerking: Als de Node wordt gestopt, u-blox apparaat zal geen correctiegegevens meer ontvangen. De u-blox knooppunt moet actief zijn voordat de NTRIP client, omdat deze de benodigde GPS-gegevens aan de correctieserver levert. Als de u-blox Als node wordt gestopt, worden de vereiste onderwerpen en services niet meer gepubliceerd en ontvangt de rtk-ontvanger geen correctiegegevens meer.
source ~/ros2_ws/install/setup.bash
- Om te voorkomen dat de Node wordt gesloten, opent u een nieuwe Terminal en initialiseert u de werkruimte.
Opmerking: Als de Node wordt gestopt, u-blox apparaat zal geen correctiegegevens meer ontvangen. De u-blox knooppunt moet actief zijn voordat de NTRIP client, omdat deze de benodigde GPS-gegevens aan de correctieserver levert. Als de u-blox Als node wordt gestopt, worden de vereiste onderwerpen en services niet meer gepubliceerd en ontvangt de rtk-ontvanger geen correctiegegevens meer.
source ~/ros2_ws/install/setup.bash
- Bekijk de lijst met beschikbare onderwerpen.
ros2 topic list
- Belangrijke onderwerpen die u kunt tegenkomen:
- /rtcm: Publiceert RTCM-correctiegegevens (mavros_msgs/RTCM of rtcm_msgs/Message, afhankelijk van de configuratie).
- /nmea: Abonneert zich op lokale NMEA-zinnen en stuurt deze door naar de server.
- /ublox_gps_node/fix: Kan ook wereldwijde positiegegevens doorsturen als deze nog niet in NMEA-formaat zijn.
- Als alles correct en succesvol is uitgevoerd, ziet u dat de Node RTCM-correcties publiceert op de /rtcm onderwerp. Gebruikend ntrip_client Met Node kunt u RTCM-correctiegegevens integreren in uw ROS 2-project, zodat u nauwkeurig kunt positioneren met een RTK-ontvanger.
ros2 topic echo /rtcm
- Met dit knooppunt kunt u RTCM-correctiegegevens integreren in uw ROS 2-project, zodat u nauwkeurig kunt positioneren met een RTK-ontvanger.
Het creëren van een gecombineerd lanceringspakket
We maken een speciaal pakket dat één enkel opstartbestand bevat voor het uitvoeren zowel the ublox_gps knooppunt (dat GPS-gegevens publiceert) en de ntrip_client node (die RTK-correcties verwerkt) tegelijkertijd. Deze aanpak houdt uw werkruimte overzichtelijk en maakt het eenvoudig om alle benodigde nodes met één opdracht te starten.
- Open een nieuwe terminal, navigeer naar je ROS2-werkruimte en maak een nieuw pakket. Voor een Python-gebaseerd startnanobestand voer je de volgende opdrachten uit:
cd ~/ros2_ws/src
ros2 pkg create combined_rtk --build-type ament_python
- Maak een startmap en een Python-startbestand in het nieuwe pakket.
mkdir -p combined_rtk/launch
nano ~/ros2_ws/src/combined_rtk/launch/combined_nodes.launch.py
- Kopieer de code uit het onderstaande voorbeeld en plak deze in het bestand. De code doet het volgende:
- ublox_gps Node: publiceert ruwe GPS-gegevens van uw ArduSimple stuurt.
- ntrip_client Knooppunt: maakt verbinding met de NTRIP caster/server en publiceert RTCM-correcties op /rtcm (en u kunt zich ook abonneren op /nmea of /fix indien nodig).
- Shebang (#!/usr/bin/env python3) – Zorgt ervoor dat het bestand als een Python-script wordt uitgevoerd.
- Lanceringsbeschrijving – Definieert welke knooppunten moeten starten.
- Knooppunt parameters – Stelt knooppuntspecifieke parameters in (bijv. apparaat, host, poort, authenticatie).
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 setup.py.
nano ~/ros2_ws/src/combined_rtk/setup.py
- Kopieer de onderstaande code en plak deze in de setup.py bestand om startbestanden en afhankelijkheden op te nemen. Sluit het bestand en sla de wijzigingen op.
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': [
],
},
)
- Lanceer beide ublox_gps en ntrip_client Knooppunten met één opdracht:
ros2 launch combined_rtk combined_nodes.launch.py
- U zou de logs van beide knooppunten in uw terminal moeten zien, met het volgende:
- ublox_gps leest GPS-gegevens van het opgegeven apparaat (bijv. /dev/tty_Ardusimple).
- ntrip_client is verbonden met jouw NTRIP server en RTCM-correcties publiceren op /rtcm (en mogelijk abonneren op /nmea indien geconfigureerd).
- Om onderwerpen, services en apparaatstatus te verifiëren, opent u een nieuwe terminal en initialiseert u:
source install/setup.bash
- De ublox_gps Node publiceert diagnostiek over een onderwerp als /diagnostiek. Om diagnostische informatie te controleren:
ros2 topic echo /diagnostics
Het bevat statusberichten zoals horizontale nauwkeurigheid, verticale nauwkeurigheid en “3D fix” wanneer de ontvanger een geldige positie heeft, of “fix not ok” wanneer de GPS nog niet goed is vastgezet.
- Belangrijke tips voor het controleren van de reparatiestatus:
- monitor /ublox_gps_node/fix in NavSatFix-berichten (veld status.status) of diagnostische berichten voor meer gedetailleerde tekstuele statussen.
- De /diagnostiek onderwerp biedt vaak een leesbare samenvatting zoals “3D-oplossing”.
- Gebruiken /ublox/navpvt voor gedetailleerde informatie:
- Voor een 3D-fix moet het veld fix_type 3 zijn.
- Het vlaggenveld moet aangeven dat er correcties worden gebruikt.
- Het veld flags2 bevat de RTK-status: 67 RTK Float, 128 RTK Fix. Als de waarde aanzienlijk lager is, betekent dit waarschijnlijk dat er geen RTK-correcties worden toegepast.
- Zorg ervoor dat uw antenne een vrij zicht op de lucht en uw NTRIP caster de juiste referenties zijn vereist om een stabiele RTK-fix te bereiken.
Als u deze tutorial wilt volgen, hebben we alle producten op voorraad en klaar om te verzenden:
-
Aanbieding!Geproduceerd in EuropaRTK starter kits
simpleRTK2B – Basic Starter Kit
Vanaf 199,00€ Dit product heeft meerdere varianten. De opties kunnen worden gekozen op de productpagina