【Zeekr_Tech】ROS/ROS 2介紹

Zeekr_Tech發表於2022-04-21

極氪軟體及電子中心王陽明

前言

ROS 是機器人作業系統(Robot Operating System)的英文縮寫。ROS是用於編寫機器人軟體程式的一種具有高度靈活性的軟體架構。ROS的原型源自 的STanford Artificial Intelligence Robot (STAIR) 和 Personal Robotics (PR)專案。

機器人的工業界和學術界在軟體工具的使用上是有明顯的分歧的。由於機器人的工業界並不像消費類電子這樣出貨量巨大,所以絕對高的技術壁壘和封閉的生態是十分常見的。為了提高自己的技術壁壘,這些公司往往會自己設計一整套封閉的軟硬體,以達到讓其他人(競爭對手或開發者)無法用自己的工具替換之的目的。而學術界,學生和老師們為了減少重複造輪子的工作,往往會擁抱開源社群,選擇現有的工具進行開發和研究,最廣為人知的便是ROS(Robot Operating System)

 

ROS 是什麼

ROS/ROS 2 並不是一個軟體,而是一系列軟體的集合。一般我們稱之為軟體解決方案堆疊。包含如硬體驅動程式、網路模組、通訊架構和機器人演算法實現等等。ROS將所有這些功能包放在一個保護傘下,因此開發人員無需重新造輪子。

ROS 並不是一個作業系統,而一般稱之為元作業系統,即基於作業系統以上的類作業系統。

ROS 並不是一箇中介軟體,因為它實現了包括感知、導航、控制、運動規劃和模擬等多種功能。

 

ROS

ROS1.0 版本釋出於2010年,基於PR2機器人開發了一系列機器人相關的基礎軟體包。隨後ROS版本迭代頻繁,ROS的版本一般會隨著Ubuntu系統長期支援(LTS)版本而更新,其中ROS目前最新的版本都已經適配到Ubuntu 20.04 LTS。ROS僅在Ubuntu上進行CI測試,但是社群成員積極支援其他Linux版本、Mac OS X、Android、Windows,使得ROS可以相容,但僅提供有限制性的功能支援。

ROS 的歷史版本

ROS 版本

釋出時間

Ubuntu 版本

May 23rd, 2020

Ubuntu 20.04 (Focal)

May 23rd, 2018

Ubuntu 18.04 (Bionic)

May 23rd, 2017

Ubuntu 17.04 (Zesty)

May 23rd, 2016

Ubuntu 16.04 (Xenial)

May 23rd, 2015

Ubuntu 15.04 (Vivid)

July 22nd, 2014

Ubuntu 14.04 (Trusty)

September 4th, 2013

Ubuntu 12.04 (Precise)

December 31, 2012

Ubuntu 12.04 (Precise)

April 23, 2012

Ubuntu 10.04 (Lucid)

August 30, 2011

Ubuntu 10.04 (Lucid)

March 2, 2011

Ubuntu 10.04 (Lucid)

August 2, 2010

Ubuntu 9.04 (Lucid)

March 2, 2010

Ubuntu 8.04 (Hardy)

ROS 的優缺點對比

ROS 為我們開發機器人帶來了許多方便,然而它也確實存在一些問題:

優點

缺點

鬆散耦合的機制提供框架

通訊實時效能有限

豐富的機器人功能庫

系統穩定性尚不滿足工業級要求

龐大的使用者群體

安全性上沒有防護措施

免費開源

僅支援Linux(Ubuntu)

便利的資料記錄、分析、模擬工具

核心機制的效能沒有優化佔用資源

ROS 的成熟案例

ROS 已經走過十個年頭,伴隨著機器人技術的發展,ROS也得到了極大的推廣和應用。儘管ROS還存在不少侷限性,但無法掩蓋ROS的鋒芒,社群內的功能包還是呈指數級逐年上漲,為機器人開發帶來了巨大的便利。不少開發者和研究機構還針對ROS的侷限性進行了改良,但這些區域性功能的改善往往很難帶來整體效能的提升,在行業內也積累了大量成熟的應用:

 

機械臂控制器中領軍企業KEBA,他們的控制器已經支援ROS

 

美國NASA基於ROS開發的Robonaut 2

 

百度apollo無人車的底層是基於ROS開發的

 

總體來說,ROS更適合科研和開源使用者使用,如果在工業場景應用(例如無人駕駛)還需要做優化和定製,目前ROS已經停止更新,機器人開發者對新一代ROS的呼聲越來越大,ROS2.0的訊息也不絕於耳。

 

ROS 2

ROS 無法真正進入產業界,也自然無法產品化。為了解決這一問題,社群提出了ROS 2。使得ROS具備產品化的特性,包括實時性、適應於全平臺、適用於效能低的硬體(MCU+RTOS)、分散式、資料加密和現代程式語言的支援。

 

ROS 2 的歷史版本

ROS 版本

釋出時間

Ubuntu 版本

May 23rd, 2022

TBD

May 23rd, 2021

Ubuntu 20.04 (Focal)

June 5th, 2020

Ubuntu 20.04 (Focal)

November 22nd, 2019

Ubuntu 18.04  (Bionic)

May 31st, 2019

Ubuntu 18.04  (Bionic)

December 14th, 2018

Ubuntu 16.04  (Xenial)

July 2nd, 2018

Ubuntu 16.04  (Xenial)

December 8th, 2017

Ubuntu 16.04 (   Xenial)

實時化與分散式

為了解決訊息間通訊的去中心化和實時性問題,ROS 2引入了 (DDS),一種已經廣泛應用於國防、民航、工業控制等領域,成為分散式實時系統中資料釋出/訂閱的標準解決方案。如下圖所示,左邊是ROS 1,右邊是ROS 2。

