當前位置:首頁 > 科技 > 正文

ROS探索總結(一)~(六)(轉)

(一)——ROS簡介 一、曆史

随着機器人領域的快速發展和複雜化,代碼的複用性和模塊化的需求原來越強烈,而已有的開源機器人系統又不能很好的适應需求。2010年Willow Garage公司發布了開源機器人操作系統ROS(robot operating system),很快在機器人研究領域展開了學習和使用ROS的熱潮。


ROS系統是起源于2007年斯坦福大學人工智能實驗室的項目與機器人技術公司Willow Garage的個人機器人項目(Personal Robots Program)之間的合作,2008年之後就由Willow Garage來進行推動。已經有四年多的時間了 (視頻)。随着PR2那些不可思議的表現,譬如疊衣服,插插座,做早飯,ROS也得到越來越多的關注。Willow Garage公司也表示希望借助開源的力量使PR2變成“全能”機器人。

PR2價格高昂,2011年零售價高達40萬美元。PR2現主要用于研究。PR2有兩條手臂,每條手臂七個關節,手臂末端是一個可以張合的鉗子。PR2依靠底部的四個輪子移動。在PR2的頭部,胸部,肘部,鉗子上安裝有高分辨率攝像頭,激光測距儀,慣性測量單元,觸覺傳感器等豐富的傳感設備。在PR2的底部有兩台8核的電腦作為機器人各硬件的控制和通訊中樞。兩台電腦安裝有Ubuntu和ROS。

二、設計目标

ROS是開源的,是用于機器人的一種後操作系統,或者說次級操作系統。它提供類似操作系統所提供的功能,包含硬件抽象描述、底層驅動程序管理、共用功能的執行、程序間的消息傳遞、程序發行包管理,它也提供一些工具程序和庫用于獲取、建立、編寫和運行多機整合的程序。

ROS的首要設計目标是在機器人研發領域提高代碼複用率。ROS是一種分布式處理框架(又名Nodes)。這使可執行文件能被單獨設計,并且在運行時松散耦合。這些過程可以封裝到數據包(Packages)和堆棧(Stacks)中,以便于共享和分發。ROS還支持代碼庫的聯合系統。使得協作亦能被分發。這種從文件系統級别到社區一級的設計讓獨立地決定發展和實施工作成為可能。上述所有功能都能由ROS的基礎工具實現。

三、主要特點

ROS的運行架構是一種使用ROS通信模塊實現模塊間P2P的松耦合的網絡連接的處理架構,它執行若幹種類型的通訊,包括基于服務的同步RPC(遠程過程調用)通訊、基于Topic的異步數據流通訊,還有參數服務器上的數據存儲。但是ROS本身并沒有實時性。

ROS的主要特點可以歸納為以下幾條:

(1)點對點設計


一個使用ROS的系統包括一系列進程,這些進程存在于多個不同的主機并且在運行過程中通過端對端的拓撲結構進行聯系。雖然基于中心服務器的那些軟件框架也可以實現多進程和多主機的優勢,但是在這些框架中,當各電腦通過不同的網絡進行連接時,中心數據服務器就會發生問題。
ROS的點對點設計以及服務和節點管理器等機制可以分散由計算機視覺和語音識别等功能帶來的實時計算壓力,能夠适應多機器人遇到的挑戰。

(2)多語言支持

在寫代碼的時候,許多編程者會比較偏向某一些編程語言。這些偏好是個人在每種語言的編程時間、調試效果、語法、執行效率以及各種技術和文化的原因導緻的結果。為了解決這些問題,我們将ROS設計成了語言中立性的框架結構。ROS現在支持許多種不同的語言,例如C++、Python、Octave和LISP,也包含其他語言的多種接口實現。


ROS的特殊性主要體現在消息通訊層,而不是更深的層次。端對端的連接和配置利用XML-RPC機制進行實現,XML-RPC也包含了大多數主要語言的合理實現描述。我們希望ROS能夠利用各種語言實現的更加自然,更符合各種語言的語法約定,而不是基于C語言給各種其他語言提供實現接口。然而,在某些情況下利用已經存在的庫封裝後支持更多新的語言是很方便的,比如Octave的客戶端就是通過C++的封裝庫進行實現的。
為了支持交叉語言,ROS利用了簡單的、語言無關的接口定義語言去描述模塊之間的消息傳送。接口定義語言使用了簡短的文本去描述每條消息的結構,也允許消息的合成,例如下圖就是利用接口定義語言描述的一個點的消息:


