ROS2 Jazzy:使用ros2doctor识别设置中的问题

18 阅读5分钟

目标

使用 ros2doctor 工具识别ROS2设置中的问题。

背景信息

当ROS2设置无法按预期运行时,你可以使用 ros2doctor 工具检查其设置。

ros2doctor 会检查ROS2的各个方面,包括平台、版本、网络、环境、正在运行的系统等,并就可能出现的错误和问题原因发出警告。

先决条件

ros2doctorros2cli 软件包的一部分。只要你安装了 ros2cli(正常安装都会包含),就能够使用 ros2doctor

本文使用 turtlesim 来举例说明一些情况。

操作步骤

1. 检查设置

我们使用 ros2doctor 整体检查你的ROS2常规设置。首先,在新终端中加载ROS2环境,然后输入命令:

ros2 doctor

这将对所有设置模块进行检查,并返回警告和错误信息。

如果你的ROS2设置完美无缺,你会看到类似这样的消息:

All <n> checks passed

然而,返回一些警告信息也很常见。UserWarning 并不意味着你的设置无法使用;更可能只是表明某些配置不太理想。

如果你确实收到警告,它看起来会像这样:

<path>: <line>: UserWarning: <message>

例如,如果你使用的是不稳定的ROS2发行版,ros2doctor 会发现这样的警告:

UserWarning: Distribution <distro> is not fully supported or tested. To get more consistent features, download a stable version at https://index.ros.org/doc/ros2/Installation/

如果 ros2doctor 在你的系统中只发现警告,你仍然会收到 All <n> checks passed 的消息。

大多数检查被归类为警告而非错误。基本上由你,即用户,来判断 ros2doctor 返回的反馈的重要性。如果它在你的设置中发现罕见的错误(以UserWarning: ERROR:表示),则该检查被视为失败。

你会看到类似以下问题反馈列表的消息:

1/3 checks failed

Failed modules:  network

错误表明系统缺少对ROS2至关重要的重要设置或功能。应解决错误以确保系统正常运行。

2. 检查系统

你还可以检查正在运行的ROS2系统,以确定问题可能的原因。为了观察 ros2doctor 在运行系统上的工作情况,我们运行 turtlesim,其中的节点会相互通信。

通过打开一个新终端,加载ROS2环境,并输入命令启动系统:

ros2 run turtlesim turtlesim_node

打开另一个终端,加载ROS2环境并运行遥控操作:

ros2 run turtlesim turtle_teleop_key

现在在第三个单独的终端中再次运行 ros2doctor。如果之前运行 ros2doctor时存在任何警告和错误,你会看到它们。在这些之后,会出现一些与系统本身相关的新警告:

UserWarning: Publisher without subscriber detected on /turtle1/color_sensor.
UserWarning: Publisher without subscriber detected on /turtle1/pose.

似乎 /turtlesim 节点向两个未被订阅的话题发布数据,ros2doctor 认为这可能会导致问题。

如果你运行echo命令回显/color_sensor和/pose话题,这些警告就会消失,因为发布者已经有了订阅者。

你也可以打开两个新终端,在每个终端中加载ROS2环境,并在两个终端中各运行一个命令来尝试订阅话题:

ros2 topic echo /turtle1/color_sensor
ros2 topic echo /turtle1/pose

然后在其终端中再次运行 ros2doctor。无订阅者的发布者警告也会消失。(确保在运行echo命令的终端中输入Ctrl+C)。

现在尝试关闭 turtlesim 窗口或退出遥控操作,然后再次运行 ros2doctor。你会看到更多警告,表明不同话题存在无订阅者的发布者或无发布者的订阅者,因为系统中的一个节点不可用了。

在具有许多节点的复杂系统中,ros2doctor 对于识别通信问题的可能原因非常有用。

3. 获取完整报告

ros2doctor 会告知你有关网络、系统等方面的警告,而且使用 --report 参数运行它将会为你提供更多详细信息,以帮助你分析问题。

比如你收到有关网络设置的警告,并想确切找出配置的哪一部分导致了警告,可能需要使用--report参数。

还有,你要是想提交工单,找别人帮忙解决 ROS2 的问题,这个详细报告也超有用。你把报告里相关内容复制粘贴到工单里,帮忙的人就能更清楚你的系统情况,给出更有效的解决办法。

要获取完整报告,在终端中输入以下命令:

ros2 doctor --report

这将返回按五组分类的信息列表:

NETWORK CONFIGURATION
...

PLATFORM INFORMATION
...

RMW MIDDLEWARE
...

ROS 2 INFORMATION
...

TOPIC LIST
...

你可以把这些信息和之前检查出的警告对照着看。比如,之前 ros2doctor 提示发行版 “not fully supported or tested”,就可以看看报告里 ROS 2 INFORMATION 这部分:

distribution name      : <distro>
distribution type      : ros2
distribution status    : prerelease
release platforms      : {'<platform>': ['<version>']}

在这里你可以看到发行版状态是预发布,这就解释了为什么它未得到全面支持。

总结

ros2doctor会告知你ROS2设置和正在运行系统中的问题。你可以使用--report参数更深入地查看这些警告背后的信息。

不过要记住,ros2doctor不是用来调试代码的,代码里的错误或者系统具体实现上的问题,它解决不了 。


关注【智践行】公号,发送 【机器人】 获得机器人经典学习资料