知乎問答 —— 如何學習ROS?
~歡迎關注~
微信公眾號:古月居(guyue_home)
新浪微博:古月春旭
知乎專欄: 古月居
原文連結 :知乎 | 如何學習ROS?
簡而言之,學習ROS的關鍵是——多實踐!
ROS是一個機器人研發中的重要工具,“學以致用”才是我們學習的最終目的:給學習賦能的就是實踐!而實踐就是不斷進行知行合一的各種嘗試!
現在關於ROS的資料已經非常多了,無論是圖書、視訊還是部落格,都可以找到很多學習的資源,但是ROS的學習曲線還是有點陡峭,很多初學者還沒來得及在ROS的世界走一走,就半路放棄回了頭。
那麼ROS該如何學習?如何實踐?古月君嘗試給各位提供一些參考思路。
一、 基礎教程不可少
1.背景知識
ROS需要基於Ubuntu使用,涉及的程式語言主要是C++和Python,另外還需要對所研究的機器人理論有一定了解。
這些是對初學者背景知識的要求,但千萬不要抱出一本《C++ primer》開始研讀,這些知識都需要在實踐中打磨,所以建議在網上找一些速成教程,花幾天時間大概瞭解知識框架和重點即可。
2.ROS安裝
ROS安裝當然是開始動手的第一步,在Ubuntu官網下載映象,根據百度指引完成系統的安裝。
Get Ubuntu | Download | Ubuntu
接下來就是ROS的安裝了,按照ROSwiki上的安裝教程,完成桌面完整版的安裝。
kinetic/Installation/Ubuntu - ROS Wiki
安裝完畢之後執行一下“roscore”,如果沒有問題,恭喜你,安裝成功!
3.wiki基礎教程
ROS wiki是ROS資源最豐富的地方,20新手教程非常詳細,對程式碼都有解釋,花一天時間把這些教程好好學習下。
結束新手教程後,相信你的小海龜例程也已經可以跑起來了,雖然你不一定明白為什麼要有這隻海龜的存在。
其實,小海龜背後幾乎包含了所有ROS核心通訊相關的原理,可以多花兩天時間,配合《A Gentle Introduction to ROS》這本書,加深對這隻小海龜的理解,熟悉ROS基礎工具的使用,比如你可能會用到:rqt_graph、rostopic、rosservice、rosnode等。
4. 程式設計學習
ROS使用的程式語言主要是C++和python,所以也有針對這兩種語言的功能支援包roscpp和rospy,看完上面的教程也可以看看這兩種語言的基礎教程。
努力學習完上面的這些內容,你至少應該明白ROS裡面的節點和訊息是幹什麼用的了吧,如果還沒理解,那就再結合小海龜多試幾次吧!
二、常用功能包知多少
ROS不僅為機器人開發提供了分散式通訊框架,而且還提供了大量實用的元件工具,瞭解這些工具是後續使用它們的基礎,這裡列出部分常用的元件工具:
1. launch啟動檔案
到目前為止,每當執行一個ROS節點或工具時,都需要開啟一個新的終端執行一個命令。當系統中的節點數量不斷增加時,每個節點一個終端的模式會變得非常麻煩。
啟動檔案(Launch File)是ROS中一種同時啟動多個節點的途徑,還可以自動啟動ROS Master節點管理器,而且可以實現每個節點的各種配置,為多個節點的操作提供了很大便利。
2、tf
座標變換是機器人系統中常用的基礎功能,ROS中的座標變換系統由TF功能包維護。
TF是一個讓使用者隨時間跟蹤多個座標系的功能包,它使用樹型資料結構,根據時間緩衝並維護多個座標系之間的座標變換關係,可以幫助開發者在任意時間,在座標系間完成點、向量等座標的變換。
ROS探索總結(二十二)--設定機器人的tf變換 - 古月居
3.rviz
rviz是ROS中一款強大的3D視覺化工具,在後面可是要頻繁用到的。
我們可以在裡面建立自己的機器人,並且看到機器人動起來,還可以建立地圖,顯示3D點雲等等,總之,想在ROS中顯示的東東都可以在這裡顯示出來。
當然這些顯示都是通過訊息的訂閱來完成的,機器人通過ROS釋出資料,rviz訂閱訊息接收資料,然後顯示,這些資料也是有一定的資料格式。
4.urdf
上面的機器人模型是不是很酷,在rviz中,這樣的機器人模型是通過urdf檔案描述的。
URDF(Unified Robot Description Format,統一機器人描述格式)是ROS中一個非常重要的機器人模型描述格式,後續的開發中也將頻繁用到。
5.gazebo
gazebo是一款功能強大的三維物理模擬平臺,其中的機器人模型與rviz使用的模型相同,但是需要在模型中加入機器人和周圍環境的物理屬性,例如質量、摩擦係數、彈性係數等。機器人的感測器資訊也可以通過外掛的形式加入模擬環境,以視覺化的方式進行顯示。
simulator_gazebo/Tutorials - ROS Wiki
更多功能和工具還需要我們在不斷的學習過程中熟悉,比如action、plugin、smach等等。
三、模擬操作很重要
以上都是ROS的基本功能和使用方法,瞭解之後的關鍵還是要進入實踐階段,綜合應用以上功能,完成機器人的開發。
這一步我們可以不用真實機器人,從以上提到的ROS教程中選一本,包括配套的原始碼,按照書上的操作,一步一步實現,其中必然會遇到很多問題,靈活應用google是正道。
實現之後當然不是結束,挑選自己感興趣或者需要研究的章節,一定要把這些原始碼的實現原理搞明白,仔細研究每一個節點、launch、config檔案是如何實現並完成配置的,最好自己動手除錯一下,熟悉之前提到的各種工具的使用方法。
除了書本上的內容,這裡也給大家推薦幾款常用的機器人,都配有模擬環境和使用說明,挑選一款搞明白即可,其他都是大同小異。
1.turtlebot
TurtleBot可以說是ROS中最為重要的機器人之一,它伴隨ROS一同成長,一直都作為ROS開發前沿的機器人,幾乎每個版本的ROS測試都會以TurtleBot為主,包括ROS2也率先在TurtleBot上進行了大量測試。
所以TurtleBot是ROS支援度最好的機器人之一,可以在ROS社群中獲得大量關於TurtleBot的相關資源,很多功能包都能直接複用到我們自己的移動機器人平臺上,絕對是使用ROS開發移動機器人的重要資源。
2.Husky
這款機器人是室外輪式移動機器人,同樣有豐富的學習資料:
3.Universal Robots
Universal Robots(優傲機器人)是一家引領協作機器人全新細分市場的先驅企業,近幾年在機械臂領域用的非常多,對於ROS的支援也比較友好。
4.PR2
PR2是ROS中元老級的機器人平臺,所有軟體程式碼依託於ROS,並且全部在ROS社群中開放原始碼,為我們學習、應用ROS提供了豐富的資源。
四、真實機器人跑起來
相信你已經迫不及待的想找一臺真實機器人練練手啦,如果你所在的實驗室或者公司有相關的機器人給你玩,千萬不要放過這個機會,SLAM、navigation、Image、MoveIt全都跑起來!!!
這裡先用ROS已有的功能包把需要的功能實現了,然後肯定會發現結果不令人滿意,此時再來分析是哪個部分的原因,可以進入下邊的第五個步驟。
如果周圍沒有這樣的環境,也不要灰心,模擬環境可以滿足你絕大部分的需求,如果實在手癢癢,那還是敗個家吧,淘寶上的ROS機器人很豐富,選擇一款適合自己的,為了夢想還是值得的。比如下圖就是古月君自己買來搭建的移動機器人,總花費不超過2000大洋。
還有很多心靈手巧的小夥伴,可以自己買各種原材料攢一臺機器人出來,這個挑戰更大,需要自己實現很多嵌入式底層方面的驅動和控制功能,ROS在這部分沒有太多指導,需要大家參考一些嵌入式開發和電機控制相關的資料。
五、迴歸初心是正道
經過九九八十一難來到這裡,說明你已經“衣帶漸寬終不悔,為伊消得人憔悴”啦!
相信你一定和我一樣,遇到並解決過類似下邊的問題:
1. 一個launch檔案敲下去,終端裡各種紅色的錯誤飛出來,無數包和節點找不到
2. 機器人還沒跑起來,tf相關的錯誤已經搞的暈頭轉向
3. slam過程中機器人飄的厲害,地圖和真實環境相去甚遠
4. 導航的時候滿地打轉,機器人已經不知道何去何從
5. 機械臂運動規劃略顯隨意,同樣的路徑點每次走出的軌跡卻不一致
......
這些問題大部分原因是和ROS配置相關的。
回想一下我們最開始為什麼要學習ROS,是為了研究slam、研究導航、研究運動規劃、研究人工智慧等,但是我們好像花了很多時間在配置環境、寫launch、改yaml引數,和開始的目標有點偏離了,自己的研究並沒有多大進展。
所以到這裡,是時候好好想想自己的初心了,ROS你已經比較熟悉,千萬不要滿足於用ROS已有的功能包調試出一個八九不離十的效果就可以了。
ROS是一個工具,可以幫助我們快速搭建起機器人應用的原型,接下來我們的重點應該集中在你自己的研究上,做slam的就來實現自己的演算法和gmapping對比,做navigation的就來優化move_base的導航效果,做運動規劃的就用自己的規劃演算法替換ompl。
在這個過程中,下邊這些書應該是我們參考的重點(優先選擇英文原版):
正確認識和使用ROS,或許是我們在學習路上要不斷精進的一項內功。它已經成為很多機器人開發者的一種生活方式,每當遇到機器人問題,都會想到用google搜尋關鍵詞“ROS + 問題”,找到資源後就是試用、學習、消化、重造。但ROS並不完美,問題還非常多,也不代表機器人開發的全部。
好啦,洋洋灑灑說了這麼多,如果你還不明白怎樣學習ROS,那我也只能把看家的祕訣告訴你了!
《ROS機器人開發實踐》+ 關注“古月居”,就O啦!
更多內容歡迎關注:
微信公眾號:古月居 (guyue_home)
新浪微博:古月春旭
知乎專欄: 古月居