這篇文章描述為什麼要對ROS的API做突破性修改,即ROS 2.0。
Original Author: Brian Gerkey
Translator: 賴柏任
我們從2007年的11月開始開發ROS。 自那時起,有很多的更新跟ROS版本的升級,我們認為現在已經是時候著手開發下一個世代的ROS。接下來,我們會解釋原因。
ROS的誕生,是為了成為PR2機器人(由Willow Garage製造)的軟體開發環境。 我們的主要目標是希望ROS成為用PR2做出創新研究和開發的使用者們,所需要的軟體開發工具。但我們也知道,PR2不會是唯一且最重要的機器人,所以我們希望ROS也能在其他機器人上良好的運作。因此我們花了許多精神在定義多階的抽象層,將機器人的硬體,韌體,ROS和應用程式層做出區隔(層與層之間透過我們定義好的通訊介面來溝通),這種架構使得程式碼很容易被重複使用,進而節省開發的時程。
不過,在開發的過程中,我們仍然依循PR2的使用需求來引導開發方向,這使得ROS具有以下幾個顯著的特色:
我們可以說,今日的ROS滿足了PR2的使用需求,但令我們意想不到的是,ROS也被運用在相當多種類的機器人上。 除了PR2跟與PR2相仿的機器人之外,各種尺寸的輪型機器人、雙足人形機器人、工業機器人、戶外自動車(包含無人駕駛自動車)、飛行器、水面航行艇等等廣義的機器人都在使用ROS。
此外,我們觀察到ROS已經不僅被我們一開始鎖定的學術界所採用。截至今日,搭載ROS的產品已經面世,包含自動化製造機器人、農業生產機器人、清潔機器人等等。政府相關單位也積極了解ROS可以怎麼被運用於先進技術的開發,例如NASA預計將ROS運行於將在國際太空站上工作的Robonaut 2機器人。
隨著這些新用途的誕生,ROS的可能性被拉伸的程度是我們原先完全無法預期的。 雖然ROS 1.0運行良好並被廣泛延伸,我們相信,我們可以開始面對新的使用需求來更好地滿足日益寬廣的ROS社群。
考慮到ROS社群的進一步成長跟發展性,我們對一些新的使用情境特別有興趣,這些使用情境是我們在剛開始開發ROS時尚未考慮到的,以下是我們有興趣的使用情境:
ROS的核心是具有匿名性發佈與訂閱機制的中介軟體(middleware),這個middleware是我們從無到有開發出來的。自2007年開始,我們自行撰寫了程序管理、自定義訊息、序列化跟資料傳輸的工具。在這七年之間,有許多新出現的技術可以處理上述的這些功能,包含:
隨著這些新技術的出現,採用現成的開源函式庫來開發ROS這類型的中介軟體式相當可行的,而且這種做法具備相當多的好處,例如:
打造ROS 2.0的另一個理由是,我們可以藉此機會改進使用者API。目前絕大多數的ROS程式碼都跟2009年2月發布的ROS 0.4 - “Mango Tango”版本中所定下的client library相容。從穩定性的角度來看,這是一件好事。但這同時也表示,我們依舊在使用數年前規劃出的API,雖然現在的我們已知其中有部份並不是最佳的設計。
所以我們希望在ROS 2.0推出新的API設計,既保留第一代ROS API的優良部份,又更進一步整合社群使用ROS 1.0的經驗。換句話說,雖然關鍵的功能會被保留(例如分散式系統架構、匿名性的訂閱與發布機制、具有回饋機制的遠端程序調用協議(RPC,對應到ROS的actionlib),對不同程式語言的相容性, 還有系統管理工具等等),但你不應該預期ROS 2.0的API跟ROS 1.0的API會彼此相容。
不過別擔心,我們會建立讓ROS 1.0和ROS 2.0的程式碼共存的機制。至少在系統執行階段,ROS 1.0跟ROS 2.0的程序是可以互相溝通的。而且未來有可能會有函式庫支援ROS 1.0調用ROS 2.0程式碼的機制。
原則上,前面所提到的所有功能都能被整合到目前的ROS核心之中,例如最新的通訊技術可以被併入roscpp
或是rospy
。我們也曾經考慮過這個選項,但是修改如此多的功能可能造成ROS的不穩定,進而影響許多ROS使用者。這個風險是我們不希望出現的,我們希望ROS 1.0可以維持其穩定性,並持續地被使用,不受ROS 2.0開發的影響。所以ROS 2.0的定位會跟ROS 1.0平行,需要另外被安裝但仍能跟ROS 1.0溝通。