使用 PlotJuggler 实时绘制 uORB 主题数据
本主题介绍如何使用 PlotJuggler 和 uXRCE - DDS 代理 对 uORB 主题 的“实时”值进行图形化展示(实时绘图)。
这种技术利用 PX4 uXRCE - DDS 中间件将 uORB 主题导出为 ROS2 主题,然后 PlotJuggler 可以在这些值发生变化时读取并绘制它们(PlotJuggler 不能直接读取 uORB 主题,但对应的 ROS 2 主题的值是相同的)。
下面的视频展示了如何对模拟飞行器进行操作,这种方法在真实硬件上同样适用。
系统必备组件
按照 ROS2 用户指南 中的 ROS 2 安装与设置 说明进行以下组件的安装:
- ROS 2
- Micro XRCE - DDS 代理
- PX4/px4_msgs:PX4/ROS2 共享消息定义。
- PX4 源代码并编译模拟器。
TIP
如果你使用的是真实硬件而非模拟器,只有在需要更改发布到 ROS 2 的主题集时才需要 PX4 源代码(默认情况下,只有一部分 uORB 主题会被发布)。
你还需要安装:
TIP
使用 Debian 软件包(不支持 snap 文件)。
用法
首先,我们需要构建一个包含与要监控的 PX4 版本对应的 px4_msgs
的 ROS 2 工作空间,然后在该工作空间内启动 PlotJuggler。这样 ROS 2 和 PlotJuggler 才能解析消息。如果你使用的是未修改的 PX4,可以使用 PX4/px4_msgs 中的定义。
INFO
这与 ROS 2 安装与设置 中的 构建 ROS 2 工作空间 步骤相同。
假设你的 ROS 2 工作空间名为 ~/ros2_ws/
,在终端中按以下步骤获取并编译 px4_msgs
包:
cd ~/ros2_ws/src/
git clone https://github.com/PX4/px4_msgs.git
cd ..
colcon build
source install/setup.bash
然后在终端中输入以下命令运行 PlotJuggler:
ros2 run plotjuggler plotjuggler
要开始从 PX4 发送 ROS 2 主题,uXRCE - DDS 客户端 必须在 PX4 上运行,并且 MicroXRCEAgent
必须在与 PlotJuggler 相同的计算机上运行。
PX4 模拟器
接下来,我们将启动用于四轴飞行器的 Gazebo 模拟器。由于我们使用的是 PX4 模拟器,客户端会自动启动,但我们仍需要启动代理并连接到客户端。
首先打开另一个终端。然后导航到 PX4 源代码的根目录,并使用以下命令启动模拟器:
cd ~/PX4-Autopilot
make px4_sitl gz_x500
再打开另一个终端,启动 MicroXRCEAgent
以连接到模拟器:
MicroXRCEAgent udp4 -p 8888; exec bash
连接到模拟器所需的操作就完成了。
基于硬件的 PX4
如果你使用的是真实硬件,需要在 PX4 上显式启动客户端,并且代理连接命令会稍有不同。ROS 2 用户指南 中的 使用飞行控制器硬件 提供了设置信息的链接。
不可用/新消息
main
分支中的所有 PX4 消息定义都被导出到 PX4/px4_msgs 仓库中。这些定义必须导入到你的 ROS 2 工作空间中,以便 PlotJuggler 能够解析来自 PX4 的消息。
INFO
导出消息使得 ROS 2 和 uXRCE - DDS 代理可以独立于 PX4,这就是为什么只有在需要编译模拟器或修改消息时才需要 PX4 源代码的原因。
虽然 px4_msgs
包含了 PX4 中所有 uORB 主题的消息,但默认情况下,并非所有 px4_msgs
中的消息都可供 ROS 2/PlotJuggler 使用。可用的消息集必须编译到在 PX4 上运行的客户端中。这些消息在 dds_topics.yaml 中定义。
以下说明解释了监控默认不可用主题所需的更改。
缺失的主题
如果某个普通的 uORB 主题在 PlotJuggler 中不可用,你需要修改 dds_topics.yaml 以包含该主题,并重新编译 PX4。
如果你使用的是真实硬件,在更改 YAML 文件后,需要编译并 安装 自定义固件。
修改过的消息
如果你修改了任何 uORB 消息,必须更新 PlotJuggler 使用的 ROS2 消息。
你需要使用新消息重新编译 PX4,并将工作空间中(来自仓库)的 px4_msgs
替换为新的消息。
假设你已经在 ~/PX4-Autopilot/
目录下编译了 PX4,并且 ~/ros2_ws
是你的 ROS2 工作空间,输入以下命令复制消息并重新编译工作空间:
rm -f ~/ros2_ws/src/px4_msgs/msg/*.msg
cp ~/PX4-Autopilot/msg/*.msg ~/ros2_ws/src/px4_msgs/msg/
cd ~/ros2_ws/ && colcon build
自定义主题
定义主题后,按照上述说明将主题添加到 dds_topics.yaml 中,并将新消息导出到你的 ROS 2 工作空间。