ROS2学习笔记之了解ros2doctor篇

ROS2学习笔记之了解ros2doctor篇

  • 背景
  • 前期准备
  • 学习内容
    • 1. 检查设置
    • 2. 检查整个机器人系统
    • 3. 得到一个完成的报告
  • 总结

学习目标:学会使用ros2doctor工具分析出现的问题

背景

当ros2没有安装我们预期的设定运行的时候,我们可以用ros2doctor工具检查ros2的设置。
ros2doctor对ros2全面的检查,包括平台、版本、连接情况、环境、运行的系统等等。然后给出可能的错误和原因。

ros2doctor是一个还在不断开发中的工具。功能可能不是很稳定,会频繁更新。官方鼓励用户发帖对存在的问题和改进提供建议.

前期准备

ros2doctorros2cli包的一部分。只要我们安装了ros2cli,我们就能够使用ros2doctor,通常我们安装ros2的时候就安装了这个包

学习内容

1. 检查设置

首先让我们用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 checks passed的消息

大多数检查都是进行警告而不是报错。主要还是取决于用户自己来决定ros2doctor反馈的重要性。如果在我们的设置当中找到一个比较严重的错误,就会显示UserWarning: ERROR:,并且认为检查失败。

同时我们会收到类似于这样一条的消息。

1/3 checks failed

Failed modules:  network

错误表示系统缺少对ROS2非常重要的重要设置或功能,我们应该解决错误以确保系统正常运行。

2. 检查整个机器人系统

我们还可以对运行中的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对于诊断连接问题就比较有用。

3. 得到一个完成的报告

通过运行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它不是调试工具,它不会帮助解决代码或系统实现方面的错误。

你可能感兴趣的:(ROS2)