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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

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

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

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

服務(wù)108.2

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

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

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

服務(wù)

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

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

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

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

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

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

參數(shù)字典簡介

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論