ROS是機器人操作系統(tǒng)(Robot Operating System)的英文縮寫。ROS是用于編寫機器人軟件程序的一種具有高度靈活性的軟件架構。ROS的原型源自斯坦福大學的STanford Artificial Intelligence Robot (STAIR) 和 Personal Robotics (PR)項目。
機器人的工業(yè)界和學術界在軟件工具的使用上是有明顯的分歧的。由于機器人的工業(yè)界并不像消費類電子這樣出貨量巨大,所以絕對高的技術壁壘和封閉的生態(tài)是十分常見的。為了提高自己的技術壁壘,這些公司往往會自己設計一整套封閉的軟硬件,以達到讓其他人(競爭對手或開發(fā)者)無法用自己的工具替換之的目的。而學術界,學生和老師們?yōu)榱藴p少重復造輪子的工作,往往會擁抱開源社區(qū),選擇現有的工具進行開發(fā)和研究,最廣為人知的便是ROS(Robot Operating System)。
ROS是什么
ROS/ROS 2并不是一個軟件,而是一系列軟件的集合。一般我們稱之為軟件解決方案堆棧。包含如硬件驅動程序、網絡模塊、通信架構和機器人算法實現等等。ROS將所有這些功能包放在一個保護傘下,因此開發(fā)人員無需重新造輪子。
ROS并不是一個操作系統(tǒng),而一般稱之為元操作系統(tǒng),即基于操作系統(tǒng)以上的類操作系統(tǒng)。
ROS并不是一個中間件,因為它實現了包括感知、導航、控制、運動規(guī)劃和仿真等多種功能。
ROS
ROS1.0版本發(fā)布于2010年,基于PR2機器人開發(fā)了一系列機器人相關的基礎軟件包。隨后ROS版本迭代頻繁,ROS的版本一般會隨著Ubuntu系統(tǒng)長期支持(LTS)版本而更新,其中ROS目前最新的版本都已經適配到Ubuntu 20.04 LTS。ROS僅在Ubuntu上進行CI測試,但是社區(qū)成員積極支持其他Linux版本、Mac OS X、Android、Windows,使得ROS可以兼容,但僅提供有限制性的功能支持。
ROS的歷史版本
ROS版本 | 發(fā)布時間 | Ubuntu版本 |
---|---|---|
ROS Noetic Ninjemys | May 23rd, 2020 | Ubuntu 20.04(Focal) |
ROS Melodic Morenia | May 23rd, 2018 | Ubuntu 18.04(Bionic) |
ROS Lunar Loggerhead | May 23rd, 2017 | Ubuntu 17.04(Zesty) |
ROS Kinetic Kame | May 23rd, 2016 | Ubuntu 16.04(Xenial) |
ROS Jade Turtle | May 23rd, 2015 | Ubuntu 15.04 (Vivid) |
ROS Indigo Igloo | July 22nd, 2014 | Ubuntu 14.04 (Trusty) |
ROS Hydro Medusa | September 4th, 2013 | Ubuntu 12.04 (Precise) |
ROS Groovy Galapagos | December 31, 2012 | Ubuntu 12.04(Precise) |
ROS Fuerte Turtle | April 23, 2012 | Ubuntu 10.04(Lucid) |
ROS Electric Emys | August 30, 2011 | Ubuntu 10.04(Lucid) |
ROS Diamondback | March 2, 2011 | Ubuntu 10.04(Lucid) |
ROS C Turtle | August 2, 2010 | Ubuntu 9.04(Lucid) |
ROS Box Turtle | March 2, 2010 | Ubuntu 8.04(Hardy) |
ROS的優(yōu)缺點對比
ROS為我們開發(fā)機器人帶來了許多方便,然而它也確實存在一些問題:
優(yōu)點 | 缺點 |
---|---|
松散耦合的機制提供框架 | 通信實時性能有限 |
豐富的機器人功能庫 | 系統(tǒng)穩(wěn)定性尚不滿足工業(yè)級要求 |
龐大的用戶群體 | 安全性上沒有防護措施 |
免費開源 | 僅支持Linux(Ubuntu) |
便利的數據記錄、分析、仿真工具 | 核心機制的性能沒有優(yōu)化占用資源 |
ROS的成熟案例
ROS已經走過十個年頭,伴隨著機器人技術的大發(fā)展,ROS也得到了極大的推廣和應用。盡管ROS還存在不少局限性,但無法掩蓋ROS的鋒芒,社區(qū)內的功能包還是呈指數級逐年上漲,為機器人開發(fā)帶來了巨大的便利。不少開發(fā)者和研究機構還針對ROS的局限性進行了改良,但這些局部功能的改善往往很難帶來整體性能的提升,在行業(yè)內也積累了大量成熟的應用:
機械臂控制器中領軍企業(yè)KEBA,他們的控制器已經支持ROS :
美國NASA基于ROS開發(fā)的Robonaut 2:
百度apollo無人車的底層是基于ROS開發(fā)的:
總體來說,ROS更適合科研和開源用戶使用,如果在工業(yè)場景應用(例如無人駕駛)還需要做優(yōu)化和定制,目前ROS已經停止更新,機器人開發(fā)者對新一代ROS的呼聲越來越大,ROS2.0的消息也不絕于耳。
ROS 2
ROS無法真正進入產業(yè)界,也自然無法產品化。為了解決這一問題,社區(qū)提出了ROS 2。使得ROS具備產品化的特性,包括實時性、適應于全平臺、適用于性能低的硬件(MCU+RTOS)、分布式、數據加密和現代編程語言的支持。
ROS 2的歷史版本
ROS 版本 | 發(fā)布時間 | Ubuntu版本 |
---|---|---|
Humble Hawksbill | May 23rd, 2022 | TBD |
Galactic Geochelone | May 23rd, 2021 | Ubuntu 20.04(Focal) |
Foxy Fitzroy | June 5th, 2020 | Ubuntu 20.04(Focal) |
Eloquent Elusor | November 22nd, 2019 | Ubuntu 18.04 (Bionic) |
Dashing Diademata | May 31st, 2019 | Ubuntu 18.04 (Bionic) |
Crystal Clemmys | December 14th, 2018 | Ubuntu 16.04 (Xenial) |
Bouncy Bolson | July 2nd, 2018 | Ubuntu 16.04 (Xenial) |
Ardent Apalone | December 8th, 2017 | Ubuntu 16.04 ( Xenial) |
實時化與分布式
為了解決消息間通訊的去中心化和實時性問題,ROS 2引入了Data Distribution Service(DDS),一種已經廣泛應用于國防、民航、工業(yè)控制等領域,成為分布式實時系統(tǒng)中數據發(fā)布/訂閱的標準解決方案。如下圖所示,左邊是ROS 1,右邊是ROS 2。
在ROS 1中,用戶的每個節(jié)點,無論是同一設備還是不同設備,必須已知Master節(jié)點的IP,并且全部依賴于Master節(jié)點進行通訊,一旦Master節(jié)點發(fā)生故障或該設備發(fā)生故障,則整個環(huán)境的所有節(jié)點功能盡失。無法恢復。也正因為這一點,ROS 1無法應用于正式的產品。
ROS 2引入了基于DDS的去中心化的數據通訊方式,不同節(jié)點可以通過未知IP的方式進行通訊,也進而有助于解決多機器人系統(tǒng)的問題。并且ROS 2也引入了 Quality of Service的機制,通過設定不同的服務質量來保障某些較差網絡環(huán)境下也可以具備良好的通訊效果。
實時性
而對于實時性,由于DDS在諸多工業(yè)和產業(yè)有諸多應用,具有良好的生態(tài),其性能毋庸置疑。如下圖的測試結果:
測試設備為兩臺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為例,可以看到從延時上,在該雙設備間通訊中可以穩(wěn)定在100μs以下,而吞吐量的帶寬也達到了750Mbit/s以上。詳細的跑分數據可以參考Fast-RTPS vs Cyclone DDS vs OpenSplice DDS進行了解,且同設備內的通訊效率會遠超該結果。
數據加密
ROS 2在DDS的基礎之上引入了SROS的概念,設計文檔參考ROS 2 DDS-Security integration,即所有的ROS 2消息均可通過SROS進行加解密、鑒權、授權控制、Log和數據標記的權限控制等。基于ROS 2的原本設計邏輯,我們甚至可以將數據的密鑰生成和存儲放到ARM TEE OS中,以實現較高安全的數據保證
現代編程語言的支持
由于ROS 1的最初發(fā)行版在2007年,長期以來的支持和眾多開發(fā)庫的支持導致很多語言的新特性并不能良好地應用。比如對于Python,直至2020年發(fā)布的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下面那一行所示,只要開發(fā)者愿意,可以支持任何編程語言。
靈活的機制
ROS 2提供了一種基于生命周期的管理模式, 即每個節(jié)點的運行狀態(tài)是完全可控的。參考設計文檔Managed nodes的闡述。所有Managed節(jié)點都可以在運行時進行實時配置、管理、關閉和啟動,并在出錯時可以由管理節(jié)點進行喚醒和重置。這種方式保證了整個系統(tǒng)的穩(wěn)定性和魯棒性,也提高了系統(tǒng)出錯后恢復到正常的能力。
ROS 2在運行時可以更換DDS中間件,也可以在不同DDS中間件的實現間進行通訊。
5G的支持
ROS 2在Ericsson的推動下,正在商討5G的ROS 2通訊方案的制定和實現。
全新的生態(tài)
繼承ROS 1廣博的開源生態(tài)資源,ROS 2的發(fā)布激起了大家對于ROS產品化的熱情,許多公司都向ROS 2貢獻方案和代碼,包括但不限于Intel、NVIDIA、Ericsson等。
除了貢獻新的代碼,ROS 1的優(yōu)秀工具也都被完全繼承到ROS 2里,如Moveit、Rviz和rosbag等。并且有些模塊,如navigation(導航),在開發(fā)者的改進中升級為navigation2,改善了諸多問題,提高了使用的便利性。
多種通訊方式
ROS 2 Topic通訊節(jié)點和節(jié)點之間進行通訊的橋梁,節(jié)點可以同時發(fā)布和接收話題,節(jié)點和話題之間是多對多關系。
Service(服務)是ROS圖上節(jié)點通信的另一種方法,服務基于呼叫響應模型,而不是主題的發(fā)布者-訂閱者模型。服務端和客戶端之間,是一對一或一對多關系。
Action是ROS 2中用于長時間運行任務的通信類型之一,它們由三部分組成:目標,結果和反饋。
ROS 2的成熟案例
美軍投資的Ghost Robotics,其四足機器人使用了Eloquent版本的ROS 2進行開發(fā),DDS方案選用的是商用的Cyclone DDS。
Mission Robotics的水下機器人(ROV),使用了Foxy版本的ROS 2進行開發(fā)。
總結
汽車產業(yè)真正的革命已經開始,軟件定義汽車的時代已經到來。汽車正加速從從機械設備向高度數字化、信息化的智能終端轉變,涉及領域龐大并且復雜。一輛自動駕駛的汽車,從某種意義上來說,也是一個自動駕駛的機器人,理所當然的可以是使用ROS 2進行開發(fā),ROS 2提供了大量基礎組件,大大便利了包括導航算法、自動駕駛算法和一些AI算法的部署。當然ROS 2仍然有很多缺陷,ROS 2的調度模型無法搶占,有時候優(yōu)先級高的調度實例可能被低優(yōu)先級的調度阻塞,還沒有一家汽車行業(yè)公司利用ROS 2將產品落地。
面對這些挑戰(zhàn),極氪的軟件及電子中心大膽嘗試,基于ROS 2的通訊框架和平臺架構,進行基于SOA架構的汽車操作系統(tǒng)的開發(fā),并且取得不錯的測試效果。極氪的軟件及電子中心的在一直在前沿技術方面做深入探索,致力于打造ZEEKR OS整車操作系統(tǒng),也歡迎各位有志之士加入我們,共同探索下一代汽車操作系統(tǒng)。
-
機器人
+關注
關注
210文章
28108瀏覽量
205858 -
操作系統(tǒng)
+關注
關注
37文章
6689瀏覽量
123141 -
ROS
+關注
關注
1文章
276瀏覽量
16942
發(fā)布評論請先 登錄
相關推薦
評論