背景
当您的ROS 2安装程序没有按预期运行时,您可以使用ros2doctor工具检查它的设置。
ros2doctor检查ROS 2的所有方面,包括平台、版本、网络、环境、运行系统等,并警告您可能出现的错误和问题原因。
ros2doctor是ros2cli包的一部分。只要安装了ros2cli(任何正常安装都应该安装),就可以使用ros2doctor。
任务
1 检查你的设置
用ros2doctor从整体上检查一下ROS 2设置。首先,在一个新的终端中source一下,然后输入命令:
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在您的系统中只发现警告,您仍然会收到All <n> checks passed消息。
大多数检查被归类为警告,而不是错误。如果它确实在您的设置中发现了一个罕见的错误,由UserWarning: error:表示,则认为检查失败。
您将看到一条类似于以下问题反馈列表的消息:
1/3 checks failed
Failed modules: network
error表示系统缺少对ROS 2至关重要的重要设置或功能。应解决错误,以确保系统正常运行。
2 检查系统
您还可以检查正在运行的ROS 2系统,以确定问题的可能原因。要查看ros2doctor在运行中的系统上的工作情况,可以运行turtlesim节点进行测试。
打开一个新的终端并source一下,并输入命令:
ros2 run turtlesim turtlesim_node
打开另一个终端并source,运行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和 echo /pose 来打印显示话题内容,这些警告将消失,因为发布者已经拥有订阅者。
您可以在turtlesim仍在运行时打开两个新终端,在每个终端中source ros2,并在各自的终端中运行以下命令:
ros2 topic echo /turtle1/color_sensor
ros2 topic echo /turtle1/pose
然后再次在其终端运行ros2doctor。没有发布者没有订阅者警告将不存在。(确保在运行echo的终端中输入Ctrl+C)。
现在尝试退出乌龟窗口或退出teleop并再次运行ros2doctor。由于系统中的一个节点不可用,您将看到更多警告,指示不同话题的发布者没有订阅者或订阅者没有发布者。
在具有许多节点的复杂系统中,ros2doctor对于识别通信问题的可能原因非常有用。
3 获得一份完整的报告
虽然ros2doctor会让您知道有关网络、系统等的警告,但使用--report参数运行它将为您提供更多细节,以帮助您分析问题。
比如如果您收到关于网络设置的警告,并且希望准确地找出是配置的哪个部分导致了警告,那么您可能需要使用--report。
当您需要根据这个问题搜索解决办法时,可以将报告的相关部分复制并粘贴到ros官网论坛,以便别人可以更好地了解您的问题并提供更好的帮助。
要获得完整的报告,在终端输入以下命令:
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不是一个调试工具,它不会帮助解决代码中的错误或系统的实现端错误。
更多信息请参考:https://github.com/ros2/ros2cli/tree/humble/ros2doctor