Tento tutoriál vysvětluje, jak integrovat u-blox ZED-F9P RTK GNSS přijímač s robotem s operačním systémem ROS 2 (Jazzy). Naučíte se, jak připojit hardware, nakonfigurovat přijímač, nastavit pracovní prostor ROS 2 a spustit potřebné uzly pro příjem a zpracování vysoce přesných GPS dat s RTK korekcemi prostřednictvím... NTRIP služby.
Na konci této příručky budete mít plně funkční nastavení ROS 2, které bude streamovat RTK data v reálném čase z vašeho RTK přijímače na základě... u-blox ZED-F9P—vhodné pro robotické aplikace vyžadující centimetrovou přesnost polohování.
Požadovaný hardware:
- simpleRTK2B – Základní startovací sada
- USB kabel kompatibilní s USB portem vašeho přijímače pro připojení k PC nebo vestavěné platformě
- počítač nebo integrovaná platforma s přístupem k internetu (v tomto tutoriálu používáme počítač)
Požadovaný software:
- ubuntu 24.04 (nainstalováno nativně, ve virtuálním počítači nebo přes WSL)
- ROS 2 (Jazzy) (nainstalováno na platformě Ubuntu)
Užitečné zdroje
- Užitečné zdroje pro instalaci Ubuntu:
- Používání WSL nebo virtuálních počítačů: V případě, že chcete používat WSL nebo virtuální počítače, je nutné sdílet RTK přijímač s Ubuntu. Zde je návod, jak jej sdílet se systémem:
- NTRIP Přístup ke službámUjistěte se, že máte přístup a přihlašovací údaje k NTRIP služba. Potřebujete-li pomoc s nalezením opravné služby, obraťte se na naši Seznam NTRIP opravné služby ve vaší zemi.
- Konfigurace přijímače RTKUjistěte se, že je váš RTK přijímač nakonfigurován jako RoverPokud potřebujete pomoc s konfigurací u-blox ZED-F9P jako Rover, viz naše ZED-F9P Konfigurační soubory.
Jak nastavit u-blox ZED-F9P RTK přijímač s ROS 2?
Nastavení prostředí ROS 2
- Po instalaci prostředí ROS 2 podle následujících pokynů Instalační příručka ROS2, ve výchozím nastavení není aktivní při otevření terminálu.
Chcete-li to vyřešit, otevřete Terminál a spusťte následující příkaz pro konfiguraci Ubuntu tak, aby se prostředí ROS 2 automaticky načetlo do spouštěcí konfigurace Terminálu.
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
Pro použití změn použijte níže uvedený příkaz. Poté bude ROS 2 připraven k použití při každém otevření terminálu.
source ~/.bashrc
- Pro správu závislostí v ROS 2 aktualizujte seznam balíčků a instalačních balíčků. ros-dev-tools, Který obsahuje rosdep a další užitečné vývojářské nástroje pro ROS 2.
sudo apt update && sudo apt install ros-dev-tools
Připojení RTK přijímače
- Připojte anténu RTK k přijímači. Umístěte anténu na místo s dobrým výhledem na oblohu nebo poblíž okna, abyste otestovali její funkčnost.
- Připojte přijímač k počítači přes USB port označený „POWER+GPS. "
- Přijímač by měl být automaticky nakonfigurován. Chcete-li to ověřit, otevřete Terminál a zadejte příkaz. Měli byste vidět / dev / ttyACM0 (nebo podobné zařízení, např. / dev / ttyACM1).
ls /dev/ttyACM*

- Chcete-li zkontrolovat stream GPS z RTK přijímače, spusťte v terminálu příkaz. Zobrazí se nezpracovaná GPS data streamovaná z přijímače. Stiskněte Ctrl + C zastavit.
sudo cat /dev/ttyACM0
- Tip: Pokud nevidíte žádný výstup nebo zařízení chybí, ujistěte se, že váš uživatel má příslušná oprávnění (např. je ve skupině dialout). Můžete se přidat pomocí níže uvedeného příkazu. Poté se odhlaste a znovu přihlaste, aby se změny projevily.
sudo usermod -a -G dialout $USER
- Stisknout Ctrl + X pro ukončení souboru a stiskněte Y pro uložení upravené vyrovnávací paměti.
- Odpojte (vypněte) RTK přijímač a znovu jej zapojte (zapojte).
- Nyní, kdykoli je připojen RTK přijímač, bude k němu přístup z „/dev/tty_Ardusimple„odkaz“. Chcete-li to zkontrolovat, zadejte následující příkazy:
sudo service udev reload
sudo service udev restart
sudo udevadm trigger
ls /dev/
Příprava nového pracovního prostoru ROS 2 pro projekt
- Chcete-li vytvořit adresář pracovního prostoru, otevřete terminál a vytvořte složku (například ros2_ws) s src podsložka:
mkdir -p ~/ros2_ws/src
- Přejděte do svého pracovního prostoru.
cd ~/ros2_ws
- Pro vytvoření pracovního prostoru použijte colcon sestavit všechny balíčky uvnitř src:
colcon build
- Vytvořte instalační soubor, aby váš shell rozpoznal nově sestavené balíčky:
source install/setup.bash
- Přidejte tento příkaz do souboru ~/.bashrc (nebo ekvivalentu) pro automatické načítání zdrojového kódu při každém otevření nového terminálu.
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc

