ROS操作系統(tǒng)的入門資料_第1頁(yè)
ROS操作系統(tǒng)的入門資料_第2頁(yè)
ROS操作系統(tǒng)的入門資料_第3頁(yè)
ROS操作系統(tǒng)的入門資料_第4頁(yè)
ROS操作系統(tǒng)的入門資料_第5頁(yè)
已閱讀5頁(yè),還剩116頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、操作系統(tǒng)探索總結(jié)(一)ROS簡(jiǎn)介二、操作系統(tǒng)探索總結(jié)(二)ROS總體框架三、操作系統(tǒng)探索總結(jié)(三)ROS新手教程四、操作系統(tǒng)探索總結(jié)(四)簡(jiǎn)單的機(jī)器人仿真五、操作系統(tǒng)探索總結(jié)(五)創(chuàng)建簡(jiǎn)單的機(jī)器人模型smartcar六、操作系統(tǒng)探索總結(jié)(六)使用smartcar進(jìn)行仿真七、操作系統(tǒng)探索總結(jié)(七)smartcar源碼上傳八、操作系統(tǒng)探索總結(jié)(八)鍵盤控制九、操作系統(tǒng)探索總結(jié)(九)操作桿控制十、操作系統(tǒng)探索總結(jié)(十)語(yǔ)音控制十一、操作系統(tǒng)探索總結(jié)(十一)機(jī)器視覺(jué)十二、操作系統(tǒng)探索總結(jié)(十二)坐標(biāo)系統(tǒng)十三、操作系統(tǒng)探索總結(jié)(十三)導(dǎo)航與定位框架十四、操作系統(tǒng)探索總結(jié)(十四)move_base(路

2、徑規(guī)劃)十五、操作系統(tǒng)探索總結(jié)(十五)amcl(導(dǎo)航與定位)操作系統(tǒng)探索總結(jié)(一)ROS簡(jiǎn)介一、歷史隨著機(jī)器人領(lǐng)域的快速發(fā)展和復(fù)雜化,代碼的復(fù)用性和模塊化的需求原來(lái)越強(qiáng)烈,而已有的開(kāi)源機(jī)器人系統(tǒng)又不能很好的適應(yīng)需求。2010年Willow Garage公司發(fā)布了開(kāi)源機(jī)器人操作系統(tǒng)ROS(robot operating system),很快在機(jī)器人研究領(lǐng)域展開(kāi)了學(xué)習(xí)和使用ROS的熱潮。ROS系統(tǒng)是起源于2007年斯坦福大學(xué)人工智能實(shí)驗(yàn)室的項(xiàng)目與機(jī)器人技術(shù)公司W(wǎng)illow Garage的個(gè)人機(jī)器人項(xiàng)目(Personal Robots Program)之間的合作,2008年之后就由Willow Ga

3、rage來(lái)進(jìn)行推動(dòng)。已經(jīng)有四年多的時(shí)間了 (視頻)。隨著PR2那些不可思議的表現(xiàn),譬如疊衣服,插插座,做早飯,ROS也得到越來(lái)越多的關(guān)注。Willow Garage公司也表示希望借助開(kāi)源的力量使PR2變成“全能”機(jī)器人。PR2價(jià)格高昂,2011年零售價(jià)高達(dá)40萬(wàn)美元。PR2現(xiàn)主要用于研究。PR2有兩條手臂,每條手臂七個(gè)關(guān)節(jié),手臂末端是一個(gè)可以張合的鉗子。PR2依靠底部的四個(gè)輪子移動(dòng)。在PR2的頭部,胸部,肘部,鉗子上安裝有高分辨率攝像頭,激光測(cè)距儀,慣性測(cè)量單元,觸覺(jué)傳感器等豐富的傳感設(shè)備。在PR2的底部有兩臺(tái)8核的電腦作為機(jī)器人各硬件的控制和通訊中樞。兩臺(tái)電腦安裝有Ubuntu和ROS。二、

4、設(shè)計(jì)目標(biāo)ROS是開(kāi)源的,是用于機(jī)器人的一種后操作系統(tǒng),或者說(shuō)次級(jí)操作系統(tǒng)。它提供類似操作系統(tǒng)所提供的功能,包含硬件抽象描述、底層驅(qū)動(dòng)程序管理、共用功能的執(zhí)行、程序間的消息傳遞、程序發(fā)行包管理,它也提供一些工具程序和庫(kù)用于獲取、建立、編寫和運(yùn)行多機(jī)整合的程序。ROS的首要設(shè)計(jì)目標(biāo)是在機(jī)器人研發(fā)領(lǐng)域提高代碼復(fù)用率。ROS是一種分布式處理框架(又名Nodes)。這使可執(zhí)行文件能被單獨(dú)設(shè)計(jì),并且在運(yùn)行時(shí)松散耦合。這些過(guò)程可以封裝到數(shù)據(jù)包(Packages)和堆棧(Stacks)中,以便于共享和分發(fā)。ROS還支持代碼庫(kù)的聯(lián)合系統(tǒng)。使得協(xié)作亦能被分發(fā)。這種從文件系統(tǒng)級(jí)別到社區(qū)一級(jí)的設(shè)計(jì)讓獨(dú)立地決定發(fā)展和實(shí)

