本教程讲解如何集成 u-blox ZED-F9P RTK GNSS 接收器与运行 ROS 2 (Jazzy) 的机器人连接。您将学习如何连接硬件、配置接收器、设置 ROS 2 工作区以及启动必要的节点,以便通过 NTRIP 服务。
在本指南结束时,您将拥有一个功能齐全的 ROS 2 设置,可以从您的 RTK 接收器流式传输实时 RTK 数据,基于 u-blox ZED-F9P—适用于需要厘米级定位精度的机器人应用。
所需的硬件:
- simpleRTK2B – 基本入门套件
- USB电缆 与接收器的 USB 端口兼容,用于连接到 PC 或嵌入式平台
- 可访问互联网的 PC 或嵌入式平台(本教程中使用 PC)
所需软件:
- Ubuntu的24.04 (本机安装、在虚拟机中安装或通过 WSL 安装)
- ROS 2(爵士) (Ubuntu平台安装)
有用的资源
- 安装 Ubuntu 的有用资源:
- 使用 WSL 或虚拟机: 如果您想使用 WSL 或虚拟机,则需要与 Ubuntu 共享 RTK 接收器。以下是如何与系统共享的说明:
- NTRIP 服务访问:确保您具有访问权限和凭据 NTRIP 服务。如果您需要帮助寻找矫正服务,请参阅我们的 列表 NTRIP 您所在国家/地区的惩教服务.
- RTK 接收器配置:确保您的 RTK 接收器配置为 Rover。如果您需要帮助配置 u-blox ZED-F9P 作为一个 Rover,请参阅我们的 ZED-F9P 配置文件.
如何设定 u-blox ZED-F9P 带有 ROS 2 的 RTK 接收器?
设置 ROS 2 环境
- 当按照以下步骤安装 ROS 2 环境时 ROS2安装指南,默认情况下,当您打开终端时它处于不活动状态。
要解决此问题,请打开终端并运行以下命令来配置 Ubuntu,以自动将 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设立的区域办事处外,我们在美国也开设了办事处,以便我们为当地客户提供更多的支持。“
- 接收器应该会自动配置。要验证这一点,请打开“终端”并输入以下命令。您应该会看到 /开发/ ttyACM0 (或类似设备,例如, /开发/ ttyACM1).
ls /dev/ttyACM*

- Press 按Ctrl + X 退出文件并按 Y 保存修改后的缓冲区。
- 断开(断电) RTK 接收器并重新连接(电源)。
- 现在,只要连接了 RTK 接收机,就可以从“/dev/tty_Ardusimple”链接。要检查这一点,请输入以下命令:
sudo service udev reload
sudo service udev restart
sudo udevadm trigger
ls /dev/
为项目准备一个新的 ROS 2 工作区
- 要创建工作区目录,请打开终端并创建一个文件夹(例如, ros2_ws)与a SRC 子文件夹:
mkdir -p ~/ros2_ws/src
- 导航到您的工作区。
cd ~/ros2_ws
- 要构建工作区,请使用 科尔孔 构建里面的所有包 SRC:
colcon build
- 提供安装文件以使您的 shell 识别新构建的软件包:
source install/setup.bash
- 将此命令添加到您的 ~/.bashrc(或等效命令)中,以便在您打开新终端时自动生成源。
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc

- 现在您已经设置了一个基本的 ROS2 工作区,可以进行进一步的开发和集成 ArduSimple 实时动态。
- 发起 罗斯德普 并下载最新的包依赖定义.
sudo rosdep init
rosdep update

- 重建软件包。我们建议使用 单独包装 自定义配置和启动文件,让一切井然有序。我们稍后会讨论这种方法。
cd ~/ros2_ws
colcon build
source install/setup.bash

- 为避免停止节点,请打开一个新的终端并使用以下命令初始化工作区。如果此节点已停止, u-blox 设备将不再发布其主题或提供其服务。
source ~/ros2_ws/install/setup.bash
- 在新包中创建一个启动目录和一个 Python 启动文件。
mkdir -p combined_rtk/launch
nano ~/ros2_ws/src/combined_rtk/launch/combined_nodes.launch.py
- 复制以下示例中的代码并将其粘贴到文件中。该代码的作用如下:
- ublox_gps 节点:发布来自您的 ArduSimple 。
- ntrip_客户端 节点:连接到 NTRIP caster/server 并发布 RTCM 修正 /rtcm (如果需要,还可以订阅 /nmea 或 /fix)。
- Shebang(#!/usr/bin/env python3) – 确保文件作为 Python 脚本运行。
- 启动说明 – 定义要启动的节点。
- Node 参数 – 设置节点特定的参数(例如,设备、主机、端口、身份验证)。
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': [
],
},
)
- 启动 ublox_gps 和 ntrip_客户端 使用一个命令的节点:
ros2 launch combined_rtk combined_nodes.launch.py
- 您应该在终端中看到来自两个节点的日志,表明:
- ublox_gps 正在从指定设备读取 GPS 数据(例如 /dev/tty_Ardusimple).
- ntrip_客户端 已连接到您的 NTRIP 服务器并在 /rtcm 上发布 RTCM 校正(如果已配置,可能订阅 /nmea)。
- 要验证主题、服务、设备状态,请打开一个新的终端并初始化:
source install/setup.bash
- 检查修复状态的关键提示:
- 显示器 /ublox_gps_node/修复 在 NavSatFix 消息(status.status 字段)或诊断消息中获取更详细的基于文本的状态。
- - /诊断 主题通常会提供像“3D 修复”这样的可读摘要。
- 使用 VHDL 语言编写 /ublox/navpvt 获取详细信息:
- 对于 3D 修复,fix_type 字段应为 3。
- 标志字段应指示正在使用修正。
- flags2 字段包含 RTK 状态:67 RTK Float,128 RTK Fix。如果该值明显较低,则可能表示未应用 RTK 校正。
- 确保你的天线能清晰地看到天空和你的 NTRIP caster 凭证正确,可以实现稳定的 RTK 修复。
如果您想遵循本教程,我们有所有库存产品可随时发货:
-
促销!欧洲制造