每種語言的代碼産生器就會産生類似本種語言目标文件,在消息傳遞和接收的過程中通過ROS自動連續并行的實現。這就節省了重要的編程時間,也避免了錯誤:之前3行的接口定義文件自動的擴展成137行的C++代碼,96行的Python代碼,81行的Lisp代碼和99行的Octave代碼。因為消息是從各種簡單的文本文件中自動生成的,所以很容易列舉出新的消息類型。在編寫的時候,已知的基于ROS的代碼庫包含超過四百種消息類型,這些消息從傳感器傳送數據,使得物體檢測到了周圍的環境。 最後的結果就是一種語言無關的消息處理,讓多種語言可以自由的混合和匹配使用。 (3)精簡與集成 大多數已經存在的機器人軟件工程都包含了可以在工程外重複使用的驅動和算法,不幸的是,由于多方面的原因,大部分代碼的中間層都過于混亂,以至于很困難提取出它的功能,也很難把它們從原型中提取出來應用到其他方面。
為了應對這種趨勢,我們鼓勵将所有的驅動和算法逐漸發展成為和ROS沒有依賴性單獨的庫。ROS建立的系統具有模塊化的特點,各模塊中的代碼可以單獨編譯,而且編譯使用的CMake工具使它很容易的就實現精簡的理念。ROS基本将複雜的代碼封裝在庫裡,隻是創建了一些小的應用程序為ROS顯示庫的功能,就允許了對簡單的代碼超越原型進行移植和重新使用。作為一種新加入的有優勢,單元測試當代碼在庫中分散後也變得非常的容易,一個單獨的測試程序可以測試庫中很多的特點。
ROS利用了很多現在已經存在的開源項目的代碼,比如說從Player項目中借鑒了驅動、運動控制和仿真方面的代碼,從OpenCV中借鑒了視覺算法方面的代碼,從OpenRAVE借鑒了規劃算法的内容,還有很多其他的項目。在每一個實例中,ROS都用來顯示多種多樣的配置選項以及和各軟件之間進行數據通信,也同時對它們進行微小的包裝和改動。ROS可以不斷的從社區維護中進行升級,包括從其他的軟件庫、應用補丁中升級ROS的源代碼。
(4)工具包豐富 為了管理複雜的ROS軟件框架,我們利用了大量的小工具去編譯和運行多種多樣的ROS組建,從而設計成了内核,而不是構建一個龐大的開發和運行環境。 這些工具擔任了各種各樣的任務,例如,組織源代碼的結構,獲取和設置配置參數,形象化端對端的拓撲連接,測量頻帶使用寬度,生動的描繪信息數據,自動生成文檔等等。盡管我們已經測試通過像全局時鐘和控制器模塊的記錄器的核心服務,但是我們還是希望能把所有的代碼模塊化。我們相信在效率上的損失遠遠是穩定性和管理的複雜性上無法彌補的。
(5)免費并且開源 ROS所有的源代碼都是公開發布的。我們相信這将必定促進ROS軟件各層次的調試,不斷的改正錯誤。雖然像Microsoft Robotics Studio和Webots這樣的非開源軟件也有很多值得贊美的屬性,但是我們認為一個開源的平台也是無可為替代的。當硬件和各層次的軟件同時設計和調試的時候這一點是尤其真實的。 ROS以分布式的關系遵循這BSD許可,也就是說允許各種商業和非商業的工程進行開發。ROS通過内部處理的通訊系統進行數據的傳遞,不要求各模塊在同樣的可執行功能上連接在一起。如此,利用ROS構建的系統可以很好的使用他們豐富的組件:個别的模塊可以包含被各種協議保護的軟件,這些協議從GPL到BSD,但是許可的一些“污染物”将在模塊的分解上就完全消滅掉。

參考資料: (1)《開源機器人操作系統——ROS》 張建偉等著 (2)《an open-source Robot Operating System》 paper (3) willowgarage公司網站:http://www.willowgarage.com/
(4) ROS官方wiki:http://www.ros.org

