乐于分享
好东西不私藏

机器人系统——ROS2文档—使用 ros2doctor 识别问题

机器人系统——ROS2文档—使用 ros2doctor 识别问题

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

教程级别: 初学者

时间: 10 分钟

目录

背景
前置条件
任务
o1 检查您的设置
o2 检查系统
o3 获取完整报告
总结
相关资料
后续步骤

背景

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

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

前置条件

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

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

任务

1 检查您的设置

让我们使用 ros2doctor 检查您的整体 ROS 2 设置。首先,在一个新终端中加载 ROS 2,然后输入命令:

ros2 doctor

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

All <n> checks passed

这将对所有设置模块进行检查,并返回警告和错误。如果您的 ROS 2 设置处于完美状态,您将看到类似上面的消息。

然而,收到一些警告并不罕见。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.

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

大多数检查被归类为警告而非错误。主要由您(用户)来决定 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 以运行遥控控制:

ros2 run turtlesim turtle_teleop_key

现在在自己的终端中再次运行 ros2doctor。如果您上次运行 ros2doctor 时有任何警告和错误,您将再次看到它们。紧随其后的是几个与系统本身相关的新警告:

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

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

如果您运行命令来 echo /color_sensor 和 /pose 话题,这些警告将消失,因为发布者将拥有订阅者。

您可以在 turtlesim 仍在运行时打开两个新终端,在每个终端中加载 ROS 2,并在各自的终端中运行以下每个命令:

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

然后再次在其终端中运行 ros2doctor。publisher without subscriber 警告将消失。(请确保在运行 echo 的终端中输入 Ctrl+C。)

现在尝试退出 turtlesim 窗口或退出遥控器,然后再次运行 ros2doctor。您会看到更多警告,指示不同话题的 publisher without subscriber 或 subscriber without publisher,因为系统中有一个节点不可用。

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

3 获取完整报告

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

如果您收到有关网络设置的警告并想确切找出配置的哪个部分导致了警告,您可能想使用 --report

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

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

ros2 doctor --report

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

ACTION LIST...
ROS ENVIRONMENT...
NETWORK CONFIGURATION...
PACKAGE VERSIONS...
PLATFORM INFORMATION...
QOS COMPATIBILITY LIST...
RMW MIDDLEWARE...
ROS 2 INFORMATION...
SERVICE LIST...
TOPIC LIST...

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

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

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

总结

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

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

相关资料

  • ros2doctor 的 README 会告诉您更多关于不同参数的信息。您可能也想查看 ros2doctor 仓库,因为它对初学者相当友好,是开始贡献的好地方。

后续步骤

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

本文档完整翻译自 ROS 2 Lyrical 官方文档,仅用于学习交流。