使用串口连接
参考 https://docs.px4.io/main/en/companion_computer/pixhawk_rpi.html
ROS 2 指南 和 uXRCE-DDS 页面涵盖了设置 uXRCE-DDS 和 ROS 的选项。本教程使用 ROS 2 “Humble”,并介绍了使用 RDK X5 Module 的具体设置。这两篇指南都值得一读!
Pixhawk/PX4 设置
接下来,我们在 TELEM2
上设置 ROS 2 而不是 MAVLink 。我们通过更改 QGroundControl 中的参数来实现。QGroundControl 可以通过 USB 连接,也可以使用连接到 TELEM1
的遥测无线电。
配置步骤如下:
- 使用 USB 电缆将 Pixhawk 与笔记本电脑连接,然后打开 QGroundControl(如果当前未连接)。
- 在 QGroundControl 中检查/更改以下参数 :
markdown MAV_1_CONFIG = 0 (Disabled) UXRCE_DDS_CFG = 102 (TELEM2) SER_TEL2_BAUD = 921600
MAV_1_CONFIG=0 和 UXRCE_DDS_CFG=102 分别用于禁用 TELEM2 上的 MAVLink 和启用 TELEM2 上的 uXRCE-DDS 客户端。rateSER_TEL2_BAUD
用于设置通信链路的数据速率。您也可以使用或
类似地配置连接。TELEM1``MAV_1_CONFIG``MAV_0_CONFIG
信息
您需要重新启动飞行控制器才能应用对这些参数的任何更改。 - 检查 uxrce_dds_client模块是否正在运行。您可以在 QGroundControl MAVLink 控制台 中运行以下命令来执行此操作:
markdown uxrce_dds_client status
信息
如果客户端模块未运行,您可以在 MAVLink 控制台中手动启动它:
uxrce_dds_client start -t serial -d /dev/ttyS4 -b 921600
请注意, /dev/ttyS4
是USX10 Pixhawk 6X上的PX4 TELEM2
端口映射。对于其他飞行控制器,请查看其概览页面中的 串行端口映射部分 。
RDK X5 Module 上的 ROS 设置
在 RDK X5 Module上设置 ROS 2 和 Micro XRCE-DDS Agent 的步骤如下:
- 按照 官方教程 安装 ROS 2 Humble 。
- 使用 RDK X5 Module 终端安装 git:
markdown sudo apt install git
- 安装 uXRCE_DDS 代理:
markdown git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git cd Micro-XRCE-DDS-Agent mkdir build cd build cmake .. make sudo make install sudo ldconfig /usr/local/lib/
请参阅 uXRCE-DDS > Micro XRCE-DDS 代理安装, 了解安装代理的其他方法。 - 在 RDK X5 Module 终端中启动代理:
markdown sudo MicroXRCEAgent serial --dev /dev/ttyS2 -b 921600
请注意我们如何使用之前设置的串行端口以及与 PX4 相同的波特率。
现在代理和客户端都已运行,您应该在 MAVLink 控制台和 RDK X5 Module 终端上都能看到活动。您可以在 RDK X5 Module 上使用以下命令查看可用的主题:
source /opt/ros/humble/setup.bash
ros2 topic list
就是这样。连接成功后,请参阅 ROS 2 指南 ,了解更多关于使用 PX4 和 ROS 2 的信息。
使用以太网连接
PX4 v1.14
信息
uXRCE-DDS 取代了PX4 v1.13 中使用的 Fast-RTPS Bridge 。如果您之前使用的是 Fast-RTPS Bridge,请遵循 迁移指南 。
PX4 使用 uXRCE-DDS 中间件,允许在配套计算机上发布和订阅 uORB 消息,就像 ROS 2 主题一样。这实现了 PX4 与 ROS 2 之间快速可靠的集成,并使 ROS 2 应用程序能够更轻松地获取车辆信息并发送命令。
PX4 使用利用 eProsima Micro XRCE-DDS 的 XRCE-DDS 实现。
以下指南介绍了设置客户端和代理的架构和各种选项。它特别涵盖了对 PX4 用户最重要的选项。
架构
uXRCE-DDS 中间件由运行在 PX4 上的客户端和运行在配套计算机上的代理组成,它们之间通过串行或 UDP 链路进行双向数据交换。代理充当客户端的代理,使其能够发布和订阅全局 DDS 数据空间中的主题。
为了使 PX4 uORB 主题能够在 DDS 网络上共享,您需要在 PX4 上运行_uXRCE-DDS 客户端_,并将其连接到在配套设备上运行的_微型 XRCE-DDS 代理。_
PX4 uxrce_dds_client 将内容发布到/从一组定义的 uORB 主题到全局 DDS 数据空间。
eProsima micro XRCE-DDS_代理_ 在配套计算机上运行,并充当 DDS/ROS 2 网络中客户端的代理。
代理本身不依赖于客户端代码,可以独立于 PX4 或 ROS 构建和/或安装。
想要订阅/发布到 PX4 的代码确实依赖于客户端代码;它需要与用于创建 PX4 uXRCE-DDS 客户端的 uORB 消息定义相匹配的 uORB 消息定义,以便它可以解释消息。
代码生成
PX4 uxrce_dds_client 在构建时生成,并默认包含在 PX4 固件中。该代理不依赖客户端代码。它可以独立构建,也可以在 ROS 2 工作区中构建,也可以作为 Ubuntu 上的 snap 包安装。
构建 PX4 时,代码生成器使用源树( PX4-Autopilot/msg )中的 uORB 消息定义将对 /src/modules/uxrce_dds_client/dds_topics.yaml 中的 uORB 主题子集的支持编译到 uxrce_dds_client 中。
PX4 主版本或发布版本会自动将构建中的一组 uORB 消息定义导出到 PX4/px4_msgs 中的关联分支。
ROS 2 应用程序需要在包含与 PX4 固件中创建 uXRCE-DDS 客户端模块_相同的消息定义的工作区中构建。您可以通过将接口包_ PX4/px4_msgs 克隆到您的 ROS 2 工作区并切换到相应的分支,将这些消息定义添加到工作区中。请注意,所有与消息相关的代码生成均由 ROS 2 处理。
Micro XRCE-DDS 代理安装
Micro XRCE-DDS Agent 可以使用二进制包安装在配套计算机上,也可以从源代码构建和安装,或者在 ROS 2 工作区内构建和运行。所有这些方法都会获取与客户端通信所需的_所有_依赖项(例如 FastCDR)。
信息
官方(也是更完整的)安装指南是 Eprosima: micro XRCE-DDS 安装指南 。本节总结了在创建这些文档期间使用 PX4 测试过的选项。
警告
PX4 Micro XRCE-DDS Client 所基于的版本 v2.x
与最新的 Agent 版本不兼容 v3.x
。
从源代码安装独立版本
在 Ubuntu 上,你可以从源代码构建并使用以下命令安装 Agent 独立版本:
git clone -b v2.4.2 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
cd Micro-XRCE-DDS-Agent
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig /usr/local/lib/
信息
官方指南 中的相应主题链接了各种构建配置选项,但这些选项尚未经过测试。
要启动代理并设置连接到模拟器上运行的 uXRCE-DDS 客户端:
MicroXRCEAgent udp4 -p 8888
从 Snap 包安装
使用以下命令从 Ubuntu 上的 snap 包安装:
sudo snap install micro-xrce-dds-agent --edge
要启动代理,并使用连接到模拟器上运行的 uXRCE-DDS 客户端的设置(请注意,命令名称与您在本地构建代理时的不同):
micro-xrce-dds-agent udp4 -p 8888
信息
在撰写本文时,从 snap 安装的稳定版本可以连接到 PX4,但在创建主题时会报错。使用 --edge
上面获取的开发版本可以正常工作。
在 ROS 2 工作区内构建/运行
可以在 ROS 2 工作区内构建和启动代理(或独立构建并从工作区启动)。您必须已经按照 ROS 2 用户指南 > 安装 ROS 2 中的说明安装了 ROS 2 。
警告
此方法将使用 Agent 依赖项的现有 ROS 2 版本,例如 fastcdr
和 fastdds
。这大大加快了构建过程,但要求 Agent 依赖项版本与 ROS 2 版本匹配。
要在 ROS 中构建代理:
- 为代理创建工作区目录:
markdown mkdir -p ~/px4_ros_uxrce_dds_ws/src
- 将 eProsima Micro-XRCE-DDS-Agent 的源代码克隆到
/src
目录(main
默认克隆分支):markdown cd ~/px4_ros_uxrce_dds_ws/src git clone -b v2.4.2 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
- 获取 ROS 2 开发环境,并使用以下命令编译工作区
colcon
:
要在工作区中运行Micro XRCE-DDS 代理:
- 提供源
local_setup.bash
以使可执行文件在终端中可用(即使setup.bash
使用新终端)。 - 使用连接到模拟器上运行的 uXRCE-DDS 客户端的设置启动代理:
markdown MicroXRCEAgent udp4 -p 8888
启动代理和客户端
启动代理
代理用于通过特定通道(例如 UDP 或串行连接)连接到客户端。通道设置在代理启动时使用命令行选项指定。这些设置记录在 eProsima 用户指南中: Micro XRCE-DDS Agent > Agent CLI 。请注意,代理支持多种通道选项,但 PX4 仅支持 UDP 和串行连接。
信息
您应该为需要连接的每个通道创建一个代理实例。
例如,PX4 模拟器在端口 8888 上通过 UDP 运行 uXRCE-DDS 客户端,因此要连接到模拟器,您可以使用以下命令启动代理:
MicroXRCEAgent udp4 -p 8888
使用真实硬件时,设置取决于硬件、操作系统和通道。例如,如果您使用的是 RPi UART0
串行端口,则可以使用此命令进行连接(基于 Raspberry Pi 文档 > 配置 UARTS 中的信息):
sudo MicroXRCEAgent serial --dev /dev/AMA0 -b 921600
信息
有关设置通信通道的更多信息,请参阅 Pixhawk + Companion 设置 > 串行端口设置 及其子文档。
启动客户端
所有固件和模拟器默认包含uXRCE-DDS 客户端模块 ( uxrce_dds_client )。必须根据您希望与代理通信的通道进行适当的设置来启动该模块。
信息
模拟器 8888
使用默认的 uxrce-dds 命名空间自动在本地主机 UDP 端口上启动客户端。
可以使用UXRCE-DDS 参数 完成配置:
- UXRCE_DDS_CFG :设置要连接的端口,例如
TELEM2
、Ethernet
或Wifi
。 - 如果使用以太网连接:
- UXRCE_DDS_PRT :用于指定代理 UDP 监听端口。默认值为
8888
。 - UXRCE_DDS_AG_IP :用于指定代理的 IP 地址。
int32
由于 PX4 不支持字符串参数,因此必须以字符串格式提供 IP 地址。默认2130706433
值为_localhost_127.0.0.1
。 您可以使用 Tools/convert_ip.py 在格式之间进行转换:- 要获取
int32
十进制点表示法的 IP 版本,命令如下:markdown python3 ./PX4-Autopilot/Tools/convert_ip.py <the IP address in decimal dot notation>
- 要从版本中获取十进制点表示法的 IP 地址
int32
:markdown python3 ./PX4-Autopilot/Tools/convert_ip.py -r <the IP address in int32 notation>
- 要获取
- UXRCE_DDS_PRT :用于指定代理 UDP 监听端口。默认值为
- 如果使用串行连接:
- SER_TEL2_BAUD 、 SER_URT6_BAUD (等等):使用
_BAUD
与串行端口关联的参数来设置波特率。例如,SER_TEL2_BAUD
如果您使用 连接到配套设备,则需要设置 的值TELEM2
。更多信息请参阅 串行端口配置 。
- SER_TEL2_BAUD 、 SER_URT6_BAUD (等等):使用
- 某些设置可能还需要设置这些参数:
- UXRCE_DDS_KEY :uXRCE-DDS 密钥。如果您使用的是多客户端单代理配置,则每个客户端都应具有唯一的非零密钥。这对于多车辆模拟尤其重要,因为所有客户端都通过 UDP 连接到同一个代理。(请参阅 eprosima 官方文档 ,
uxr_init_session
。) - UXRCE_DDS_DOM_ID :DDS 域 ID。这在 DDS 网络之间提供了逻辑隔离,并可用于区分不同网络上的客户端。默认情况下,ROS 2 在 ID 0 上运行。
- UXRCE_DDS_PTCFG :uXRCE-DDS 参与者配置。它允许将 DDS 主题的可见性限制为仅限_本地主机_,并使用存储在代理端的用户自定义参与者配置文件。
- UXRCE_DDS_SYNCT :桥接时间同步启用。uXRCE-DDS 客户端模块可以同步通过桥接交换的消息的时间戳。这是默认配置。在某些情况下,例如在 模拟 过程中,此功能可能会被禁用。
- UXRCE_DDS_KEY :uXRCE-DDS 密钥。如果您使用的是多客户端单代理配置,则每个客户端都应具有唯一的非零密钥。这对于多车辆模拟尤其重要,因为所有客户端都通过 UDP 连接到同一个代理。(请参阅 eprosima 官方文档 ,
信息
许多端口已具有默认配置。要使用这些端口,您必须先禁用现有配置:
TELEM1
并TELEM2
默认设置为通过 MAVLink 分别连接到地面站 (GCS) 和配套计算机。通过将 MAV_0_CONFIG=0 或 MAV_1_CONFIG=0 设置为零来禁用。更多信息请参阅 MAVLink 外设。- 其他端口可类似配置。请参阅 串口配置 。
设置完成后,可能需要重启 PX4 才能使参数生效。这些参数在后续重启后仍会保留。
您也可以使用命令行启动 uxrce_dds_client 。这可以作为 系统启动 的一部分调用,也可以通过 MAVLink Shell (或系统控制台)调用。当您需要设置自定义客户端命名空间时,此方法非常有用,因为没有为此提供任何参数。例如,以下命令可用于通过以太网连接到远程主机 , 192.168.0.100:8888
并将客户端命名空间设置为 /drone/
。
uxrce_dds_client start -t udp -p 8888 -h 192.168.0.100 -n drone
选项 -p
或 -h
用于绕过 UXRCE_DDS_PRT
和 UXRCE_DDS_AG_IP
。
在模拟中启动客户端
模拟器 启动逻辑 ( init.d-posix/rcS ) 使用客户端启动命令进行单车和 多车模拟 ,从而可以设置适当的实例 ID 和 DDS 命名空间。默认情况下,客户端在 localhost UDP 端口上启动, 8888
无需任何额外的命名空间。
提供了覆盖某些 UXRCE-DDS 参数的 环境变量。这些变量允许用户为其模拟创建自定义启动文件:
PX4_UXRCE_DDS_NS
:使用此项指定主题 命名空间 )。ROS_DOMAIN_ID
:使用它来替换 UXRCE_DDS_DOM_ID 。PX4_UXRCE_DDS_PORT
:使用它来替换 UXRCE_DDS_PRT 。
例如,以下命令可用于启动在 DDS 域 3
、端口 9999
和主题命名空间上运行 che 客户端的 Gazebo 模拟 drone
。
ROS_DOMAIN_ID=3 PX4_UXRCE_DDS_PORT=9999 PX4_UXRCE_DDS_NS=drone make px4_sitl gz_x500
示例教程
px4_ros_com
https://docs.px4.io/main/en/ros2/offboard_control.html https://github.com/PX4/px4_ros_com.git
uav_command_pub
px4-ros2-interface-lib
https://docs.px4.io/main/en/ros2/px4_ros2_interface_lib.html https://github.com/Auterion/px4-ros2-interface-lib
更多信息
请参考PX4官方文档 https://docs.px4.io/main/en/middleware/uxrce_dds.html
No responses yet