機器人程序設計——之如何正確入門ROS | 硬創公開課(附視頻/PPT)【轉】

轉自:http://blog.exbot.net/archives/2966html

導語:本期公開課面向想入手ROS卻又不知從何下手的小夥伴,爲你們梳理好學習思路。

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

ROS和Android同樣是開源的,功能上也是相差無幾,它能夠提供硬件抽象,底層設備控制,經常使用功能實現,進程間消息以及數據包管理。其獨特之處在於,可以支持多種語言,如C++、Python、Octave和LISP,甚至支持多種語言混合使用,這能夠簡化開發者的工做。由於它是基於Linux的系統,其可靠性也會更高,體積能夠作到更小,適合嵌入式設備。node

另外,ROS是一種分佈式處理框架,開發者能夠單獨設計可執行文件。不一樣節點的進程能接收、發佈各類信息(例如傳感,控制,狀態,規劃等等)。python

Top博士自2009年第一次接觸到ROS後,便認識到其在機器人開發中的重要性,並竭盡全力在國內進行推廣。然而隨着ROS近年來火熱,在教學中也發現不少新夥伴對ROS的認識存在一些誤區,爲了加快小夥伴們的學習速度,雷鋒網本期公開課雷鋒網邀請Top和你們分享一點本身學習和使用的經驗和心得。算法

雷鋒網本期公開課面向想入手ROS卻又不知從何下手的小夥伴,爲你們梳理好學習思路。內容包括但不限於ROS全球使用現狀、核心概念、工做原理等學習重點,及仿真環境、工具庫等需瞭解的內容。介紹了具體的學習路徑及有用的資源連接。編程

嘉賓介紹:服務器

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

Top Liu,易科機器人實驗室、(星火計劃)ROS公開課聯合發起人,致力於機器人技術的探索與分享,撰寫各種技術文章近百篇,出版有《ROS機器人程序設計2》、《機器人編程實戰》、《嵌入式機器人學》、《機器人與將來》。網絡

如下內容整理自Top Liu在硬創公開課的分享。數據結構

公開課視頻:

115期:機器人程序設計之如何正確入門ROS | 硬創公開課 - 騰訊視頻架構

PPT連接:

百度文庫-信息提示app

當前你們學習ROS仍是以自學爲主,因此會走不少的彎路,目前所謂的大神們也都是這樣過來的。基本上早期開發機器人你們都是各幹各的,甚至是防着彼此,生怕別人把咱們的代碼、設計抄襲過去,這樣其實你們就是在重複地造輪子,進行一些底層的無聊工做。

我最先接觸ROS是2009年在翻譯《嵌入式機器人學》這本書,做者托馬斯·布勞恩教授當時開發了一套RoBIOS的機器人操做系統,按照他的說法,這是最先的機器人操做系統,並且是能夠嵌入式應用的。當時和他溝通,他表示不會開源,並且售價特別高,當時在網上搜索,不經意間看到了ROS,Box版本,很古老的版本。

什麼是ROS?這是個老生常談的問題,這裏用官網的定義來解釋一下。ROS是一個適用於機器人的開源的元操做系統。它不是一個真正的操做系統,但它提供了操做系統應用的服務,包括硬件抽象,底層設備控制,經常使用函數的實現,進程間消息傳遞,以及包管理。它也提供用於獲取、 編譯、編寫、和跨計算機運行代碼所需的工具和庫函數。 它主要採用的是鬆耦合點對點進程網絡,目前主要支持的仍是Ubuntu系統,Mac OS X支持,Windows目前有測試版本,但支持的並不很好,不推薦。

爲何學習ROS

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

首先,目前機器人開發,軟件開發的比重愈來愈大,而軟件開發的時候軟件框架的選擇,是軟件架構設計中一個重要的決策,直接決定了軟件開發的直接效率,以及後續功能的實現程度。

目前除了ROS,還有不少相似的機器人軟件框架,包括Player、YARP、Orocos、CARMEN、Orca、MOOS,以及Microsoft Robotics Studio

