更新(16 / 06 / 2025): 我们所有产品都有大量库存,也可以在    立即购买

如何整合 u-blox ZED-F9P GNSS/RTK 接收器进入 ROS 2(Jazzy)

整合 u-blox ZED-F9P GNSS/RTK 接收器接入 ROS 2 Jazzy
整合 u-blox ZED-F9P GNSS/RTK 接收器接入 ROS 2 Jazzy

本教程讲解如何集成 u-blox ZED-F9P RTK GNSS 接收器与运行 ROS 2 (Jazzy) 的机器人连接。您将学习如何连接硬件、配置接收器、设置 ROS 2 工作区以及启动必要的节点,以便通过 NTRIP 服务。

在本指南结束时,您将拥有一个功能齐全的 ROS 2 设置,可以从您的 RTK 接收器流式传输实时 RTK 数据,基于 u-blox ZED-F9P—适用于需要厘米级定位精度的机器人应用。

所需的硬件:

所需软件:

有用的资源

  1. 安装 Ubuntu 的有用资源:
  2. 使用 WSL 或虚拟机: 如果您想使用 WSL 或虚拟机,则需要与 Ubuntu 共享 RTK 接收器。以下是如何与系统共享的说明:
  3. NTRIP 服务访问:确保您具有访问权限和凭据 NTRIP 服务。如果您需要帮助寻找矫正服务,请参阅我们的 列表 NTRIP 您所在国家/地区的惩教服务.
  4. RTK 接收器配置:确保您的 RTK 接收器配置为 Rover。如果您需要帮助配置 u-blox ZED-F9P 作为一个 Rover,请参阅我们的 ZED-F9P 配置文件.

如何设定 u-blox ZED-F9P 带有 ROS 2 的 RTK 接收器?

设置 ROS 2 环境

  1. 当按照以下步骤安装 ROS 2 环境时 ROS2安装指南,默认情况下,当您打开终端时它处于不活动状态。
    要解决此问题,请打开终端并运行以下命令来配置 Ubuntu,以自动将 ROS 2 环境加载到终端启动配置中。
				
					echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
				
			
  1. 要应用更改,请使用以下命令。此后,每次打开终端时,ROS 2 都将可供使用。

				
					source ~/.bashrc
				
			
  1. 要管理 ROS 2 中的依赖项,请更新您的软件包列表并安装 ros-dev-tools,其中包括 罗斯德普 以及其他有用的 ROS 2 开发工具。
				
					sudo apt update && sudo apt install ros-dev-tools
				
			

连接 RTK 接收机

  1. 将 RTK 天线插入接收器。将天线放置在视野良好的位置,或靠近窗户的位置,以测试其功能。
  2. 通过标有“POWER+GPS设立的区域办事处外,我们在美国也开设了办事处,以便我们为当地客户提供更多的支持。“
  3. 接收器应该会自动配置。要验证这一点,请打开“终端”并输入以下命令。您应该会看到 /开发/ ttyACM0 (或类似设备,例如, /开发/ ttyACM1).
				
					ls /dev/ttyACM*
				
			
积分 u-blox ZED-F9P rtk 接收器,可校正 ROS2
  1. 要检查 RTK 接收器的 GPS 数据流,请在终端中运行以下命令。它会显示来自接收器的原始 GPS 数据流。按 按Ctrl + C 停止。
				
					sudo cat /dev/ttyACM0
				
			
  1. 提示: 如果您没有看到任何输出或设备丢失,请确保您的用户具有适当的权限(例如,在 dialout 组中)。您可以使用以下命令添加自己。之后,注销并重新登录以使更改生效。
				
					sudo usermod -a -G dialout $USER
				
			
  1. 为了防止 RTK 接收机以不同的“ttyACM*”每次通电时,创建一个 udev 规则 (动态链接)在连接 RTK 接收器之前通过添加以下文件来创建具有特定名称的条目。
				
					sudo nano /etc/udev/rules.d/50-ardusimple.rules
				
			
  1. 在规则中输入以下文本:
				
					KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="1546", ATTRS{idProduct}=="01a9", SYMLINK="tty_Ardusimple", GROUP="dialout", MODE="0666"
				
			
  1. Press 按Ctrl + X 退出文件并按 Y 保存修改后的缓冲区。
  2. 断开(断电) RTK 接收器并重新连接(电源)。
  3. 现在,只要连接了 RTK 接收机,就可以从“/dev/tty_Ardusimple”链接。要检查这一点,请输入以下命令:
				
					sudo service udev reload
