1.1 ROS2簡介
1.1 ROS2簡介
場景
機器人是一種高度復雜的系統性實現,機器人設計包含了機械結構設計、機械加工、硬件設計、嵌入式軟件設計、上層軟件設計等諸多模塊,是各種硬件與軟件的有機結合,甚至可以說機器人系統是當今工業(yè)體系的集大成者。機器人體系是相當龐大的,其復雜度之高,以至于沒有任何個人、組織甚至公司能夠獨立完成系統性的機器人研發(fā)生產任務。
那么問題隨之而來:既然機器人實現如此困難,那么我們應該如何開展相關工作呢?
一種合適的策略是——合作。讓機器人研發(fā)者專注于自己擅長的領域,其他模塊則直接復用相關領域更專業(yè)研發(fā)團隊的實現,當然自身的研究也可以被他人繼續(xù)復用。這種基于“復用”的分工協作,遵循了不重復發(fā)明輪子的原則,顯然是可以大大提高機器人的研發(fā)效率的,尤其是隨著機器人硬件越來越豐富,軟件庫越來越龐大,這種復用性和模塊化開發(fā)需求也愈發(fā)強烈。
在此大背景下,便誕生了ROS。ROS是一套機器人通用軟件框架,可以提升功能模塊的復用性,并且隨著ROS2的推出,ROS日臻完善,是機器人軟件開發(fā)的不二之選。
概念
ROS(Robot Operating System)是用于構建機器人應用程序的軟件開發(fā)工具包。ROS是開源的,它由一組軟件庫和若干工具組成。
在機器人領域,ROS是一個標準軟件平臺,這個平臺為開發(fā)者提供了構建機器人應用程序所需的各個功能模塊,并且開發(fā)者能夠以“可插拔”的方式組織各個功能模塊,無論開發(fā)者的程序是用于課堂實驗、科學研究、原型設計或是最終產品,ROS都提供了一站式的技術支持。
另外需要注意的是,ROS雖然字面意思是機器人操作系統,但是它并非經典意義上的操作系統,更準確的講ROS是一個 SDK(Software Development Kit)也即軟件開發(fā)工具包。
作用
秉著“不要重復發(fā)明輪子”的原則,通過ROS可以復用已有功能并方便快捷的拓展新功能。
1.1.1 ROS2發(fā)展歷程
1.起源
2007年,一家名為柳樹車庫(Willow Garage)的機器人公司發(fā)布了ROS,ROS集開源、免費、高復用、低耦合、工具豐富等等諸多優(yōu)勢于一身,一經推出便迅速吸引了大量的開發(fā)者、科研人員、硬件供應商的加入,形成了穩(wěn)定且多樣的機器人生態(tài),水到渠成的ROS也成為了機器人領域的主流軟件框架并流行至今。
但是自ROS誕生的十幾年來,不管是機器人相關軟件、硬件還是ROS社區(qū)都發(fā)生了天翻地覆的變化,加之ROS1存在一些設計上的先天性缺陷,各種內外因素疊加下,導致ROS1在許多應用場景下都已經顯得力不從心了。此背景下,官方于2017正式推出了新一代機器人操作系統——ROS2,ROS2基于全新的設計框架,保留了ROS1的優(yōu)點并改進其缺陷,ROS2的目標是適應新時代的新需求。
2.發(fā)行版本
ROS發(fā)行版是一組版本化的ROS功能包,它類似于Linux發(fā)行版(例如 Ubuntu)。ROS發(fā)行版的目的是讓開發(fā)人員可以在一個相對穩(wěn)定的代碼庫上工作,直到新的發(fā)行版推出。
以下列表為ROS2各不同發(fā)布版本的簡單說明。
發(fā)行版發(fā)布日期標識停止維護日期Iron Irwini2023 年 5 月 23 日待定2024 年 11 月Humble Hawksbill2022 年 5 月 23 日2027 年 5 月Galactic Geochelone2021 年 5 月 23 日2022 年 11 月Foxy Fitzroy2020 年 6 月 5 日2023 年 5 月Eloquent Elusor2019 年 11 月 22 日2020 年 11 月Dashing Diademata2019 年 5 月 31 日2021 年 5 月Crystal Clemmys2018 年 12 月 14 日2019 年 12 月Bouncy Bolson2018 年 7 月 2 日2019 年 7 月Ardent Apalone2017 年 12 月 8 日2018 年 12 月beta32017 年 9 月 13 日2017 年 12 月beta22017 年 7 月 5 日2017 年 9 月beta12016 年 12 月 19 日2017 年 7 月alpha1 - alpha82015 年 8 月 31 日2016 年 12 月
ROS2版本發(fā)布特點:
發(fā)布版本與Ubuntu版本對應,生命周期也有Ubuntu保持一致,正常情況下偶數年份發(fā)布長支持版(5年),奇數年份發(fā)布短支持版(2年);
版本名稱由形容詞+名詞的格式組成,這一點與Ubuntu版本名稱規(guī)則一致;
正常情況下,每年的5月23日,世界海龜日發(fā)布新版本。
需要另外說明的是:
官方于2020年發(fā)布了ROS1的最終版本,并將于2025年終止ROS1的維護。而早在2017年就已經推出了ROS2的第一個正式版本,并且隨著ROS2的不斷完善,于2022年又推出ROS2的第一個5年長支持版。對于ROS而言,這是一個里程碑式的事件,這意味著自此開始,ROS2將全面取代ROS1。
1.1.2 ROS2組成體系
整個ROS生態(tài)由通信(Plumbing)、工具(Tools)、功能(Capabilities)與社區(qū)(Community)四大部分組成。
通信(Plumbing)
通信是整個ROS系統的核心實現,是ROS內置的一個消息傳遞系統,通常稱之為middleware(中間件)或Plumbing(管道)。
在構建新的應用程序或使用與硬件交互的軟件時,如何實現通信是首當其沖的問題,為此ROS提供了專門的消息傳遞系統,它可以管理不同節(jié)點之間的通信細節(jié),提高開發(fā)者的工作效率。這套消息傳遞系統使用了“面向接口”的編程思想,可以通過清晰規(guī)范的接口,將不同模塊分離,從而也將故障隔離。使得ROS系統更易于維護、擴展性更強且保證了程序的高復用性。
接口規(guī)范可以由開發(fā)者自行定義。同時為了方便使用,在ROS中也提供了許多標準的接口,這些標準接口有著廣泛應用,比如:將雷達或攝像頭數據傳輸到可視化的用戶界面或是傳輸到定位算法模塊,都會使用到標準接口。
工具(Tools)
構建機器人應用程序極具挑戰(zhàn)性。開發(fā)者除了會遇到一些傳統的軟件開發(fā)問題之外,還需要通過傳感器或執(zhí)行器與物理世界進行異步交互。顯而易見的,良好的開發(fā)工具可以提高應用程序的開發(fā)效率,在ROS中就內置了launch、調試、可視化、繪圖、錄制回放等一系列工具。這些工具不光可以提高開發(fā)效率,還可以在發(fā)布產品時直接包含在產品之中。
功能(Capabilities)
ROS生態(tài)系統是機器人軟件的聚寶盆。無論開發(fā)者需要用于GPS的設備驅動程序、用于四足仿生機器人的步行和平衡控制器,還是用于移動機器人的地圖系統,ROS都能滿足你的需求。從驅動程序到算法,再到用戶界面,ROS都提供了相關實現,開發(fā)者只需專注于自身應用程序即可。
ROS的目標是提供一站式的技術支持,降低構建機器人應用程序的門檻。ROS希望任何開發(fā)者都可以將自己的“創(chuàng)意”變?yōu)楝F實,而無需了解底層軟件和硬件的所有內容。
社區(qū)(Community)
ROS社區(qū)規(guī)模龐大、多樣且全球化,從學生和業(yè)余愛好者到跨國公司和政府機構,各行各業(yè)的人和組織都在推動著ROS項目的發(fā)展。
該項目的社區(qū)中心和中立管家是Open Robotics,它托管共享在線服務(例如ROS官網:https://www.ros.org/),創(chuàng)建和管理分發(fā)版本(包括您安裝的二進制包),并開發(fā)和維護大部分ROS核心軟件。 Open Robotics還提供與 ROS 相關的工程服務。
1.1.3 ROS2優(yōu)勢
1.ROS與其他機器人軟件框架比較
ROS是構建機器人的最快捷方式!
1.1 開源
ROS一直是開源的,并且將永遠是開源的,以確保全世界的愛好者、開發(fā)人員可以自由、不受限制地訪問高質量、一流、功能齊全的機器人SDK。另外官方也在其他開源項目之上構建ROS,ROS會盡可能的利用并遵循開放標準(例如OMG的DDS)。
1.2 免費
官方鼓勵用戶對ROS做出開源貢獻,也歡迎提出寶貴意見,但不干涉開發(fā)者將ROS集成進非開源軟件,不反對將ROS集成進專有產品。
1.3 多平臺支持
ROS2支持Linux、Windows和macOS以及各種嵌入式平臺(通過micro-ROS)并且不同平臺都已經通過了官方測試,這意味著通過ROS2可以實現開發(fā)、部署后端管理系統和用戶界面的無縫銜接。分層支持模型還允許將ROS2移植到諸如實時和嵌入式操作系統等新平臺上,以便在獲得關注和投資時將ROS2引入和推廣到這些新平臺中。
1.4 應用領域廣泛
ROS可以在各種機器人應用中使用,從室內到室外,從家用到汽車,從水下到太空,從消費市場到工業(yè)領域,ROS都可以獨當一面。
1.5 全球化社區(qū)
十多年來,ROS項目通過培育由數百萬開發(fā)人員和用戶組成的全球化社區(qū),為機器人技術做出貢獻和改進,從而產生了一個龐大的機器人軟件生態(tài)系統。 ROS由該社區(qū)開發(fā)并為該社區(qū)服務,該社區(qū)將成為其未來的管理者。
1.6 可縮短產品上市時間
ROS提供了開發(fā)機器人應用程序所需的工具、庫和功能,使開發(fā)者可以將更多的時間花費在與自身業(yè)務相關的工作上。由于它還是開源的,所以開發(fā)者可以決定何時何處使用ROS,甚至還可以根據自身需求修改ROS。另外ROS是友好的,不具排他性,開發(fā)者可以在ROS和其他機器人軟件框架之間自由選擇,或者也可以將ROS與其他軟件框架集成,以取長補短。
1.7 廣泛的行業(yè)支持
業(yè)界對ROS的支持非常強大。除了在ROS上開發(fā)產品外,來自世界各地的大大小小的公司都在投入資源為ROS做出開源貢獻。
1.8 業(yè)界肯定
整個機器人行業(yè)都依賴于ROS。ROS是教授機器人技術的標準,是大多數機器人研究的基礎,從單個學生項目到多機構合作再到大型競賽,ROS都占據著主導地位。世界各地不計其數的機器人內部都運行著ROS,僅在自主移動機器人 (AMR) 中,ROS就幫助創(chuàng)造了數十億美元的價值。
2.ROS2較之于ROS1的優(yōu)勢
ROS2是全新一代機器人操作系統,不只是功能增強的ROS1。
2.1 去中心化
在ROS1中使用master節(jié)點管理調度ROS系統,這存在極大的安全隱患,一旦master節(jié)點異常退出,那么會導致整個系統的崩潰。在ROS2中采用了去中心化,各個節(jié)點之間無需通過master關聯,各個節(jié)點都是等態(tài)的,可以相互發(fā)現彼此。
2.2 全新通信底層實現
秉著不重復發(fā)明輪子的原則,ROS2不再自實現通信底層,而是直接更換為DDS通信,這使得ROS2較之于ROS1無論是通信的實行性、可靠性還是連續(xù)性都有大幅度提升。
2.3 應用場景更為廣泛
ROS1在設計之初有著天生的硬件優(yōu)勢以及局限性:
單機;
工作站級的計算資源;
無實時性要求(有此類需求也可以以特殊方式滿足);
出色的網絡連接(有線或近距離高帶寬無線);
主要用于學術界;
靈活有余而約束不足。
這導致了它的一些先天性缺陷,不能適應新時代的需求,比如:
對多機器人編隊支持欠佳;
小型嵌入式平臺不能很好的支持ROS;
實時性差;
ROS之間的數據傳輸受網絡質量影響嚴重;
產品不易落地。
隨著ROS2的推出,上述場景的缺陷都得到很大程度的修復。
2.4 大量采用新技術、新的設計理念
隨著ROS十數年的發(fā)展,大量的新技術也產生、改進、成熟并被廣泛采用,ROS也開始引入并應用一些新技術,比如:
DDS( Data Distribution Service——數據分發(fā)服務);
Zeroconf;
ZeroMQ;
Redis;
WebSockets。
這些新技術為ROS帶來了更多的便利,比如:更少的維護成本,卻有著更多的功能拓展,并且隨著第三方庫的升級而持續(xù)受益。
此外,ROS2還重構了API系統,改進了ROS1的API在設計上的不足。
【課程內容和講義內容持續(xù)更新,詳情請關注猛獅集訓營知識星球】