當前位置:
首頁 > 最新 > ROS的重要概念

ROS的重要概念

開篇

為了開發與ROS有關的機器人程序,必須要了解ROS的重要概念。首先讓我們來看一下ROS中使用的術語,接下來我們來看看ROS的重要概念:消息通信、消息文件、名稱(name)、坐標變換(TF)、客戶端庫、不同設備之間的通信、文件系統和構建系統。

ROS術語

本篇文章總結了常用的ROS術語,並對重點術語做了深入的分析。大家把這個作為ROS術語詞典。大部分應該為初次遇到的術語。如果有不明白的術語,可以先略過,可以通過後面的系列文章中的例子和練習中掌握到。

1、ROS

ROS是一個用於開發機器人程序的、類似操作系統的機器人軟體平台。ROS提供開發機器人應用程序時候所需要的硬體抽象、子設備控制,以及機器人工程中廣泛使用的感測、識別、繪圖、運動規劃等功能。此外ROS還能提供進程之間的消息解析、功能包管理、庫和豐富的開發調試工具。

2、主節點(master)

主節點(master)負責節點到節點之間的連接和通信,類似於名稱伺服器(NameServer)。roscore是它的運行命令,當運行主節點時,可以註冊每個節點的名字,並根據需要或取消相關信息。沒有主節點,就不能在節點之間建立訪問和消息交流(如話題和服務)

主節點使用XML遠程過程調用(如XMLRPC、XML-Remote Procedure Call)與節點進行通信。XMLRPC是一種基於HTTP的協議,主節點不與連接到主節點的節點保持連接。換句話說,節點只有在需要註冊自己的信息或者向其他節點發送請求消息的時候才能夠訪問主節點並獲取信息。通常情況下,不檢查彼此的連接狀態。由於這些特點,ROS可用於非常大而複雜的環境。XMLRPC也非常輕便,支持多種編程語言,使其非常適合支持各種硬體和語言的ROS。

當啟動ROS時,主節點將獲取用戶設置的ROS_MASTER_URI變數列出的URI地址和埠。除非另外設置,默認情況下,URI地址使用當前的本地IP,埠使用11311。

3、節點(node)

節點是在ROS中運行的最小處理單元。可以把它看成是一個可執行程序。在ROS中,建議為一個目的創建一個節點,設計時注重重用性。例如在移動機器人的情況下,為了驅動機器人,將每個程序細分化。也就是說,使用感測器驅動、感測器數據轉換、障礙物判斷、電機驅動、編碼器輸入和導航多個細分節點。

節點在運行的同時,向主節點註冊節點的名稱,並且還註冊發布者(publisher)、訂閱者(subscriber)、服務伺服器(service server)、服務客戶端(service client)的名稱,且也註冊消息形式、URI地址和埠。基於這些信息每個節點可以使用話題和服務於其它節點交換消息。

節點使用XMLRPC於主節點進行通信,並使用TCP/IP通信系列的XMLRPC或者TCPROS進行節點之間的通信。

節點之間的連接請求和響應使用XMLRPC(節點與主節點通信),而消息通信使用TCPROS,因為它是節點與節點之間的直接通信,與主節點無關。

URI地址和埠則使用存儲與運行當前節點的計算機上的名為ROS_HOSTNAME的環境變數作為URI地址,並將埠設置為任意的固定值。

4、功能包(package)

功能包是構成ROS的基本單元。ROS應用程序已功能包為單位開發的。功能包包括至少一個以上的節點或者擁有用於運行其他功能節點的配置文件。它還包括功能包所需要的其他文件,如用於運行各種進程的ROS依賴庫、數據集、配置文件等。目前官方註冊的R功能包的數量為(截至2017.7):ROS_Indigo約2500個,ROS_Kinect約為1600個。

5、元功能包(metapackage)

元功能包是一個具有共同目的的功能包的集合。例如,導航元功能包包含AMCL、DWA(動態窗口避障)、EKF、map_server(地圖伺服器,常用於保存構建好的地圖)等10多個功能包。

6、消息(message)

節點間通信是通過消息進行發送和接收數據。消息是諸如integer、floating、point和boolean等類型的變數。其實,我們還可以使用諸如消息里包括消息的簡單數據結構或列舉消息的消息數組的結構。使用消息的通信方法包括TCPROS、UDPROS等,根據情況使用單向消息發送/接收方式的話題(topic)和雙向消息請求(request)/響應(response)方式的服務

7、話題(topic)

話題就是「故事」。在發布者節點關於故事向主節點註冊之後,它以消息形式發布該故事的廣告、希望接受該故事的訂閱者節點獲得在主節點中這個話題註冊的那個發布者節點的信息。基於這個信息,訂閱者節點直接連接到發布者節點,用話題發送和接收消息。

8、發布與發布者(publish、publisher)

發布publish是指以話題內容相對應的額消息形式發送數據。為了執行發布,發布者publisher節點在主節點上註冊自己的話題等多種信息,並向希望訂閱的訂閱者節點發送消息。發布者在節點中聲明自己是執行發布的個體。單個節點可以成為多個發布者。

