基于ROS的智能汽車設計與實訓教程第八章_第1頁
基于ROS的智能汽車設計與實訓教程第八章_第2頁
基于ROS的智能汽車設計與實訓教程第八章_第3頁
基于ROS的智能汽車設計與實訓教程第八章_第4頁
基于ROS的智能汽車設計與實訓教程第八章_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

8.1話題Node在ROS的世界里,最小的進程單元就是節(jié)點(node)。一個軟件包里可以有多個可執(zhí)行文件,可執(zhí)行文件在運行之后就成了一個進程(process),這個進程在ROS中就叫作節(jié)點。從程序角度來說,node就是一個可執(zhí)行文件(通常為C++編譯生成的可執(zhí)行文件、Python腳本),被執(zhí)行并加載到了內存之中;從功能角度來說,通常一個node負責著機器人的某一個單獨的功能。由于機器人的功能模塊非常復雜,我們往往不會把所有功能都集中到一個node上,而會采用分布式的方式,把雞蛋放到不同的籃子里。18.1話題Master由于機器人的元器件很多,功能龐大,因此實際運行時往往會運行眾多的node,這些node負責感知世界、控制運動、決策和計算等功能。那么如果要進行調配、管理這些node的話,就要利用ROS提供給我們的節(jié)點管理器master,master在整個網(wǎng)絡通信架構里相當于管理中心,管理著各個node。node首先在master處進行注冊,之后master會將該node納入整個ROS程序中。node之間的通信也是先由master進行“牽線”,才能兩兩的進行點對點通信。當ROS程序啟動時,第一步首先啟動master,由節(jié)點管理器處理依次啟動node。28.1

話題啟動master和node當我們要啟動ROS時,首先輸入命令:$roscore此時ROSmaster啟動,同時啟動的還有rosout和parameterserver,其中rosout是負責日志輸出的一個節(jié)點,其作用是告知用戶當前系統(tǒng)的狀態(tài),包括輸出系統(tǒng)的error、warning等等,并且將log記錄于日志文件中,parameterserver即是參數(shù)服務器,它并不是一個node,而是存儲參數(shù)配置的一個服務器。每一次我們運行ROS的節(jié)點前,都需要把master啟動起來,這樣才能夠讓節(jié)點啟動和注冊。啟動master之后,節(jié)點管理器就開始按照系統(tǒng)的安排協(xié)調進行啟動具體的節(jié)點。節(jié)點就是一個進程,只不過在ROS中它被賦予了專用的名字里——node。我們知道一個package中存放著可執(zhí)行文件,可執(zhí)行文件是靜態(tài)的,當系統(tǒng)執(zhí)行這些可執(zhí)行文件,將這些文件加載到內存中,它就成為了動態(tài)的node。具體啟動node的語句是:$rosrunpkg_namenode_name3通常我們運行ROS,就是按照上面的順序啟動,有時候節(jié)點太多,我們會選擇用launch文件來啟動。Master、Node之間以及Node之間的關系如圖所示。8.1話題4機器人是一個系統(tǒng)工程,通常一個機器人運行操作時要開啟很多個node,對于一個復雜的機器人的啟動操作并不需要每個節(jié)點依次進行rosrun,ROS為我們提供了一個命令能一次性啟動master和多個node。該命令是:$ roslaunchpkg_namefile_name.launchroslaunch命令首先會自動進行檢測系統(tǒng)的roscore有沒有運行,也即是確認節(jié)點管理器是否在運行狀態(tài)中,如果master沒有啟動,那么roslaunch就會首先啟動master,然后再按照launch的規(guī)則執(zhí)行。8.1

話題launch文件58.1話題ROS的通信方式是ROS最為核心的概念,ROS系統(tǒng)的精髓就在于它提供的通信架構。ROS的通信方式有以下四種:Topic話題Service服務ParameterService參數(shù)服務器Actionlib動作庫ROS中的通信方式中,topic是常用的一種。對于實時性、周期性的消息,使用topic來傳輸是最佳的選擇。topic是一種點對點的單向通信方式,這里的“點”指的是node,也就是說node之間可以通過topic方式來傳遞信息。Topic68.1話題topic要經(jīng)歷下面幾步的初始化過程:首先,publisher節(jié)點和subscriber節(jié)點都要到節(jié)點管理器進行注冊,然后publisher會發(fā)布topic,subscriber在master的指揮下會訂閱該topic,從而建立起sub-pub之間的通信。注意整個過程是單向的。Topic78.1話題ROS是一種分布式的架構,一個topic可以被多個節(jié)點同時發(fā)布,也可以同時被多個節(jié)點接收。比如在這個場景中用戶可以再加入一個圖像顯示的節(jié)點,如果想看攝像頭節(jié)點的畫面,則可以用自己的筆記本連接到機器人上的節(jié)點管理器,然后在自己的電腦上啟動圖像顯示節(jié)點。這就體現(xiàn)了分布式系統(tǒng)通信的好處:擴展性好、軟件復用率高??偨Y三點:(1)topic通信方式是異步的,發(fā)送時調用publish()方法,發(fā)送完成立即返回,不用等待反饋。(2)subscriber通過回調函數(shù)的方式來處理消息。(3)topic可以同時有多個subscribers,也可以同時有多個publishers。ROS中這樣的例子有:/rosout、/tf等等。8Message8.1

