使用“ros2doctor”识别问题
目标:使用“ros2doctor”工具识别 ROS 2 设置中的问题。
教程级别:初学者
时间:10 分钟
背景
当您的 ROS 2 设置未按预期运行时,您可以使用“ros2doctor”工具检查其设置。
“ros2doctor”检查 ROS 2 的所有方面,包括平台、版本、网络、环境、运行系统等,并警告您可能的错误和问题原因。
先决条件
“ros2doctor”是“ros2cli”包的一部分。
只要您安装了“ros2cli”(任何正常安装都应该有),您就可以使用“ros2doctor”。
本教程使用 :doc:“turtlesim <../Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-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: 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 仍在运行时打开两个新终端,在每个终端中获取 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
仓库,因为它对初学者来说相当友好,是开始贡献的好地方。
下一步
您已完成初学者级别的教程!