在ROS 1中,使用者的每個節點,無論是同一裝置還是不同裝置,必須已知Master節點的IP,並且全部依賴於Master節點進 行通訊,一旦 Master 節點發生故障或該裝置發生故障,則整個環境的所有節點功能盡失。無法恢復。也正因為這一點, ROS 1 無法應用於正式的產品。

ROS 2 引入了基於DDS的去中心化的資料通訊方式,不同節點可以通過未知IP的方式進行通訊,也進而有助於解決多機器人系統的問題。並且ROS 2也引入了 Quality of Service的機制,通過設定不同的服務質量來保障某些較差網路環境下也可以具備良好的通訊效果。

 

實時性

而對於實時性,由於DDS在諸多工業和產業有諸多應用,具有良好的生態,其效能毋庸置疑。如下圖的測試結果:

測試裝置為兩臺 PowerEdge R330 e34s

OS: Ubuntu 18.04.2 LTS bionic

Architecture: x86_64

CPU(s): 8

Thread(s) per core: 2

Model name: Intel(R) Xeon(R) CPU E3-1230 v6 @ 3.50GHz

              以Fast-RTPS為例,可以看到從延時上,在該 雙裝置間 通訊中可以穩定在100μs以下,而吞吐量的頻寬也達到了750Mbit/s以上。詳細的跑分資料可以參考 進行了解,且同裝置內的通訊效率會 遠超 該結果。

 

資料加密

ROS 2 在DDS的基礎之上引入了SROS的概念,設計文件參考 ROS 2 DDS-Security integration ,即所有的ROS 2訊息均可通過SROS進行加解密、鑑權、授權控制、Log和資料標記的許可權控制等。基於ROS 2的原本設計邏輯,我們甚至可以將資料的金鑰生成和儲存放到ARM TEE OS中,以實現較高安全的資料保證

 

現代程式語言的支援

由於ROS 1的最初發行版在2007年,長期以來的支援和眾多開發庫的支援導致很多語言的新特性並不能良好地應用。比如對於Python,直至2020年釋出的Noetic版本中才首次支援了Python 3,而Python 2在2020年1月便已經停止進行支援了。再如C++,ROS 1是基於C++ 03實現的,對於C++ 11的支援並不好,更不用談C++ 14和C++ 17的支援。

ROS 2 則完全支援Python 3,並基於現代C++編寫。並基於其鬆耦合的方式,還支援Java和Rust等程式語言。如下圖User Application下面那一行所示, 只要開發者願意,可以支援任何程式語言

  靈活的機制

ROS 2 提供了一種基於生命週期的管理模式, 即每個節點的執行狀態是 完全可控 的。參考設計文件 的闡述。所有Managed節點都可以在執行時進行實時配置、管理、關閉和啟動,並在出錯時可以由管理節點進行喚醒和重置。這種方式保證了整個系統的穩定性和魯棒性,也提高了系統出錯後恢復到正常的能力。

ROS 2 在執行時可以更換DDS中介軟體,也可以在不同DDS中介軟體的實現間進行通訊。

 

5G 的支援

ROS 2 在Ericsson的推動下,正在商討5G的ROS 2通訊方案的制定和實現。

 

全新的生態

繼承ROS 1廣博的開源生態資源,ROS 2的釋出激起了大家對於ROS產品化的熱情,許多公司都向ROS 2貢獻方案和程式碼,包括但不限於Intel、NVIDIA、Ericsson等。

除了貢獻新的程式碼,ROS 1的優秀工具也都被完全繼承到ROS 2裡,如Moveit、Rviz和rosbag等。並且有些模組,如navigation(導航),在開發者的改進中升級為navigation2,改善了諸多問題,提高了使用的便利性。

 

多種通訊方式

ROS 2 Topic 通訊節點和節點之間進行通訊的橋樑,節點可以同時釋出和接收話題,節點和話題之間是多對多關係

Service (服務)是ROS圖上節點通訊的另一種方法,服務基於呼叫響應模型,而不是主題的釋出者-訂閱者模型。服務端和客戶端之間,是一對一或一對多關係

Action 是ROS 2中用於長時間執行任務的通訊型別之一,它們由三部分組成:目標,結果和反饋

ROS 2 的成熟案例

美軍投資的Ghost Robotics,其四足機器人使用了Eloquent版本的ROS 2進行開發,DDS方案選用的是商用的Cyclone DDS

 Mission Robotics 的水下機器人(ROV),使用了Foxy版本的ROS 2進行開發

總結

汽車產業真正的革命已經開始,軟體定義汽車的時代已經到來。汽車正加速從從機械裝置向高度數字化、資訊化的智慧終端轉變,涉及領域龐大並且複雜。一輛自動駕駛的汽車,從某種意義上來說,也是一個自動駕駛的機器人,理所當然的可以是使用ROS 2進行開發,ROS 2提供了大量基礎元件,大大便利了包括導航演算法、自動駕駛演算法和一些AI演算法的部署。當然ROS 2仍然有很多缺陷,ROS 2的排程模型無法搶佔,有時候優先順序高的排程例項可能被低優先順序的排程阻塞,還沒有一家汽車行業公司利用ROS 2將產品落地。

面對這些挑戰,極氪的軟體及電子中心大膽嘗試,基於ROS 2的通訊框架和平臺架構,進行基於SOA架構的汽車作業系統的開發,並且取得不錯的測試效果。極氪的軟體及電子中心的在一直在前沿技術方面做深入探索,致力於打造ZEEKR OS整車作業系統,也歡迎各位有志之士加入我們,共同探索下一代汽車作業系統。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70015448/viewspace-2888108/,如需轉載,請註明出處,否則將追究法律責任。

相關文章