学习目标:学会使用ros2doctor工具分析出现的问题
当ros2没有安装我们预期的设定运行的时候,我们可以用ros2doctor
工具检查ros2的设置。
ros2doctor
对ros2全面的检查,包括平台、版本、连接情况、环境、运行的系统等等。然后给出可能的错误和原因。
ros2doctor
是一个还在不断开发中的工具。功能可能不是很稳定,会频繁更新。官方鼓励用户发帖对存在的问题和改进提供建议.
ros2doctor
是ros2cli
包的一部分。只要我们安装了ros2cli
,我们就能够使用ros2doctor
,通常我们安装ros2的时候就安装了这个包
首先让我们用ros2doctor
对ros2的整体设置进行检查。首先source一下,然后打开终端运行命令
ros2 doctor
这将对所有设置模块进行检查,并返回警告和错误。
如果我们的设置没什么问题我们会收到下面这样一条消息。
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
的消息
大多数检查都是进行警告而不是报错。主要还是取决于用户自己来决定ros2doctor
反馈的重要性。如果在我们的设置当中找到一个比较严重的错误,就会显示UserWarning: ERROR:
,并且认为检查失败。
同时我们会收到类似于这样一条的消息。
1/3 checks failed
Failed modules: network
错误表示系统缺少对ROS2非常重要的重要设置或功能,我们应该解决错误以确保系统正常运行。
我们还可以对运行中的ROS2系统进行检查,以便找出问题可能出现的原因。为了让我们观察ros2doctor
如何在一个正在运行的ros上工作,我们运行Turtlesim激活节点间的通讯。
先打开一个终端运行海龟的仿真
ros2 run turtlesim turtlesim_node
再先打开一个终端运行海龟的键盘控制
ros2 run turtlesim turtle_teleop_key
现在我们再运行ros2doctor
,我们会得到下面这样两条警告。
UserWarning: Publisher without subscriber detected on /turtle1/color_sensor.
UserWarning: Publisher without subscriber detected on /turtle1/pose.
上面显示的问题看上去像/turtlesim
有两个话题没有被订阅然后ros2doctor
就认为这可能有问题。
如果我们用两个命令去打印这两个话题的消息这个警告就会消失。
我们打开两个终端运行下面命令。
ros2 topic echo /turtle1/color_sensor
ros2 topic echo /turtle1/pose
我们再次运行ros2doctor
会发现这两个警告就没有了。我们Ctrl + C依次关掉这两个终端,再次运行ros2doctor
,我们会看到这两个警告又出现了。
我们Ctrl + C关掉键盘控制的节点或者海龟界面的节点,我们再次运行ros2doctor
我们会发现出现了更多的publisher without subscriber
或者subscriber without publisher
的警告。
在一个复杂的系统中,如果有很多的节点,ros2doctor
对于诊断连接问题就比较有用。
通过运行ros2doctor
我们可以得到来自节点连接情况、系统情况等等的警告,我们加上--report
参数还可以获得更详细的信息,方便我们分析问题。
当我们收到了一个关于通讯方面的警告,而且我们想知道是哪部分引起的这个警告我们就可以使用--report
参数
当我们要发帖进行求助的时候,我们可以赋值粘贴报告中相关的部分在帖子里面,这样别人就可以更好的了解你电脑当前的环境,提供更好的帮助。
我们用下面的命令运行就可以得到一个完整的报告。
ros2 doctor --report
命令会返回一个由五部分组成的列表
NETWORK CONFIGURATION
...
PLATFORM INFORMATION
...
RMW MIDDLEWARE
...
ROS 2 INFORMATION
...
TOPIC LIST
...
我们可以将这些消息和ros2 doctor
返回的警告对比来看。
例如,假设ros2 doctor
返回的警告是我们使用的ros版本是没有完全支持或测试的版本,我们就可以查看报告中ROS 2 INFORMATION
关于ros详细信息的部分。
假设这部分的如下
distribution name : <distro>
distribution type : ros2
distribution status : prerelease
release platforms : {'' : ['' ]}
我们可看到我们版本的发行状态是预发行,所以我们就会得到这个警告。
ros2doctor
会告诉我们ROS2在安装和运行过程中的问题,我们可以使用--report
参数更深入地了解这些警告背后的信息。
但是请记住,ros2doctor
它不是调试工具,它不会帮助解决代码或系统实现方面的错误。