ROS機器人操作系統(tǒng)_第1頁
ROS機器人操作系統(tǒng)_第2頁
ROS機器人操作系統(tǒng)_第3頁
ROS機器人操作系統(tǒng)_第4頁
ROS機器人操作系統(tǒng)_第5頁
已閱讀5頁,還剩104頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

15、個web服務(wù)器。在上面概念的基礎(chǔ)上,需要有一個控制器可以使所有節(jié)點有條不紊的執(zhí)行,這就是一個ROS的控制器(ROS Master)。ROS Master 通過RPC(Remote Procedure Call Protocol,遠程過程調(diào)用)提供了登記列表和對其他計算圖表的查找。沒有控制器,節(jié)點將無法找到其他節(jié)點,交換消息或調(diào)用服務(wù)。比如控制節(jié)點訂閱和發(fā)布消息的模型如下:ROS的控制器給ROS的節(jié)點存儲了主題和服務(wù)的注冊信息。節(jié)點與控制器通信從而報告它們的注冊信息。當(dāng)這些節(jié)點與控制器通信的時候,它們可以接收關(guān)于其他以注冊及節(jié)點的信息并且建立與其它以注冊節(jié)點之間的聯(lián)系。當(dāng)這些注冊信息改變時控制器

16、也會回饋這些節(jié)點,同時允許節(jié)點動態(tài)創(chuàng)建與新節(jié)點之間的連接。節(jié)點與節(jié)點之間的連接是直接的,控制器僅僅提供了查詢信息,就像一個DNS服務(wù)器。節(jié)點訂閱一個主題將會要求建立一個與出版該主題的節(jié)點的連接,并且將會在同意連接協(xié)議的基礎(chǔ)上建立該連接。另:ROS控制器控制服務(wù):三、 文件系統(tǒng)級ROS文件系統(tǒng)級指的是在硬盤上面查看的ROS源代碼的組織形式。ROS中有無數(shù)的節(jié)點、消息、服務(wù)、工具和庫文件,需要有效的結(jié)構(gòu)去管理這些代碼。在ROS的文件系統(tǒng)級,有以下幾個重要概念:包(package)、堆(stack)、(1) 包ROS的軟件以包的方式組織起來。包包含節(jié)點、ROS依賴庫、數(shù)據(jù)套、配置文件、第三方軟件、或

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

18、編譯優(yōu)化參數(shù))。Stack manifests (stack.xml):提供關(guān)于Stack元數(shù)據(jù),包括它的許可信息和Stack之間依賴關(guān)系。四、 社區(qū)級ROS的社區(qū)級概念是ROS網(wǎng)絡(luò)上進行代碼發(fā)布的一種表現(xiàn)形式。結(jié)構(gòu)如下圖所示:代碼庫的聯(lián)合系統(tǒng)。使得協(xié)作亦能被分發(fā)。這種從文件系統(tǒng)級別到社區(qū)一級的設(shè)計讓獨立地發(fā)展和實施工作成為可能。正是因為這種分布式的結(jié)構(gòu),似的ROS迅速發(fā)展,軟件倉庫中包的數(shù)量指數(shù)級增加。ROS(Robot Operating System)操作系統(tǒng)探索總結(jié)(三)ROS新手教程前面我們介紹了ROS的特點和結(jié)構(gòu),接下來就要開始準備動手感受一下ROS的強大了。ROS官網(wǎng)的wiki上

19、針對新手的教程很詳細,最好把所有的新手教程都搞清楚,這是后面開發(fā)最基礎(chǔ)的東西。盡管如此,ROS對于新手來說還是很難上手,這里,我就來總結(jié)一下我當(dāng)時學(xué)習(xí)的歷程,也為其他新手作為一個參考。一、ROS的安裝ROS的安裝當(dāng)然是我們開始動手的第一步了,這里我們使用的操作系統(tǒng)是ubuntu,因為ROS在ubuntu上的支持是最好的。如果是新手,我建議使用”apt-get“的方法進行安裝,不走很簡單,按照wiki上說的,大概半個小時就可以安裝完畢完全版的ROS:(現(xiàn)在最新版的ROS是groovy,但是我還是習(xí)慣使用fuerte)/wiki/fuerte/Installation/U

20、buntu如果想挑戰(zhàn)源碼編譯,當(dāng)然也沒有問題:/wiki/fuerte/Installation/Ubuntu/Source安裝完畢之后運行一下“roscore”,如果沒有問題,安裝就成功了!注:groovy版本的安裝:“apt-get”:/wiki/groovy/Installation/Ubuntu源碼編譯:/wiki/groovy/Installation/Source二、ROS的新手教程wiki上的新手教程還是很詳細的,對代碼都有解釋,新手一定要把這些例子和代碼搞明白:http:/www.ro

