ROS2學習筆記之瞭解ros2doctor篇

學習目標:學會使用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 <n> 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      : {'<platform>': ['<version>']}

我們可看到我們版本的發行狀態是預發行,所以我們就會得到這個警告。

總結

ros2doctor會告訴我們ROS2在安裝和運行過程中的問題,我們可以使用--report參數更深入地瞭解這些警告背後的信息。
但是請記住,ros2doctor它不是調試工具,它不會幫助解決代碼或系統實現方面的錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章