- Nyní máte nastavený základní pracovní prostor ROS2 pro další vývoj a integraci s ArduSimple RTK.
Spusťte uzel na ROS 2 pro připojení k RTK přijímači
- Pro klonování u-blox repozitář do vašeho pracovního prostoru ROS 2 (~/ros2_ws/src):
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/KumarRobotics/ublox.git
- Zahájit rosdep a stáhněte si nejnovější definice závislostí balíčků.
sudo rosdep init
rosdep update

- Nyní u-blox Uzel je k dispozici ve vašem prostředí ROS2.
- Upravte konfigurační soubor a aktualizujte cesty k zařízením nebo parametry podle potřeby (použijeme /dev/tty_Ardusimple). Balíček ublox_gps obsahuje výchozí konfigurační soubor s názvem zed_f9p.yamlOtevřete konfigurační soubor příkazem:
nano ~/ros2_ws/src/ublox/ublox_gps/config/zed_f9p.yaml
- Znovu sestavte balíčky. Doporučujeme použít samostatný balíček pro vaše vlastní konfigurační a spouštěcí soubory, abyste vše udrželi v pořádku. O tomto přístupu si povíme později.
cd ~/ros2_ws
colcon build
source install/setup.bash

- Abyste se vyhnuli zastavení uzlu, otevřete nový terminál a inicializujte pracovní prostor pomocí níže uvedeného příkazu. Pokud je tento uzel zastaven, u-blox Zařízení již nebude publikovat svá témata ani poskytovat své služby.
source ~/ros2_ws/install/setup.bash
- Chcete-li stream zastavit, stiskněte Ctrl + C.
- Zobrazit seznam dostupných služeb poskytovaných službou Node.
ros2 service list
- Teď už máte u-blox Uzel ROS 2 spouští a publikuje data z vašeho RTK přijímače v reálném čase.
důležité:- Nezastavujte u-blox uzel. Tento uzel musí být spuštěn před provedením kroků spuštění NTRIP klienta, protože korekční server potřebuje k výpočtu a odeslání korekcí RTCM aktuální GPS data.
- Jedno u-blox Uzel musí zůstat aktivní pro vizualizaci GPS výstupu pomocí ros2 topic echo, jak je znázorněno v předchozím kroku.
Spusťte uzel na ROS 2 pro použití NTRIP opravy
Poznámka: Ujistěte se, že uzel GPS připojení je již spuštěný, protože je nutný k přenosu korekčních dat.
- Přejděte do adresáře pracovního prostoru ROS2 a naklonujte větev ROS 2.
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/LORD-MicroStrain/ntrip_client.git
- Abyste se vyhnuli zavření uzlu, otevřete nový terminál a inicializujte pracovní prostor.
Poznámka: Pokud je uzel zastaven, u-blox Zařízení přestane přijímat korekční data. u-blox uzel musí být spuštěn před spuštěním NTRIP klient, protože poskytuje potřebná GPS data korekčnímu serveru. Pokud u-blox Pokud je uzel zastaven, nebude již publikovat požadovaná témata a služby a přijímač rtk přestane přijímat korekční data.
source ~/ros2_ws/install/setup.bash
- Abyste se vyhnuli zavření uzlu, otevřete nový terminál a inicializujte pracovní prostor.
Poznámka: Pokud je uzel zastaven, u-blox Zařízení přestane přijímat korekční data. u-blox uzel musí být spuštěn před spuštěním NTRIP klient, protože poskytuje potřebná GPS data korekčnímu serveru. Pokud u-blox Pokud je uzel zastaven, nebude již publikovat požadovaná témata a služby a přijímač rtk přestane přijímat korekční data.
source ~/ros2_ws/install/setup.bash
- Zobrazit seznam dostupných témat.
ros2 topic list
- Klíčová témata, která byste mohli vidět:
- /rtcmPublikuje korekční data RTCM (buď mavros_msgs/RTCM nebo rtcm_msgs/Message, v závislosti na konfiguraci).
- /nmea: Přihlásí se k odběru lokálních NMEA vět a přepošle je na server.
- /ublox_gps_node/opravaMůže také přeposílat globální data o poloze, pokud již nejsou ve formátu NMEA.
- Pokud je vše provedeno správně a úspěšně, uvidíte, že uzel publikuje opravy RTCM na /rtcm téma. Použití ntrip_client V Node můžete do svého projektu ROS 2 integrovat korekční data RTCM, abyste umožnili přesné polohování pomocí RTK přijímače.
ros2 topic echo /rtcm
- Pomocí tohoto uzlu můžete integrovat korekční data RTCM do svého projektu ROS 2 a umožnit tak přesné polohování s RTK přijímačem.
Vytvoření kombinovaného spouštěcího balíčku
Vytvoříme specializovaný balíček, který bude obsahovat jeden spouštěcí soubor pro spuštění oba ο ublox_gps uzel (publikování GPS dat) a ntrip_client uzel (zpracovávající korekce RTK) současně. Tento přístup udržuje váš pracovní prostor organizovaný a usnadňuje spuštění všech požadovaných uzlů jedním příkazem.
- Otevřete nový terminál, přejděte do pracovního prostoru ROS2 a vytvořte nový balíček. Pro spouštěcí nanofile založený na Pythonu spusťte příkazy:
cd ~/ros2_ws/src
ros2 pkg create combined_rtk --build-type ament_python
- V novém balíčku vytvořte spouštěcí adresář a spouštěcí soubor Pythonu.
mkdir -p combined_rtk/launch
nano ~/ros2_ws/src/combined_rtk/launch/combined_nodes.launch.py
- Zkopírujte kód z níže uvedeného příkladu a vložte ho do souboru. Kód provádí:
- ublox_gps Uzel: Publikuje nezpracovaná GPS data z vašeho ArduSimple zařízení.
- ntrip_client Uzel: Připojuje se k NTRIP caster/server a zveřejňuje opravy RTCM na /rtcm (a v případě potřeby se můžete také přihlásit k odběru /nmea nebo /fix).
- Shebang (#!/usr/bin/env python3) – Zajišťuje, aby soubor běžel jako skript Pythonu.
- Popis spuštění – Definuje, které uzly se mají spustit.
- Uzel parametry – Nastavuje parametry specifické pro uzel (např. zařízení, hostitel, port, ověřování).
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
])
- Otevřená setup.py.
nano ~/ros2_ws/src/combined_rtk/setup.py
- Zkopírujte níže uvedený kód a vložte jej do setup.py soubor, který obsahuje spouštěcí soubory a závislosti. Zavřete soubor a uložte změny.
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': [
],
},
)
- Spusťte oba ublox_gps si ntrip_client Uzly s jedním příkazem:
ros2 launch combined_rtk combined_nodes.launch.py
- V terminálu byste měli vidět protokoly z obou uzlů, které ukazují, že:
- ublox_gps čte GPS data ze zadaného zařízení (např. /dev/tty_Ardusimple).
- ntrip_client je připojen k vašemu NTRIP serveru a publikování oprav RTCM na /rtcm (a případně přihlášení k odběru /nmea, pokud je nakonfigurováno).
- Chcete-li ověřit témata, služby a stav zařízení, otevřete nový terminál a inicializujte jej:
source install/setup.bash
- Jedno ublox_gps Uzel publikuje diagnostiku na téma jako /diagnostika. Kontrola diagnostických informací:
ros2 topic echo /diagnostics
Zahrnuje stavové zprávy, jako je horizontální přesnost, vertikální přesnost a „3D fix“, pokud má přijímač platnou polohu, nebo „fixace není v pořádku“, pokud GPS ještě není správně fixován.
- Klíčové tipy pro kontrolu stavu opravy:
- monitor /ublox_gps_node/oprava ve zprávách NavSatFix (pole status.status) nebo v diagnostických zprávách pro podrobnější textové stavy.
- Jedno /diagnostika téma často poskytuje čitelné shrnutí, například „3D oprava“.
- Použijte /ublox/navpvt získat podrobné informace:
- Pole fix_type by mělo být pro 3D opravu na hodnotu 3.
- Pole s příznaky by mělo označovat, že se používají opravy.
- Pole flags2 obsahuje stav RTK: 67 RTK Float, 128 RTK Fix. Pokud je hodnota výrazně nižší, pravděpodobně to znamená, že se žádné korekce RTK neaplikují.
- Ujistěte se, že vaše anténa má volný výhled na oblohu a vaše NTRIP caster Přihlašovací údaje jsou správné pro dosažení stabilního RTK Fixu.
Pokud chcete postupovat podle tohoto návodu, máme všechny produkty skladem a připravené k odeslání:
-
Sleva!Vyrobeno v EvropěRTK starter kits
simpleRTK2B – Basic Starter Kit
od 199,00€ Tento produkt má více variant. Možnosti lze vybrat na stránce produktu