(二)——ROS總體框架 一、 總體結構 根據ROS系統代碼的維護者和分布來标示,主要有兩大部分: (1)main:核心部分,主要由Willow Garage公司和一些開發者設計、提供以及維護。它提供了一些分布式計算的基本工具,以及整個ROS的核心部分的程序編寫。 (2)universe:全球範圍的代碼,有不同國家的ROS社區組織開發和維護。一種是庫的代碼,如OpenCV、PCL等;庫的上一層是從功能角度提供的代碼,如人臉識别,他們調用下層的庫;最上層的代碼是應用級的代碼,讓機器人完成某一确定的功能。 一般是從另一個角度對ROS分級的,主要分為三個級别:計算圖級、文件系統級、社區級。
二、 計算圖級 計算圖是ROS處理數據的一種點對點的網絡形式。程序運行時,所有進程以及他們所進行的數據處理,将會通過一種點對點的網絡形式表現出來。這一級主要包括幾個重要概念:節點(node)、消息(message)、主題(topic)、服務(service)。
(1) 節點 節點就是一些直行運算任務的進程。ROS利用規模可增長的方式是代碼模塊化:一個系統就是典型的由很多節點組成的。在這裡,節點也可以被稱之為“軟件模塊”。我們使用“節點”使得基于ROS的系統在運行的時候更加形象化:當許多節點同時運行時,可以很方便的将端對端的通訊繪制成一個圖表,在這個圖表中,進程就是圖中的節點,而端對端的連接關系就是其中弧線連接。 (2) 消息 節點之間是通過傳送消息進行通訊的。每一個消息都是一個嚴格的數據結構。原來标準的數據類型(整型,浮點型,布爾型等等)都是支持的,同時也支持原始數組類型。消息可以包含任意的嵌套結構和數組(很類似于C語言的結構structs)。
(3) 主題
消息以一種發布/訂閱的方式傳遞。一個節點可以在一個給定的主題中發布消息。一個節點針對某個主題關注與訂閱特定類型的數據。可能同時有多個節點發布或者訂閱同一個主題的消息。總體上,發布者和訂閱者不了解彼此的存在。 (4) 服務 雖然基于話題的發布/訂閱模型是很靈活的通訊模式,但是它廣播式的路徑規劃對于可以簡化節點設計的同步傳輸模式并不适合。在ROS中,我們稱之為一個服務,用一個字符串和一對嚴格規範的消息定義:一個用于請求,一個用于回應。這類似于web服務器,web服務器是由URIs定義的,同時帶有完整定義類型的請求和回複文檔。需要注意的是,不像話題,隻有一個節點可以以任意獨有的名字廣播一個服務:隻有一個服務可以稱之為“分類象征”,比如說,任意一個給出的URI地址隻能有一個web服務器。
在上面概念的基礎上,需要有一個控制器可以使所有節點有條不紊的執行,這就是一個ROS的控制器(ROS Master)。 ROS Master 通過RPC(Remote Procedure Call Protocol,遠程過程調用)提供了登記列表和對其他計算圖表的查找。沒有控制器,節點将無法找到其他節點,交換消息或調用服務。
比如控制節點訂閱和發布消息的模型如下:
ROS的控制器給ROS的節點存儲了主題和服務的注冊信息。節點與控制器通信從而報告它們的注冊信息。當這些節點與控制器通信的時候,它們可以接收關于其他以注冊及節點的信息并且建立與其它以注冊節點之間的聯系。當這些注冊信息改變時控制器也會回饋這些節點,同時允許節點動态創建與新節點之間的連接。
節點與節點之間的連接是直接的,控制器僅僅提供了查詢信息,就像一個DNS服務器。節點訂閱一個主題将會要求建立一個與出版該主題的節點的連接,并且将會在同意連接協議的基礎上建立該連接。 另:ROS控制器控制服務:

