0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ROS/ROS 2 介紹

jf_78858299 ? 來源:汽車電子與軟件 ? 作者:王陽明 ? 2023-05-19 17:45 ? 次閱讀

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)。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 機器人
    +關注

    關注

    210

    文章

    28108

    瀏覽量

    205858
  • 操作系統(tǒng)

    關注

    37

    文章

    6689

    瀏覽量

    123141
  • ROS
    ROS
    +關注

    關注

    1

    文章

    276

    瀏覽量

    16942
收藏 人收藏

    評論

    相關推薦

    Micro-ROS:把ROS2放在MCU上

    機器人的發(fā)展。 ? ROS便是為機器人在研發(fā)的過程中的代碼復用提供支持的開源框架,大量的機器人開源項目,從感知到控制、從定位到構圖、從導航到可視化,幾乎都使用ROS作為基礎。 ? Micro-ROS從何而來? ? Micro-
    的頭像 發(fā)表于 04-07 07:13 ?7559次閱讀

    系統(tǒng)鏡像Ubuntu_ROS2ROS2是什么意思,帶有ROS2開發(fā)環(huán)境嗎?

    請問一下,百度文庫資料里面,下圖所示的系統(tǒng)鏡像Ubuntu_ROS2ROS2是什么意思,帶有ROS2開發(fā)環(huán)境嗎?與前面4GB版本的鏡像有什么區(qū)別?
    發(fā)表于 03-01 23:06

    ROS2的安裝與使用 精選資料推薦

    ros2的烏龜仿真turtlesim,介紹topic,service,action等元素及其使用,介紹ros的基本操作
    發(fā)表于 08-30 08:24

    什么是ROS?如何學習ROS

    什么是ROS?如何學習ROS?
    發(fā)表于 11-11 07:21

    ROS簡介

    目錄一、ROS簡介1、什么是ROS2、ROS產生、發(fā)展和壯大的原因和意義二、在Ubuntu系統(tǒng)中,安裝對應版本的ROS軟件1、確定Ubuntu配置2
    發(fā)表于 12-17 08:24

    什么是ROS?ROS產生、發(fā)展和壯大的原因和意義

    機器人操作系統(tǒng)(ROS)入門(嵌入式系統(tǒng)應用開發(fā))一、ROS 基本問題1. 什么是 ROS2. ROS 產生、發(fā)展和壯大的原因和意義二、安裝 ROS
    發(fā)表于 12-17 06:08

    ROS基本介紹

    近來找到的實習主要是做智能車控制,用到的也就是ROS機器人操作系統(tǒng),ROS需要運行在一個操作系統(tǒng)上,這個操作系統(tǒng)常用的就是Linux,而公司用的就是Ubuntu,所以Ubuntu-ROS組合就是實習的主要學習內容了。所以我就新開
    的頭像 發(fā)表于 05-19 17:07 ?7297次閱讀
    <b class='flag-5'>ROS</b>基本<b class='flag-5'>介紹</b>

    ROS1的通信架構的基礎通信方式及相關概念

    ROS的通信架構是ROS的靈魂所在,它包括數據處理,進程運行,消息傳遞等** 。這篇文章主要介紹ROS1的通信架構的基礎通信方式和相關概念,因為RO
    的頭像 發(fā)表于 05-19 17:23 ?3354次閱讀
    <b class='flag-5'>ROS</b>1的通信架構的基礎通信方式及相關概念

    如何初始化ROS并創(chuàng)立鏈接

    的主題(如/odometry)來發(fā)送消息。其他組件通過訂閱該主題來接收消息。本文內容基于慕羽★大佬文章進行了增刪。 同時由于Simulink的使用在ROS1和ROS2中沒有太多的改動,所以我們就僅對
    的頭像 發(fā)表于 11-15 17:26 ?472次閱讀
    如何初始化<b class='flag-5'>ROS</b>并創(chuàng)立鏈接

    Unity與ROS鏈接介紹

    對于ROS而言,其最常用的就是Topic話題以及Service兩個了。之前我們在了解Unity Robotics Hub時候就了解到基本的Unity和ROS的通訊,下面我們來詳細介紹一下Unity
    的頭像 發(fā)表于 11-17 17:22 ?919次閱讀
    Unity與<b class='flag-5'>ROS</b>鏈接<b class='flag-5'>介紹</b>

    ROS核心框架介紹

    ROS核心框架 對于第一個問題,我也沒仔細研究過源碼,核心代碼基本由python和C++組成,運用了xmlrpc機制,每個運行的節(jié)點可以理解成一個進程。進程間通訊有些是共享內存的方式(比如
    的頭像 發(fā)表于 11-21 18:07 ?933次閱讀
    <b class='flag-5'>ROS</b>核心框架<b class='flag-5'>介紹</b>

    ros的基本概念是什么

    基本概念: ROS是一個用于在不同進程間匿名的發(fā)布、訂閱、傳遞信息的中間件。 ROS2系統(tǒng)的核心部分是ROS網絡(ROS Graph)。 ROS
    的頭像 發(fā)表于 11-27 11:21 ?1722次閱讀

    ROS2中自帶例程測試

    如果你是一個ROS2的開發(fā)者,可能對剛才我們使用的ROS2命令比較熟悉,這時你可能也會產生一個問題:我們之前也安裝了ROS2系統(tǒng),那ROS2的原生功能還可以正常運行么? 我們再來試一試
    的頭像 發(fā)表于 11-28 16:29 ?883次閱讀
    <b class='flag-5'>ROS2</b>中自帶例程測試

    在TogetherROS中如何安裝ROS2功能包

    安裝ROS2功能包 接下來,還有一個很重要的配置,那就是安裝ROS2功能包,我們說TogetherROS是基于ROS2深度優(yōu)化的,很多模塊還是會復用ROS2中的功能,所有
    的頭像 發(fā)表于 12-01 16:02 ?905次閱讀
    在TogetherROS中如何安裝<b class='flag-5'>ROS2</b>功能包

    ros怎么設置環(huán)境變量

    設置ROS環(huán)境變量是使用ROS的重要步驟之一。本文將詳細介紹如何設置ROS環(huán)境變量,包括什么是環(huán)境變量、為什么要設置ROS環(huán)境變量、如何設置
    的頭像 發(fā)表于 12-28 13:52 ?1886次閱讀