天天看點

簡介汽車上的機器人作業系統(ROS)

作者:焉知汽車

ROS與智能駕駛

ROS全稱Robot Operating System,直接翻譯就是機器人作業系統。雖然名字裡含有“作業系統”的字眼,但ROS與Windows和Linux等作業系統不一樣,它實際上是一套軟體庫和工具,可以幫助使用者快速建立機器人應用程式。在軟體層面上,ROS是一種中間件。什麼是中間件?中間是相對的,有“上”和有“下”的時候就有“中間”。這感覺就像是“中産階級”,沒有嚴格界限。是以在有上層軟體和底層軟體的語境下,這中間的軟體就是“中間件”。ROS就是介于底層作業系統(如Linux)和上層業務應用軟體(如OpenCV)之間的中間件。

簡介汽車上的機器人作業系統(ROS)

圖1:ROS是機器人領域著名的架構

那麼ROS能出現在焉知智能汽車的公衆号裡,它跟智能汽車又有什麼關系呢?

實際上智能汽車就是一種機器人。舉個例子,您有沒有覺得家裡的掃地機器人和智能駕駛汽車非常像?近年來,智能駕駛無疑是汽車工業的當紅炸子雞,而汽車的智能駕駛化實質上也是汽車的機器人化。我們常說的“感覺”、“決策”和“規控”等,其實也是來自于機器人領域。智能網聯汽車的功能域控制器劃分,電子電氣架構的演變都能或多或少看到機器人的影子。甚至有些公司就是借用機器人傳統術語來作為傳統車企智能化改革的口号和産品藍圖。

機器人是多專業知識交叉的學科,通常涉及傳感器、驅動程式、多機通信、機械結構、算法等,為了更高效地進行機器人的研究和開發,選擇一個通用的開發架構非常必要。而ROS就是最流行的架構之一。當機器人和智能駕駛汽車一相逢,ROS順理成章的成了很多團隊開發智能駕駛的選擇,很多智能駕駛的算法應用都是基于ROS來開發的。中國智能駕駛界大名鼎鼎的“Apollo”就是基于ROS二次開發改進的。而從另一個角度來看,近年來ROS也成為了智能網聯工程師崗位招聘要求的高頻詞。熟練掌握ROS的汽車工程師毫無疑問是人才市場上的“香饽饽”。

ROS曆史簡介

首先提一下,ROS有ROS1和ROS2兩個大分支。沒有特别說明時,一般ROS都指ROS1。簡單來說ROS由來已久,進化過程中發現已有架構必須革新才能滿足更多需求,于是就開辟了ROS2,并把之前的版本統稱ROS1。

展開來看,ROS系統最早起源于2007年斯坦福大學人工智能實驗室的STAIR項目與機器人技術公司Willow Garage的個人機器人項目(Personal Robotics Program)之間的合作,2008年之後由Willow Garage公司推動其發展。幾番測試後于2010年推出了正式發行版本:ROS Box Turtle。比較有趣的是,ROS各版本均以龜作為發行代号,至今已設計出十多種造型奇特的“ROS龜”。而每一次ROS釋出新版都會按照字母順序改一個名字。例如ROS Box Turtle後是ROS C Turtle,再是Diamondback……2020年5月釋出的ROS Noetic Ninjemys則到了字母“N”,也是ROS1的最後一個版本。

簡介汽車上的機器人作業系統(ROS)

圖2:4個ROS版本及其ROS龜海報

從2008年至2013年,ROS主要由Willow Garage公司管理維護,但這并不意味着ROS是封閉的系統。相反,ROS由衆多學校及科研機構聯合開發及維護的,這種聯合開發模式也為ROS系統生态的建構與壯大帶來有力的促進。2013年,Willow Garage公司被Suitable Technologies公司收購,此前幾個月,ROS的開發和維護管理工作被移交給了新成立的開源基金會Open Source Robotics Foundation。而随着ROS的優化和豐富,對ROS的要求也越來越多,一些原始架構和設計已經不能夠滿足,于是催生了ROS2。經曆幾個測試版後,2017年ROS2正式釋出了Ardent Apalone版本,之後每版更新同樣是疊代一個字母和ROS龜海報。最新一版ROS2是今年5月份剛釋出的Humble Hawksbill。