三、 文件系統級 ROS文件系統級指的是在硬盤上面查看的ROS源代碼的組織形式。
ROS中有無數的節點、消息、服務、工具和庫文件,需要有效的結構去管理這些代碼。在ROS的文件系統級,有以下幾個重要概念:包(package)、堆(stack)、 (1) 包
ROS的軟件以包的方式組織起來。包包含節點、ROS依賴庫、數據套、配置文件、第三方軟件、或者任何其他邏輯構成。包的目标是提供一種易于使用的結構以便于軟件的重複使用。總得來說,ROS的包短小精幹。 (2) 堆
堆是包的集合,它提供一個完整的功能,像“navigation stack”。Stack與版本号關聯,同時也是如何發行ROS軟件方式的關鍵。
ROS是一種分布式處理框架。這使可執行文件能被單獨設計,并且在運行時松散耦合。這些過程可以封裝到包(Packages)和堆(Stacks)中,以便于共享和分發。下圖是在包和堆在文件中的具體結構: Manifests (manifest.xml):提供關于Package元數據,包括它的許可信息和Package之間依賴關系,以及語言特性信息像編譯旗幟(編譯優化參數)。
Stack manifests (stack.xml):提供關于Stack元數據,包括它的許可信息和Stack之間依賴關系。
四、 社區級 ROS的社區級概念是ROS網絡上進行代碼發布的一種表現形式。結構如下圖所示:
代碼庫的聯合系統。使得協作亦能被分發。這種從文件系統級别到社區一級的設計讓獨立地發展和實施工作成為可能。正是因為這種分布式的結構,似的ROS迅速發展,軟件倉庫中包的數量指數級增加。

參考資料: (1)《開源機器人操作系統——ROS》 張建偉等著 (2)《an open-source Robot Operating System》 paper (3) willowgarage公司網站:http://www.willowgarage.com/
(4) ROS官方wiki:http://www.ros.org

(三)——ROS新手教程 前面我們介紹了ROS的特點和結構,接下來就要開始準備動手感受一下ROS的強大了。ROS官網的wiki上針對新手的教程很詳細,最好把所有的新手教程都搞清楚,這是後面開發最基礎的東西。盡管如此,ROS對于新手來說還是很難上手,這裡,我就來總結一下我當時學習的曆程,也為其他新手作為一個參考。 一、ROS的安裝
ROS的安裝當然是我們開始動手的第一步了,這裡我們使用的操作系統是ubuntu,因為ROS在ubuntu上的支持是最好的。 如果是新手,我建議使用”apt-get“的方法進行安裝,不走很簡單,按照wiki上說的,大概半個小時就可以安裝完畢完全版的ROS:(現在最新版的ROS是groovy,但是我還是習慣使用fuerte)

如果想挑戰源碼編譯,當然也沒有問題:

安裝完畢之後運行一下“roscore”,如果沒有問題,安裝就成功了!
注:groovy版本的安裝: “apt-get”: 源碼編譯:
二、ROS的新手教程
wiki上的新手教程還是很詳細的,對代碼都有解釋,新手一定要把這些例子和代碼搞明白:

上面的教程都是英文的,如果感覺略有壓力(本人就是),可以參考下面這兩個博客中的部分翻譯:

不過往後面的學習都是英文的資料了,還是要努力适應看英文的文檔。 ROS使用的編程語言主要是C++和python,所以也有針對這兩種語言的功能包roscpp和rospy,這兩個包的教程與上面的教程基本相似,看完上面的教程也可以看看這兩個包的教程:


努力學習完上面的這些教程,你至少應該明白ROS裡面的節點和消息是幹什麼用的了吧,如果還沒理解,那就再多看幾遍吧!
三、ROS中的常用功能 ROS中提供了很多強大的功能,我們學習完上面的基本知識之後要繼續進行深入。 1、rviz rviz是ROS中一款強大的3D可視化工具,這個玩意在後面可是要頻繁用到的,是必須要弄明白的, 詳細的教程可以參考wiki: 我們可以在裡面創建自己的機器人,并且讓機器人動起來。還可以創建地圖,顯示3D點雲等等,總之,想在ROS中顯示的東東都可以在這裡顯示出來。當然這些顯示都是通過消息的訂閱來完成的,機器人通過ROS發布數據,rviz訂閱消息接收數據,然後顯示,這些數據也是有一定的數據格式的,可以參考下面的鍊接:

看到上面的機器人了吧,是不是很酷,在rviz中,這樣的機器人模型是通過urdf文件描述的,具體urdf文件怎麼寫,參考wiki:

2、tf tf是ROS中的坐标變換系統,在機器人的建模仿真中經常用到。
ROS中主要有兩種坐标系: (1)固定坐标系: 用于表示世界的參考坐标系; (2)目标坐标系:相對于攝像機視角的參考坐标系。 教程見: 3、gazebo 這個工具是ROS中的物理仿真環境,gazebo本身就是一款機器人的仿真軟件,基于ODE的物理引擎,可以模拟機器人以及環境中的很多物理特性,這個軟件可以稍作了解,并不是後面開發所必須要的。 教程見:
四、ROS常用機器人 1、PR2
看ROS的應用時,最常見到的機器人就是PR2。這個機器人是ROS的主要維護者(Willow Garage)針對ROS量身定做的機器人,有兩個運行ubuntu和ROS的電腦,和兩個機器臂以及很多牛逼的傳感器,功能是非常強大的,但是售價那是相當的昂貴,國内很少見到,基本都是在國外的研究所裡。這款機器人的ROS包比較多,從仿真到導航,所以代碼具有比較高的參考價值,當然新手還是先看看其他機器人的代碼再來挑戰PR2吧,代碼比較龐雜。 wiki:
2、TurtleBot
這個機器人應該算是應用ROS小型移動機器人的典型代表了,資料、文檔和代碼比較多,主要在建立模型和導航定位方面,代碼比較容易理解,可以作為新手參考的最佳機器人了,上面rviz中顯示的那個機器人就是它了。 wiki: 3、Husky、Erratic 這兩款機器人和TurtleBot機器人差不多,都是小型的輪式移動機器人,同樣可以作為新手學習的參考:


這些教程和機器人基本都是我當時學習的時候研究和了解過的,總結在此也讓那些比較迷茫的初學者作為參考,可以盡快了解和掌握ROS。再次強調一下,wiki上的新手教程是一定要先熟悉的,後面的内容在後續學習過程中可以一邊做一邊學習。
(四)——簡單的機器人仿真 前邊我們已經介紹了ROS的基本情況,以及新手入門ROS的初級教程,現在就要真正的使用ROS進入機器人世界了。接下來我們涉及到的很多例程都是《ROS by Example》這本書的内容,我是和群裡的幾個人一起從國外的亞馬遜上買到的,還是很有參考價值的,不過前提是你已經熟悉之前的新手教程了。 一、ROS by Example
這本書是關于國外關于ROS出版的第一本書,主要針對Electric和Fuerte版本,使用機器人主要是TurtleBot。書中詳細講解了關于機器人的基本仿真、導航、路徑規劃、圖像處理、語音識别等等,而且在google的svn上發布了所有代碼,可以通過以下命令下載、編譯: svn checkout http: //ros-by-example.googlecode.com/svn/trunk/rbx_vol_1 rosmake rbx_vol_1 rospack profile //加入ROS package路徑

二、rviz簡單機器人模拟 1、安裝機器人模拟器 rviz是一個顯示機器人實體的工具,本身不具有模拟的功能,需要安裝一個模拟器arbotix。 svn checkout http:/ /vanadium-ros-pkg.googlecode.com/svn /trunk/arbotix rosmake arbotix
2、TurtleBot機器人的模拟 在書中的rbx_vol_1包裡已經為我們寫好了模拟的代碼,我們先進行實驗,完成後再仔細研究代碼。
機器人模拟運行: roscore roslaunch rbx1_bringup fake_pi_robot .launch
然後在終端中可以看到,機器人已經開始運行了,打開rviz界面,才能看到機器人實體。 rosrun rviz rviz -d `rospack find rbx1_nav`/sim_fuerte.vcg
後面的參數是加載了rviz的配置文件sim_fuerte.vcg。效果如下:
此時的機器人是靜止的,需要發布一個消息才能讓它動起來。 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 -1 /cmd_vel geometry_msgs/Twist '{}'
也可以改變發送的topic信息,使機器人走出不同的軌迹。
三、實現分析 按照上面的仿真過程,我們詳細分析每一步的代碼實現。 1、TurtleBot機器人運行 機器人運行使用的是launch文件,首先打開fake_turtlebot.launch文件。
文件可以大概分為四個部分:
(1) 從指定的包中加載urdf文件
(2) 啟動arbotix模拟器
(3) 啟動狀态發布節點
(4) tf坐标系配置
2、rviz配置文件 在打開rviz的時候需要加載一個.vcg的配置文件,主要對rviz中的插件選項進行默認的配置。這裡打開的是sim_fuerte.vcg文件,由于文件比較長,這裡隻列舉重點的部分。 Background\ ColorB= 0.12549 Background\ ColorG= 0.12549 Background\ ColorR= 0.12549 Camera\ Config= 158.108 0.814789 0.619682 - 1.57034 Camera\ Type=rviz::FixedOrientationOrthoViewController Fixed\ Frame=/odom Grid.Alpha= 0.5 Grid.Cell\ Size= 0.5 Grid.ColorB= 0.941176 Grid.ColorG= 0.941176 Grid.ColorR= 0.941176 Grid.Enabled= 1 Grid.Line\ Style= 0 Grid.Line\ Width= 0.03 Grid.Normal\ Cell\ Count= 0 Grid.OffsetX= 0 Grid.OffsetY= 0 Grid.OffsetZ= 0 Grid.Plane= 0


