Tutorial ini menjelaskan cara mengintegrasikan u-blox ZED-F9P RTK GNSS penerima dengan robot yang menjalankan ROS 2 (Jazzy). Anda akan mempelajari cara menghubungkan perangkat keras, mengonfigurasi penerima, menyiapkan ruang kerja ROS 2, dan meluncurkan node yang diperlukan untuk menerima dan memproses data GPS presisi tinggi dengan koreksi RTK melalui NTRIP layanan.
Pada akhir panduan ini, Anda akan memiliki pengaturan ROS 2 yang berfungsi penuh yang mengalirkan data RTK waktu nyata dari penerima RTK Anda berdasarkan u-blox ZED-F9P—cocok untuk aplikasi robotika yang memerlukan akurasi posisi tingkat sentimeter.
Perangkat keras yang diperlukan:
- simpleRTK2B – Perangkat Pemula Dasar
- Kabel USB kompatibel dengan port USB penerima Anda untuk menghubungkan ke PC atau platform tertanam
- PC atau platform tertanam dengan akses internet (kami menggunakan PC dalam tutorial ini)
Perangkat lunak yang diperlukan:
- Ubuntu 24.04 (diinstal secara asli, di mesin virtual, atau melalui WSL)
- ROS 2 (Jazzy) (diinstal pada platform Ubuntu)
Sumber daya yang berguna
- Sumber daya bermanfaat untuk menginstal Ubuntu:
- Menggunakan WSL atau Mesin Virtual: Jika Anda ingin menggunakan WSL atau mesin virtual, Anda perlu berbagi penerima RTK dengan Ubuntu. Berikut ini petunjuk cara membagikannya dengan sistem:
- NTRIP Akses Layanan:Pastikan Anda memiliki akses dan kredensial untuk NTRIP layanan. Anda memerlukan bantuan untuk menemukan layanan pemasyarakatan, lihat Daftar NTRIP layanan koreksi di negara Anda.
- Konfigurasi Penerima RTK: Pastikan penerima RTK Anda dikonfigurasi sebagai RoverJika Anda memerlukan bantuan dalam mengonfigurasi u-blox ZED-F9P sebagai Rover, lihat kami ZED-F9P File konfigurasi.
Cara mengatur u-blox ZED-F9P Penerima RTK dengan ROS 2?
Siapkan lingkungan ROS 2
- Ketika lingkungan ROS 2 telah diinstal dengan mengikuti Panduan instalasi ROS2, secara default tidak aktif saat Anda membuka terminal.
Untuk memperbaikinya, buka Terminal dan jalankan perintah berikut untuk mengonfigurasi Ubuntu agar memuat lingkungan ROS 2 ke konfigurasi startup Terminal Anda secara otomatis.
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
Untuk menerapkan perubahan, gunakan perintah di bawah ini. Setelah ini, ROS 2 akan siap digunakan setiap kali Anda membuka Terminal.
source ~/.bashrc
- Untuk mengelola dependensi di ROS 2, perbarui daftar paket dan instal alat-pengembang-ros, Yang mencakup rosdep dan alat pengembangan berguna lainnya untuk ROS 2.
sudo apt update && sudo apt install ros-dev-tools
Hubungkan penerima RTK
- Hubungkan antena RTK ke penerima. Letakkan antena di lokasi yang memiliki pemandangan langit yang bagus, atau di dekat jendela untuk menguji fungsionalitasnya.
- Hubungkan receiver Anda ke PC melalui port USB yang diberi label “POWER+GPS. "
- Penerima harus dikonfigurasi secara otomatis. Untuk memverifikasi ini, buka Terminal dan ketik perintah. Anda akan melihat / dev / ttyACM0 (atau perangkat serupa, misalnya, / dev / ttyACM1).
ls /dev/ttyACM*
- Untuk memeriksa Aliran GPS dari penerima RTK, jalankan perintah di Terminal. Perintah ini akan menampilkan data GPS mentah yang mengalir dari penerima. Tekan Ctrl + C untuk berhenti.
sudo cat /dev/ttyACM0
- olymp trade indonesiaTip: Jika Anda tidak melihat output atau perangkat tidak ada, pastikan pengguna Anda memiliki izin yang sesuai (misalnya, berada dalam grup dialout). Anda dapat menambahkan diri Anda dengan perintah di bawah ini. Setelah itu, keluar dan masuk kembali agar perubahan diterapkan.
sudo usermod -a -G dialout $USER
- Media Ctrl + X untuk keluar dari file dan tekan Y untuk menyimpan buffer yang dimodifikasi.
- Putuskan sambungan (cabut daya) penerima RTK dan sambungkan (daya) lagi.
- Sekarang setiap kali penerima RTK terhubung, itu akan dapat diakses dari “/pengembang/tty_Ardusimple” tautan. Untuk memeriksanya, masukkan perintah berikut:
sudo service udev reload
sudo service udev restart
sudo udevadm trigger
ls /dev/
Siapkan ruang kerja ROS 2 baru untuk proyek
- Untuk membuat Direktori Ruang Kerja, buka Terminal dan buat folder (misalnya, ros2_ws) dengan src subfolder:
mkdir -p ~/ros2_ws/src
- Navigasi ke ruang kerja Anda.
cd ~/ros2_ws
- Untuk membangun Ruang Kerja, gunakan usus besar untuk membangun semua paket di dalam src:
colcon build
- Sumber file pengaturan untuk membiarkan shell Anda mengenali paket yang baru dibangun:
source install/setup.bash
- Tambahkan perintah ini ke ~/.bashrc Anda (atau setara) ke sumber secara otomatis setiap kali Anda membuka terminal baru.
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
- Sekarang Anda memiliki ruang kerja ROS2 dasar yang disiapkan untuk pengembangan dan integrasi lebih lanjut dengan ArduSimple RTK.
Mulai Node pada ROS 2 untuk terhubung ke penerima RTK
- Untuk mengkloning u-blox repositori ke ruang kerja ROS 2 Anda (~/ros2_ws/src):
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/KumarRobotics/ublox.git
- Mulai rosdep dan mengunduh definisi ketergantungan paket terbaru.
sudo rosdep init
rosdep update
- Sekarang u-blox Node tersedia di lingkungan ROS2 Anda.
- Ubah file konfigurasi untuk memperbarui jalur atau parameter perangkat sesuai kebutuhan (kami akan menggunakan /pengembang/tty_Ardusimple). Paket ublox_gps menyertakan file konfigurasi default bernama bersemangat_f9p.yamlBuka berkas konfigurasi dengan perintah:
nano ~/ros2_ws/src/ublox/ublox_gps/config/zed_f9p.yaml
- Bangun kembali paket-paketnya. Kami merekomendasikan penggunaan paket terpisah untuk konfigurasi khusus dan file peluncuran agar semuanya tetap teratur. Kita akan membahas pendekatan itu nanti.
cd ~/ros2_ws
colcon build
source install/setup.bash
- Untuk menghindari penghentian node, buka Terminal baru dan inisialisasi ruang kerja menggunakan perintah di bawah ini. Jika Node ini dihentikan, u-blox perangkat tidak akan lagi menerbitkan topiknya atau menyediakan layanannya.
source ~/ros2_ws/install/setup.bash
- Untuk menghentikan aliran, tekan Ctrl + C.
- Lihat daftar layanan yang tersedia yang disediakan oleh Node.
ros2 service list
- Sekarang Anda sudah memiliki u-blox Node ROS 2 berjalan dan menerbitkan data waktu nyata dari penerima RTK Anda.
Penting:- Jangan hentikan u-blox node. Node ini harus berjalan sebelum mengikuti langkah-langkah meluncurkan NTRIP klien, karena server koreksi memerlukan data GPS langsung untuk menghitung dan mengirim koreksi RTCM.
- The u-blox node harus tetap aktif untuk memvisualisasikan keluaran GPS menggunakan gema topik ros2, seperti yang ditunjukkan pada langkah sebelumnya.
Mulai Node pada ROS 2 untuk digunakan NTRIP koreksi
Catatan: Pastikan simpul koneksi GPS sudah berjalan, karena diperlukan untuk mengirimkan data koreksi.
- Navigasi ke direktori ruang kerja ROS2 dan klon cabang ROS 2.
cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/LORD-MicroStrain/ntrip_client.git
- Untuk menghindari penutupan Node, buka Terminal baru dan inisialisasi ruang kerja.
Catatan: Jika Node dihentikan, u-blox perangkat akan berhenti menerima data koreksi. u-blox node harus berjalan sebelum meluncurkan NTRIP klien, karena menyediakan data GPS yang diperlukan ke server koreksi. Jika u-blox node dihentikan, ia tidak akan lagi menerbitkan Topik dan Layanan yang diperlukan, dan penerima rtk akan berhenti menerima data koreksi.
source ~/ros2_ws/install/setup.bash
- Untuk menghindari penutupan Node, buka Terminal baru dan inisialisasi ruang kerja.
Catatan: Jika Node dihentikan, u-blox perangkat akan berhenti menerima data koreksi. u-blox node harus berjalan sebelum meluncurkan NTRIP klien, karena menyediakan data GPS yang diperlukan ke server koreksi. Jika u-blox node dihentikan, ia tidak akan lagi menerbitkan Topik dan Layanan yang diperlukan, dan penerima rtk akan berhenti menerima data koreksi.
source ~/ros2_ws/install/setup.bash
- Lihat daftar Topik yang tersedia.
ros2 topic list
- Topik utama yang mungkin Anda lihat:
- /rtcm: Menerbitkan data koreksi RTCM (baik mavros_msgs/RTCM atau rtcm_msgs/Message, tergantung pada konfigurasi).
- /nmea: Berlangganan kalimat NMEA lokal, meneruskannya ke server.
- /ublox_gps_node/memperbaiki: Dapat juga meneruskan data posisi global jika belum dalam format NMEA.
- Jika semuanya dilakukan dengan benar, berhasil, Anda akan melihat Node menerbitkan koreksi RTCM di /rtcm topik. Menggunakan klien ntrip Node, Anda dapat mengintegrasikan data koreksi RTCM ke dalam proyek ROS 2 Anda untuk memungkinkan penentuan posisi yang tepat dengan penerima RTK.
ros2 topic echo /rtcm
- Dengan menggunakan simpul ini, Anda dapat mengintegrasikan data koreksi RTCM ke dalam proyek ROS 2 Anda untuk memungkinkan penentuan posisi yang tepat dengan penerima RTK.
Membuat paket peluncuran gabungan
Kami akan membuat paket khusus yang berisi satu file peluncuran untuk dijalankan kedua itu ublox_gps node (menerbitkan data GPS) dan klien ntrip node (menangani koreksi RTK) secara bersamaan. Pendekatan ini menjaga ruang kerja Anda tetap teratur dan memudahkan untuk memulai semua node yang diperlukan dengan satu perintah.
- Buka Terminal baru, navigasikan ke ruang kerja ROS2 Anda dan buat paket baru. Untuk meluncurkan nanofile berbasis Python, jalankan perintah berikut:
cd ~/ros2_ws/src
ros2 pkg create combined_rtk --build-type ament_python
- Buat direktori peluncuran dan file peluncuran Python di dalam paket baru.
mkdir -p combined_rtk/launch
nano ~/ros2_ws/src/combined_rtk/launch/combined_nodes.launch.py
- Salin kode dari contoh di bawah ini dan tempelkan ke dalam berkas. Kode tersebut berfungsi:
- ublox_gps Node: Menerbitkan data GPS mentah dari Anda ArduSimple perangkat.
- klien ntrip Node: Terhubung ke NTRIP caster/server dan menerbitkan koreksi RTCM di /rtcm (dan juga dapat berlangganan ke /nmea atau /fix jika diperlukan).
- Shebang (#!/usr/bin/env python3) – Memastikan berkas berjalan sebagai skrip Python.
- Deskripsi Peluncuran – Menentukan node mana yang akan dimulai.
- Node parameter – Mengatur parameter spesifik node (misalnya, perangkat, host, port, autentikasi).
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
- Salin kode di bawah ini dan tempel ke dalam setup.py file untuk menyertakan file peluncuran dan dependensi. Tutup file dan simpan perubahan.
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': [
],
},
)
- Luncurkan keduanya ublox_gps dan klien ntrip Node dengan satu perintah:
ros2 launch combined_rtk combined_nodes.launch.py
- Anda akan melihat log dari kedua node di terminal Anda, yang menunjukkan bahwa:
- ublox_gps sedang membaca data GPS dari perangkat yang ditentukan (misalnya, /dev/tty_Ardusimple).
- klien ntrip terhubung ke Anda NTRIP server dan menerbitkan koreksi RTCM di /rtcm (dan mungkin berlangganan /nmea jika dikonfigurasi).
- Untuk memverifikasi Topik, Layanan, Status Perangkat, buka Terminal baru dan inisialisasi:
source install/setup.bash
- The ublox_gps Node menerbitkan diagnostik pada topik seperti /diagnostik. Untuk memeriksa Informasi Diagnostik:
ros2 topic echo /diagnostics
Termasuk pesan status seperti akurasi horizontal, akurasi vertikal, dan “perbaikan 3D” saat penerima memiliki posisi yang valid, atau “perbaikan tidak ok” saat GPS belum diperbaiki dengan benar.
- Tips utama untuk memeriksa status perbaikan:
- Memantau /ublox_gps_node/memperbaiki dalam pesan NavSatFix (bidang status.status) atau pesan diagnostik untuk status berbasis teks yang lebih terperinci.
- The /diagnostik Topik sering kali memberikan ringkasan yang mudah dibaca seperti “perbaikan 3D”.
- penggunaan /ublox/navpvt untuk mendapatkan informasi lebih rinci:
- Bidang fix_type haruslah 3 untuk perbaikan 3D.
- Kolom bendera seharusnya menunjukkan bahwa koreksi sedang digunakan.
- Kolom flags2 mencakup status RTK: 67 RTK Float, 128 RTK Fix. Jika nilainya jauh lebih rendah, kemungkinan besar tidak ada koreksi RTK yang diterapkan.
- Pastikan antena Anda memiliki pandangan yang jelas ke langit dan NTRIP caster kredensial benar untuk mencapai Perbaikan RTK yang stabil.
Terakhir, Anda ingin mengintegrasikan data GPS dan koreksi RTCM secara bersamaan. Untuk melakukannya, Anda perlu memiliki kedua node berjalan pada saat yang sama. Begini cara kerjanya:
simpul ublox_gps
Menerbitkan perbaikan GNSS mentah pada
/fixtema.Mengekspos antarmuka (
rtcm_inputparameter) sehingga pesan RTCM yang masuk dapat dikirim ke u-blox perangkat melalui ROS 2.
simpul ntrip_client
Terhubung ke Anda NTRIP caster dan menerbitkan pesan koreksi RTCM di
/rtcmtema.Pesan-pesan ini kemudian harus diteruskan ke u-blox penerima melalui
/rtcm➔rtcm_input.
Meskipun tutorial menjelaskan setiap langkah secara terpisah, untuk menunjukkan kepada Anda cara meluncurkan setiap node dan memverifikasi bahwa data sedang dipublikasikan, tutorial ini tidak menjelaskan setiap langkah secara terpisah. tidak Hubungkan keduanya secara otomatis. Dalam praktiknya, Anda sebaiknya meluncurkan kedua tumpukan secara bersamaan, misalnya:
# Terminal 1: jalankan driver ublox
ros2 meluncurkan ublox_gps ublox_gps_node-launch.py# Terminal 2: jalankan NTRIP klien
ros2 luncurkan ntrip_client ntrip_client-launch.pyDengan cara ini, koreksi RTCM mengalir
/rtcmlangsung diambil oleh pengemudi ublox dan dikirim ke ZED-F9P perangkat, yang pada gilirannya akan menerbitkan RTK-dikoreksi benar/fix.
Kalau kamu sampai di sini, selamat! Ini mungkin salah satu tutorial terpanjang kami 🙂
Jika Anda ingin mengikuti tutorial ini, kami memiliki semua produk dalam stok dan siap dikirim:
dan