5、施工作成為可能。上述所有功能都能由ROS的基礎(chǔ)工具實(shí)現(xiàn)。三、主要特點(diǎn)ROS的運(yùn)行架構(gòu)是一種使用ROS通信模塊實(shí)現(xiàn)模塊間P2P的松耦合的網(wǎng)絡(luò)連接的處理架構(gòu),它執(zhí)行若干種類型的通訊,包括基于服務(wù)的同步RPC(遠(yuǎn)程過(guò)程調(diào)用)通訊、基于Topic的異步數(shù)據(jù)流通訊,還有參數(shù)服務(wù)器上的數(shù)據(jù)存儲(chǔ)。但是ROS本身并沒(méi)有實(shí)時(shí)性。ROS的主要特點(diǎn)可以歸納為以下幾條:(1)點(diǎn)對(duì)點(diǎn)設(shè)計(jì)一個(gè)使用ROS的系統(tǒng)包括一系列進(jìn)程,這些進(jìn)程存在于多個(gè)不同的主機(jī)并且在運(yùn)行過(guò)程中通過(guò)端對(duì)端的拓?fù)浣Y(jié)構(gòu)進(jìn)行聯(lián)系。雖然基于中心服務(wù)器的那些軟件框架也可以實(shí)現(xiàn)多進(jìn)程和多主機(jī)的優(yōu)勢(shì),但是在這些框架中,當(dāng)各電腦通過(guò)不同的網(wǎng)絡(luò)進(jìn)行連接時(shí),中心數(shù)據(jù)服

6、務(wù)器就會(huì)發(fā)生問(wèn)題。ROS的點(diǎn)對(duì)點(diǎn)設(shè)計(jì)以及服務(wù)和節(jié)點(diǎn)管理器等機(jī)制可以分散由計(jì)算機(jī)視覺(jué)和語(yǔ)音識(shí)別等功能帶來(lái)的實(shí)時(shí)計(jì)算壓力,能夠適應(yīng)多機(jī)器人遇到的挑戰(zhàn)。(2)多語(yǔ)言支持在寫代碼的時(shí)候,許多編程者會(huì)比較偏向某一些編程語(yǔ)言。這些偏好是個(gè)人在每種語(yǔ)言的編程時(shí)間、調(diào)試效果、語(yǔ)法、執(zhí)行效率以及各種技術(shù)和文化的原因?qū)е碌慕Y(jié)果。為了解決這些問(wèn)題,我們將ROS設(shè)計(jì)成了語(yǔ)言中立性的框架結(jié)構(gòu)。ROS現(xiàn)在支持許多種不同的語(yǔ)言,例如C+、Python、Octave和LISP,也包含其他語(yǔ)言的多種接口實(shí)現(xiàn)。ROS的特殊性主要體現(xiàn)在消息通訊層,而不是更深的層次。端對(duì)端的連接和配置利用XML-RPC機(jī)制進(jìn)行實(shí)現(xiàn),XML-RPC也

7、包含了大多數(shù)主要語(yǔ)言的合理實(shí)現(xiàn)描述。我們希望ROS能夠利用各種語(yǔ)言實(shí)現(xiàn)的更加自然,更符合各種語(yǔ)言的語(yǔ)法約定,而不是基于C語(yǔ)言給各種其他語(yǔ)言提供實(shí)現(xiàn)接口。然而,在某些情況下利用已經(jīng)存在的庫(kù)封裝后支持更多新的語(yǔ)言是很方便的,比如Octave的客戶端就是通過(guò)C+的封裝庫(kù)進(jìn)行實(shí)現(xiàn)的。為了支持交叉語(yǔ)言,ROS利用了簡(jiǎn)單的、語(yǔ)言無(wú)關(guān)的接口定義語(yǔ)言去描述模塊之間的消息傳送。接口定義語(yǔ)言使用了簡(jiǎn)短的文本去描述每條消息的結(jié)構(gòu),也允許消息的合成,例如下圖就是利用接口定義語(yǔ)言描述的一個(gè)點(diǎn)的消息:每種語(yǔ)言的代碼產(chǎn)生器就會(huì)產(chǎn)生類似本種語(yǔ)言目標(biāo)文件,在消息傳遞和接收的過(guò)程中通過(guò)ROS自動(dòng)連續(xù)并行的實(shí)現(xiàn)。這就節(jié)省了重要的編

