【Zeekr_Tech】ROS/ROS 2介紹
極氪軟體及電子中心王陽明
前言
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【ROS】從零開始學ROSROS
- 【ROS教程】ROS常用API講解ROSAPI
- 【ROS教程】ROS常用命令ROS
- 在 ROS 中使用 Protobuf 替代 ros msgROS
- ros學習檔案系統介紹ROS
- ros 日誌ROS
- ros2ROS
- ROS | ROS機器人開發案例(古月)學習ROS機器人
- ROS2學習之旅(1)——初識ROS2ROS
- ROS——無人機ROS模擬包 rotors_simulator 編譯教程ROS無人機編譯
- ROS知識(21)----ROS C++程式碼格式化ROSC++
- ROS命令列工具ROS命令列
- ubuntu 安裝 rosUbuntuROS
- 思嵐科技釋出SLAMWARE ROS SDK,全面支援ROS系統SLAMROS
- 【ROS教程】安裝ROS全流程及可能遇到的問題ROS
- ROS2GO之系統升級篇(Ubuntu 18.04 + ROS 1 Melodic + ROS 2 Bouncy + V-Rep等)ROSGoUbuntu
- 【ROS】OpenCV+ROS 實現人臉識別(Ubantu16.04)ROSOpenCV
- ROS之初見Hello WorldROS
- ROS入門學習ROS
- ROS GUI-node,npmROSGUINPM
- ROS基本程式實現ROS
- ROS2--CompositionROS
- ROS新手上路-3ROS
- ros imu tools的使用ROS
- ROS 載入yaml教程ROSYAML
- ROS機器人導航一 : 從英雄聯盟到ROS導航ROS機器人
- ubuntu18.04下ros1和ros2的切換UbuntuROS
- 實現ARM+ROS(機器人作業系統)之執行ROS!ROS機器人作業系統
- vertica ROS和WOS錯誤ROS
- ROS學習資料大全ROS
- ROS意外崩掉解決方案ROS
- use_sim_time-ROS系列ROS
- 阿里雲ros例項阿里ROS
- 【ROS教程】話題通訊ROS
- ros 多執行緒模式ROS執行緒模式
- VScode開發ROS 解決ros找不到標頭檔案等問題VSCodeROS
- ubuntu16.04安裝rosUbuntuROS
- ROS入門教程歸納1ROS