ROS和ROS2.0現在到底該學習哪個呢?

很多朋友經常問ROS1.0(下文簡稱ROS)和ROS2.0我到底該學習/使用哪個呢?

(聲明:歡迎拍磚討論,但若是因此對您的項目或產品造成了損失,本人不負任何責任!

我先給出個人的觀點,再說明其中原因。

對於大眾學習者、普通開發者、機器人演算法開發者,在2017年仍推薦使用ROS,至於以後,要看形勢再作評估。

對於軟體架構的學習者、強調實時性的開發者,推薦ROS2.0。

原因:

ROS 1.0歷經10年的發展,已經積累了非常非常豐富且穩定的功能包集、各類工具和完備的教程。在未來即便是ROS2.0大行其道,仍會有機制保證ROS 2.0代碼與現有ROS代碼共存。例如,ROS仍然還可以通過message bridges等方式與ROS2.0一起工作。

ROS 2.0未來將成為機器人應用程序開發的終極SDK。相比於ROS1.0,它使用更先進的分散式架構,更高的可靠性,以及對實時性和嵌入式設備的支持。最大的不同在於採用了數據分發服務(DDS)技術,DDS適用於實時分散式嵌入式系統。2016年有一篇會議論文。Exploring the performance of ROS2。 分析了ROS2.0的性能。詳細內容可看原文:鏈接:pan.baidu.com/s/1jHITCX 密碼:f0ih

(圖片來源:Data Distribution Service)

但2.0的進展並不是一帆風順,目前仍是Alpha版本,計劃在2016-12推出Beta 1 (circa)(ROS, 2016)。除非您是尖端的架構開發者,如果只是作為使用者,那不妨保持關注,等坑填平了再來趟這條路。另外,目前除了官網(ROS2, 2016)和Erle(Erle, 2016)目前還沒見有其他的教程。

那為什麼會出現ROS 2.0 ?

Gerkey在《為什麼ROS 2.0 ?》(Gerkey, 2016)做了詳盡的回答。歸結起來,分為三個原因:1.歷史原因2. 出現了新的需求3.出現了新的技術。

nn1.設計時的「」沒想到

ROS始於2007年11月,最早是「柳樹車庫」用於PR2機器人的開發。同時希望ROS能用於其他機器人。為了便於多研究所合作,避免重複造輪子,所以柳樹車庫花費大量精力定義了抽象級別(通常是通過消息的介面),允許軟體重用。

其解決思路是:

1、 讓多個程序分別完成特定任務, 能夠相互通信, 並且定義好常用的格式讓大家使用

基於面向服務 Service-oriented

2、 ROS 提供構建環境,讓大家能夠較容易的使用他人的工作, 容易交換代碼

(在這裡引用邵天蘭觀點:由於ROS設計於2007年,介於當時的現狀(雖然當時很先進了),(但今天看來)其設計思想和工具都比較古舊,例如XmlRpc,就很渣。所以今天千萬不要把ROS當做學習架構設計的典範)

按照當時以及能夠想到的機器人現狀,ROS主要設計指向是:

· n單個機器人;

· n板載工作站級別的計算資源;

· n沒有實時性需求;

· n理想的網路連接;

· n應用於學術研究;

· n強調最大的靈活性,沒有過多的約定或者禁止。

然而,結果卻是萬萬沒想到….

第一個沒想到……

ROS設計初衷是用於家用服務機器人,然而出乎意料的是:ROS被應用於各式各樣的機器人:輪式機器人、腿式機器人、工業手臂、室外無人車輛、自動駕駛汽車、飛行器、無人艇……

第二個沒想到……

ROS設計初衷是用於學術研究,然而出乎意料的是:大量基於ROS的產品進入市場,包括製造業機器人、農業機器人、商業清潔機器人,甚至NASA將運行ROS的Robonaut 2部署到國際空間站。

隨著應用場景的擴大,導致產生了一系列新的需求。

nn2.新的需求

以下是ROS目前感覺蛋疼的領域,也是ROS2.0意圖解決的問題。

· n多個機器人組成的集群; ROS的單master結構就蛋疼了。

· n小型嵌入式平台,甚至「裸奔」的微控制器;依賴於Ubuntu的ROS太重了。

· n實時系統:包括進程間和跨機器通信,ROS做不到。

· n非理想的網路;ROS延遲很大,甚至斷網再連接時會掛。

· n生產製造等環境:ROS可靠性還不夠。

· n為一些新特性,如部署的生命周期管理和靜態配置,提供清晰的模式和支持工具。

nn3.新的技術

ROS的核心是匿名發布-訂閱中間件系統,從2007年開始,在ROS這些相關領域產生了一些更新、更好、值得借鑒使用的技術,如:

  • Zeroconf;
  • Protocol Buffers;
  • ZeroMQ (and the othern MQs);
  • Redis;
  • WebSockets; and
  • DDS (Data Distributionn Service)

先總結到這,下次接著整理下ROS2.0的設計特點。

補充資料

下面是ROS2.0歷次會議介紹的ppt (Github, 2016)

ROS 2 Update - summary of alpha releases, architectural overviewROSCon 2016 presentationslides /video

Evaluating the resilience of ROS2 communication layerROSCon 2016 presentationslides /video

State of ROS 2 - demos and the technology behindROSCon 2015 presentationslides /video

ROS 2 on "small" embedded systemsROSCon 2015 presentationslides /video

Real-time control in ROS and ROS 2.0ROSCon 2015 presentationslides /video

Why you want to use ROS 2ROSCon 2014 presentationslides /video

Next-generation ROS: Building on DDSROSCon 2014 presentationslides /video

參考文獻:

Erle. (2016). ROBOT OPERATING SYTEM 2.0 TUTORIALS (ROSn2.0). Retrieved fromnerlerobotics.com/blog/r

Gerkey, B. (2016). Why ROS 2.0? Retrieved from Why ROS 2.0?

Github. (2016). ROS2 wiki. Retrieved fromnros2/ros2

ROS. (2016). ROS 2.0 Roadmap. Retrieved fromnros2/ros2

ROS2. (2016). ROS2 Design. Retrieved fromnDesign


推薦閱讀:

基於ROS的自主導航小車Plantbot--SLAM
ROS機器人操作系統相關書籍、資料和學習路徑
ROS 2正式版來了,到底有哪些新變化?
【ROS十周年快樂!】Science Robotics封面文章:ROS助力全世界機器人!
基於ROS的自主導航小車Plantbot--底層驅動

TAG:机器人操作平台ROS |