sudo service udev restart
sudo udevadm trigger
ls /dev/
				
			
  1. 现在你可以看到 “tty_ArduSimple= 已经被创造了。

为项目准备一个新的 ROS 2 工作区

  1. 要创建工作区目录,请打开终端并创建一个文件夹(例如, ros2_ws)与a SRC 子文件夹:
				
					mkdir -p ~/ros2_ws/src
				
			
  1. 导航到您的工作区。
				
					cd ~/ros2_ws
				
			
  1. 要构建工作区,请使用 科尔孔 构建里面的所有包 SRC:
				
					colcon build
				
			
  1. 提供安装文件以使您的 shell 识别新构建的软件包:
				
					source install/setup.bash
				
			
  1. 将此命令添加到您的 ~/.bashrc(或等效命令)中,以便在您打开新终端时自动生成源。
				
					echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
				
			
积分 u-blox ZED-F9P rtk 接收器,可校正 ROS2
  1. 现在您已经设置了一个基本的 ROS2 工作区,可以进行进一步的开发和集成 ArduSimple 实时动态。

在 ROS 2 上启动节点以连接 RTK 接收器

在本节中,我们将下载并构建 u-blox ROS 2 节点,然后运行快速测试以确认它可以与您的 ArduSimple RTK 设备。我们将演示如何直接在 u-blox 包,我们建议在后面的步骤中创建一个包含您自己的自定义启动文件的单独包。
  1. 克隆 u-blox 存储库到您的 ROS 2 工作区 (~/ros2_ws/src):
				
					cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/KumarRobotics/ublox.git

				
			
  1. 发起 罗斯德普 并下载最新的包依赖定义.
				
					sudo rosdep init
rosdep update
				
			
积分 u-blox ZED-F9P rtk 接收器,可校正 ROS2
  1.  建立 u-blox 节点,返回主工作区文件夹并编译:
				
					cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build
source install/setup.bash

				
			
  1. 现在 u-blox 节点在您的 ROS2 环境中可用。
  2. 根据需要修改配置文件以更新设备路径或参数(我们将使用 /dev/tty_Ardusimple)。ublox_gps 软件包包含一个名为 zed_f9p.yaml.通过命令打开配置文件:
				
					nano ~/ros2_ws/src/ublox/ublox_gps/config/zed_f9p.yaml
				
			
  1. 根据需要修改配置文件以更新设备路径或参数。在本例中,将设备路径设置为 /dev/tty_Ardusimple.
  1. 要配置节点 zed_f9p.yaml 设置,更新启动文件。打开文件并添加以下行以加载配置:
				
					nano ~/ros2_ws/src/ublox/ublox_gps/launch/ublox_gps_node-launch.py
				
			
  1. 重建软件包。我们建议使用 单独包装 自定义配置和启动文件,让一切井然有序。我们稍后会讨论这种方法。
				
					cd ~/ros2_ws
colcon build
source install/setup.bash
				
			
积分 u-blox ZED-F9P rtk 接收器,可校正 ROS2
  1. 启动GPS节点并测试连接:
				
					ros2 launch ublox_gps ublox_gps_node-launch.py
				
			
  1. 如果一切配置正确,节点应该开始从 ArduSimple 接收器。
  1. 为避免停止节点,请打开一个新的终端并使用以下命令初始化工作区。如果此节点已停止, u-blox 设备将不再发布其主题或提供其服务。
				
					source ~/ros2_ws/install/setup.bash
				
			
  1. 运行以下命令查看可用的主题。查找类似这样的主题 /ublox_gps_node/修复,其中包含 sensor_msgs/NavSatFix 格式的 GPS 数据等
				
					ros2 topic list
				
			
  1. 运行命令即可实时查看GPS数据。 
				
					ros2 topic echo /ublox_gps_node/fix
				
			
  1. 要停止流媒体,请按 按Ctrl + C.
  2. 查看节点提供的可用服务列表。
				
					ros2 service list
				
			
  1. 现在你已经有了 u-blox ROS 2 节点运行并从您的 RTK 接收器发布实时数据。
    重要提示:
    • 不要停止 u-blox 节点。在执行以下步骤启动 NTRIP 客户端,因为校正服务器需要实时 GPS 数据来计算和发送 RTCM 校正。
    • - u-blox 节点必须保持活动状态才能使用 ros2 主题回显可视化 GPS 输出,如上一步所示。

