使用 ros2doctor 识别问题

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

教程级别: 初学者

时间: 10 分钟

背景

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

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

先决条件

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

本教程使用 turtlesim 来说明一些示例。

任务

1 检查您的设置

让我们使用“ros2doctor”检查您的整个 ROS 2 设置。 首先,在新终端中获取 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: E​​RROR:”指示),则检查被视为失败。

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

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 仍在运行时打开两个新终端,在每个终端中获取 ROS 2,然后在各自的终端中运行以下每个命令,以尝试此操作:

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

然后再次在其终端中运行“ros2doctor”。 “发布者没有订阅者”警告将消失。 (确保在运行“echo”的终端中输入“Ctrl+C”)。

现在尝试退出 turtlesim 窗口或退出 teleop 并再次运行“ros2doctor”。 由于系统中的一个节点不可用,您将看到更多警告,指示不同主题的“发布者没有订阅者”或“订阅者没有发布者”。

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

3 获取完整报告

虽然“ros2doctor”会让您了解有关网络、系统等的警告,但使用“–report”参数运行它会为您提供更多详细信息以帮助您分析问题。

如果您收到有关网络设置的警告,并想确切找出导致警告的配置部分,则可能需要使用“–report”。

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

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

ros2 doctor --report

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

NETWORK CONFIGURATION
...

PLATFORM INFORMATION
...

RMW MIDDLEWARE
...

ROS 2 INFORMATION
...

TOPIC LIST
...

您可以将此处的信息与运行“ros2 doctor”时收到的警告进行交叉核对。 例如,如果“ros2doctor”返回警告(前面提到),即您的发行版“未完全支持或测试”,您可以查看报告中的“ROS 2 INFORMATION”部分:

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

在这里您可以看到“分发状态”是“预发布”,这解释了为什么它没有得到完全支持。

摘要

ros2doctor 将通知您 ROS 2 设置和运行系统中的问题。

您可以使用 --report 参数深入了解这些警告背后的信息。

请记住,ros2doctor 不是调试工具;它不会帮助您解决代码中的错误或系统实现方面的错误。

相关内容

ros2doctor 的 README 将告诉您有关不同参数的更多信息。

您可能还想看看 ros2doctor 仓库,因为它对初学者来说相当友好,是开始贡献的好地方。

下一步

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