0. 简介

在面对ROS环境配置时,我们会发现,有的时候非常难查的问题有时候是因为ROS的CMakeList和package配置文件写的不对导致的。ROS1的时候就很无能为力,需要熟练地了解每个模块与配置。而ROS2中就提供了一个可以检测ros2的方方面面,包括平台,版本,网络,环境,运行系统等等的工具ros2 doctor。ros2 doctor仅在Eloquent及更高的版本中可以使用。同时ros2 doctor是ros2cli包的一部分。只要我们安装了ros2cli,我们就能够使用ros2 doctor,通常我们安装ros2的时候就安装了这个包。

1. 常用的命令指令

首先我们先来看一下ros2 docter的报告信息,这个ros2 docter显示了当前ROS2中所有的系统版本以及各个软件的版本和网络信息等。

ros2 doctor --report

   NETWORK CONFIGURATION
inet         : 192.168.227.128
inet4        : ['192.168.227.128']
ether        : 00:0c:29:b7:a6:2e
inet6        : ['fe80::4d41:28e0:7924:a3ab']
netmask      : 255.255.255.0
device       : ens33
flags        : 4163<UP,BROADCAST,RUNNING,MULTICAST> 
mtu          : 1500
broadcast    : 192.168.227.255
inet         : 127.0.0.1
inet4        : ['127.0.0.1']
inet6        : ['::1']
netmask      : 255.0.0.0
device       : lo
flags        : 73<UP,LOOPBACK,RUNNING> 
mtu          : 65536

   PACKAGE VERSIONS
ament_pep257                              : required=0.9.6, local=0.9.6
examples_rclcpp_minimal_action_client     : required=0.9.4, local=0.9.4
rviz2                                     : required=8.2.2, local=8.2.2
rosbag2_storage                           : required=0.3.8, local=0.3.8
diagnostic_msgs                           : required=2.0.4, local=2.0.4
intra_process_demo                        : required=0.9.3, local=0.9.3
sros2                                     : required=0.9.4, local=0.9.4
examples_rclcpp_minimal_subscriber        : required=0.9.4, local=0.9.4
examples_rclcpp_minimal_service           : required=0.9.4, local=0.9.4
console_bridge_vendor                     : required=1.2.4, local=1.2.4
tf2_tools                                 : required=0.13.11, local=0.13.10
ament_cmake_gmock                         : required=0.9.9, local=0.9.8
rosbag2_cpp                               : required=0.3.8, local=0.3.8
ament_cmake_export_interfaces             : required=0.9.9, local=0.9.8
rqt_gui                                   : required=1.1.2, local=1.1.1
ros2cli                                   : required=0.9.9, local=0.9.9
launch_testing_ros                        : required=0.11.3, local=0.11.2
quality_of_service_demo_py                : required=0.9.3, local=0.9.3
launch_ros                                : required=0.11.3, local=0.11.2
ament_cmake_test                          : required=0.9.9, local=0.9.8
rosidl_generator_cpp                      : required=1.2.1, local=1.2.1
ament_cmake_export_include_directories    : required=0.9.9, local=0.9.8
class_loader                              : required=2.0.2, local=2.0.2
examples_rclcpp_minimal_composition       : required=0.9.4, local=0.9.4
ament_cmake_python                        : required=0.9.9, local=0.9.8
ament_cmake_target_dependencies           : required=0.9.9, local=0.9.8
lifecycle                                 : required=0.9.3, local=0.9.3
zstd_vendor                               : required=0.3.8, local=0.3.8
examples_rclcpp_multithreaded_executor    : required=0.9.4, local=0.9.4
ament_cmake_export_targets                : required=0.9.9, local=0.9.8
ros2topic                                 : required=0.9.9, local=0.9.9
ament_cmake_pep257                        : required=0.9.6, local=0.9.6
visualization_msgs                        : required=2.0.4, local=2.0.4
ament_cmake_libraries                     : required=0.9.9, local=0.9.8
control_msgs                              : required=2.5.1, local=2.5.1
desktop                                   : required=0.9.2, local=0.9.2
tf2_geometry_msgs                         : required=0.13.11, local=0.13.10
rclcpp_lifecycle                          : required=2.3.1, local=2.3.1
rqt_action                                : required=1.0.1, local=1.0.1

....

   PLATFORM INFORMATION
system           : Linux
platform info    : Linux-5.11.0-27-generic-x86_64-with-glibc2.29
release          : 5.11.0-27-generic
processor        : x86_64

   RMW MIDDLEWARE
middleware name    : rmw_fastrtps_cpp

   ROS 2 INFORMATION
distribution name      : foxy
distribution type      : ros2
distribution status    : active
release platforms      : {'ubuntu': ['focal']}

   TOPIC LIST
topic               : none
publisher count     : 0
subscriber count    : 0

如果要检查保是否有问题,可以输入ros2 doctor来检测大概的ros2整体配置。具体操作为,先在终端source一下ros2环境变量,输入下面指令

ros2 doctor

这会检查所有的配置模块,并且返回警告和报错。如果你的系统是没有问题的,你会看见类似消息:

All <n> checks passed

然而,有一些警告返回是挺正常的.一条UserWarning消息并不意味着你的配置不可用的。它更可能仅是一个指导,(提醒)有些东西的配置方式并不理想。如果你使用了一个不稳定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/

如果在你配置文件里面发现有一个奇怪的报错,UserWarning: ERROR:开头的,这个检查很可能被认为是有错的。

1/3 checks failed
Failed modules:  network

2. ros2 doctor检查一个系统

我们还可以检查正在运行的ROS 2系统,以确定问题的可能原因。要查看ros2 doctor在运行系统上的工作情况,让我们运行Turtlesim,使得节点之间可以进行主动通信。

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

然后我们再运行ros2 doctor,我们可以发现会出现下面的警告,这代表/turtlesim节点发布数据到两个话题,但话题并没有订阅,所以ros2doctor就认为导致问题的出现

UserWarning: Publisher without subscriber detected on /turtle1/color_sensor.
UserWarning: Publisher without subscriber detected on /turtle1/pose.

如果你对话题/color_sensor和话题/pose运行echo指令,这些警告就会消失,因为发布器有了侦听器.

ros2 topic echo /turtle1/color_sensor
ros2 topic echo /turtle1/pose

3. 参考链接

https://docs.ros.org/en/foxy/Tutorials/Getting-Started-With-Ros2doctor.html

https://blog.csdn.net/qq_45701501/article/details/119280907?spm=1001.2014.3001.5502

https://blog.csdn.net/qq_27865227/article/details/120044365