9、訂閱與訂閱者(subscribe、subscriber)

訂閱者是以與話題內容對應的消息形式接收數據。為了執行訂閱,訂閱者幾點在主節點上註冊自己的話題等各種信息,並從主節點接收那些發布此節點要訂閱的話題的發布者節點的信息。基於這個信息,訂閱者節點直接聯繫發布者節點來接收消息。訂閱者在節點中聲明自己執行訂閱的個體。單個節點可以成為多個訂閱者。

發布和訂閱概念中的話題是非同步的,這是一種需要發送和接收數據的好方法。另外,由於它通過一次的連接,發送和接收連續的消息,所以它經常被用於必須連續發送消息的感測器數據

然而在某些情況下,需要一種共同使用請求和響應同步的消息交換方案,因此,ROS提供叫做服務service的消息同步方法。服務分為響應請求的伺服器端和發送請求、接收響應結果的客戶端組成。

與話題不同,服務是一次性的消息通信。當服務的請求和響應完成時,兩個節點的連接被斷開。

10、服務(service)

服務消息通信是服務客戶端與服務伺服器之間同步雙向消息通信。其中服務客戶端請求對應於特定目標的任務伺服器,而服務伺服器則負責伺服器響應。

11、服務伺服器(service server)

服務伺服器是以請求作為輸入,以響應作為輸出的服務消息通信的伺服器。請求和響應都是消息,伺服器收到請求後,執行指定的服務,並將結果下發給服務客戶端。服務伺服器用於執行指定命令的節點。

12、服務客戶端

服務客戶端是以請求作為輸入並以響應作為輸出的消息服務通信的客戶端。請求和響應都是消息,並發服務請求到服務伺服器後接收其結果。服務客戶端用於傳達給定命令並接收結果值得節點。

13、動作(action)

動作是在需要向伺服器那樣的雙向請求的情況下使用的消息通信方式,不同點在於處理請求之後需要很長的響應,並需要中途反饋值。動作文件也非常類似於服務,目標goal和結構result對應於請求和響應。此外,還添加了對應於中途的反饋feedback。它由一個設置動作目標goal和動作客戶端action client和一個動作伺服器action server組成,動作伺服器根據目標執行動作,並發送反饋結果。動作客戶端和動作伺服器之間的進行非同步雙向消息通信

14、動作伺服器 (action server)

動作伺服器以動作客戶端接收的目標作為輸入作為輸入,並以結果和反饋值作為輸出的消息通信的伺服器。在接收到來自客戶端的目標值後,負責執行實際的動作。

15、動作客戶端(action client)

動作客戶端是以目標作為輸出並以動作伺服器的執行結果、反饋作為輸入的消息通信客戶端。它將目標交於動作伺服器,接收結果和反饋,並給出下一個指示或取消目標。

16、參數(parameter)

ROS中的參數是指節點中使用的參數。可以把它想像成一個windows程序中的*.ini配置文件。這些參數是默認default設置的,可以根據需要從外部讀取或者輸入。尤其是,它可以通過使用外部的寫入功能實時更改設置值,因此非常有用。例如可以指定與外部設備連接的PC的USB埠、相機校準值、電機速度和命令最大值、最小值設置等。

17、參數伺服器(parameter server)

參數伺服器是指在功能包中使用參數時,註冊各參數的伺服器。參數伺服器也是主節點的一個功能。

18、catkin

catkin是ROS的構建系統。ROS的構建系統基本上使用CMake(cross platform make),並且在功能包的目錄中的CMakeLists.txt文件中描述整個構建環境。在ROS中,將CMake修改成專為ROS定製的catkin系統。

catkin構建系統可以使我們更加方便地使用與ROS相關的構建、功能包管理及功能包之間的依賴關係等。目前來說,使用過ROS的話,需要使用catkin,而不是rosbuild(但可以單獨安裝這個ros包)。

19、rosbuild

ROS構建rosbuild是在catkin之前使用的構建系統,雖然仍然有一些用戶可以使用,但這只是為ROS版本兼容性保留的,並不是官方推薦的。如果必須使用rosbuild來構建系統使用舊的功能包,建議將rosbuild改為catkin。【不推薦安裝rosbuild功能包的方式】

20、roscore

roscore是運行ROS主節點的命令。也可以在另一台位於同一個網路內的計算機上運行它。但是,除了支持多roscore的某些特殊情況,roscore在一個網路中智能運行一個、運行ros時,使用ROS_HOSTNAME_URI變數中列出的URI地址和埠。如果用戶沒有設置,會使用當前本地IP作為URI地址並使用埠11311。

21、rosrun

是ROS的基本運行命令。它用於在功能包中運行一個節點。節點使用的URI地址將存儲在當前計算機上的ROS_HOSTNAME環境變數作為URI地址,埠被設置為任意的固有值。

22、roslaunch