8、程時(shí)間,也避免了錯(cuò)誤:之前3行的接口定義文件自動(dòng)的擴(kuò)展成137行的C+代碼,96行的Python代碼,81行的Lisp代碼和99行的Octave代碼。因?yàn)橄⑹菑母鞣N簡(jiǎn)單的文本文件中自動(dòng)生成的,所以很容易列舉出新的消息類型。在編寫的時(shí)候,已知的基于ROS的代碼庫(kù)包含超過(guò)四百種消息類型,這些消息從傳感器傳送數(shù)據(jù),使得物體檢測(cè)到了周圍的環(huán)境。最后的結(jié)果就是一種語(yǔ)言無(wú)關(guān)的消息處理,讓多種語(yǔ)言可以自由的混合和匹配使用。(3)精簡(jiǎn)與集成大多數(shù)已經(jīng)存在的機(jī)器人軟件工程都包含了可以在工程外重復(fù)使用的驅(qū)動(dòng)和算法,不幸的是,由于多方面的原因,大部分代碼的中間層都過(guò)于混亂,以至于很困難提取出它的功能,也很難把它們

9、從原型中提取出來(lái)應(yīng)用到其他方面。為了應(yīng)對(duì)這種趨勢(shì),我們鼓勵(lì)將所有的驅(qū)動(dòng)和算法逐漸發(fā)展成為和ROS沒(méi)有依賴性單獨(dú)的庫(kù)。ROS建立的系統(tǒng)具有模塊化的特點(diǎn),各模塊中的代碼可以單獨(dú)編譯,而且編譯使用的CMake工具使它很容易的就實(shí)現(xiàn)精簡(jiǎn)的理念。ROS基本將復(fù)雜的代碼封裝在庫(kù)里,只是創(chuàng)建了一些小的應(yīng)用程序?yàn)镽OS顯示庫(kù)的功能,就允許了對(duì)簡(jiǎn)單的代碼超越原型進(jìn)行移植和重新使用。作為一種新加入的有優(yōu)勢(shì),單元測(cè)試當(dāng)代碼在庫(kù)中分散后也變得非常的容易,一個(gè)單獨(dú)的測(cè)試程序可以測(cè)試庫(kù)中很多的特點(diǎn)。ROS利用了很多現(xiàn)在已經(jīng)存在的開(kāi)源項(xiàng)目的代碼,比如說(shuō)從Player項(xiàng)目中借鑒了驅(qū)動(dòng)、運(yùn)動(dòng)控制和仿真方面的代碼,從OpenCV

10、中借鑒了視覺(jué)算法方面的代碼,從OpenRAVE借鑒了規(guī)劃算法的內(nèi)容,還有很多其他的項(xiàng)目。在每一個(gè)實(shí)例中,ROS都用來(lái)顯示多種多樣的配置選項(xiàng)以及和各軟件之間進(jìn)行數(shù)據(jù)通信,也同時(shí)對(duì)它們進(jìn)行微小的包裝和改動(dòng)。ROS可以不斷的從社區(qū)維護(hù)中進(jìn)行升級(jí),包括從其他的軟件庫(kù)、應(yīng)用補(bǔ)丁中升級(jí)ROS的源代碼。(4)工具包豐富為了管理復(fù)雜的ROS軟件框架,我們利用了大量的小工具去編譯和運(yùn)行多種多樣的ROS組建,從而設(shè)計(jì)成了內(nèi)核,而不是構(gòu)建一個(gè)龐大的開(kāi)發(fā)和運(yùn)行環(huán)境。這些工具擔(dān)任了各種各樣的任務(wù),例如,組織源代碼的結(jié)構(gòu),獲取和設(shè)置配置參數(shù),形象化端對(duì)端的拓?fù)溥B接,測(cè)量頻帶使用寬度,生動(dòng)的描繪信息數(shù)據(jù),自動(dòng)生成文檔等等。

11、盡管我們已經(jīng)測(cè)試通過(guò)像全局時(shí)鐘和控制器模塊的記錄器的核心服務(wù),但是我們還是希望能把所有的代碼模塊化。我們相信在效率上的損失遠(yuǎn)遠(yuǎn)是穩(wěn)定性和管理的復(fù)雜性上無(wú)法彌補(bǔ)的。(5)免費(fèi)并且開(kāi)源ROS所有的源代碼都是公開(kāi)發(fā)布的。我們相信這將必定促進(jìn)ROS軟件各層次的調(diào)試,不斷的改正錯(cuò)誤。雖然像Microsoft Robotics Studio和Webots這樣的非開(kāi)源軟件也有很多值得贊美的屬性,但是我們認(rèn)為一個(gè)開(kāi)源的平臺(tái)也是無(wú)可為替代的。當(dāng)硬件和各層次的軟件同時(shí)設(shè)計(jì)和調(diào)試的時(shí)候這一點(diǎn)是尤其真實(shí)的。ROS以分布式的關(guān)系遵循這BSD許可,也就是說(shuō)允許各種商業(yè)和非商業(yè)的工程進(jìn)行開(kāi)發(fā)。ROS通過(guò)內(nèi)部處理的通訊系統(tǒng)進(jìn)