在 ROS 2 上启动节点以供使用 NTRIP 更正

我们将使用 ntrip_客户端 ROS2 节点连接到 NTRIP Caster 并接收 RTCM 校正数据,以实现更精确的定位。该节点还可以转发本地 NMEA 如果需要,可以将句子发送到远程服务器。以下是如何设置和测试的简要概述。
请注意: 确保 GPS 连接节点已在运行,因为它需要传输校正数据。
  1. 导航到 ROS2 工作区目录并克隆 ROS 2 分支。
				
					cd ~/ros2_ws/src
git clone --branch ros2 https://github.com/LORD-MicroStrain/ntrip_client.git
				
			
  1. 返回工作区根目录,安装任何缺少的依赖项,并构建包
				
					cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build
source install/setup.bash
				
			
  1. 打开文件 ntrip_client_启动.py 并向下滚动找到代码 NTRIP 凭证已设置。
				
					nano ~/ros2_ws/src/ntrip_client/launch/ntrip_client_launch.py
				
			
  1. 更新 NTRIP 参数,如主机、端口、用户名、密码和挂载点,并将更改保存在文件中。
				
					nano ~/ros2_ws/src/ntrip_client/launch/ntrip_client_launch.py
				
			
  1. 重建软件包:
				
					cd ~/ros2_ws
colcon build
source ~/ros2_ws/install/setup.bash
				
			
  1. 使用你的 NTRIP 参数来建立与 NTRIP Caster:
				
					ros2 launch ntrip_client ntrip_client_launch.py
				
			
  1. 为了避免关闭节点,请打开一个新的终端并初始化工作区。
    请注意: 如果节点停止, u-blox 设备将停止接收校正数据。 u-blox 节点必须在启动之前运行 NTRIP 客户端,因为它向校正服务器提供必要的 GPS 数据。如果 u-blox 节点停止后,将不再发布所需的主题和服务,rtk接收机也将停止接收校正数据。
				
					source ~/ros2_ws/install/setup.bash
				
			
  1. 为了避免关闭节点,请打开一个新的终端并初始化工作区。
    请注意: 如果节点停止, u-blox 设备将停止接收校正数据。 u-blox 节点必须在启动之前运行 NTRIP 客户端,因为它向校正服务器提供必要的 GPS 数据。如果 u-blox 节点停止后,将不再发布所需的主题和服务,rtk接收机也将停止接收校正数据。
				
					source ~/ros2_ws/install/setup.bash
				
			
  1. 查看可用主题列表。 
				
					ros2 topic list
				
			
  1. 您可能会看到的关键主题:
    • /rtcm:发布 RTCM 校正数据(mavros_msgs/RTCM 或 rtcm_msgs/Message,取决于配置)。
    • /nmea:订阅本地 NMEA 语句,并将其转发到服务器。
    • /ublox_gps_node/修复:如果尚未采用 NMEA 格式,也可以转发全球位置数据。
  1. 如果一切操作正确,成功,您将看到节点在 /rtcm 主题。使用 ntrip_客户端 节点,您可以将 RTCM 校正数据集成到您的 ROS 2 项目中,以便使用 RTK 接收器实现精确定位。
				
					ros2 topic echo /rtcm
				
			
  1. 使用此节点,您可以将 RTCM 校正数据集成到您的 ROS 2 项目中,以便使用 RTK 接收器进行精确定位。

创建组合启动包

我们将创建一个专用包,其中包含一个用于运行的启动文件 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 ublox_gps 节点(发布 GPS 数据)和 ntrip_客户端 节点(处理 RTK 校正)。这种方法可以使您的工作区井然有序,并可以轻松地通过一个命令启动所有必需的节点。

  1. 打开新的终端,导航到您的 ROS2 工作区并创建一个新的包。对于基于 Python 的启动纳米文件,请运行以下命令:
				
					cd ~/ros2_ws/src
