Овај туторијал објашњава како интегрисати u-blox ZED-F9P РТК ГНСС пријемник са роботом који користи ROS 2 (Jazzy). Научићете како да повежете хардвер, конфигуришете пријемник, подесите радни простор ROS 2 и покренете потребне чворове за пријем и обраду високопрецизних GPS података са RTK корекцијама путем NTRIP сервис.
До краја овог водича, имаћете потпуно функционалну ROS 2 конфигурацију која ће стримовати RTK податке у реалном времену са вашег RTK пријемника на основу u-blox ZED-F9P—погодно за роботске примене које захтевају тачност позиционирања на центиметарском нивоу.
Потребан хардвер:
- simpleRTK2B – Основни почетни комплет
- УСБ кабл компатибилан са УСБ портом вашег пријемника за повезивање са рачунаром или уграђеном платформом
- рачунар или уграђена платформа са приступом интернету (користимо рачунар у овом туторијалу)
Потребан софтвер:
- убунту КСНУМКС (инсталирано изворно, у виртуелној машини или путем WSL-а)
- РОС 2 (Џези) (инсталирано на Ubuntu платформи)
Корисни ресурси
- Корисни ресурси за инсталирање Убунтуа:
- Коришћење WSL-а или виртуелних машина: У случају да желите да користите WSL или виртуелне машине, потребно је да делите RTK пријемник са Ubuntu-ом. Постоје упутства како да га делите са системом:
- NTRIP Приступ сервисуУверите се да имате приступ и акредитиве за NTRIP служба. Потребна вам је помоћ да пронађете службу за корекцију, погледајте наше Листа NTRIP корективне службе у вашој земљи.
- Конфигурација RTK пријемникаУверите се да је ваш RTK пријемник конфигурисан као RoverАко вам је потребна помоћ при конфигурисању u-blox ZED-F9P као Rover, погледајте наше ZED-F9P Датотеке за конфигурацију.
Како се поставља u-blox ZED-F9P РТК пријемник са РОС 2?
Подешавање ROS 2 окружења
- Када је ROS 2 окружење инсталирано пратећи упутства ROS2 водич за инсталацију, подразумевано није активан када отворите терминал.
Да бисте ово поправили, отворите Терминал и покрените следећу команду да бисте конфигурисали Убунту да аутоматски учита ROS 2 окружење у вашу конфигурацију покретања Терминала.
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
Да бисте применили промене, користите команду испод. Након тога, ROS 2 ће бити спреман за употребу сваки пут када отворите терминал.
source ~/.bashrc
- Да бисте управљали зависностима у ROS 2, ажурирајте листу пакета и инсталације ros-dev-tools, који укључује росдеп и друге корисне алате за развој за ROS 2.
sudo apt update && sudo apt install ros-dev-tools
Повежите RTK пријемник
- Прикључите RTK антену на пријемник. Поставите антену на место са добрим погледом на небо или близу прозора ради тестирања функционалности.
- Повежите пријемник са рачунаром преко УСБ порта означеног са „POWER+GPS".
- Пријемник би требало да буде аутоматски конфигурисан. Да бисте то проверили, отворите Терминал и откуцајте команду. Требало би да видите / дев / ттиАЦМ0 (или сличан уређај, нпр. / дев / ттиАЦМ1).
ls /dev/ttyACM*

- Да бисте проверили GPS стримовање са RTK пријемника, покрените команду у терминалу. Она приказује сирове GPS податке који се емитују са пријемника. Притисните Цтрл + Ц да се заустави.
sudo cat /dev/ttyACM0
- Савет: Ако не видите никакав излаз или уређај недостаје, уверите се да ваш корисник има одговарајућа овлашћења (нпр. да ли је у групи за dialout). Можете додати себе помоћу команде испод. Након тога, одјавите се и поново се пријавите да би промене ступиле на снагу.
sudo usermod -a -G dialout $USER
- Press Цтрл + В да изађете из датотеке и притисните Y да сачувате модификовани бафер.
- Искључите (искључите) RTK пријемник из напајања и поново га повежите (прикључите) из напајања.
- Сада, кад год је RTK пријемник повезан, биће доступан из „/dev/tty_Ardusimple„линк“. Да бисте ово проверили, унесите команде:
sudo service udev reload
sudo service udev restart
sudo udevadm trigger
ls /dev/
Припремите нови ROS 2 радни простор за пројекат
- Да бисте креирали директоријум радног простора, отворите терминал и креирајте фасциклу (на пример, ros2_ws) са срц подфолдер:
mkdir -p ~/ros2_ws/src
- Идите до свог радног простора.
cd ~/ros2_ws
- Да бисте изградили радни простор, користите Колкон да се изграде сви пакети унутра срц:
colcon build
- Припремите инсталациону датотеку да би ваша љуска препознала новоизграђене пакете:
source install/setup.bash
- Додајте ову команду у ваш ~/.bashrc (или еквивалент) да бисте аутоматски преусмеравали изворни код сваки пут када отворите нови терминал.
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc

- Сада имате основни ROS2 радни простор подешен за даљи развој и интеграцију са ArduSimple РТК.
Покрените чвор на ROS 2 да бисте се повезали са RTK пријемником
- Да бисте клонирали u-blox репозиторијум у ваш ROS 2 радни простор (~/ros2_ws/src):
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/KumarRobotics/ublox.git
- Иницирајте росдеп и преузмите најновије дефиниције зависности пакета.
sudo rosdep init
rosdep update

- Сада u-blox Чвор је доступан у вашем ROS2 окружењу.
- Измените конфигурациону датотеку да бисте ажурирали путање или параметре уређаја по потреби (користићемо /dev/tty_Ardusimple). Пакет ublox_gps укључује подразумевану конфигурациону датотеку под називом зед_f9p.yamlОтворите конфигурациони фајл командом:
nano ~/ros2_ws/src/ublox/ublox_gps/config/zed_f9p.yaml
- Поново изградите пакете. Препоручујемо коришћење посебан пакет за ваше прилагођене конфигурационе и датотеке за покретање како би ствари биле организоване. О том приступу ћемо касније разговарати.
cd ~/ros2_ws
colcon build
source install/setup.bash

- Да бисте избегли заустављање чвора, отворите нови терминал и иницијализујте радни простор помоћу команде испод. Ако је овај чвор заустављен, u-blox уређај више неће објављивати своје теме нити пружати своје услуге.
source ~/ros2_ws/install/setup.bash
- Да бисте зауставили пренос, притисните Цтрл + Ц.
- Погледајте листу доступних услуга које пружа Node.
ros2 service list
- Сада имате u-blox ROS 2 чвор покреће и објављује податке у реалном времену са вашег RTK пријемника.
Важно:- Не заустављајте u-blox чвор. Овај чвор мора бити покренут пре него што се прате кораци за покретање NTRIP клијент, јер серверу за корекције требају GPS подаци уживо да би израчунао и послао RTCM корекције.
- u-blox Чвор мора остати активан да би визуализовао GPS излаз користећи ros2 topic echo, као што је приказано у претходном кораку.
Покрените чвор на ROS 2 за коришћење NTRIP исправке
Beleška: Уверите се да је GPS чвор за везу већ покренут, јер је потребан за пренос података о корекцији.
- Идите до директоријума радног простора ROS2 и клонирајте грану ROS 2.
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/LORD-MicroStrain/ntrip_client.git
- Да бисте избегли затварање чвора, отворите нови терминал и иницијализујте радни простор.
Beleška: Ако је чвор заустављен, u-blox Уређај ће престати да прима податке о корекцији. u-blox чвор мора бити покренут пре покретања NTRIP клијент, јер пружа потребне GPS податке серверу за корекцију. Ако u-blox Ако је чвор заустављен, више неће објављивати потребне теме и услуге, а rtk пријемник ће престати да прима податке о корекцији.
source ~/ros2_ws/install/setup.bash
- Да бисте избегли затварање чвора, отворите нови терминал и иницијализујте радни простор.
Beleška: Ако је чвор заустављен, u-blox Уређај ће престати да прима податке о корекцији. u-blox чвор мора бити покренут пре покретања NTRIP клијент, јер пружа потребне GPS податке серверу за корекцију. Ако u-blox Ако је чвор заустављен, више неће објављивати потребне теме и услуге, а rtk пријемник ће престати да прима податке о корекцији.
source ~/ros2_ws/install/setup.bash
- Погледајте листу доступних тема.
ros2 topic list
- Кључне теме које бисте могли видети:
- /rtcmОбјављује RTCM податке о корекцији (mavros_msgs/RTCM или rtcm_msgs/Message, у зависности од конфигурације).
- /nmeaПретплаћује се на локалне NMEA реченице, прослеђујући их серверу.
- /ublox_gps_node/fixТакође може да прослеђује податке о глобалној позицији ако већ нису у NMEA формату.
- Ако је све урађено исправно, успешно, видећете да је чвор објавио RTCM исправке на /rtcm тема. Коришћење ntrip_client Node, можете интегрисати RTCM податке о корекцији у свој ROS 2 пројекат како бисте омогућили прецизно позиционирање помоћу RTK пријемника.
ros2 topic echo /rtcm
- Користећи овај чвор, можете интегрисати RTCM податке о корекцији у ваш ROS 2 пројекат како бисте омогућили прецизно позиционирање помоћу RTK пријемника.
Креирање комбинованог пакета за лансирање
Направићемо посебан пакет који садржи једну датотеку за покретање оба , ублокс_гпс чвор (објављивање GPS података) и ntrip_client чвор (који обрађује RTK корекције) истовремено. Овај приступ одржава ваш радни простор организованим и олакшава покретање свих потребних чворова једном командом.
- Отворите нови терминал, идите до вашег ROS2 радног простора и креирајте нови пакет. За нанодатотеку за покретање засновану на Пајтону, покрените команде:
cd ~/ros2_ws/src
ros2 pkg create combined_rtk --build-type ament_python
- Направите директоријум за покретање и датотеку за покретање Пајтона унутар новог пакета.
mkdir -p combined_rtk/launch
nano ~/ros2_ws/src/combined_rtk/launch/combined_nodes.launch.py
- Копирајте код из примера испод и налепите га у датотеку. Код ради следеће:
- ублокс_гпс Чвор: Објављује сирове ГПС податке са вашег ArduSimple уређај.
- ntrip_client Чвор: Повезује се са NTRIP caster/сервер и објављује RTCM исправке на /rtcm (а такође се можете претплатити на /nmea или /fix ако је потребно).
- Шебанг (#!/usr/bin/env python3) – Обезбеђује да се датотека покреће као Пајтон скрипта.
- Опис покретања – Дефинише које чворове треба покренути.
- Чвор параметри – Поставља параметре специфичне за чвор (нпр. уређај, хост, порт, аутентификација).
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
])
- отворен сетуп.пи.
nano ~/ros2_ws/src/combined_rtk/setup.py
- Копирајте код испод и налепите га у сетуп.пи датотеку да бисте укључили датотеке за покретање и зависности. Затворите датотеку и сачувајте измене.
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': [
],
},
)
- Покрените оба ублокс_гпс ntrip_client Чворови са једном командом:
ros2 launch combined_rtk combined_nodes.launch.py
- Требало би да видите логове са оба чвора у вашем терминалу, што указује на следеће:
- ублокс_гпс чита GPS податке са наведеног уређаја (нпр. /dev/tty_Ardusimple).
- ntrip_client је повезан са вашим NTRIP сервер и објављивање RTCM корекција на /rtcm (и могуће претплата на /nmea ако је конфигурисано).
- Да бисте проверили теме, услуге и статус уређаја, отворите нови терминал и иницијализујте:
source install/setup.bash
- ублокс_гпс Нод објављује дијагностику на тему као што је /дијагностика. Да бисте проверили дијагностичке информације:
ros2 topic echo /diagnostics
Укључује статусне поруке као што су хоризонтална тачност, вертикална тачност и „3Д фиксирање“ када пријемник има валидну позицију или „фиксирање није у реду“ када ГПС још није правилно фиксиран.
- Кључни савети за проверу статуса поправке:
- Надгледати /ublox_gps_node/fix у NavSatFix порукама (поље status.status) или дијагностичким порукама за детаљније текстуалне статусе.
- /дијагностика Тема често пружа читљив резиме попут „3Д поправка“.
- употреба /ublox/navpvt да бисте добили детаљне информације:
- Поље fix_type треба да буде 3 за 3D фиксирање.
- Поље за заставице треба да означава да се користе исправке.
- Поље flags2 садржи RTK статус: 67 RTK Float, 128 RTK Fix. Ако је вредност знатно нижа, вероватно значи да се не примењују RTK корекције.
- Уверите се да ваша антена има јасан поглед на небо и ваше NTRIP caster акредитиви су исправни за постизање стабилне RTK фиксације.
Ако желите да пратите овај водич, имамо све производе на лагеру и спремни за испоруку:
-
Сале!Маде ин ЕуропеRTK starter kits
simpleRTK2B – Basic Starter Kit
od 199,00€ Овај производ има више варијанти. Опције се могу изабрати на страници производа