機器人程序設計之如何正確入門ROS | 雷鋒網公開課

2020-12-16 雷鋒網

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

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

與Android一樣,ROS也是業界公認的機器人三大作業系統之一(另一個為Ubuntu),不過ROS的開發門檻相對較高。Top博士自2009年第一次接觸到ROS後,便認識到其在機器人開發中的重要性,並不遺餘力在國內進行推廣。然而隨著ROS近年來火熱,在教學中也發現很多新夥伴對ROS的認識存在一些誤區,為了加快小夥伴們的學習速度,雷鋒網本期公開課雷鋒網邀請Top和大家分享一點自己學習和使用的經驗和心得。

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

嘉賓介紹:

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

以下內容整理自Top Liu在硬創公開課的分享。

公開課視頻:(可進入雷鋒網APP端查看)

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

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

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

為什麼學習ROS

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

目前除了ROS,還有很多類似的機器人軟體框架,包括Player、YARP、Orocos、CARMEN、Orca、MOOS,以及Microsoft Robotics Studio

為什麼使用ROS呢?我總結了下,ROS有四大優點:1、鬆散耦合的機制方便機器人軟體框架的組織;2、最豐富的機器人功能庫,方便快速搭建原型;3、非常便利的數據記錄、分析、仿真工具,方便調試;4、學界和產業界的標準,方便學習和交流。 使用一句話總結,使用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當前的代碼統計量,總行數已經超過了1400萬,超過2477名作者。代碼語言以C++為主,63.98%的代碼是用C++寫的,排名第二的是python,佔13.57% ,也就是說ROS基本上都是使用這兩種語言,可以實現大部分的功能。

應該學什麼

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

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

ROS設計思想

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

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擁有很多第三方的核心工具的支持,或者說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,這個過程不要輕易問問題,因為教程裡講得已經很明白了,大神們對這些問題也會比較鄙視,通常會笑而不語。另外,建議初學者一定要認真學完整20個初級教程!然後就此打住!那些中級教程就不要再看了,瀏覽下都有啥即可,以後遇到類似問題再回來看即可,這個時候你的重點就應該回到機器人學及其實踐上了,那20個初級教程都是可以在電腦上編程學習的,但不涉及機器人學。

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

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

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

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

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

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

不熟悉Linux怎麼辦? 

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

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

 

對於大眾學習者、普通開發者、機器人算法開發者,在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的,完全分布式架構,那應該適用於多機器人的應用場景。

編者按:關注雷鋒網(公眾號:雷鋒網)機器人垂直欄目微信公眾號「新智造」,可獲取嘉賓完整PPT。

雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 開始學習機器人——公開課推薦
    第一版:本文有Top Liu 整理的對機器人入門課程及雷鋒網的機器人程序設計
  • 可能是國內最好的ROS課程之一——20節課程帶你入門ROS機器人作業系統
    本課程作者是易科機器人實驗室的zhangrelay博士,張老師有12年機器人系統仿真與控制學習和研究經歷,是機器人和人工智慧技術的愛好者。
  • 神經認知學在機器人中的發展和應用(附PPT+視頻) | 雷鋒網公開課
    那麼,什麼是神經認知學,神經認知在機器人領域都有哪些應用?本期雷鋒網硬創公開課邀請到TIANBOT資深機器人研究工程師田博,為我們做主題為《神經認知學在機器人中的發展和應用》的分享。於 2007 年開始從事機器人研發工作,工作範圍涵蓋機械設計、控制、算法等,在校期間獲得 RoboCup 人形組第四名。參與過研發小型和大型的人形機器人,輪式機器人的環境感知算法。發表多篇機器人(IROS)和人工智慧頂級國際會議(AAAI)文章,開發移動機器人超過十種,包括足式與輪式。
  • 【ROS機器人研發教程2】ROS學習筆記(一):自己動手寫一個ROS程序
    創建一個工作區(workspace)工作區可以作為一個獨立的項目進行編譯,存放ROS程序的源文件、編譯文件和執行文件。而最基本ROS工程包中會包括CmakeLists.txt和Package.xml這兩個文件,其中Package.xml中主要包含本項目信息和各種依賴(depends),而CmakeLists.txt中包含了如何編譯和安裝代碼的信息。
  • 客服機器人中的深度語義技術與應用探索(附視頻+PPT)| 雷鋒網公開課
    但在實際使用中,用戶經常發現,機器人並沒有想像中那麼智能,它能識別文字和語音,但卻「不懂你」。這其中的關鍵便涉及到自然語言處理中的」深度語義技術「。針對這個問題,本期雷鋒網硬創公開課邀請到小i機器人創新中心的研究院陳培華為大家具體講解,在客服機器人領域的深度語義技術和應用探索。嘉賓介紹:
  • Matlab協調ROS程序: matlab 2015b + ros indigo
    你是否一直糾結ros程序的單步調試呢?你是否一直糾結ros中的具體數據流呢?
  • 新手入門SLAM必備資料
    搜集了各大網絡,請教了SLAM大神,終於把SLAM的入門資料搜集全了!在分享資料前,我們先來看看,SLAM技術入門前需要具備哪些知識?首先學習SLAM需要會C和C++,網上很多代碼還用了11標準的C++。第二要學會用Linux。第三要會cmake,vim/emacs及一些編程工具。
  • ROS機器人作業系統實戰
    課程將不僅僅關注ROS,還會介紹不同階段下的機器人核心概念。這門課程和其他學生可以學習的課程不一樣,不僅僅是因為Dr.Rojas擁有多年的的ROS實際應用經驗,而且他的課程是精心設計的,能夠讓你更加系統地學習ROS。大多數ROS相關書籍和課程會通過一系列拼接起來的項目來教授ROS,儘管這個方法是有效的,但是學生們只能分批地學習中間件系統。
  • ROS 機器人技術 - TF 坐標系統基本概念
    我們知道一個機器人系統通常含有多個隨著時間變化的 3D 坐標系(coordinate frames),比如常見坐標系如下:TF 包的作用就是隨著時間的變化跟蹤這些坐標系,並且用戶可以訪問過去和現在的一些坐標變換,比如:5 秒前,機器人頭部坐標系相對於世界坐標系的變換關係是怎樣的
  • 開發者入門必讀:最值得看的十大機器學習公開課
    截至目前,國內開設人工智慧(AI)專業的高校不多,相當多的開發者是跨界入門,需要自學大量知識並摸索。因而優質的學習資源至關重要。因此,雷鋒網搜集了全世界範圍內最受歡迎的機器學習課程,整理成這份「機器學習十大入門公開課」盤點,集中呈現給各位。
  • 如何在Gazebo裡仿真ROS機器人的SLAM建圖和導航
    沒關係,這裡準備個程序,可以使用鍵盤控制機器人完成巡遊移動。在Ubuntu裡再打開一個終端,輸入如下指令:回車執行後,會提示控制機器人移動對應的按鍵列表。需要注意的是,在控制過程中,必須讓這個終端程序位於Gazebo窗口前面,處於選中狀態。這樣才能讓這個終端程序能夠持續獲得按鍵信號。
  • 如何利用ROS MoveIt快速搭建機器人運動規劃平臺?
    雷鋒網按:本文作者qqfly,上海交通大學機器人所博士生,本科畢業於清華大學機械工程系,主要研究方向機器視覺與運動規劃,本文首發作者微信公眾號:Nao(ID:qRobotics),雷鋒網(公眾號:雷鋒網)已獲授權。
  • 如何利用ROSMoveIt快速搭建機器人運動規劃平臺?
    雷鋒網按:本文作者qqfly,上海交通大學機器人所博士生,本科畢業於清華大學機械工程系,主要研究方向機器視覺與運動規劃,本文首發作者微信公眾號:Nao(ID:qRobotics),雷鋒網已獲授權。兩個月前給自己挖了個坑,說要寫寫MoveIt,但一直沒動手。
  • 微軟人工智慧公開課概覽 | 雷鋒網公開課
    本次公開課,雷鋒網邀請到了微軟亞洲研究院掌門人洪小文博士,為大家分享《微軟人工智慧公開課》第一章節——《微軟人工智慧概覽》中的精彩內容,介紹微軟在人工智慧領域的最新研究成果以及微軟的AI服務如何賦能開發者。整套《微軟人工智慧公開課》已在微軟虛擬學院全面上線,感興趣的朋友可以點擊連結(https://aka.ms/MicrosoftAIMOOC)跳轉學習。
  • 基於Arduino和ROS來創建更智能的機器人系統
    機器人作業系統(ROS)是最流行和使用最廣泛的機器人中間件軟體框架之一。這是一個開放原始碼平臺,可幫助創客和開發人員在無需重新發明輪子的情況下開始使用機器人軟體。 ROS提供了一種標準的通信體系結構,用於無縫集成、使用、開發和部署機器人系統的不同組件,包括控制、感知、計劃等。這是一個與語言無關的平臺,無論部署在何處,都可以為不同的計算機提供跨平臺的通信支持。
  • ROS大神為你詳解:如何搞定Movidius神經計算棒基於ROS的實現與封裝
    都說Movidius神經計算棒是神器   什麼才是正確用法?   那麼問題來了,如何基於ROS搞定英特爾Movidius神經計算棒的實現與封裝?
  • ROS培新教程-第四章
    確保find_package代碼正確find_package(catkin REQUIRED COMPONENTS roscpp rospystd_msgs message_generation)4.1.3.2.   確保依賴正確catkin_package(  ... CATKIN_DEPENDS message_runtime ... ...)
  • 機器擁抱「觸覺反饋」的正確姿勢是什麼? | 雷鋒網公開課
    但大部分從業者沒有意識到「觸覺反饋」的價值。本次公開課我們請到了 Immersion 公司中國區的負責人,這家公司從 1993 年開始就在研究觸覺反饋算法,20多年來已經有超過 30 億部各式各樣的設備採用了他們的觸覺反饋技術,包括 Xbox 和 PS 遊戲機的手柄,也包括許多常見的手機品牌。可以說,他們是最懂觸覺的公司了。
  • 雷鋒網公開課|先進位造業如何利用人工智慧提升產品品質?
    發展先進位造業,深入探索如何利用人工智慧發展先進位造業的路徑和創新措施,對傳統企業來說意義重大。大數據和人工智慧的技術可以應用於產業鏈的多個環節,如工廠運營、工程、採購、供應鏈等都能實現數位化轉型,因此,製造商和工廠也已經在不同層面的運營中開始利用人工智慧技術。
  • 年度盤點|AI科技評論做過的那些CV公開課
    那這個關乎生命的檢測過程是如何實現的呢?本期硬創公開課雷鋒網-AI科技評論邀請了人工智慧算法專家趙京雷從人臉識別和情緒識別區別開始,循序漸進到情緒識別原理,情緒識別的應用場景,最後為我們揭秘這個過程是如何實現的。點擊查看原文。商湯科技曹旭東:為何深度學習幾乎成了計算機視覺研究的標配?