目标
使用 ros2doctor
工具识别ROS2设置中的问题。
背景信息
当ROS2设置无法按预期运行时,你可以使用 ros2doctor
工具检查其设置。
ros2doctor
会检查ROS2的各个方面,包括平台、版本、网络、环境、正在运行的系统等,并就可能出现的错误和问题原因发出警告。
先决条件
ros2doctor
是 ros2cli
软件包的一部分。只要你安装了 ros2cli
(正常安装都会包含),就能够使用 ros2doctor
。
本文使用 turtlesim
来举例说明一些情况。
操作步骤
1. 检查设置
我们使用 ros2doctor
整体检查你的ROS2常规设置。首先,在新终端中加载ROS2环境,然后输入命令:
ros2 doctor
这将对所有设置模块进行检查,并返回警告和错误信息。
如果你的ROS2设置完美无缺,你会看到类似这样的消息:
All <n> checks passed
然而,返回一些警告信息也很常见。UserWarning
并不意味着你的设置无法使用;更可能只是表明某些配置不太理想。
如果你确实收到警告,它看起来会像这样:
<path>: <line>: UserWarning: <message>
例如,如果你使用的是不稳定的ROS2发行版,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
的消息。
大多数检查被归类为警告而非错误。基本上由你,即用户,来判断 ros2doctor
返回的反馈的重要性。如果它在你的设置中发现罕见的错误(以UserWarning: ERROR:
表示),则该检查被视为失败。
你会看到类似以下问题反馈列表的消息:
1/3 checks failed
Failed modules: network
错误表明系统缺少对ROS2至关重要的重要设置或功能。应解决错误以确保系统正常运行。
2. 检查系统
你还可以检查正在运行的ROS2系统,以确定问题可能的原因。为了观察 ros2doctor
在运行系统上的工作情况,我们运行 turtlesim
,其中的节点会相互通信。
通过打开一个新终端,加载ROS2环境,并输入命令启动系统:
ros2 run turtlesim turtlesim_node
打开另一个终端,加载ROS2环境并运行遥控操作:
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
认为这可能会导致问题。
如果你运行echo
命令回显/color_sensor和/pose话题,这些警告就会消失,因为发布者已经有了订阅者。
你也可以打开两个新终端,在每个终端中加载ROS2环境,并在两个终端中各运行一个命令来尝试订阅话题:
ros2 topic echo /turtle1/color_sensor
ros2 topic echo /turtle1/pose
然后在其终端中再次运行 ros2doctor
。无订阅者的发布者警告也会消失。(确保在运行echo命令的终端中输入Ctrl+C)。
现在尝试关闭 turtlesim
窗口或退出遥控操作,然后再次运行 ros2doctor
。你会看到更多警告,表明不同话题存在无订阅者的发布者或无发布者的订阅者,因为系统中的一个节点不可用了。
在具有许多节点的复杂系统中,ros2doctor
对于识别通信问题的可能原因非常有用。
3. 获取完整报告
ros2doctor
会告知你有关网络、系统等方面的警告,而且使用 --report
参数运行它将会为你提供更多详细信息,以帮助你分析问题。
比如你收到有关网络设置的警告,并想确切找出配置的哪一部分导致了警告,可能需要使用--report
参数。
还有,你要是想提交工单,找别人帮忙解决 ROS2 的问题,这个详细报告也超有用。你把报告里相关内容复制粘贴到工单里,帮忙的人就能更清楚你的系统情况,给出更有效的解决办法。
要获取完整报告,在终端中输入以下命令:
ros2 doctor --report
这将返回按五组分类的信息列表:
NETWORK CONFIGURATION
...
PLATFORM INFORMATION
...
RMW MIDDLEWARE
...
ROS 2 INFORMATION
...
TOPIC LIST
...
你可以把这些信息和之前检查出的警告对照着看。比如,之前 ros2doctor
提示发行版 “not fully supported or tested”,就可以看看报告里 ROS 2 INFORMATION
这部分:
distribution name : <distro>
distribution type : ros2
distribution status : prerelease
release platforms : {'<platform>': ['<version>']}
在这里你可以看到发行版状态是预发布,这就解释了为什么它未得到全面支持。
总结
ros2doctor
会告知你ROS2设置和正在运行系统中的问题。你可以使用--report
参数更深入地查看这些警告背后的信息。
不过要记住,ros2doctor
不是用来调试代码的,代码里的错误或者系统具体实现上的问题,它解决不了 。
关注【智践行】公号,发送 【机器人】 获得机器人经典学习资料