如果rosrun是運行一個節點的命令,nameroslaunch就是運行多個節點的概念。該命令允許運行多個確定的節點。

其他功能還包括一些專為執行具有諸多選項的節點的ROS命令,比如包括更改功能包參數或者節點名稱、配置節點命名空間、設置ROS_ROOT和ROS_PACKAGE_PATH以及更改環境變數等。

roslaunch使用*.launch文件來設置可執行節點,它基於可擴展標記語言(XML),並提供XML標記形式的多種選項。

23、bag

用戶可以保存ROS中發送和接收消息的數據,這時用於保存的文件格式稱之為bag。是以*.bag作為擴展名。在ROS中,這個功能包可以用來存儲信息並在需要時回放以前的情況。例如,在使用感測器執行機器人實驗時,使用bag將感測器值以消息形式保存。有了這些保存的信息,即使不重複執行之前的實驗,也能夠通過回放保存的bag文件來反覆利用當時感測器的值。尤其是,如果利用rosbag的記錄回放功能,在開發那些需要反覆修改程序演算法的時候會非常有用。

24、ROS wiki

ROS的基本說明,網址為 http:/wiki.ros.org/,它解釋了ROS提供的每個功能包和功能。這個維基界面描述了ROS的基本用法、每個功能包的簡要說明、用到的參數、作者、許可證、主頁、存儲庫和教程等內容。目前wiki上已經有超過17000頁的內容。

25、存儲庫repositories

-每一個公開的包在功能包的wiki中都有一個存儲庫repository。存儲庫是存儲功能包的網站的URL地址,並使用源代碼管理系統svn hg git來管理問題、開發、下載等。許多當前可用的ROS功能包將GitHub用作存儲庫。

26、狀態圖

上面描述的節點、話題、發布者和訂閱者之間的關係可以通過狀態圖graph直觀的表示。它是當前正在運行的消息通信的圖形表示。但不能為一次性服務創建狀態圖。通過rqt_graph功能包中的rqt_graph節點完成,有兩種命令:rqt_graph和rosrun rqt_graph rqt_graph。

27、名稱name

節點、參數、話題和服務都有名稱即name。當使用主節點的參數、話題和服務時,向主節點註冊該名稱並根據名稱進行搜索,然後發送消息。此外,name非常靈活,它們可以在運行時被修改。另外,對於一個節點、參數、話題和服務,也能給它設定多個不同的name。這種取名規則使得ROS適用於大型項目和複雜系統。

28、客戶端庫

ROS是一個客戶端庫client library,它為各種語言提供開發環境,以減少對所用語言的依賴性。主要客戶端庫包括C++、Python和Lisp。其他語言包括Java、Lua、.NET、EusLisp和R。為此,開發了諸如roscpp rospy roslisp rosjava roslua roscs roseus rosR PhaROS等客戶端庫。

29、URI

統一資源標識符是代表Internet上資源的唯一地址。該URI被用作Internet協議中的標識符,是在Internet上所需要的基本條件。

30、MD5

MD5(Message Digest algorithm)是128位密碼散列函數。它主要用於檢查程序或者文件的完整性,以查看它是否保持原樣。在使用ROS的消息通信中,使用MD5來檢驗消息發送/接收的完整性。

31、RPC

遠程過程調用,意味著遠程計算機上的程序調用call另一台計算機中的子程序procedure。這個利用TCP/IPIPX等傳輸協議的技術不需要程序員一一進行編程的情況下也能夠允許計算機在另一個地址空間通過遠程控制運行函數或者子程序。

32、XML

可擴展標記語言(Extensible Markup Language)是W3C推薦用於創建其他特殊用途標記語言的通用標記語言。它是通過使用標籤來制定數據結構的語言之一。在ROS中用於.launch * .urdf package.xml等各個部分。

33、XMLRPC

XML遠程過程調用,一種RPC協議。其編碼形式採用XML編碼格式,而傳輸方式採用既不保持連接狀態、也不檢查連接狀態的請求響應方式的HTTP協議。XMLRPC是一個非常簡單的約定,僅用於定義小數據類型或命令。所以它比較簡答。

XMLRPC非常輕便,支持多種語言,非常適合支持各種硬體和語言的ROS。

34、TCP/IP

傳輸控制協議(TCP,transmission control protocol)是一種傳輸控制協議,通常被稱為TCP/IP。從互聯網的角度看它基於IP(internet protocol)且使用傳輸控制協議TCP,以保證數據正確傳輸,並且按照發送順序進行發送/接收。

TCPROS消息和服務中使用的基於TCP/IP的消息方式稱之為TCPROS,而UDPROS消息及服務中使用的基於UDP的消息方式稱之為UDPROS。在ROS中常用的是TCPROS。

35、CMakeLists.txt

ROS構建系統的catkin基本上使用了CMake,因此在功能包目錄的CMakeLists.txt文件中描述著構建環境。

36、package.xml

包含功能包信息的XML文件,描述功能包名稱、作者、許可證和依賴包。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 ROSharer 的精彩文章:

TAG:ROSharer |