爲何使用ROS呢?我總結了下,ROS有四大優勢:一、鬆散耦合的機制方便機器人軟件框架的組織;二、最豐富的機器人功能庫,方便快速搭建原型;三、很是便利的數據記錄、分析、仿真工具,方便調試;四、學界和產業界的標準,方便學習和交流。 使用一句話總結,使用ROS,可以方便迅速地搭建好機器人原型。固然,它的性能不是最優的,可是這四條優勢足以保障它在機器人操做系統裏面的地位。

而後,ROS比較好的一點是使用了BSD許可證,這是一個很是寬鬆的開放許可證,容許在商業和閉源產品使用,這對於開發產品的創業公司是比較重要的一點。

ROS是最龐大的使用者羣體,是事實上的機器人標準,這是麻省理工在一篇文章中給出的評論。而後在2016年ROS大會數據顯示,目前在使用操做系統作開發的人員用戶超過35萬,其中活躍用戶美國佔第一位,中國佔第二位。

在學術研究領域,基本上機器人算法都會給出ROS版本的源程序。最先在2009年ROS發佈的「ROS: an open source Robot Operating System」 論文,目前已經被引用了2871次。

2016年官方支持ROS的機器人超過了100個。目前已經有不少機器人公司採用了ROS系統來開發一些應用於全新市場的產品,如ClearPath、Rethink、Unbounded、Neurala、Blue River、Big-i,最典型的就是Willow Garage的PR2機器人。投資機構也對創業公司給予了極大的支持,僅2015年相關風險投資機構就在基於ROS操做系統的機器人公司投資了超過1.5億美圓。Nvidia、博世、高通、英特爾、寶馬以及大 疆等大公司也紛紛推出ROS接口。

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

這是ROS當前的代碼統計量,總行數已經超過了1400萬,超過2477名做者。代碼語言以C++爲主,63.98%的代碼是用C++寫的,排名第二的是python,佔13.57% ,也就是說ROS基本上都是使用這兩種語言,能夠實現大部分的功能。

應該學什麼

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

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

入門的話,首先要了解這四點:設計思想,核心概念,核心模塊,核心工具

ROS設計思想

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

設計思想主要是分佈式架構,將機器人的功能和軟件,作成一個個節點,而後每一個節點經過topic進行溝通,但你這些節點能夠部署在同一臺機器上,也能夠部署在不一樣機器上,還能夠部署在互聯網上。

ROS核心概念

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

ROS的核心概念主要是這幾個,首先是節點,而後是節點之間的通訊和話題,通訊的方式有兩種,一個是剛剛講的話題,一個是服務。那麼,如何管理ROS的這些節點和話題之間的溝通呢?這就須要用到Master,也就是ROS管理器,它還維持了一個參數的服務。而怎麼組織代碼,就是經過功能包集與功能包。

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

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

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

Master向ROS系統中其餘節點提供命名和註冊服務,跟蹤和記錄話題的發佈者和訂閱者,使ROS 節點之間可以相互查找。一旦節點找到了彼此,就能創建一種點對點的通訊方式。

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

核心模塊

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

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

核心工具

機器人程序設計之如何正確入門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數據則沒必要每次都在現實中運行機器人,速度很是快。

ROS log系統記錄軟件運行相關信息,便於之後的調試。

怎麼學

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

首先,咱們在學校學的是指導主義,也就是傳統的教學方式:老師講,學生聽,今天我在這兒其實也屬於這種模式吧,而這種模式的缺點在於開環或是閉環週期過長。另外一種是建造主義,經過動手來學習,而後你能夠獲得實時反饋,你學到的知識就能造成一個閉環。固然,你仍是要摸索出一個套路,這樣上手才能比較快。

學習步驟

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

固然,比較好的套路仍是官網的那一套。首先按照官網的步驟安裝ROS,這個過程不要輕易問問題,由於教程裏講得已經很明白了,大神們對這些問題也會比較鄙視,一般會笑而不語。另外,建議初學者必定要認真學完整20個初級教程!而後就此打住!那些中級教程就不要再看了,瀏覽下都有啥便可,之後遇到相似問題再回來看便可,這個時候你的重點就應該回到機器人學及其實踐上了,那20個初級教程都是能夠在電腦上編程學習的,但不涉及機器人學。

