總結學習目標:學會使用ros2doctor工具分析出現的問題
當ros2沒有安裝我們預期的設定執行的時候,我們可以用ros2doctor
工具檢查ros2的設定。
ros2doctor
對ros2全面的檢查,包括平台、版本、連線情況、環境、執行的系統等等。然後給出可能的錯誤和原因。
ros2doctor
是乙個還在不斷開發中的工具。功能可能不是很穩定,會頻繁更新。官方鼓勵使用者發帖對存在的問題和改進提供建議.
ros2doctor
是ros2cli
包的一部分。只要我們安裝了ros2cli
,我們就能夠使用ros2doctor
,通常我們安裝ros2的時候就安裝了這個包
首先讓我們用ros2doctor
對ros2的整體設定進行檢查。首先source一下,然後開啟終端執行命令
ros2 doctor
這將對所有設定模組進行檢查,並返回警告和錯誤。
如果我們的設定沒什麼問題我們會收到下面這樣一條訊息。
all checks passed
但是我們也有可能會收到警告的訊息。當我們收到一條userwarning
警告,並不是說我們的設定不可用,它更像是一種暗示,說明某些配置不太理想。
如果我們收到了一條警告的訊息,它可能像下面這個樣子。
: : userwarning:
例如當我們使用乙個ros2不太穩定的版本的時候ros2doctor就會發出一條警告
userwarning: distribution is not fully supported or tested. to get more consistent features, download a stable version at
如果ros2doctor只是在我們的系統中發現了警告,還是會顯示all checks passed
的訊息
大多數檢查都是進行警告而不是報錯。主要還是取決於使用者自己來決定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 :
distribution type
: ros2
distribution status : prerelease
release platforms :
我們可看到我們版本的發行狀態是預發行,所以我們就會得到這個警告。
ros2doctor
會告訴我們ros2在安裝和執行過程中的問題,我們可以使用--report
引數更深入地了解這些警告背後的資訊。
但是請記住,ros2doctor
它不是除錯工具,它不會幫助解決**或系統實現方面的錯誤。
ROS2官方教程 ROS2 概念概覽
原文 ros是乙個基於匿名訊息發布 publish 或訂閱 subscribe 機制的中間層,這種機制可以幫助訊息能夠在不同的ros程序之間傳輸。在ros2系統中的核心是ros圖 ros graph ros圖指的是乙個ros系統中的節點網路以及它們之間通訊時的聯絡。在ros圖中,節點是必要的組成部分...
ROS2學習 建立自己的ROS2功能包
建立資料夾 mkdir p ros2 ws src cd ros2 ws colcon build1 建立功能包 建立乙個pubsub的包 ros2 pkg create build type ament cmake cpp pubsub改xml檔案裡的郵箱 2 寫發布節點 建立ros2 talke...
ROS2學習筆記之rosbag篇
總結後續 學習目標 記錄發布在話題上的訊息,方便我們後期檢視 ros2 bag是乙個命令列工具用於記錄話題上發布的訊息。他可以儲存任意數量話題上的訊息內容。我們可以通過資料回放實現實驗場景的重現。同時這也是和他人分享資料的好方法。我們首先安裝ros2 bag sudo apt install ros...