12、行數(shù)據(jù)的傳遞,不要求各模塊在同樣的可執(zhí)行功能上連接在一起。如此,利用ROS構(gòu)建的系統(tǒng)可以很好的使用他們豐富的組件:個(gè)別的模塊可以包含被各種協(xié)議保護(hù)的軟件,這些協(xié)議從GPL到BSD,但是許可的一些“污染物”將在模塊的分解上就完全消滅掉操作系統(tǒng)探索總結(jié)(二)ROS總體框架一、 總體結(jié)構(gòu)根據(jù)ROS系統(tǒng)代碼的維護(hù)者和分布來(lái)標(biāo)示,主要有兩大部分:(1)main:核心部分,主要由Willow Garage公司和一些開(kāi)發(fā)者設(shè)計(jì)、提供以及維護(hù)。它提供了一些分布式計(jì)算的基本工具,以及整個(gè)ROS的核心部分的程序編寫。(2)universe:全球范圍的代碼,有不同國(guó)家的ROS社區(qū)組織開(kāi)發(fā)和維護(hù)。一種是庫(kù)的代碼,如O

13、penCV、PCL等;庫(kù)的上一層是從功能角度提供的代碼,如人臉識(shí)別,他們調(diào)用下層的庫(kù);最上層的代碼是應(yīng)用級(jí)的代碼,讓機(jī)器人完成某一確定的功能。一般是從另一個(gè)角度對(duì)ROS分級(jí)的,主要分為三個(gè)級(jí)別:計(jì)算圖級(jí)、文件系統(tǒng)級(jí)、社區(qū)級(jí)。二、 計(jì)算圖級(jí)計(jì)算圖是ROS處理數(shù)據(jù)的一種點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)形式。程序運(yùn)行時(shí),所有進(jìn)程以及他們所進(jìn)行的數(shù)據(jù)處理,將會(huì)通過(guò)一種點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)形式表現(xiàn)出來(lái)。這一級(jí)主要包括幾個(gè)重要概念:節(jié)點(diǎn)(node)、消息(message)、主題(topic)、服務(wù)(service)。(1) 節(jié)點(diǎn)節(jié)點(diǎn)就是一些直行運(yùn)算任務(wù)的進(jìn)程。ROS利用規(guī)??稍鲩L(zhǎng)的方式是代碼模塊化:一個(gè)系統(tǒng)就是典型的由很多節(jié)點(diǎn)組成的

14、。在這里,節(jié)點(diǎn)也可以被稱之為“軟件模塊”。我們使用“節(jié)點(diǎn)”使得基于ROS的系統(tǒng)在運(yùn)行的時(shí)候更加形象化:當(dāng)許多節(jié)點(diǎn)同時(shí)運(yùn)行時(shí),可以很方便的將端對(duì)端的通訊繪制成一個(gè)圖表,在這個(gè)圖表中,進(jìn)程就是圖中的節(jié)點(diǎn),而端對(duì)端的連接關(guān)系就是其中弧線連接。(2) 消息節(jié)點(diǎn)之間是通過(guò)傳送消息進(jìn)行通訊的。每一個(gè)消息都是一個(gè)嚴(yán)格的數(shù)據(jù)結(jié)構(gòu)。原來(lái)標(biāo)準(zhǔn)的數(shù)據(jù)類型(整型,浮點(diǎn)型,布爾型等等)都是支持的,同時(shí)也支持原始數(shù)組類型。消息可以包含任意的嵌套結(jié)構(gòu)和數(shù)組(很類似于C語(yǔ)言的結(jié)構(gòu)structs)。(3) 主題消息以一種發(fā)布/訂閱的方式傳遞。一個(gè)節(jié)點(diǎn)可以在一個(gè)給定的主題中發(fā)布消息。一個(gè)節(jié)點(diǎn)針對(duì)某個(gè)主題關(guān)注與訂閱特定類型的數(shù)據(jù)。

15、可能同時(shí)有多個(gè)節(jié)點(diǎn)發(fā)布或者訂閱同一個(gè)主題的消息??傮w上,發(fā)布者和訂閱者不了解彼此的存在。(4) 服務(wù)雖然基于話題的發(fā)布/訂閱模型是很靈活的通訊模式,但是它廣播式的路徑規(guī)劃對(duì)于可以簡(jiǎn)化節(jié)點(diǎn)設(shè)計(jì)的同步傳輸模式并不適合。在ROS中,我們稱之為一個(gè)服務(wù),用一個(gè)字符串和一對(duì)嚴(yán)格規(guī)范的消息定義:一個(gè)用于請(qǐng)求,一個(gè)用于回應(yīng)。這類似于web服務(wù)器,web服務(wù)器是由URIs定義的,同時(shí)帶有完整定義類型的請(qǐng)求和回復(fù)文檔。需要注意的是,不像話題,只有一個(gè)節(jié)點(diǎn)可以以任意獨(dú)有的名字廣播一個(gè)服務(wù):只有一個(gè)服務(wù)可以稱之為“分類象征”,比如說(shuō),任意一個(gè)給出的URI地址只能有一個(gè)web服務(wù)器。在上面概念的基礎(chǔ)上,需要有一個(gè)控制