上面的代碼是配置背景顔色和網格屬性的,對應rviz中的選項如下圖所示。 其中比較重要的一個選項是Camera的type,這個選項是控制開發者的觀察角度的,書中用的是FixedOrientationOrthoViewController的方式,就是上面圖中的俯視角度,無法看到機器人的三維全景,所以可以改為OrbitViewController方式,如下圖所示:

3、發布topic 要讓機器人動起來,還需要給他一些運動需要的信息,這些信息都是通過topic的方式發布的。
這裡的topic就是速度命令,針對這個topic,我們需要發布速度的信息,在ROS中已經為我們寫好了一些可用的數據結構,這裡用的是Twist信息的數據結構。在終端中可以看到Twist的結構如下:
用下面的命令進行消息的發布,其中主要包括力的大小和方向。 Background\ ColorB= 0.12549 Background\ ColorG= 0.12549 Background\ ColorR= 0.12549 Camera\ Config= 158.108 0.814789 0.619682 - 1.57034 Camera\ Type=rviz::FixedOrientationOrthoViewController Fixed\ Frame=/odom Grid.Alpha= 0.5 Grid.Cell\ Size= 0.5 Grid.ColorB= 0.941176 Grid.ColorG= 0.941176 Grid.ColorR= 0.941176 Grid.Enabled= 1 Grid.Line\ Style= 0 Grid.Line\ Width= 0.03 Grid.Normal\ Cell\ Count= 0 Grid.OffsetX= 0 Grid.OffsetY= 0 Grid.OffsetZ= 0 Grid.Plane= 0


4、節點關系圖
(五)——創建簡單的機器人模型smartcar 前面我們使用的是已有的機器人模型進行仿真,這一節我們将建立一個簡單的智能車機器人smartcar,為後面建立複雜機器人打下基礎。 一、創建硬件描述包 roscreat-pkg smartcar_description urdf

二、智能車尺寸數據 因為建立的是一個非常簡單的機器人,所以我們盡量使用簡單的元素:使用長方體代替車模,使用圓柱代替車輪,具體尺寸如下:
三、建立urdf文件 在smartcar_description文件夾下建立urdf文件夾,創建智能車的描述文件smartcar.urdf,描述代碼如下:
四、建立launch命令文件 在smartcar_description文件夾下建立launch文件夾,創建智能車的描述文件 base.urdf.rviz.launch,描述代碼如下:
五、效果演示 在終端中輸入顯示命令: roslaunch smartcar_description base.urdf.rviz.launch gui:=true

顯示效果如下圖所示,使用gui中的控制bar可以控制四個輪子單獨旋轉。


(六)——使用smartcar進行仿真 之前的博客中,我們使用rviz進行了TurtleBot的仿真,而且使用urdf文件建立了自己的機器人smartcar,本篇博客是将兩者進行結合,使用smartcar機器人在rviz中進行仿真。 一、模型完善 之前我們使用的都是urdf文件格式的模型,在很多情況下,ROS對urdf文件的支持并不是很好,使用宏定義的.xacro文件兼容性更好,擴展性也更好。所以我們把之前的urdf文件重新整理編寫成.xacro文件。
.xacro文件主要分為三部分:
1、機器人主體
2、gazebo屬性部分 Gazebo/Blue Gazebo/FlatBlack Gazebo/FlatBlack Gazebo/FlatBlack Gazebo/FlatBlack Gazebo/White
3、主文件


二、lanuch文件 在launch文件中要啟動節點和模拟器。
三、仿真測試 首先運行lanuch,既可以看到rviz中的機器人:
roslaunch smartcar_description smartcar_display.rviz.launch
發布一條動作的消息。 rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.5, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'
四、節點關系

你可能想看:

有話要說...

取消
掃碼支持 支付碼