話題Message按照定義解釋就是topic內容的數(shù)據(jù)類型,也稱之為topic的格式標準。這里和我們平常用到的Massage直觀概念有所不同,這里的Message不單單指一條發(fā)布或者訂閱的消息,也指定為topic的格式標準。基本的msg包括bool、int8、int16、int32、int64(以及uint)、float、float64、string、time、duration、header、可變長數(shù)組array[]、固定長度數(shù)組array[C]。9上一節(jié)我們介紹了ROS的通信方式中的topic(話題)通信,我們知道topic是ROS中的一種單向的異步通信方式。然而有些時候單向的通信滿足不了通信要求,比如當一些節(jié)點只是臨時而非周期性的需要某些數(shù)據(jù),如果用topic通信方式時就會消耗大量不必要的系統(tǒng)資源,造成系統(tǒng)的低效率高功耗。這種情況下,就需要有另外一種請求-查詢式的通信模型。這節(jié)我們來介紹ROS通信中的另一種通信方式——service(服務)。8.2

服務108.2

服務service方式在通信模型上與topic做了區(qū)別。Service通信是雙向的,它不僅可以發(fā)送消息,同時還會有反饋。所以service包括兩個部分,一部分是請求方(Clinet),另一部分則是應答方/服務提供方(Server)。這時請求方(Client)就會發(fā)送一個request,要等待server處理,反饋回一個reply,這樣通過類似“請求-應答”的機制完成整個服務通信。118.2

服務Service是同步通信方式,所謂同步就是說,此時NodeA發(fā)布請求后會在原地等待reply,直到NodeB處理完了請求并且完成了reply,NodeA才會繼續(xù)執(zhí)行。NodeA等待過程中,是處于阻塞狀態(tài)的成通信。這樣的通信模型沒有頻繁的消息傳遞,沒有沖突與高系統(tǒng)資源的占用,只有接受請求才執(zhí)行服務,簡單而且高效。名稱TopicService通信方式異步通信同步通信實現(xiàn)原理TCP/IPTCP/IP通信模型Publish-SubscribeRequest-Reply映射關系Publish-Subscribe(多對多)Request-Reply(多對一)特點接受者收到數(shù)據(jù)會回調(Callback)遠程過程調用(RPC)服務器端的服務應用場景連續(xù)、高頻的數(shù)據(jù)發(fā)布偶爾使用的功能/具體的任務舉例激光雷達、里程計發(fā)布數(shù)據(jù)開關傳感器、拍照、計算topic和service對比128.2

服務在實際應用中,service通信方式的命令時rosservice具體的命令參數(shù)如下表:rosservice命令作用rosservicelist顯示服務列表rosserviceinfo打印服務信息rosservicetype打印服務類型rosserviceuri打印服務ROSRPCurirosservicefind按服務類型查找服務rosservicecall使用所提供的args調用服務rosserviceargs打印服務參數(shù)138.2

服務