16、器可以使所有節(jié)點(diǎn)有條不紊的執(zhí)行,這就是一個(gè)ROS的控制器(ROS Master)。ROS Master 通過(guò)RPC(Remote Procedure Call Protocol,遠(yuǎn)程過(guò)程調(diào)用)提供了登記列表和對(duì)其他計(jì)算圖表的查找。沒(méi)有控制器,節(jié)點(diǎn)將無(wú)法找到其他節(jié)點(diǎn),交換消息或調(diào)用服務(wù)。比如控制節(jié)點(diǎn)訂閱和發(fā)布消息的模型如下:ROS的控制器給ROS的節(jié)點(diǎn)存儲(chǔ)了主題和服務(wù)的注冊(cè)信息。節(jié)點(diǎn)與控制器通信從而報(bào)告它們的注冊(cè)信息。當(dāng)這些節(jié)點(diǎn)與控制器通信的時(shí)候,它們可以接收關(guān)于其他以注冊(cè)及節(jié)點(diǎn)的信息并且建立與其它以注冊(cè)節(jié)點(diǎn)之間的聯(lián)系。當(dāng)這些注冊(cè)信息改變時(shí)控制器也會(huì)回饋這些節(jié)點(diǎn),同時(shí)允許節(jié)點(diǎn)動(dòng)態(tài)創(chuàng)建與新節(jié)點(diǎn)之間

17、的連接。節(jié)點(diǎn)與節(jié)點(diǎn)之間的連接是直接的,控制器僅僅提供了查詢信息,就像一個(gè)DNS服務(wù)器。節(jié)點(diǎn)訂閱一個(gè)主題將會(huì)要求建立一個(gè)與出版該主題的節(jié)點(diǎn)的連接,并且將會(huì)在同意連接協(xié)議的基礎(chǔ)上建立該連接。另:ROS控制器控制服務(wù):三、 文件系統(tǒng)級(jí)ROS文件系統(tǒng)級(jí)指的是在硬盤上面查看的ROS源代碼的組織形式。ROS中有無(wú)數(shù)的節(jié)點(diǎn)、消息、服務(wù)、工具和庫(kù)文件,需要有效的結(jié)構(gòu)去管理這些代碼。在ROS的文件系統(tǒng)級(jí),有以下幾個(gè)重要概念:包(package)、堆(stack)、(1) 包ROS的軟件以包的方式組織起來(lái)。包包含節(jié)點(diǎn)、ROS依賴庫(kù)、數(shù)據(jù)套、配置文件、第三方軟件、或者任何其他邏輯構(gòu)成。包的目標(biāo)是提供一種易于使用的結(jié)

18、構(gòu)以便于軟件的重復(fù)使用??偟脕?lái)說(shuō),ROS的包短小精干。(2) 堆堆是包的集合,它提供一個(gè)完整的功能,像“navigation stack”。Stack與版本號(hào)關(guān)聯(lián),同時(shí)也是如何發(fā)行ROS軟件方式的關(guān)鍵ROS是一種分布式處理框架。這使可執(zhí)行文件能被單獨(dú)設(shè)計(jì),并且在運(yùn)行時(shí)松散耦合。這些過(guò)程可以封裝到包(Packages)和堆(Stacks)中,以便于共享和分發(fā)。下圖是在包和堆在文件中的具體結(jié)構(gòu):Manifests (manifest.xml):提供關(guān)于Package元數(shù)據(jù),包括它的許可信息和Package之間依賴關(guān)系,以及語(yǔ)言特性信息像編譯旗幟(編譯優(yōu)化參數(shù))。Stack manifests (s

19、tack.xml):提供關(guān)于Stack元數(shù)據(jù),包括它的許可信息和Stack之間依賴關(guān)系。四、 社區(qū)級(jí)ROS的社區(qū)級(jí)概念是ROS網(wǎng)絡(luò)上進(jìn)行代碼發(fā)布的一種表現(xiàn)形式。結(jié)構(gòu)如下圖所示:代碼庫(kù)的聯(lián)合系統(tǒng)。使得協(xié)作亦能被分發(fā)。這種從文件系統(tǒng)級(jí)別到社區(qū)一級(jí)的設(shè)計(jì)讓獨(dú)立地發(fā)展和實(shí)施工作成為可能。正是因?yàn)檫@種分布式的結(jié)構(gòu),似的ROS迅速發(fā)展,軟件倉(cāng)庫(kù)中包的數(shù)量指數(shù)級(jí)增加。操作系統(tǒng)探索總結(jié)(三)ROS新手教程前面我們介紹了ROS的特點(diǎn)和結(jié)構(gòu),接下來(lái)就要開(kāi)始準(zhǔn)備動(dòng)手感受一下ROS的強(qiáng)大了。ROS官網(wǎng)的wiki上針對(duì)新手的教程很詳細(xì),最好把所有的新手教程都搞清楚,這是后面開(kāi)發(fā)最基礎(chǔ)的東西。盡管如此,ROS對(duì)于新手來(lái)說(shuō)

20、還是很難上手,這里,我就來(lái)總結(jié)一下我當(dāng)時(shí)學(xué)習(xí)的歷程,也為其他新手作為一個(gè)參考。一、ROS的安裝ROS的安裝當(dāng)然是我們開(kāi)始動(dòng)手的第一步了,這里我們使用的操作系統(tǒng)是ubuntu,因?yàn)镽OS在ubuntu上的支持是最好的。如果是新手,我建議使用”apt-get“的方法進(jìn)行安裝,不走很簡(jiǎn)單,按照wiki上說(shuō)的,大概半個(gè)小時(shí)就可以安裝完畢完全版的ROS:(現(xiàn)在最新版的ROS是groovy,但是我還是習(xí)慣使用fuerte)/wiki/fuerte/Installation/Ubuntu如果想挑戰(zhàn)源碼編譯,當(dāng)然也沒(méi)有問(wèn)題:/wiki/fuerte/Inst

21、allation/Ubuntu/Source安裝完畢之后運(yùn)行一下“roscore”,如果沒(méi)有問(wèn)題,安裝就成功了!注:groovy版本的安裝:“apt-get”:/wiki/groovy/Installation/Ubuntu源碼編譯:/wiki/groovy/Installation/Source二、ROS的新手教程wiki上的新手教程還是很詳細(xì)的,對(duì)代碼都有解釋,新手一定要把這些例子和代碼搞明白:/wiki/ROS/Tutorials上面的教程都是英文的,如果感覺(jué)略有壓力(本人就是),可以參

22、考下面這兩個(gè)博客中的部分翻譯:/s/articlelist_0_1.html不過(guò)往后面的學(xué)習(xí)都是英文的資料了,還是要努力適應(yīng)看英文的文檔。ROS使用的編程語(yǔ)言主要是C+和python,所以也有針對(duì)這兩種語(yǔ)言的功能包roscpp和rospy,這兩個(gè)包的教程與上面的教程基本相似,看完上面的教程也可以看看這兩個(gè)包的教程:/wiki/rospy_tutorials/wiki/roscpp/Tutorials努力學(xué)習(xí)完上面的這些教程,你至少應(yīng)該明白R(shí)OS里面的節(jié)點(diǎn)和消息是干什么用的了吧,如果還

23、沒(méi)理解,那就再多看幾遍吧!三、ROS中的常用功能ROS中提供了很多強(qiáng)大的功能,我們學(xué)習(xí)完上面的基本知識(shí)之后要繼續(xù)進(jìn)行深入。1、rvizrviz是ROS中一款強(qiáng)大的3D可視化工具,這個(gè)玩意在后面可是要頻繁用到的,是必須要弄明白的,詳細(xì)的教程可以參考wiki:/wiki/rviz我們可以在里面創(chuàng)建自己的機(jī)器人,并且讓機(jī)器人動(dòng)起來(lái)。還可以創(chuàng)建地圖,顯示3D點(diǎn)云等等,總之,想在ROS中顯示的東東都可以在這里顯示出來(lái)。當(dāng)然這些顯示都是通過(guò)消息的訂閱來(lái)完成的,機(jī)器人通過(guò)ROS發(fā)布數(shù)據(jù),rviz訂閱消息接收數(shù)據(jù),然后顯示,這些數(shù)據(jù)也是有一定的數(shù)據(jù)格式的,可以參考下面的鏈接:

24、/wiki/rviz/DisplayTypes看到上面的機(jī)器人了吧,是不是很酷,在rviz中,這樣的機(jī)器人模型是通過(guò)urdf文件描述的,具體urdf文件怎么寫,參考wiki:/wiki/urdf2、tftf是ROS中的坐標(biāo)變換系統(tǒng),在機(jī)器人的建模仿真中經(jīng)常用到。ROS中主要有兩種坐標(biāo)系:(1)固定坐標(biāo)系:用于表示世界的參考坐標(biāo)系;(2)目標(biāo)坐標(biāo)系:相對(duì)于攝像機(jī)視角的參考坐標(biāo)系。教程見(jiàn):/wiki/tf3、gazebo這個(gè)工具是ROS中的物理仿真環(huán)境,gazebo本身就是一款機(jī)器人的仿真軟件,基

25、于ODE的物理引擎,可以模擬機(jī)器人以及環(huán)境中的很多物理特性,這個(gè)軟件可以稍作了解,并不是后面開(kāi)發(fā)所必須要的。教程見(jiàn):/wiki/simulator_gazebo/Tutorials四、ROS常用機(jī)器人1、PR2看ROS的應(yīng)用時(shí),最常見(jiàn)到的機(jī)器人就是PR2。這個(gè)機(jī)器人是ROS的主要維護(hù)者(Willow Garage)針對(duì)ROS量身定做的機(jī)器人,有兩個(gè)運(yùn)行ubuntu和ROS的電腦,和兩個(gè)機(jī)器臂以及很多牛逼的傳感器,功能是非常強(qiáng)大的,但是售價(jià)那是相當(dāng)?shù)陌嘿F,國(guó)內(nèi)很少見(jiàn)到,基本都是在國(guó)外的研究所里。這款機(jī)器人的ROS包比較多,從仿真到導(dǎo)航,所以代碼具有比較高的參考價(jià)

