機器人操作系統ROS(一)-初識

大家好,接下來一段時間,在學習機器學習算法的同時,我也將逐步學習機器人操作系統ROS (Robot Operating System),最終將二者應用于實踐。本篇文章主要是初步介紹ROS的基本知識以及安裝等內容。

一、ROS簡介

ROS是啥?

ROS是一個適用于機器人的開源的元操作系統,如圖1所示。它提供類似操作系統所提供的功能,包括硬件抽象、底層設備控制、常用函數的實現、進程間消息傳遞以及包管理。它也提供用于獲取、編譯、編寫、跨計算機運行代碼所需的工具和庫函數。它主要采用的是松耦合點對點進程網絡,目前主要支持的還是Ubuntu系統,Mac OS X支持等。

圖1

如圖1所示:計算機的操作系統將計算機硬件封裝起來,而應用軟件運行在操作系統之上,不用管計算機具體應用的是什么類型的硬件產品;同理,ROS對機器人的硬件進行了封裝,不同的機器人、不同的傳感器,在ROS里可以用相同的方式表示(topic等),供上層應用程序(運動規劃)調用等。

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

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

為啥選ROS?(這個內容請參考Top Liu的博文:機器人程序設計之如何正確入門ROS

首先,目前機器人開發,軟件開發的比重越來越大,而軟件開發的時候軟件框架的選擇,是軟件架構設計中一個重要的決策,直接決定了軟件開發的直接效率,以及后續功能的實現程度。目前除了ROS,還有很多類似的機器人軟件框架,包括Player、YARP、Orocos、CARMEN、Orca、MOOS,以及Microsoft Robotics Studio。

為什么使用ROS呢?ROS有四大優點:1、松散耦合的機制方便機器人軟件框架的組織;2、最豐富的機器人功能庫,方便快速搭建原型;3、非常便利的數據記錄、分析、仿真工具,方便調試;4、學界和產業界的標準,方便學習和交流。 使用一句話總結,使用ROS,能夠方便迅速地搭建好機器人原型。當然,它的性能不是最優的,但是這四條優點足以保障它在機器人操作系統里面的地位。

另外:1、ROS使用了BSD許可證,這是一個非常寬松的開放許可證,允許在商業和閉源產品使用,這對于開發產品的創業公司是比較重要的一點;2、ROS是最龐大的使用者群體,是事實上的機器人標準,這是麻省理工在一篇文章中給出的評論。然后在2016年ROS大會數據顯示,目前在使用操作系統做開發的人員用戶超過35萬,其中活躍用戶美國占第一位,中國占第二位;3、在學術研究領域,基本上機器人算法都會給出ROS版本的源程序。最早在2009年ROS發布的“ROS: an open source Robot Operating System” 論文,目前已經被引用了2871次;4、企業界:目前已經有很多機器人公司采用了ROS系統來開發一些應用于全新市場的產品,如ClearPath、Rethink、Unbounded、Neurala、Blue River、Big-i,最典型的就是Willow Garage的PR2機器人。投資機構也對創業公司給予了極大的支持,僅2015年相關風險投資機構就在基于ROS操作系統的機器人公司投資了超過1.5億美元。Nvidia、博世、高通、英特爾、寶馬以及大 疆等大公司也紛紛推出ROS接口。

ROS主要特點:

1)點對點設計

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

圖2

2)多語言支持

ROS現在支持許多種不同的語言,例如C++、Python、Octave和LISP,也包含其他語言的多種接口實現。

3)精簡與集成

ROS建立的系統具有模塊化的特點,各模塊中的代碼 可以單獨編譯,而且編譯使用的CMake工具使它很容易的就實現精簡的理念。ROS基本將復雜的代碼封裝在庫里 ,只是創建了一些小的應用程序為ROS顯示庫的功能,就允許了對簡單的代碼超越原型進行移植和重新使用。 作為一種新加入的有優勢,單元測試當代碼在庫中分散后也變得非常的容易,一個單獨的測試程序可以測試庫 中很多的特點。ROS利用了很多現在已經存在的開源項目的代碼,比如說從Player項目中借鑒了驅動、運動 控制和仿真方面的代碼,從OpenCV中借鑒了視覺算法方面的代碼,從OpenRAVE借鑒了規劃算法的內容,還有很 多其他的項目。在每一個實例中,ROS都用來顯示多種多樣的配置選項以及和各軟件之間進行數據通信,也同 時對它們進行微小的包裝和改動。ROS可以不斷的從社區維護中進行升級,包括從其他的軟件庫、應用補丁中 升級ROS的源代碼。

4)具有豐富的工具包,且免費開源。

如何學習ROS?

要想學ROS,應該從哪里入手,它的先后順序是怎樣的呢?ROS由四大部分構成,第一個是基礎結構,這些通訊機制是如何實現的;第二個是工具,包括仿真工具、調試工具等;第三個是體現它功能的package;第四個就是社區,如何去上面下載、發布代碼,和其他開發者交流學習。

ROS-設計思想:分布式架構

設計思想主要是分布式架構,將機器人的功能和軟件,做成一個個節點,然后每個節點通過topic進行溝通,但你這些節點可以部署在同一臺機器上,也可以部署在不同機器上,還可以部署在互聯網上。