21、/wiki/ROS/Tutorials上面的教程都是英文的,如果感覺略有壓力(本人就是),可以參考下面這兩個博客中的部分翻譯:不過往后面的學(xué)習(xí)都是英文的資料了,還是要努力適應(yīng)看英文的文檔。ROS使用的編程語言主要是C+和python,所以也有針對這兩種語言的功能包roscpp和rospy,這兩個包的教程與上面的教程基本相似,看完上面的教程也可以看看這兩個包的教程:/wiki/rospy_tutorials/wiki/roscpp/Tutorials努力學(xué)習(xí)完上面的這些教程,你至少應(yīng)該明白ROS里面的節(jié)點和消息是干什么

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

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

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

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

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

27、OS by Example這本書的內(nèi)容,我是和群里的幾個人一起從國外的亞馬遜上買到的,還是很有參考價值的,不過前提是你已經(jīng)熟悉之前的新手教程了。一、ROS by Example這本書是關(guān)于國外關(guān)于ROS出版的第一本書,主要針對Electric和Fuerte版本,使用機器人主要是TurtleBot。書中詳細講解了關(guān)于機器人的基本仿真、導(dǎo)航、路徑規(guī)劃、圖像處理、語音識別等等,而且在google的svn上發(fā)布了所有代碼,可以通過以下命令下載、編譯:svn checkout http:/ros-by-rosmake rbx_vol_1rospack profile /加入ROS package路徑sv

28、n checkout http:/ros-by-rosmake rbx_vol_1rospack profile /加入ROS package路徑二、rviz簡單機器人模擬1、安裝機器人模擬器rviz是一個顯示機器人實體的工具,本身不具有模擬的功能,需要安裝一個模擬器arbotix。svn checkout http:/vanadium-ros-rosmake arbotixsvn checkout http:/vanadium-ros-rosmake arbotix2、TurtleBot機器人的模擬在書中的rbx_vol_1包里已經(jīng)為我們寫好了模擬的代碼,我們先進行實驗,完成后再仔細研究代碼

29、。機器人模擬運行:roscoreroslaunch rbx1_bringup fake_pi_robot.launchroscoreroslaunch rbx1_bringup fake_pi_robot.launch然后在終端中可以看到,機器人已經(jīng)開始運行了,打開rviz界面,才能看到機器人實體。rosrun rviz rviz -d rospack find rbx1_nav/sim_fuerte.vcgrosrun rviz rviz -d rospack find rbx1_nav/sim_fuerte.vcg后面的參數(shù)是加載了rviz的配置文件sim_fuerte.vcg。效果如下:

30、此時的機器人是靜止的,需要發(fā)布一個消息才能讓它動起來。rostopic pub -r 10 /cmd_vel geometry_msgs/Twist 'linear: x: 0.2, y: 0, z: 0, angular: x: 0, y: 0, z: 0.5'rostopic pub -r 10 /cmd_vel geometry_msgs/Twist 'linear: x: 0.2, y: 0, z: 0, angular: x: 0, y: 0, z: 0.5'如果要讓機器人停下來,需要在中斷中按下“Ctrl+c”,然后輸入:rostopic pub -

31、1 /cmd_vel geometry_msgs/Twist ''rostopic pub -1 /cmd_vel geometry_msgs/Twist ''也可以改變發(fā)送的topic信息,使機器人走出不同的軌跡。三、實現(xiàn)分析按照上面的仿真過程,我們詳細分析每一步的代碼實現(xiàn)。1、TurtleBot機器人運行機器人運行使用的是launch文件,首先打開fake_turtlebot.launch文件。文件可以大概分為四個部分:(1) 從指定的包中加載urdf文件(2) 啟動arbotix模擬器(3) 啟動狀態(tài)發(fā)布節(jié)點(4) tf坐標系配置2、rviz配置文件在打開

32、rviz的時候需要加載一個.vcg的配置文件,主要對rviz中的插件選項進行默認的配置。這里打開的是sim_fuerte.vcg文件,由于文件比較長,這里只列舉重點的部分。Background ColorB=0.12549Background ColorG=0.12549Background ColorR=0.12549Camera Config=158.108 0.814789 0.619682 -1.57034Camera Type=rviz:FixedOrientationOrthoViewControllerFixed Frame=/odomGrid.Alpha=0.5Grid.Cel

33、l Size=0.5Grid.ColorB=0.941176Grid.ColorG=0.941176Grid.ColorR=0.941176Grid.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.81