接下來就應該運行真實的機器人、解決真實的問題。有的小夥伴就會問,沒有真實的機器人怎麼辦?固然也有辦法,你能夠在仿真環境裏邊運行。

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

ROS版本那麼多,該用哪個?

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

不少小夥伴會問,ROS版本那麼多,該用哪個? 目前,ROS是一年推出一個版本。經過下載統計,咱們發現如今使用最多的仍是Indigo,因此對於初學者,建議仍是使用這個版本,由於這是目前使用人數最多、坑最少的版本。而若是Linux編程能力比較強的,可使用Kinetic,它能夠一直支持到2021年。而後,你在選擇Ubuntu版本時,要與ROS版本需匹配。

命令行不熟悉怎麼辦? 有IDE

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

如今已經有不少IDE了,值得一提的是這個RoboWare Studio是咱們中國團隊開發的一個開源IDE,目前剛剛推出64位版本。最近我也和RoboWare Studio的王博士交流了一下,他表示以後會推出32位版本,包括Arm集成開發環境的,並且承諾是免費的,之後也會在適當的時候開源。

不熟悉Linux怎麼辦?

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

其實學習ROS並不難,而不少小夥伴遇到的問題在於對於Linux不熟悉。這個只能邊用邊學了,遇到問題也要善用搜索,基本上這些問題都能在搜索中找到答案。教程推薦這兩個版本,一個是英文版本,一箇中文版本。書的話,推薦《鳥哥的Linux私房菜》吧!

ROS和ROS2.0該學習哪一個呢?

機器人程序設計之如何正確入門ROS | 硬創公開課(附視頻)

對於大衆學習者、普通開發者、機器人算法開發者,在2017年仍推薦使用ROS。對於軟件架構的學習者、強調實時性的開發者,建議關注ROS2.0 。另外,我在知乎上對於這個問題也有詳細的回答,有興趣的能夠去看看

Q&A 環節

Q:請問除了ROS還有其餘哪些經常使用的實時嵌入式操做系統?

A:關於機器人目前操做系統哪家強這個問題,目前已經造成了各個陣營,咱們最近會組織一場辯論。主要是如今服務機器人用安卓的比較多。實時系統的話,我建議不要用ROS,由於ROS設計對象是家用移動智能機器人,當初的設計就不是針對實時控制的,不過ROS 2.0已經加入了實時性這個特性,你們能夠關注一下。

Q:硬件方面有什麼要求呢?

A:剛纔講了ROS它具有操做系統的特性,其中一個特性就是對於硬件的抽象,若是你用ROS的話,你不用過多關注底層硬件的東西,由於你們都是按照標準來作好封裝,你直接調用就OK,你主要的精力仍是放在機器人系統的設計和算法的開發上。

Q:您以爲ROS在目前火熱的自動駕駛領域應用前景如何?

A:據我所知,自動駕駛領域一些大企業也是用ROS開發的,它的最終產品不必定是基於ROS,可是研發階段我相信是會用到的,據所瞭解確實有一些是在用的。

Q:ROS將來能不能發展成徹底替代Linux和Window?

A:ROS不會替代Linux和Window,它根本就是兩回事兒。Linux和Window是一個基本的操做系統,ROS是徹底針對機器人的上層架構,它能夠依賴於Linux和Window,固然2.0開始,也開始獨立地去工做。因此,你要搞清楚,哪些是ROS能夠作,哪些是它不擅長的領域。

Q:像美國剛剛搞的蜂羣無人機,在ROS上是否能實現?

A:目前用ROS開發不是很好實現,若是用ROS 2.0,應該是能夠的。由於ROS它用在分佈式系統上,一個比較大的問題是須要一個Master,分佈式系統是不須要Master的,因此若是你非要用ROS的話,就有點彆扭。而ROS 2.0是沒有中心節點的,是沒有Master的,徹底分佈式架構,那應該適用於多機器人的應用場景。

相關文章
相關標籤/搜索