為什麼智能汽車選擇ROS

上文提到,智能駕駛汽車就是一種機器人。但是當智能汽車選擇開發架構的時候,為什麼會這麼多人選擇ROS呢?肯定不是因為它的名字裡有“Robot”這麼簡單。而結合上文提到的ROS1和ROS2時間線,這個關于智能駕駛的選擇肯定在ROS1上開始的。究其原因,有這3個重要因素:

1、已有的開源代碼豐富。

許多智能駕駛需要用到的算法,都能在ROS生态中找到已經成熟的代碼。例如建立地圖的算法,使用雷射雷達或GPS定位算法,沿着地圖規劃路徑算法,避開障礙物的算法,攝像頭視覺處理算法等等......這些輪式機器人導航所需的算法在ROS上是現成的,幾乎都可以直接适用于智能駕駛汽車。

2、具備配套的可視化工具。

ROS自帶一套圖形工具,可以友善地記錄和可視化傳感器捕獲的資料,并以全面的方式表示車輛的狀态。此外,它還提供了一種簡單的方法來實作定制化的可視化需求。這在開發控制軟體和調試代碼時非常有用。如果您曾經在電腦前看過智能駕駛汽車傳感器的原始資料,做過調試,相信您會深刻了解一個靠譜的資料可視化工具是有多麼重要。

簡介汽車上的機器人作業系統(ROS)

圖3:利用ROS RVIZ三維可視化點雲資料

3、簡單好上手。

在開展一個新領域的時候,沒有什麼比把東西先做出來更重要了。基于ROS來開發一個智能駕駛汽車項目是比較簡單的。例如從一個簡單的輪式機器人開始,配備一對輪子、一個攝像頭、一個雷射掃描器和ROS導航軟體棧,開發者可以在幾個小時内就可以完成設定,讓小車自主行進避障。這種快速上手也可以幫助新手快速了解整個運作基礎和架構,然後再轉向更專業更深入的研究。某寶上就有很多基于ROS的智能小車,很多機構也是基于這些套件開展智能駕駛教育訓練的。

ROS1在汽車應用上的弱點

當然,ROS并不是完美的,尤其是ROS1應用在智能汽車上存在不少局限性。早年間ROS1應用于智能駕駛研發時,正是由于這些局限性,各大公司都需要在ROS上進行二次開發,以滿足智能汽車要求。那ROS1究竟有哪些弱點呢?

1、單點失效。

如下圖所示,ROS1的通訊機制是存在主從結構的。也就是節點之間的通訊都依賴于一個Master。在這種集中式通訊方式下,如果Master失效了,那麼系統就會崩潰。這在汽車行業功能安全的要求下,無疑是太脆弱了。

簡介汽車上的機器人作業系統(ROS)

圖4:ROS1通訊機制示意圖

2、實時性差。

ROS1就是基于Linux作業系統之上的。Linux原生不是實時作業系統,ROS1自然也沒有實時性的設計考慮。ROS1設計之初更多地從實作最高性能的角度出發,在任務排程和線程切換等機制設計上并沒有保證明時性所要求的“确定時間”。例如汽車動力底盤域常見的輪速信号就很容易在原生ROS1中失真。

3、缺乏網絡安全機制。

ROS1并沒有實作任何安全機制來防止第三方進入ROS1網絡并讀取節點之間的通信。這意味着任何能夠進入汽車網絡的人都可以進入ROS1的資訊傳遞并劫持汽車。這在汽車網絡安全法規日益嚴格的背景下,也無疑是力不從心的。

ROS1與ROS2

早年間,各大公司都針對ROS1弱點做了很多優化,以讓其适用于汽車。而這些研究和改進當然也回報到ROS組織本身,是以也就有了上文提到的ROS2。那麼ROS1和ROS2有什麼差别呢?ROS2對這些弱點有改進嗎?話不多說,我們先來看看兩者的系統架構框圖對比。