類似msg文件,srv文件是用來描述服務(service數(shù)據(jù)類型的,service通信的數(shù)據(jù)格式定義在*.srv中。它聲明了一個服務,包括請求(request)和響應(reply)兩部分。rosservice具體的命令參數(shù)如下表:rosservice命令作用rosservicelist顯示服務列表rosserviceinfo打印服務信息rosservicetype打印服務類型rosserviceuri打印服務ROSRPCurirosservicefind按服務類型查找服務rosservicecall使用所提供的args調用服務rosserviceargs打印服務參數(shù)148.3

動作Actionlib是ROS中一個很重要的庫,類似service通信機制,actionlib也是一種請求響應機制的通信方式,actionlib主要彌補了service通信的一個不足,就是當機器人執(zhí)行一個長時間的任務時,假如利用service通信方式,那么publisher會很長時間接受不到反饋的reply,致使通信受阻。當service通信不能很好的完成任務時候,actionlib則可以比較適合實現(xiàn)長時間的通信過程,actionlib通信過程可以隨時被查看過程進度,也可以終止請求,這樣的一個特性,使得它在一些特別的機制中擁有很高的效率。

Action的工作原理是client-server模式,也是一個雙向的通信模式。通信雙方在ROSActionProtocol下通過消息進行數(shù)據(jù)的交流通信。client和server為用戶提供一個簡單的API來請求目標或通過函數(shù)調用和回調來執(zhí)行目標。

客戶端會向服務器發(fā)送目標指令和取消動作指令,而服務器則可以給客戶端發(fā)送實時的狀態(tài)信息,結果信息,反饋信息等等,從而完成了service沒法做到的部分。158.3

動作利用動作庫進行請求響應,動作的內容格式應包含三個部分:目標、反饋、結果。(1)目標機器人執(zhí)行一個動作,應該有明確的移動目標信息,包括一些參數(shù)的設定,方向、角度、速度等等。從而使機器人完成動作任務。(2)反饋在動作進行的過程中,應該有實時的狀態(tài)信息反饋給服務器的實施者,告訴實施者動作完成的狀態(tài),可以使實施者作出準確的判斷去修正命令。(3)結果當運動完成時,動作服務器把本次運動的結果數(shù)據(jù)發(fā)送給客戶端,使客戶端得到本次動作的全部信息,例如可能包含機器人的運動時長,最終姿勢等等。168.4

參數(shù)參數(shù)服務器是特殊的“通信方式”。特殊點在于參數(shù)服務器是節(jié)點存儲參數(shù)的地方、用于配置參數(shù),全局共享參數(shù)。參數(shù)服務器使用互聯(lián)網(wǎng)傳輸,在節(jié)點管理器中運行,實現(xiàn)整個通信過程。參數(shù)服務器,其作為ROS中另外一種重要的數(shù)據(jù)傳輸方式,有別于topic和service,它更加的靜態(tài)。參數(shù)服務器維護著一個數(shù)據(jù)字典,字典里存儲著各種參數(shù)和配置。178.4

參數(shù)字典簡介

何為字典,其實就是一個個的鍵值對,我們小時候學習語文的時候,常常都會有一本字典,當遇到不認識的字了我們可以查部首查到這個字,獲取這個字的讀音、意義等等,而這里的字典可以對比理解記憶。鍵值kay可以理解為語文里的“部首”這個概念,每一個key都是唯一的。每一個key不重復,且每一個key對應著一個value。也可以說字典就是一種映射關系,在實際的項目應用中,因為字典的這種靜態(tài)的映射特點,我們往往將一些不常用到的參數(shù)和配置放入?yún)?shù)服務器里的字典里,這樣對這些數(shù)據(jù)進行讀寫都將方便高效。188.5

信息通信過程運行主節(jié)點節(jié)點之間的消息通信當中,管理連接信息的主節(jié)點是為使用ROS必須首先運行的必需元素。ROS主節(jié)點使用roscore命令來運行,并使用XMLRPC運行服務器。主節(jié)點為了節(jié)點與節(jié)點的連接,會注冊節(jié)點的名稱、話題、服務、動作名稱、消息類型、URI地址和端口,并在有請求時將此信息通知給其他節(jié)點。198.5

信息通信過程運行訂閱者節(jié)點訂閱者節(jié)點使用rosrun或roslaunch命令來運行。訂閱者節(jié)點在運行時向主節(jié)點注冊其訂閱者節(jié)點名稱、話題名稱、消息類型、URI地址和端口。主節(jié)點和節(jié)點使用XMLRPC進行通信。208.5

信息通信過程運行發(fā)布者節(jié)點發(fā)布者節(jié)點(與訂閱者節(jié)點類似)使用rosrun或roslaunch命令來運行。發(fā)布者節(jié)點向主節(jié)點注冊發(fā)布者節(jié)點名稱、話題名稱、消息類型、URI地址和端口。主節(jié)點和節(jié)點使用XMLRPC進行通信。218.5

信息通信過程通知發(fā)布者信息主節(jié)點向訂閱者節(jié)點發(fā)送此訂閱者希望訪問的發(fā)布者的名稱、話題名稱、消息類型、URI地址和端口等信息。主節(jié)點和節(jié)點使用XMLRPC進行通信。228.5

信息通信過程訂閱者節(jié)點的連接請求訂閱者節(jié)點根據(jù)從主節(jié)點接收的發(fā)布者信息,向發(fā)布者節(jié)點請求直接連接。在這種情況下,要發(fā)送的信息包括訂閱者節(jié)點名稱、話題名稱和消息類型。發(fā)布者節(jié)點和訂閱者節(jié)點使用XMLRPC進行通信。238.5

信息通信過程發(fā)布者節(jié)點的連接響應發(fā)布者節(jié)點將TCP服務器的URI地址和端口作

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論