ROS-核心概念

ROS核心概念如下:

1)Nodes->節點

節點是各自獨立的可執行文件,能夠通過話題、服務或參數,與服務器或其他進程(節點)通信。ROS通過使用節點的方式將代碼和功能解耦,提高了系統容錯能力和可維護性,使系統簡化。同時,節點允許了ROS系統能夠布置在任意多個機器上并同時運行。關于節點需要注意的事項,節點在系統中必須有唯一的名稱;節點可以使用不同的庫進行編寫,如roscpp和rospy,其中roscpp基于C++,rospy基于Python。

2)Messages and Topics->消息與話題(或主題)

節點之間通過topic機制進行通信,topic機制是一個一對多的Publish/Subscribe 模式: 同一個話題也可以有很多個訂閱者,它的底層傳輸依靠的是TCP/IP,也可以是UDP。topic具體傳輸的message,具有一定的類型和數據結構,包括ROS提供的標準類型,和用戶自定義類型。

3)Services and Parameters->服務與參數

除了topic,ROS還提供另一種一對一的機制,也就是Service/Client,當你需要直接與節點通信并獲得應答時,將無法通過話題實現,這時需要使用該服務。

4)ROS Master->ROS管理器

Master向ROS系統中其他節點提供命名和注冊服務,跟蹤和記錄話題的發布者和訂閱者,使ROS 節點之間能夠相互查找。一旦節點找到了彼此,就能建立一種點對點的通信方式。

5)Stacks and packages->堆棧與功能包

那么如何組織代碼呢?這主要依靠功能包(Package) ,ROS中軟件組織的基本形式,用于創建ROS程序。功能包包含源代碼和功能包清單(Manifest) 。功能包清單提供關于功能包、許可信息、依賴關系、編譯標志等的信息。功能包清單是一個manifests.xml文件,通過這個文件能夠實現對功能包的管理。

ROS-核心模塊

ROS核心模塊包括通信結構基礎、機器人特性功能以及工具集。通信結構基礎包括消息傳遞、記錄和回放消息、遠程過程調用、分布式參數系統;機器人特性功能包括標準機器人消息,機器人幾何庫,機器人描述語言,搶占式遠程過程調用,診斷,位置估計、定位與導航;工具集包括命令式工具、可視化工具以及圖形化接口。詳情見圖3

圖3

ROS-核心工具

ROS擁有很多第三方的核心工具的支持,或者說Package。比較常見的是這五個工具:Gazebo是一個三維仿真環境;OpenCV是計算機視覺庫,PCL是點云庫,MoveIt!是機械臂的規劃控制庫,Industrial是工業上會用的庫。另外MRPT,是一個非常好的機器人編程工具箱。然后,如果對實時控制要求比較高的話,可以考慮The Orocos Project。

ROS常用命令工具包括rostopic (Topics)、rosservice (Services)、rosnode (Nodes)、rosparam (Parameters)、rosmsg (Messages)、rossrv (Services)和roswtf (General debugging)。

ROS用的最多的可視化工具是rqt(集成圖像交互界面)和 rviz(3D 可視化工具)。

ROS具有非常強的數據存儲/回放功能,也就是使用bag存儲topic(例如現實中的傳感器數據),以后調用bag的topic數據則不必每次都在現實中運行機器人,速度非??臁?/p>

ROS log系統記錄軟件運行相關信息,便于以后的調試。

仿真環境由易到難主要有這三個:Turtlesim、ArbotiX、Gazebo。Turtlesim是一個QT開發的2D軌跡顯示界面,只能顯示運動軌跡;ArbotiX是含有一個差速驅動機器人的rviz模擬器,機器人運動及topic數據的3D顯示,但不包含物理學引擎;Gazebo是功能齊全的3D物理模擬器,不過缺點是非常重,對內存和顯卡要求高,慎入

ROS-版本選擇

目前,ROS是一年推出一個版本。通過下載統計,我們發現現在使用最多的還是Indigo,所以對于初學者,建議還是使用這個版本,因為這是目前使用人數最多、坑最少的版本。而如果Linux編程能力比較強的,可以使用Kinetic,它可以一直支持到2021年。然后,你在選擇Ubuntu版本時,要與ROS版本需匹配。引用原文一個圖表示:

圖4

另外,ROS的IDE以及Linux,直接貼TOP Liu的原圖,見圖5-6:

圖5
圖6

對于大眾學習者、普通開發者、機器人算法開發者,在2017年仍推薦使用ROS。對于軟件架構的學習者、強調實時性的開發者,建議關注ROS2.0 。另外,我在知乎上對于這個問題也有詳細的回答,有興趣的可以去ROS和ROS2.0現在到底該學習哪個呢?

最后,擺放一些個ROS常用網站:ROS學習中文網站,ROS Indigo入門系列博客、TOP Liu大神也提到,可以根據ROS學習中文網站上的tutorials入門,主要是學習初級教程。剩下的就是各種實戰。

開啟ROS學習進程!加油

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,106評論 2 375

推薦閱讀更多精彩內容