簡介汽車上的機器人作業系統(ROS)

圖5:ROS1和ROS2的系統架構框圖對比

由下往上看,在作業系統層,ROS2比ROS1支援的底層作業系統更多,也支援實時作業系統(RTOS)了。這就讓ROS2可以支援更多樣化的嵌入式硬體,例如汽車應用中一些輕量化的ECU。

在中間層,ROS1更多地依賴TCP和UDP協定,而在ROS2中則引入了DDS。DDS全稱是Data Distribution Service 資料分發服務,是一種分布式實時通信中間件協定,也是一個被很多公司實作的工業标準。DDS采用釋出/訂閱體系架構,強調以資料為中心,提供豐富的服務品質(QoS)政策,以保障資料進行實時、高效、靈活地分發。

正是基于DDS的通訊機制,ROS的應用層就不再需要Master節點。節點之間采用自發現機制,找到彼此,進而建立穩定的通信連接配接。這對于滿足功能安全需求,有很大幫助。當然,ROS1和ROS2的應用層軟體接口是比對的,讓ROS1上開發的應用軟體能快速複用部署到ROS2上,也是ROS2的設計目标。

由此可見,上文提到的ROS1在汽車應用上的弱點,在ROS2上都得到了針對性甚至是根本性的改善。

ROS與AUTOSAR Adaptive

在汽車領域談軟體,自然是離不開AUTOSAR的。這些年汽車硬體和軟體的發展本身也是日新月異。AUTOSAR也是在這背景下不斷優化和自我革新,AUTOSAR Adaptive就是針對多核動态作業系統的高資源環境在奮起直追,希望站穩汽車軟體架構老大的地位。ROS2和AUTOSAR Adaptive都是中間件,那它們在不斷更新進化的過程中,有沒有朝着某個共同的方向,進而出現交彙點?答案是有的。最明顯的就是DDS的通訊機制。

簡介汽車上的機器人作業系統(ROS)

圖6:DDS在AUTOSAR Adaptive通訊中的位置

如上圖所示,AUTOSAR Adaptive中的通訊管理子產品就加入了DDS的部分,并對DDS相應的功能安全和網絡安全都作了定義和描述。通過ara::com可以統一CAN PDU、SOME/IP和DDS的通訊。而DDS就是ROS2中最核心的部分。是以聚焦于這個彙合點,可以結合ROS2和AUTOSAR,取兩者之所長。

事實上這個關鍵點已經被很多公司企業抓住,并開發出了不少商用的産品。例如下圖就是Apex.AI公司的産品示意圖。Apex.AI将Apex.OS節點(比對ROS節點)與AUTOSAR Adaptive和AUTOSAR Classic平台連接配接起來。AUTOSAR arxml(包含資料類型和接口的描述)可以直接作為配置輸入。這使得設定可以靈活應對服務定義的變化。ROS Topic的資料最終可以在AUTOSAR ara::com或RTE中使用。

簡介汽車上的機器人作業系統(ROS)

圖7:Apex.AI公司統一ROS和AUTOSAR的産品示意圖(來源:Apex.AI)

寫在最後

智能汽車的發展是個複雜而又漫長的過程,期間需要不斷的技術疊代和功能創新。對于個體開發人員來說,站在巨人的肩膀上來迎接這過程中的挑戰十分重要。ROS(尤其ROS2)就是其中一個巨人肩膀。希望本文能為之前沒接觸ROS的同仁提供一個初步印象,有所幫助。有興趣進一步深入了解的朋友可以參考網絡上海量的學習資源。

參考來源:

  1. https://www.ros.org/
  2. https://www.theconstructsim.com/start-self-driving-cars-using-ros/
  3. https://robohub.org/ros-101-intro-to-the-robot-operating-system/
  4. https://www.apex.ai/post/autosar-and-ros-2-for-software-defined-vehicle

繼續閱讀