ROS入門(一):基礎概念
一、ROS節點
節點(Node)
是ROS程式的執行例項(可執行檔案的例項化),也可以理解為幾乎相互獨立的程式,不同節點實現不同功能,節點透過ROS
節點管理器(Master)
註冊資訊,並且多個節點可同時執行。
二、ROS話題
話題(Topic)
是節點之間通訊的橋樑,節點將訊息釋出到話題,同時也可以訂閱話題以接收訊息。
三、ROS通訊機制
ROS通訊採用分散式網路結構,使用基於TCP(俗稱3次握手)的通訊方式,實現模組間點對點的連線。其通訊方式有以下幾種。
1、基於話題(Topic)的通訊
①Talker(節點1)向Master(節點管理器)註冊釋出者的資訊,包含釋出訊息的話題名(此處為“bar”,地址為“1234”),Master會將其儲存到註冊列表,等待接受此話題的Listener(節點2)。
②Listener向Master註冊接收者的資訊,包含訂閱的話題名“bar”。
③Master根據Listener訂閱的話題在註冊列表尋找與之匹配的話題。如果沒有找到匹配的釋出者,則等待發布者的加入,如果找到可以與之匹配的釋出者資訊,則向Listener傳送Talker的地址資訊“1234”。
④⑤⑥Listener接收到Talker的地址資訊,就嘗試向Talker傳送連線許可,當Talker與Listener互相確認資訊後就建立連線(3次握手)。
⑦等連線成功後,Talker才向Listener傳送訊息(地址為“2345”)。可以發現,話題在兩節點通訊之間用於相互驗證身份,起到橋樑作用。
需要注意的是,這兩個節點可以以任意順序開始、結束,不會導致任何錯誤,他們是相互獨立的。
2、基於服務(Service)的通訊
服務呼叫(service calls)
是ROS另一種通訊方法。它與話題通訊的區別是:服務允許Client(節點1:客戶端)傳送請求(request)到Server(節點2:伺服器) 並獲得一個響應(response),服務呼叫是雙向的,且實現的是一對一的通訊;對於話題,訊息釋出的節點不知道是否有其他節點訂閱了這個訊息,而訂閱的節點也不知道是否有其他節點會發布這個訊息,且同一個話題可以有很多個釋出者和訂閱者。
服務的描述定義了ROS中需求和響應的資料結構,同訊息型別一樣,服務資料型別也是由一系列域構成的。唯一的區別就在於服務資料型別分為兩部分,分別表示請求和響應。
3、基於引數(Parameter)的通訊
透過使用
引數伺服器(parameter server)
來維護變數集的值,包括整數、浮點數、字串以及其他資料型別。引數伺服器允許節點主動查詢所需引數的值它們適用於配置那些不會隨時間頻繁變更的資訊。
四、ROS檔案架構
ROS工作區(catkin workspace)是用來儲存功能包的,建立任何程式之前都要先建立工作區,再建立功能包,功能包存放在工作區src子目錄下。建立功能包後,功能包的目錄下會生成兩個檔案,一個是package。xml清單檔案,提供關於功能包的相關資訊,並且定義功能包之間的依賴關係,另一個是CMakeLists。txt指令碼檔案,用來編譯。
五、ROS開發常用工具
1、Rviz和Gazebo
Rviz是一款3D視覺化工具,強調把已有的資料視覺化顯示。
Gazebo是3D物理模擬平臺,強調的是建立一個虛擬的模擬環境。
Rviz需要已有的資料,而Gazebo可以創造資料。我們可以在Gazebo中建立一個機器人世界,不僅可以模擬機器人的運動功能,還可以模擬機器人的感測器資料,而這些資料就可以放到Rviz中顯示,所以使用gazebo的時候,經常也會和rviz配合使用。
2、rqt工具
①rqt_graph:檢視節點之間的釋出-訂閱關係。
②rqt_plot:實時顯示一個釋出到某個話題上的資料變化圖形。
③rqt_console:顯示來自所有節點的日誌訊息。
④rqt_logger_level:透過圖形介面設定日誌級別。
3、TF座標變換
TF是座標變換軟體包,能讓使用者隨時間跟蹤多個參考系,它使用一種樹形資料結構,根據時間緩衝並維護多個參考系之間的座標變換關係,可以幫助使用者在任意時間,將點、向量等資料的座標在兩個參考系中完成座標變換。假設使用者有若干資料,但這些資料是基於鐳射感測器中心表示的,這些資料是用來幫助機器人躲避障礙物的,為了實現該功能,需要TF實現從感測器到機器人中心(或別的)的座標變換。TF核心函式有兩個:一個broadcast,把座標變換關係釋出出去;一個listener監聽所有的broadcast,建立好座標變換樹方便呼叫。
案例教學:
Github專案連結:
https://
github。com/1027243334/t
urtlesim