ros2 pkg create combined_rtk --build-type ament_python
				
			
  1. 在新包中创建一个启动目录和一个 Python 启动文件。
				
					mkdir -p combined_rtk/launch
nano ~/ros2_ws/src/combined_rtk/launch/combined_nodes.launch.py
				
			
  1. 复制以下示例中的代码并将其粘贴到文件中。该代码的作用如下:
  • 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
    ])

				
			
  1. 通过插入您的 NTRIP 凭据(主机、帖子、用户名、密码、挂载点)并保存文件。
  1. 可选 包.xml.
				
					cd ~/ros2_ws/src/combined_rtk/
nano package.xml
				
			
  1. 确保你的依赖项中有 ublox_gps、ntrip_client、launch_ros 等。 包.xml。如果您没有,请从下面的代码中复制它们并粘贴到文件中。
				
					<exec_depend>ublox_gps</exec_depend>
<exec_depend>ntrip_client</exec_depend>
<exec_depend>launch_ros</exec_depend>
				
			
  1. 可选 设置文件.
				
					nano  ~/ros2_ws/src/combined_rtk/setup.py
				
			
  1. 复制下面的代码并将其粘贴到 设置文件 文件以包含启动文件和依赖项。关闭文件并保存更改。
				
					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': [
        ],
    },
)

				
			
  1. 使启动文件可执行。
				
					cd ~/ros2_ws/src
chmod +x combined_rtk/launch/combined_nodes.launch.py
				
			
  1. 返回到您的工作区根目录,构建新包并获取安装文件:
				
					cd ~/ros2_ws
colcon build
source install/setup.bash

				
			
  1. 启动 ublox_gpsntrip_客户端 使用一个命令的节点:
				
					ros2 launch combined_rtk combined_nodes.launch.py
				
			
  1. 您应该在终端中看到来自两个节点的日志,表明:
    • ublox_gps 正在从指定设备读取 GPS 数据(例如 /dev/tty_Ardusimple).
    • ntrip_客户端 已连接到您的 NTRIP 服务器并在 /rtcm 上发布 RTCM 校正(如果已配置,可能订阅 /nmea)。
    请注意: 使用此启动文件时,无需手动启动 u-blox 和 NTRIP 分别启动两个节点——启动将自动启动这两个节点。如果您想检查这些节点提供的主题或服务,请不要关闭此启动终端。
  1. 要与已启动的节点进行交互,请不要停止流。打开一个新的终端并初始化工作区。
				
					source ~/ros2_ws/install/setup.bash
				
			
  1. 要验证主题、服务、设备状态,请打开一个新的终端并初始化:
				
					source install/setup.bash
				
			
  1. 查看主题列表。 
				
					ros2 topic list
				
			
  1. 你将能够看到 /ublox_gps_node/修复, /rtcm,或其他。
  1. 参见 GPS 数据回声。
				
					ros2 topic echo /ublox_gps_node/fix
				
			
  1. 这会显示实时 GPS 数据。要停止播放,请按 按Ctrl + C.
  1. - ublox_gps Node 发布关于以下主题的诊断信息: /诊断。 检查诊断信息:
				
					ros2 topic echo /diagnostics
				
			
  1. 它包括水平精度、垂直精度和“3D 修复”等状态消息(当接收器具有有效位置时),或“修复不正常”(当 GPS 尚未正确修复时)。

  1. 检查修复状态的关键提示:
    • 显示器 /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 修复。

如果您想遵循本教程,我们有所有库存产品可随时发货:

如果你喜欢这个内容,你可以关注我们 Twitter, YouTube, Facebook or LinkedIn 保持更新这样的内容。

有任何问题或要求吗?
联系我们!我们将在 24 小时内回复!

图标
联系我们 ArduSimple
关闭

想了解更多关于 GPS/RTK 的信息吗?

1. 我们的工程团队会联系您解决任何问题
2.我们会及时通知您促销和新产品发布
3.只有当我们有重要新闻时您才会收到我们的消息,我们不会向您发送垃圾邮件