34、4789 0.619682 -1.57034Camera Type=rviz:FixedOrientationOrthoViewControllerFixed Frame=/odomGrid.Alpha=0.5Grid.Cell Size=0.5Grid.ColorB=0.941176Grid.ColorG=0.941176Grid.ColorR=0.941176Grid.Enabled=1Grid.Line Style=0Grid.Line Width=0.03Grid.Normal Cell Count=0Grid.OffsetX=0Grid.OffsetY=0Grid.OffsetZ=0

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

36、據(jù)結(jié)構(gòu),這里用的是Twist信息的數(shù)據(jù)結(jié)構(gòu)。在終端中可以看到Twist的結(jié)構(gòu)如下:用下面的命令進行消息的發(fā)布,其中主要包括力的大小和方向。Background ColorB=0.12549Background ColorG=0.12549Background ColorR=0.12549Camera Config=158.108 0.814789 0.619682 -1.57034Camera Type=rviz:FixedOrientationOrthoViewControllerFixed Frame=/odomGrid.Alpha=0.5Grid.Cell Size=0.5Grid.Co

37、lorB=0.941176Grid.ColorG=0.941176Grid.ColorR=0.941176Grid.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.814789 0.619682 -1.

38、57034Camera Type=rviz:FixedOrientationOrthoViewControllerFixed Frame=/odomGrid.Alpha=0.5Grid.Cell Size=0.5Grid.ColorB=0.941176Grid.ColorG=0.941176Grid.ColorR=0.941176Grid.Enabled=1Grid.Line Style=0Grid.Line Width=0.03Grid.Normal Cell Count=0Grid.OffsetX=0Grid.OffsetY=0Grid.OffsetZ=0Grid.Plane=04、節(jié)點關(guān)

39、系圖ROS(Robot Operating System)操作系統(tǒng)探索總結(jié)(五)創(chuàng)建簡單的機器人模型smartcar前面我們使用的是已有的機器人模型進行仿真,這一節(jié)我們將建立一個簡單的智能車機器人smartcar,為后面建立復(fù)雜機器人打下基礎(chǔ)。   一、創(chuàng)建硬件描述包   01.roscreat-pkg  smartcar_description  urdf   二、智能車尺寸數(shù)據(jù)   因為建立的是一個非常簡單的機器人,所以我們盡量使用簡單的元素:使用長方體代替車模,使用圓柱代替車輪,具體尺寸如

40、下:三、建立urdf文件 在smartcar_description文件夾下建立urdf文件夾,創(chuàng)建智能車的描述文件smartcar.urdf,描述代碼如下:    01.<?xml version="1.0"?>    02.<robot name="smartcar">    03.  <link name="base_link">    04.  

41、;  <visual>    05.      <geometry>    06.        <box size="0.25 .16 .05"/>    07.    </geometry>    08.    <

42、;origin rpy="0 0 1.57075" xyz="0 0 0"/>    09.    <material name="blue">    10.        <color rgba="0 0 .8 1"/>    11.    </material

43、>    12.    </visual>    13. </link>    14.    15. <link name="right_front_wheel">    16.    <visual>    17.      <

44、geometry>    18.        <cylinder length=".02" radius="0.025"/>    19.      </geometry>    20.      <material name="black"

45、>    21.        <color rgba="0 0 0 1"/>    22.      </material>    23.    </visual>    24.  </link>    25.&#

46、160;   26.  <joint name="right_front_wheel_joint" type="continuous">    27.    <axis xyz="0 0 1"/>    28.    <parent link="base_link"/>    29. 

47、0;  <child link="right_front_wheel"/>    30.    <origin rpy="0 1.57075 0" xyz="0.08 0.1 -0.03"/>    31.    <limit effort="100" velocity="100"/>    32.&#

48、160;   <joint_properties damping="0.0" friction="0.0"/>    33.  </joint>    34.    35.  <link name="right_back_wheel">    36.    <visual>  &#

49、160; 37.      <geometry>    38.        <cylinder length=".02" radius="0.025"/>    39.      </geometry>    40.    

50、;  <material name="black">    41.        <color rgba="0 0 0 1"/>    42.      </material>    43.    </visual>    44.&

51、#160; </link>    45.    46.  <joint name="right_back_wheel_joint" type="continuous">    47.    <axis xyz="0 0 1"/>    48.    <parent link="base_link&

52、quot;/>    49.    <child link="right_back_wheel"/>    50.    <origin rpy="0 1.57075 0" xyz="0.08 -0.1 -0.03"/>    51.    <limit effort="100" velocity=&q

53、uot;100"/>    52.    <joint_properties damping="0.0" friction="0.0"/>    53. </joint>    54.    55. <link name="left_front_wheel">    56.   

54、; <visual>    57.      <geometry>    58.        <cylinder length=".02" radius="0.025"/>    59.      </geometry>  

