ROS是機器人操作系統(Robot Operating System)的簡稱,用于編寫機器人的軟件程序。
ROS是一種具有高度靈活性的軟件架構,能夠幫助軟件開發者快速創建機器人應用軟件。
ROS提供了一系列程序庫和工具,包括:硬件抽象、設備驅動、庫函數、可視化、進程間消息傳遞和軟件包管理等。
ROS是一個分布式的進程(也就是“節點”)框架,這些進程被封裝在不同的程序包或功能包中。
ROS可以分成兩層:底層是操作系統層(通常不需要用戶關心),上層則是實現不同功能的軟件包,如感知、定位、規劃、控制等。
了解了ROS的目錄文件結構之后:ROS的目錄文件結構
本文主要介紹幾個ROS的重要概念:節點(node)、消息(message)、主題(topic)、服務(service),ROS控制器(ROS master),幫助初學者快速了解ROS。
1、節點(node)
節點是進行運算任務的進程。一個系統可以由很多節點組成,節點也可以稱為軟件模塊。
ROS是以節點的形式開發的,節點是根據其目的,可以細分的可執行程序的最小單位。
節點使基于ROS的系統在運行時更加形象化,當許多節點同時進行時,可以將不同節點的通訊繪制成下圖。
2、消息(message)
節點之間通過傳送消息進行通訊。每一個消息都是一種數據結構。
ROS的消息支持標準的數據類型(整型、浮點型、布爾型等),還包括數組、結構體、自定義的數據類型等等。
3、主題(topic)
消息以一種 發布/訂閱 的方式傳遞,一個或多個節點可以在一個給定的主題中發布消息,多個節點可以訂閱同一個主題。
發布者和訂閱者不了解彼此的存在。
4、服務(service)
基于主題 發布/訂閱 的通信方法是一種異步方法,該 發布/訂閱 模型是一種很靈活的通訊模式。但在某些情況下,需要一種同時使用請求和響應的同步消息交換方案,ROS提供了叫做服務的消息同步方法,是一種一對一的機制。
一個服務被分成服務服務器和服務客戶端,其中服務服務器只在有請求(request)的時候才響應(response),而服務客戶端會在發送請求后接收響應。與話題不同,服務是一次性消息通信。
因此,當服務的請求和響應完成時,兩個連接的節點將被斷開。
服務通常被用作請求機器人執行特定操作時使用的命令,或者用于根據特定條件需要產生事件的節點。
由于它是一次性的通信方式,在網絡上的負載很小,所以它也被用作代替 基于主題 發布/訂閱 的通信手段。
5、ROS控制器(ROS master)
在上面概念的基礎上,需要有一個控制器,可以使所有節點有條不紊地執行,這就是ROS的控制器(ROS master)。
ROS master 通過RPC(Remote Procedure Call Protocol,遠程過程調用)提供登記列表和對其他節點/主題的查找。
總結為一句話就是:ROS中最小的進程單元就是節點(node),節點之間通過主題(topic)傳遞消息數據(message)。
消息記錄包(bag)是一種用于保存和回放ROS消息數據的文件格式。
ROS提供了可以將bag文件可視化的圖形工具,詳見:ROS bag的繪圖工具:rqt_bag和PlotJuggler