RQt 在 ROS2 Foxy 中仅发布空/默认消息

问题描述

我在 Ubuntu 20.04 机器上安装了 ROS2 Foxy。使用 RQt 时,我能够很好地查看网络上的所有主题,并且能够订阅所有主题,甚至将它们绘制在实时图表上。但是,发布无法正常工作并且始终发布空/认消息。例如,如果我尝试发布一条数据为“true”的 Bool 消息,那么它仍然发布“false”。与任何数字类型相同 - 无论我尝试发布什么数字,它总是发布 0。请参阅图像以获取示例: RQt screenshot

为了调试,我尝试从 Python 脚本和“ros2 pub”命令行实用程序发布这些相同的消息。这些总是工作得很好,我在 RQt 中的订阅者能够看到正在发布的正确值。有没有其他人处理过这个问题?根本原因是什么以及如何解决?它可能在 ROS2 galactic 中修复了吗?

解决方法

正如用户 '2b-t' 在评论中指出的那样,这是一个问题,即从 rqt_publisher 分支的 foxy-devel 中删除了工作代码。因此,虽然 ROS2 Foxy 中的 RQt 已损坏,但现在有一种解决方法是将 rqt_publisher 克隆到您的 ROS2 工作区并手动添加丢失的代码。这很简单,并且有一个由 github 用户“coalman321”创建的示例拉取请求,它展示了如何在此处 (https://github.com/ros-visualization/rqt_publisher/pull/28/files) 还原违规提交。

修复步骤:

  • cd 进入您的 ROS2 工作区的 src 目录
  • git clone https://github.com/ros-visualization/rqt_publisher.git
  • cd rqt_publisher
  • git checkout foxy-devel
  • git revert 367049ecc4ce3cab
  • cd 备份到 ROS2 工作区的根目录
  • colcon build --symlink-install --packages-up-to rqt_publisher
  • source install/local_setup.bash

现在当您运行 rqt 并发布一个非空值时,它应该可以正常工作!您可以从命令行监视值,例如ros2 topic echo 或来自 RQt 本身内的主题监视器。