26、值,當(dāng)然新手還是先看看其他機(jī)器人的代碼再來(lái)挑戰(zhàn)PR2吧,代碼比較龐雜。wiki:/wiki/Robots/PR22、TurtleBot這個(gè)機(jī)器人應(yīng)該算是應(yīng)用ROS小型移動(dòng)機(jī)器人的典型代表了,資料、文檔和代碼比較多,主要在建立模型和導(dǎo)航定位方面,代碼比較容易理解,可以作為新手參考的最佳機(jī)器人了,上面rviz中顯示的那個(gè)機(jī)器人就是它了。wiki:/wiki/Robots/TurtleBot3、Husky、Erratic這兩款機(jī)器人和TurtleBot機(jī)器人差不多,都是小型的輪式移動(dòng)機(jī)器人,同樣可以作為新手學(xué)習(xí)的參考:http:/w

27、/wiki/Robots/Husky/wiki/Robots/Erratic這些教程和機(jī)器人基本都是我當(dāng)時(shí)學(xué)習(xí)的時(shí)候研究和了解過(guò)的,總結(jié)在此也讓那些比較迷茫的初學(xué)者作為參考,可以盡快了解和掌握ROS。再次強(qiáng)調(diào)一下,wiki上的新手教程是一定要先熟悉的,后面的內(nèi)容在后續(xù)學(xué)習(xí)過(guò)程中可以一邊做一邊學(xué)習(xí)。操作系統(tǒng)探索總結(jié)(四)簡(jiǎn)單的機(jī)器人仿真前邊我們已經(jīng)介紹了ROS的基本情況,以及新手入門ROS的初級(jí)教程,現(xiàn)在就要真正的使用ROS進(jìn)入機(jī)器人世界了。接下來(lái)我們涉及到的很多例程都是ROS by Example這本書的內(nèi)容,我是和群里的幾個(gè)人一起從國(guó)外的

28、亞馬遜上買到的,還是很有參考價(jià)值的,不過(guò)前提是你已經(jīng)熟悉之前的新手教程了。一、ROS by Example這本書是關(guān)于國(guó)外關(guān)于ROS出版的第一本書,主要針對(duì)Electric和Fuerte版本,使用機(jī)器人主要是TurtleBot。書中詳細(xì)講解了關(guān)于機(jī)器人的基本仿真、導(dǎo)航、路徑規(guī)劃、圖像處理、語(yǔ)音識(shí)別等等,而且在google的svn上發(fā)布了所有代碼,可以通過(guò)以下命令下載、編譯:svn checkout /svn/trunk/rbx_vol_1rosmake rbx_vol_1rospack profile /加入ROS pack

29、age路徑svn checkout /svn/trunk/rbx_vol_1rosmake rbx_vol_1rospack profile /加入ROS package路徑二、rviz簡(jiǎn)單機(jī)器人模擬1、安裝機(jī)器人模擬器rviz是一個(gè)顯示機(jī)器人實(shí)體的工具,本身不具有模擬的功能,需要安裝一個(gè)模擬器arbotix。svn checkout /svn/trunk/arbotixrosmake arbotixsvn checkout http:/vanadiu

30、/svn/trunk/arbotixrosmake arbotix2、TurtleBot機(jī)器人的模擬在書中的rbx_vol_1包里已經(jīng)為我們寫好了模擬的代碼,我們先進(jìn)行實(shí)驗(yàn),完成后再仔細(xì)研究代碼。機(jī)器人模擬運(yùn)行:roscoreroslaunch rbx1_bringup fake_pi_robot.launchroscoreroslaunch rbx1_bringup fake_pi_robot.launch然后在終端中可以看到,機(jī)器人已經(jīng)開(kāi)始運(yùn)行了,打開(kāi)rviz界面,才能看到機(jī)器人實(shí)體。rosrun rviz rviz -d rospack f

31、ind rbx1_nav/sim_fuerte.vcgrosrun rviz rviz -d rospack find rbx1_nav/sim_fuerte.vcg后面的參數(shù)是加載了rviz的配置文件sim_fuerte.vcg。效果如下:此時(shí)的機(jī)器人是靜止的,需要發(fā)布一個(gè)消息才能讓它動(dòng)起來(lái)。rostopic pub -r 10 /cmd_vel geometry_msgs/Twist linear: x: 0.2, y: 0, z: 0, angular: x: 0, y: 0, z: 0.5rostopic pub -r 10 /cmd_vel geometry_msgs/Twist l

32、inear: x: 0.2, y: 0, z: 0, angular: x: 0, y: 0, z: 0.5如果要讓機(jī)器人停下來(lái),需要在中斷中按下“Ctrl+c”,然后輸入:rostopic pub -1 /cmd_vel geometry_msgs/Twist rostopic pub -1 /cmd_vel geometry_msgs/Twist 也可以改變發(fā)送的topic信息,使機(jī)器人走出不同的軌跡。三、實(shí)現(xiàn)分析按照上面的仿真過(guò)程,我們?cè)敿?xì)分析每一步的代碼實(shí)現(xiàn)。1、TurtleBot機(jī)器人運(yùn)行機(jī)器人運(yùn)行使用的是launch文件,首先打開(kāi)fake_turtlebot.launch文件。文件

