對於機械背景的可能是欠缺Linux和Ubuntu的基礎以及程序基礎,對於計算機背景的可能是運動學和座標變換。大家在入門ROS的時候最大的困難是什麼?是如何克服的?如果可能,希望得到怎樣的幫助?


想要零基礎學ROS,不如來學我們Berkeley的EECS206A。發了鏈接騙一下Stars(內含所有courses material和我個人做的Lab答案(已更新完)

Junzeng-x14/EECS206A?

github.com圖標

說白了ROS只是個架構問題,如果感覺困難,並不是ROS困難,其實是其他領域有不懂的地方,比如一輩子都無法熟練掌握的cpp。

=====

我個人的情況如下:

第一天接觸ROS:把Tutorials做了一遍,深感CMakeLists真的是煩人吶(第一門語言學的是Java)

接觸ROS大約三十天:一直source /devel/setup.bash以及各種改來改去真的是好煩人,滾去學了一下CMU課件上關於shell scripts的東西,讓自己處在一個舒服的工作環境。

接觸ROS大約四十五天:聽說qtcreator可以配置來編譯roscpp,喜大普奔,然而折騰一下之後還是轉頭回去接著用terminal了嗷。

接觸ROS大約六十天:做Research,遇到了很多ros在無人機上的周邊問題,比如和硬體之間的通信架構。

自己課餘嘗試下一個3D路徑規劃+模擬+Visualization的純軟體的包,通過從零開始造輪子,發現了很多過去沒搞明白的事情,比如怎麼寫測試單元檢查Node之類之類,如何寫package讓其可擴展,其間去看了Effective Modern C++,刷了一下LeetCode。

接觸ROS一年後:滾去上EECS206A,這時關於ROS的問題對於我基本就是炒冷飯了,主要還是想了解一下機器人學的Big picture。課本是a mathematical introduction to robotic manipulation,課程上使用rospy,這門課基本就是去學會如何在各種機器人平台調包,如何快速的讀documentation,然後去做個大作業。

(預計)ROS一年半後:在實驗室的平台上引入一下現在比較成熟的用camera判斷quadrotor orientation的方法,來取代現有的motion capture system,並嘗試把一些time delay較大的controller丟到onboard上去。

我個人感覺我在ros perception的問題上還沒入門,這裡就不談了。


個人認為初學者入門ROS時遇到的最大困難是:搞明白ROS到底是什麼?

接觸新事物時,我們一般先要明確這個新事物的定義,才好進行下一步的研究,那ROS到底是什麼?

這個問題包含的內容很多:

  • ROS的定義是什麼?
  • ROS包含哪些部分?
  • 每個部分都是幹什麼的?
  • ROS的優勢是什麼?
  • ROS還有哪些不足?
  • 遇到問題該去哪裡找資料?
  • .....

這些問題不是通過翻閱資料就可以搞明白的,必須要經過「千錘百鍊」的實踐,等初學者邁過各種坑、搞明白後,基本就成老鳥了

引用《ROS機器人開發實踐》前言中的一段話:

「2011年底,我第一次接觸ROS。當時一個實驗室師兄在學術會議上聽說了ROS,意識到它的前景廣闊,考慮到我當時的研究方向,於是安排我進行研究。那時國內外ROS的學習環境比較艱苦,幾乎只有wiki的基礎教程(也沒有現在完善)。所以開始的我,內心其實是拒絕的,但還是硬著頭皮開始了。於是從拒絕到接受,從未知到熟悉,我經歷了前所未有的磨難,同時也收穫了前所未有的喜悅。」

初次接觸ROS的我,和現在很多初學者一樣,學習了wiki上的教程,小海龜愉快的跑了起來,然後呢?!我要的又不是海龜!!!

為了搞明白這個抽象的「機器人操作系統」到底是什麼,這個小海龜又是怎麼和機器人扯上聯繫的,我趴著梯子翻遍了google,能夠找到的資料寥寥無幾,有幸找到了幾個帶有Email的帖子,於是我就發了很多郵件請教,基本都是杳無音訊,就算收到回復也是草草的說明。

沒過多久,《ROS by example》出版了,我第一時間和群里的朋友湊錢買了電子版,當時對於我來講,這本書的指導思想就是——實踐是檢驗真理的唯一標準。仿照書中的內容,我用了大半年時間,從零搭建了自己的機器人平台——HRMRP。

真正動手做過之後,才發現那個小海龜背後的原理,有可能就是ROS的真諦

這麼多年過去了,不僅自己一直用ROS,還不斷的上課講ROS,從移動機器人做到機械臂,從自己用到教別人用,回頭再看,ROS到底是什麼?

其實官方早已給出了答案:

1. ROS的核心是一個分散式、低耦合的通訊機制

2. ROS提供多種機器人開發工具,可以快速實現數據可視化、機器人模擬等功能;3. ROS開源社區中包含大量機器人應用功能,可以幫助我們快速開發功能原型;4. ROS已經成為一個龐大的生態系統,包含機器人領域的方方面面,同時也得到了越來越多第三方工具的支持,為機器人開發提供了系統化的解決方案。

只不過這個答案需要我們自己通過實踐、結合需求來理解

現在ROS相關的資料非常多,初學者完全可以找一本靠譜的教程儘快把系統跑起來,然後動手把看到的東西消化成自己的知識,再深入創新。

同時,我們也要認清的一個現實——機器人是一個龐大的系統,ROS作為一個重要的工具,依然不可能覆蓋你的所有需求。拋磚引玉以下問題,大家可以參考一下:

  1. ROS中某個功能包移植後的效果欠佳,是該調參數呢,還是該優化演算法呢?
  2. ROS學會了,是不是就可以畢業了/找到好工作了?
  3. ROS可以做商業化產品么?如果可以的話,ROS的問題該怎麼優化?如不可以的話,為什麼百度Apollo是基於ROS開發的?

展開來內容就太多了,還是回到開始的問題,想要理解ROS是什麼,就是一句話:擼起袖子加油干!怕什麼真理無窮,進一寸有一寸的歡喜~

參考鏈接:

"Powering the worlds robots"的ROS是什麼?

關於ROS學習的一些反思 - 古月居


全局感。

用機器人操作系統(ROS)這層中間件是為了便於采包和可視化,利於尋找機械,通訊層,控制,狀態估計,和路徑規劃的問題。在用ROS這樣非實時的中間件時,為了機電系統的穩定,還需要搭配運行在實時操作系統下的嵌入式設備,來完成高頻的估計和控制。要跑起演示來對系統集成能力要求較高,容易卡在某一項細節里,失去對關鍵瓶頸的判斷。

例如在跑通視覺慣導里程計時,需要先解決如下工程問題:

  1. 跑通相機驅動器;
  2. 選取鏡頭和對應的攝像機模型;
  3. 安裝和標定雙目攝像機內參和外參;
  4. 減震安裝和標定慣導與相機外參;

在使用里程計中,需要上下端通訊,並了解平台的運動學,可能會遇到如下問題:

  1. 在複雜電磁環境中通訊系統的抗噪;
  2. 理解幾種旋轉的表示方法;
  3. 位置和速度在體坐標系和空間坐標系之間的轉換;

這些還僅僅是工程上的門檻,還沒到演算法優化,任何一項的怠倦都會影響整體的性能,很難全局地判斷問題的瓶頸,在錯誤的方向上走遠。


更新一下(2019.12.18):

問題導向,而不是工具導向:

  • 以要解決的機器人方向相關問題為背景,選擇合適的工具進行解決,而不是帶著ROS工具找問題。

價值導向,而不是平台導向:

  • 創造價值,而不是站在平台上等風來。

其實最大的困惑是迷茫,學完基礎教程之後,不清楚下一步如何做???!!!

沒有明確的目標,不能結合實際應用背景進行學習,是個人最大的困惑,難以學以致用,無法形成持續動力。

(GitChat)沉迷機器人操作系統的一個理由和四種修仙秘籍 - zhangrelay的專欄 - CSDN博客?

blog.csdn.net

雖然是小白,但是發現ROS發展還是非常快的。

比如之前需要有Linux基礎,現在已經慢慢不需要了,Windows已經全面支持ROS1和ROS2。

2020之後Python2就會淡出,目前ROS1好像還不支持Python3吧,ROS2支持。

還是專註於機器人控制和其他相關演算法吧,如視覺,SLAM等,ROS用著用著就順手了。


謝邀。

我覺得入門ROS的兩個困難是學習曲線陡和看完基礎20講第一次實踐項目時的無從下手。

1. 學習曲線陡。學習ROS需要很多的Prerequisites,比如Linux命令行,編程基礎等。國內機器人專業大多在機械學院,這對於一直接觸硬體人來說並非易事。

2. 無從下手。看完基礎20講後也不能算入門ROS,最好的學習方式是通過項目實踐來學習,但這時候往往無從下手。我的建議是再回頭縷縷基礎20講,先畫出大致的ROS節點圖,然後動手寫出自己的第一個節點。

最後,微軟在9.28的ROSCon2018大會上宣布Windows10中引入ROS。這也側面說明巨頭對機器人市場的看好以及ROS在機器人中的重要地位。所以,歡迎入坑ROS~


推薦閱讀:
相关文章