使用``ros2doctor``来识别问题

目标: 使用``ros2doctor``工具识别您的ROS 2设置中的问题。

教程级别: 初学者

时间: 10分钟

背景

当您的ROS 2设置未按预期运行时,您可以使用``ros2doctor``工具检查其设置。

``ros2doctor``检查ROS 2的所有方面,包括平台、版本、网络、环境、运行系统等,并向您警告可能的错误和问题原因。

先决条件

ros2doctor``是``ros2cli``包的一部分。只要您安装了``ros2cli``(任何正常安装都应该有),您就可以使用``ros2doctor

本教程使用 turtlesim 来演示一些例子。

任务

1 检查你的设置

让我们用 ros2doctor 来检查你的整个ROS 2设置。首先,在新终端中source ROS 2,然后输入以下命令:

ros2 doctor

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

如果您的ROS 2配置完美无缺,您将看到类似于以下的消息:

All <n> checks passed

然而,出现一些警告是很正常的。``UserWarning``并不意味着您的配置无法使用;更可能只是指示某些配置不太理想。

如果您收到一个警告,它会类似于以下的样子:

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

例如,如果您使用一个不稳定的ROS 2发行版,``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``在您的系统中只发现了警告,您仍将收到``所有 <n> 个检查通过``的消息。

大多数检查被归类为警告而不是错误。大部分情况下,您作为用户需确定``ros2doctor``返回的反馈的重要性。如果它在您的设置中发现了罕见的错误,其标志是``UserWarning: ERROR:``,则该检查被视为失败。

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

1/3 checks failed

Failed modules:  network

错误指示系统缺少对ROS 2至关重要的设置或功能。应该解决错误以确保系统正常运行。

2 检查系统

您还可以检查正在运行的ROS 2系统,以确定可能导致问题的原因。为了查看``ros2doctor``在正在运行的系统上的工作情况,让我们运行turtlesim,其中的节点正在积极地相互通信。

通过打开新的终端、设置ROS 2环境变量并输入以下命令来启动系统:

ros2 run turtlesim turtlesim_node

打开另一个终端并设置ROS 2环境变量以运行teleop控制器:

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 认为这可能会导致问题。

如果你运行命令来回显 /color_sensor/pose 话题,这些警告将会消失,因为发布者将会有订阅者。

你可以尝试在 turtlesim 仍然运行的情况下,在两个新终端中打开,每个终端中都 source ROS 2,并在各自的终端中运行以下命令:

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

然后再次在其终端中运行``ros2doctor``命令。publisher without subscriber``的警告将会消失。(确保在运行``echo``命令的终端中按下``Ctrl+C)。

现在尝试退出turtlesim窗口或停止teleop,并再次运行``ros2doctor``命令。你会看到更多警告,指示不同主题的``publisher without subscriber``或``subscriber without publisher``,现在系统中的一个节点不可用。

在一个包含许多节点的复杂系统中,``ros2doctor``对于识别通信问题的可能原因非常有价值。

3 获取完整报告

虽然``ros2doctor``会提供关于网络、系统等方面的警告,但是使用``--report``参数运行它将提供更详细的信息,帮助您分析问题。

如果您收到关于网络设置的警告,并想要确切地找出导致警告的配置部分,可以使用``--report``。

当您需要开启一个支持工单以获取ROS 2的帮助时,这也非常有帮助。您可以将报告的相关部分复制粘贴到工单中,以便帮助您的人员更好地了解您的环境并提供更好的支持。

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

ros2 doctor --report

将返回按五个组进行分类的信息列表:

NETWORK CONFIGURATION
...

PLATFORM INFORMATION
...

RMW MIDDLEWARE
...

ROS 2 INFORMATION
...

TOPIC LIST
...

您可以将此处的信息与运行``ros2 doctor``时收到的警告进行交叉检查。例如,如果``ros2 doctor``返回了前面提到的警告,即您的发行版“不完全受支持或经过测试”,您可以查看报告的``ROS 2 INFORMATION``部分:

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

在这里,您可以看到``distribution status``为``prerelease``,这解释了为什么它不被完全支持。

总结

ros2 doctor``会通知您ROS 2设置和运行系统中的问题。您可以使用--report``参数深入了解这些警告背后的信息。

请记住,“ros2doctor”不是一个调试工具;它不能帮助您解决代码错误或系统实现方面的问题。

下一步

您已经完成了初学者级别的教程!