1. 程式人生 > >ROS 2正式版來了,到底有哪些新變化?

ROS 2正式版來了,到底有哪些新變化?

鋒影

email:[email protected]

如果你認為本系列文章對你有所幫助,請大家有錢的捧個錢場,點選此處贊助,贊助額0.1元起步,多少隨意


2017.12.09,機器人開源作業系統軟體ROS 2終於推出首個正式版,新版本命名為“Ardent Apalone”,代號“ardent”。

查了一下,中文意思為“熱心的美洲鱉”,不知ROS2是不是要從ROS1的“海龜”系列換成“土鱉”系列了,ORZ。

如果你只想用最短時間瞭解有哪些關鍵的新特性,只看下一段就OK了。

1.ROS2全面支援三種平臺
ØUbuntu 16.04(Xenial)
ØMac OS X 10.12(Sierra)
ØWindows 10
2.實現了分散式架構

取消Master中央節點,實現節點的分散式發現,釋出/訂閱,請求/響應通
3.支援實時
4.使用新版本的程式語言
ØROS 2廣泛使用C ++ 11。而ROS 1的核心主要使用C ++ 03,在其API並沒有使用C++ 11功能。
ØROS 2的Python版本至少為3.5,ROS 1的Python版本為2.7
5.使用了新的編譯系統Ament(ROS為Catkin)
6.ROS1可以通過rosbridge和ROS 2通訊

接下來進行詳細介紹:

關於ROS2的起源、前世今生可參考我一年前寫的一篇文章,在此不過多重複。

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

ROS 1和ROS 2之間變化

1. 系統架構

上圖所示是ROS 2與ROS 1整體架構的對比:

ROS 1主要構建於Linux系統之上,主要支援Ubuntu。而ROS 2採用全新的架構,底層基於DDS通訊機制,支援實時性、嵌入式、分散式、多作業系統。ROS 2支援的系統包括Linux、windows、Mac、RTOS,甚至是微控制器等沒有作業系統的裸機。

ROS 1的通訊系統基於TCPROS/UDPROS,強依賴於master節點的處理,而ROS 2的通訊系統是基於DDS,進而取消了master,同時在ROS2內部提供了DDS的抽象層實現,有了這個抽象層,使用者就可以不去關注底層的DDS使用了哪個商家的API。

ROS 2目前已經在Ubuntu Xenial,OS X El Capitan以及Windows 10上進行了CI測試和支援(參閱

ci.ros2.org)。

2. 程式語言

C ++標準

ROS 1的核心是針對C ++ 03,並沒有在其API中使用C ++ 11功能。ROS 2廣泛使用C ++ 11,並使用C ++ 14的某些部分。在未來,ROS 2可能會開始使用C ++ 17。

python

ROS 1是針對Python 2,ROS 2至少需要Python 3.5版本。

3. 編譯系統

ROS編譯系統從初期使用的rosbuild,到groovy版本之後的catkin,再到ROS2中的ament

雖然編譯系統並不是ROS框架中的核心部分,但卻是開發者最常接觸的一個重要功能。

ROS 2新的編譯系統ament是一種元編譯系統,用來構建組成應用程式的多個獨立功能包,它並不是一個全新的東西,是catkin編譯系統進一步演化的版本,而這兩個單詞也是近義詞。查了一下,catkin和ament的意思為柔荑花序(柳絮),而ROS最早起源於柳樹車庫公司。

ROS 2只支援隔離的構建

在ROS 1中,可以在單個CMake上下文中構建多個包。雖然這加快了構建步驟,但是每個包都需要確保正確定義了交叉包目標依賴關係。另外所有的軟體包共享相同的名稱空間,導致目標名稱衝突等。

在ROS 2中,只支援隔離的構建,即每個包都是獨立構建的。安裝空間可以是隔離的或合併的。

取消了開發空間

在ROS 1中,可以在不安裝包的情況下構建包。

在ROS 2中,必須先安裝一個軟體包,然後才能使用它。

ROS 1中使用開發空間的一個原因是為了使開發人員能夠更改檔案,例如Python程式碼或啟動檔案,並直接使用修改後的程式碼,而無需重新編譯軟體包。在ROS 2中保留了這一好處,可選擇使用符號連結替換安裝步驟中的複製操作。

4. 訊息、服務介面

ROS 2使用了新的介面。有關更多資訊,請參閱ROS介面定義文章。

如果現在就想動手開發,可參閱“古月居”的相關教程。

下一個版本

ROS 2 目前還在積極的開發完善中之中。下一個正式版本將在2018年夏天釋出。屆時會繼續有一些出現新特性,例如將會進一步完善C++和Python的API,開發通用構建工具,釋出Windows和Mac OS軟體包,使用FastRTPS增強實時安全等。

期待更好,更強大的ROS 2 土鱉出現!

參考文獻: