Why ROS 2.0? ============ 為何要大改ROS API 直上ROS2的原因。 * [官網英文原文](http://design.ros2.org/articles/why_ros2.html) ![](https://www.osrfoundation.org/wordpress2/wp-content/uploads/2014/12/brian_small.jpg) * 作者:[Brian Gerkey](http://brian.gerkey.org/) * NOW:CEO of OSRF[ (Open Source Robotics Foundation)](https://www.osrfoundation.org/) * Before: * Computer Scientist in the AI Center at SRI[ (Standford Research Institure)](https://www.sri.com/) * ROS Developer(since 2008) * Lead Developer of Player Project ROS的起源於2007年11月,我們相信該是時候建立下一代的機器人運作平台了,本文將介紹背後的故事和緣由。 ## How We Got here === ROS(Robot Operation System)的起源是為了支援[Willow Garage PR2 robot](http://www.willowgarage.com/pages/pr2/overview) 開發環境。主要是為了提供前沿研究所需的軟體工具和PR2上的開發專案使用。當時,我們認知到PR2不會是世上唯一或最重要的Robot平台,因此我們希望ROS能對其他平台也有價值。所以我們花了很多的功夫在定義及建構抽象層(levels of abstraction, 通常指傳訊的界面),以利它能被不斷的再利用。 但,我們是在PR2 需求上進行,它具有以下具體特色: 1. 獨立的Robot 2. 上面具備工作站級別的運算資源 3. 沒有實時系統(Real-time)需求 * 特定的實時需求,都以個別設計方式達成 4. 極佳的網路環境 * 實體線路或鄰近(close-proximity)的高頻寬無線方式連接。 5. 研究使用,多於學術圈 6. 最大限度的彈性,沒有預設(prescribed)或限制(proscribed) * EX: “we don’t wrap your main()”. 平心而論,ROS 完全滿足了 PR2 的使用需求,而且超乎預期的被各式各樣的[Robots](http://robots.ros.org/)採用。今天我們看到了ROS不僅在PR2上或類似的平台上運行,它也在各尺寸的輪型機器、雙足機器人(legged humanoids)、工業手臂、戶外運作的載具(包含自駕車)、空中的及水面的各式平台上運作著。 除此之外,我們看到它跨出了我們當初所預設的學術社群,以ROS衍伸的產品正推向市場,在生產自動化、農業應用、商用清潔等領域。政府相關部門也在密切的關注其可能的應用。例如美國航空航天局(NASA)預計將在國際太空站上配置採用ROS的 [Robonaut 2 ](https://robonaut.jsc.nasa.gov/R2/)。 在新延伸的應用中,ROS擴展到眾多沒有事先預料的領域。在它被廣泛採用的同時,我們相信我們能為了這新納入的ROS社群,提供更好的方案攻克可預見的使用者需求。 ## New use cases 在ROS社群正進行中及未來發展的方向上,我們特別關注以下的使用案例,而這些是我們在計畫開始時沒有預設的。 1. 多 Robot 的編隊 * 雖然以現今的 ROS 也是能建立多機群組,但並沒有標準化的方式,且無倫如何避不開的就是中心化架構(Master)的限制。 2. 小型的嵌入式系統 * 我們想將小型電腦,包含近乎單晶片("bare-metal")的架構能直接納入ROS環境開發,而非隔離在環境外僅能對接其驅動程式。 3. 實時系統 * 我們要直接用ROS支援實時的控制系統,它包括內部程序及機器間的通訊(在適當的操作系統及硬體支援下實現)。 4. 不理想的連線環境 * 我們要讓ROS在網路環境降階時造成短線、延遲等狀態下盡可能的良好運作,包含從受限的Wi-Fi連線到地面對太空的連線。 5. 可產品化的開發環境 * 在研究及實驗室熱切接納ROS做為開發平台的同時,我們希望確保以此開發的原型能延續在此平台上跌代演化為產品(ROS-based Product),推進到真實應用環境中。 6. 預設的建構及架構模式 * 在我們維持ROS標誌性的底層彈性特色時,我們想要提供明確的開發模式(pattern)和對應的工具支持諸如生命週期管理及定義配置設定(static configuration for deployment)的功能。 ## New Technologies 現今ROS的底層核心是一個從頭建構起的匿名的"發佈-訂閱"中間層系統(middleware)。從2007年起,我們建構起原創的系統處理軟體中搜尋(discovery)、訊息定義(message definition)、序列化(serialization)及傳輸(transport)功能。這期間數個新的技術,在上述 ROS的各項領域中發展、改進及廣泛的被接納使用,比如下列幾項: * [Zeroconf](http://www.netadmin.com.tw/article_content.aspx?sn=1604150016) * 針對 * 指派位址(Address Selection) * 名稱解析(Name Resolution) * 服務搜尋(Service Discovery) * [Protocol Buffers](https://zh.wikipedia.org/wiki/Protocol_Buffers) * Google 公司内部的混合語言數據交換標準:簡單、快速 * [ZeroMQ](https://zh.wikipedia.org/wiki/%C3%98MQ) (and the other MQs) * 設計給可伸縮的分散式、並行應用程式的高效能異步訊息庫 * [Redis](https://aws.amazon.com/tw/elasticache/what-is-redis/) * 快速、開放原始碼的記憶體內鍵值資料結構存放區。_Redis_ 隨附一組多功能的記憶體內資料結構,讓您能夠輕鬆地建立各種自訂應用程式 * [WebSockets](https://zh.wikipedia.org/wiki/WebSocket) * WebSocket是一種在單個[TCP](https://zh.wikipedia.org/wiki/TCP "TCP")連線上進行[全雙工](https://zh.wikipedia.org/wiki/%E5%85%A8%E9%9B%99%E5%B7%A5 "全雙工")通訊的協定。 * [DDS (Data Distribution Service)](https://en.wikipedia.org/wiki/Data_Distribution_Service) 在這些開源的軟體庫支持下,已經能建立起像ROS一樣功能的中介層(middleware)。我們能大幅地受益於整合的開發方式,原因包括如下幾項: 1. 維護更少的程式碼,尤其是非專用於Robot的部分。 2. 能利用這些軟體庫中的功能,而這些常是超過我們能自行打造的範疇。 3. 能同步接受開源社群對這些軟件庫的持續改善的益處 4. 借鏡基於這些軟體庫產品化的過程,強化 ROS 商品化的基礎。 ## 應用程式介面(API)的改變 推動 ROS2 開發的進一步原因是能趁機改善使用者面對的應用程式介面,現在大量的 ROS 程式碼是相容於很早期的"Mango Tango" ROS 版本 (2009二月釋出),從穩定性的角度來看是好事,但反面則是我們遵守數年前的 API 定義,某些決策已被證明有更好的方式。 所以 ROS 2.0 將善用社群第一代版本的協作及經驗設計新的應用程式介面,除了將維持一貫的設計邏輯(分散式運算、匿名訊息發布及訂閱機制、具回饋機制的遠程程式調用<RPC with feedback, ie., actions>,支援多種程式語言, system introspectability(?), ...)外,不會追求相容於第一代的API。 但各位不用擔心手上的程式碼會全然失效,我們將會設計一個 ROS1.0 和 2.0共存的機制。至少,會有一個串接機制讓兩個系統能同時互聯運作。而開發讓ROS1.0的程式能以ROS2.0的軟體庫編譯的介接工具(library shim),讓使用者能維持類似現在的使用方式也是有機會的。 ## 為何不直接改善 ROS1 原則上,上述的改變都能整合進現有的 ROS 核心碼中,比如說讓roscpp 和 rospy 整合新的通訊技術。綜和考量改善和新建兩個選項,有鑑於我們瞄準的改善需求對現有系統核心的調動,對社群中的眾多使用者風險太高,所以決議平行開發ROS2.0,讓原系統維持原發展架構,並讓兩者可以通過訊息串接(message bridge)彼此協作。 ## 翻譯附註 1. Robot 劍橋字典定義如下 > a machine controlled by a computer that is used to perform jobs automatically 中文慣用翻譯為機器人,但我覺得有刻板印象,故維持以英文 Robot方式呈現。 2. System Introspectability **(?)** --- 翻譯群: - 林信男 Ken Lin 著作權:These design documents are licensed under [Creative Commons Attribution 3.0](http://creativecommons.org/licenses/by/3.0/)