33、可以大概分為四個(gè)部分:(1) 從指定的包中加載urdf文件(2) 啟動(dòng)arbotix模擬器(3) 啟動(dòng)狀態(tài)發(fā)布節(jié)點(diǎn)(4) tf坐標(biāo)系配置2、rviz配置文件在打開(kāi)rviz的時(shí)候需要加載一個(gè).vcg的配置文件,主要對(duì)rviz中的插件選項(xiàng)進(jìn)行默認(rèn)的配置。這里打開(kāi)的是sim_fuerte.vcg文件,由于文件比較長(zhǎng),這里只列舉重點(diǎn)的部分。Background ColorB=0.12549Background ColorG=0.12549Background ColorR=0.12549Camera Config=158.108 0. 0. -1.57034Camera Type=rviz:Fixed

34、OrientationOrthoViewControllerFixed Frame=/odomGrid.Alpha=0.5Grid.Cell Size=0.5Grid.ColorB=0.Grid.ColorG=0.Grid.ColorR=0.Grid.Enabled=1Grid.Line Style=0Grid.Line Width=0.03Grid.Normal Cell Count=0Grid.OffsetX=0Grid.OffsetY=0Grid.OffsetZ=0Grid.Plane=0Background ColorB=0.12549Background ColorG=0.12549

35、Background ColorR=0.12549Camera Config=158.108 0. 0. -1.57034Camera Type=rviz:FixedOrientationOrthoViewControllerFixed Frame=/odomGrid.Alpha=0.5Grid.Cell Size=0.5Grid.ColorB=0.Grid.ColorG=0.Grid.ColorR=0.Grid.Enabled=1Grid.Line Style=0Grid.Line Width=0.03Grid.Normal Cell Count=0Grid.OffsetX=0Grid.Of

36、fsetY=0Grid.OffsetZ=0Grid.Plane=0上面的代碼是配置背景顏色和網(wǎng)格屬性的,對(duì)應(yīng)rviz中的選項(xiàng)如下圖所示。其中比較重要的一個(gè)選項(xiàng)是Camera的type,這個(gè)選項(xiàng)是控制開(kāi)發(fā)者的觀察角度的,書中用的是FixedOrientationOrthoViewController的方式,就是上面圖中的俯視角度,無(wú)法看到機(jī)器人的三維全景,所以可以改為OrbitViewController方式,如下圖所示:3、發(fā)布topic要讓機(jī)器人動(dòng)起來(lái),還需要給他一些運(yùn)動(dòng)需要的信息,這些信息都是通過(guò)topic的方式發(fā)布的。這里的topic就是速度命令,針對(duì)這個(gè)topic,我們需要發(fā)布速度的信

37、息,在ROS中已經(jīng)為我們寫好了一些可用的數(shù)據(jù)結(jié)構(gòu),這里用的是Twist信息的數(shù)據(jù)結(jié)構(gòu)。在終端中可以看到Twist的結(jié)構(gòu)如下:用下面的命令進(jìn)行消息的發(fā)布,其中主要包括力的大小和方向。Background ColorB=0.12549Background ColorG=0.12549Background ColorR=0.12549Camera Config=158.108 0. 0. -1.57034Camera Type=rviz:FixedOrientationOrthoViewControllerFixed Frame=/odomGrid.Alpha=0.5Grid.Cell Size=0

38、.5Grid.ColorB=0.Grid.ColorG=0.Grid.ColorR=0.Grid.Enabled=1Grid.Line Style=0Grid.Line Width=0.03Grid.Normal Cell Count=0Grid.OffsetX=0Grid.OffsetY=0Grid.OffsetZ=0Grid.Plane=0Background ColorB=0.12549Background ColorG=0.12549Background ColorR=0.12549Camera Config=158.108 0. 0. -1.57034Camera Type=rviz

39、:FixedOrientationOrthoViewControllerFixed Frame=/odomGrid.Alpha=0.5Grid.Cell Size=0.5Grid.ColorB=0.Grid.ColorG=0.Grid.ColorR=0.Grid.Enabled=1Grid.Line Style=0Grid.Line Width=0.03Grid.Normal Cell Count=0Grid.OffsetX=0Grid.OffsetY=0Grid.OffsetZ=0Grid.Plane=04、節(jié)點(diǎn)關(guān)系圖操作系統(tǒng)探索總結(jié)(五)創(chuàng)建簡(jiǎn)單的機(jī)器人模型smartcar 前面我們使用的是已有的機(jī)器人模型進(jìn)行仿真,這一節(jié)我們將建立一個(gè)簡(jiǎn)單的智能車機(jī)器人smartcar,為后面建立復(fù)雜機(jī)器人打下基礎(chǔ)。 一、創(chuàng)建硬件描述包 01.roscreat-pkg smartcar_description urdf 二、智能車尺寸數(shù)據(jù) 因?yàn)?/p>

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論