ROS2學習筆記之瞭解ros2doctor篇
學習目標:學會使用ros2doctor工具分析出現的問題
背景
當ros2沒有安裝我們預期的設定運行的時候,我們可以用ros2doctor
工具檢查ros2的設置。
ros2doctor
對ros2全面的檢查,包括平臺、版本、連接情況、環境、運行的系統等等。然後給出可能的錯誤和原因。
ros2doctor
是一個還在不斷開發中的工具。功能可能不是很穩定,會頻繁更新。官方鼓勵用戶發帖對存在的問題和改進提供建議.
前期準備
ros2doctor
是ros2cli
包的一部分。只要我們安裝了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
它不是調試工具,它不會幫助解決代碼或系統實現方面的錯誤。