55、60; 60.      <material name="black">    61.        <color rgba="0 0 0 1"/>    62.      </material>    63.    </vis

56、ual>    64.  </link>    65.    66.  <joint name="left_front_wheel_joint" type="continuous">    67.    <axis xyz="0 0 1"/>    68.    &l

57、t;parent link="base_link"/>    69.    <child link="left_front_wheel"/>    70.    <origin rpy="0 1.57075 0" xyz="-0.08 0.1 -0.03"/>    71.    <limit effo

58、rt="100" velocity="100"/>    72.    <joint_properties damping="0.0" friction="0.0"/>    73.  </joint>    74.    75.  <link name="left_back_wheel"&g

59、t;    76.    <visual>    77.      <geometry>    78.        <cylinder length=".02" radius="0.025"/>    79.   

60、0;  </geometry>    80.      <material name="black">    81.        <color rgba="0 0 0 1"/>    82.      </material> &#

61、160;  83.    </visual>    84.  </link>    85.    86.  <joint name="left_back_wheel_joint" type="continuous">    87.    <axis xyz="0 0 1"/>

62、60;   88.    <parent link="base_link"/>    89.    <child link="left_back_wheel"/>    90.    <origin rpy="0 1.57075 0" xyz="-0.08 -0.1 -0.03"/>  

63、60; 91.    <limit effort="100" velocity="100"/>    92.    <joint_properties damping="0.0" friction="0.0"/>    93.  </joint>    94.    95.  <

64、;link name="head">    96.    <visual>    97.      <geometry>    98.        <box size=".02 .03 .03"/>    99.   

65、;   </geometry>    100.      <material name="white">    101.          <color rgba="1 1 1 1"/>    102.      </

66、material>    103.    </visual>    104.  </link>    105.    106.  <joint name="tobox" type="fixed">    107.    <parent link="base_link&qu

67、ot;/>    108.    <child link="head"/>    109.    <origin xyz="0 0.08 0.025"/>    110.  </joint>    111.</robot>四、建立launch命令文件    在smartcar_desc

68、ription文件夾下建立launch文件夾,創(chuàng)建智能車的描述文件 base.urdf.rviz.launch,描述代碼如下:    01.<launch>    02.    <arg name="model" />    03.    <arg name="gui" default="False" />    04.&

69、#160;   <param name="robot_description" textfile="$(find smartcar_description)/urdf/smartcar.urdf" />    05.    <param name="use_gui" value="$(arg gui)"/>    06.    <node name

70、="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>    07.    <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" /> 

71、   08.    <node name="rviz" pkg="rviz" type="rviz" args="-d $(find urdf_tutorial)/urdf.vcg" />    09.</launch>    五、效果演示    在終端中輸入顯示命令:    01.roslaunch  smart

72、car_description  base.urdf.rviz.launch  gui:=true    顯示效果如下圖所示,使用gui中的控制bar可以控制四個輪子單獨旋轉(zhuǎn)。ROS(Robot Operating System)操作系統(tǒng)探索總結(jié)(六)使用smartcar進行仿真之前的博客中,我們使用rviz進行了TurtleBot的仿真,而且使用urdf文件建立了自己的機器人smartcar,本篇博客是將兩者進行結(jié)合,使用smartcar機器人在rviz中進行仿真。一、模型完善之前我們使用的都是urdf文件格式的模型,在很多情況下,ROS對u

73、rdf文件的支持并不是很好,使用宏定義的.xacro文件兼容性更好,擴展性也更好。所以我們把之前的urdf文件重新整理編寫成.xacro文件。.xacro文件主要分為三部分:1、機器人主體    01.<?xml version="1.0"?>    02.<robot name="smartcar" xmlns:xacro="/wiki/xacro">    03.  <prop

74、erty name="M_PI" value="3.14159"/>    04.    05.  <!- Macro for SmartCar body. Including Gazebo extensions, but does not include Kinect ->    06.  <include filename="$(find smartcar_description)/urdf/gazebo.u

75、rdf.xacro"/>    07.    08.  <property name="base_x" value="0.33" />    09.  <property name="base_y" value="0.33" />    10.    11.  <xacro:macro nam

76、e="smartcar_body">    12.    13.    14.    <link name="base_link">    15.    <inertial>    16.      <origin xyz="0 0 0.055"

77、;/>    17.      <mass value="1.0" />    18.      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>  

78、0; 19.    </inertial>    20.    <visual>    21.      <geometry>    22.        <box size="0.25 .16 .05"/>    23.      </geometry>    24.      <origin rpy="0 0 0" xyz="0 0 0.055"/>    25.&

溫馨提示

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

評論

0/150

提交評論