"Powering the worlds robots" 的ROS是什麼?

隨著人工智慧的發展,機器人也迎來了全新的發展機遇。機器人與人工智慧大潮的噴發,必將像互聯網一般,再次為人們的現代生活帶來一次全新的革命。

1. 歷史起源

硬體技術的飛速發展,在促進機器人領域快速發展和複雜化的同時,也對機器人系統的軟體開發提出了巨大挑戰。機器人平台與硬體設備越來越豐富,致使軟體代碼的復用性和模塊化需求越加強烈,而已有的機器人系統又不能很好地適應需求。

為迎接機器人軟體開發面臨的巨大挑戰,產生了多種優秀的機器人軟體框架,為軟體開發工作提供了極大的便利,其中最為優秀的軟體框架之一就是機器人操作系統ROS(Robot Operating System)。

ROS是一個用於編寫機器人軟體的靈活框架,它集成了大量的工具、庫、協議,提供類似操作系統所提供的功能,包括硬體抽象描述、底層驅動程序管理、共用功能的執行、程序間的消息傳遞、程序發行包管理,可以極大簡化繁雜多樣的機器人平台下的複雜任務創建與穩定行為控制。

ROS最初應用於斯坦福大學人工智慧實驗室與機器人技術公司Willow Garage合作的個人機器人項目(Personal Robots Program),2008年Willow Garage接手維護,2013年後由開源機器人基金會(OSRF)管理。

該項目研發的機器人——PR2,在ROS框架的基礎上,可以完成插插座、疊衣服、做早飯等不可思議的功能。2010年Willow Garage正式以開放源碼的形式發布了ROS框架,並很快在機器人研究領域掀起了ROS開發與應用的熱潮。

https://www.zhihu.com/video/951769083033763840

在短短的幾年時間裡,ROS得到了廣泛應用,各大機器人平台幾乎都支持ROS框架,例如Pioneer、Nao、TurtleBot、Lego NXT等,開源社區內的ROS功能包也呈指數級增長,涉及的應用領域包括輪式機器人、人形機器人、工業機器人、農業機器人等。

ROS在機器人領域的浪潮也湧入國內,近年來國內機器人開發者也普遍採用ROS開發自己的機器人系統,不少科研院校和高新企業已經在ROS的集成方面取得了顯著成果,並且不斷反哺ROS社區,促進了開源社區的繁榮發展。

ROS的迅猛發展,已經促使它成為機器人領域的事實標準

2. 設計目標

ROS的設計目標是提高機器人研發中的軟體復用率,所以它被設計成一種分散式的結構,使得框架中的每個功能模塊都可以被單獨設計、編譯,並且在運行時以鬆散耦合的方式結合在一起。

ROS主要為機器人開發提供硬體抽象、底層驅動、消息傳遞、程序管理、應用原型等功能和機制,同時整合了許多第三方工具和庫文件,幫助用戶快速完成機器人應用的建立、編寫和多機整合。

ROS中的功能模塊都封裝於獨立的功能包(Package)或元功能包(Meta Package)中,便於在社區中共享和分發。

那些人類微不足道的行為,常常基於複雜的任務需求和環境影響,對於這些問題的處理,具有極大的複雜度,單一的開發者或者研究機構都無法獨立完成。ROS的出現,就是為了鼓勵更多的開發者、實驗室或者研究機構共同協作來開發機器人軟體。

例如一個擁有室內地圖建模領域專家的實驗室,可能會開發並發布一個先進的地圖建模系統;一個擁有導航方面專家的組織,可以使用建模完成的地圖進行機器人導航;另一個專註於機器人視覺的組織,可能開發出了一個物體識別的有效方法。ROS為這些組織機構提供了一種相互合作的高效方式,可以在已有成果的基礎上繼續自己工作的構建。

3. 主要特點

ROS的核心——點對點的分散式網路,使用了基於TCP/IP的通信方式,實現模塊間點對點的松耦合連接,可以執行若干種類型的通信,包括基於話題(Topic)的非同步數據流通信,基於服務(Service)的同步遠程過程調用(Remote Procedure Call Protocol,RPC)通信,還有參數伺服器上的數據存儲等。

總體來講,ROS的特點主要有以下幾點:

(1)點對點的設計

在ROS中,每一個進程都是以一個節點的形式運行,可以分布於多個不同的主機。節點間的通信消息通過一個帶有發布和訂閱功能的RPC傳輸系統,從發布節點傳送到接收節點。這種點對點的設計,可以分散定位、導航等功能帶來的實時計算壓力,適應多機器人協同工作遇到的挑戰。

(2) 多語言支持

為支持更多應用的移植和開發,ROS被設計成一種語言弱相關的框架結構。ROS使用簡潔、中立的定義語言描述模塊之間的消息介面,在編譯的過程中再產生所使用語言的目標文件,為消息交互提供支持,同時也允許消息介面的嵌套使用。目前已經支持Python、C++、Java、Octave和LISP等多種不同的語言,也可以同時使用這些語言完成不同模塊的編程。

為了支持交叉語言,ROS利用了簡單的、語言無關的介面定義語言去描述模塊之間的消息傳送。介面定義語言使用了簡短的文本去描述每條消息的結構,也允許消息的合成,例如上圖就是利用介面定義語言描述的圖像消息。

(3)架構精簡、集成度高

在已有繁雜的機器人應用中,軟體的復用性是一個巨大的問題。很多驅動程序、應用演算法、功能模塊在設計時過於混亂,導致其很難在其他機器人或應用中進行移植和二次開發。而ROS框架具有的模塊化特點,使得每個功能節點可以進行單獨編譯,並且使用統一的消息介面讓模塊的移植、復用更加便捷。

同時,ROS開源社區中移植、集成了大量已有開源項目中的代碼,例如Open Source Computer Vision Library(OpenCV庫)、Point Cloud Library(PCL庫)等,開發者可以使用豐富的資源實現機器人應用的快速開發。

(4)組件化工具包豐富

移動機器人的開發,往往需要一些友好的可視化工具和模擬軟體,ROS採用組件化的方法將這些工具和軟體集成到系統當中,可以作為一個組件直接使用。例如3D可視化工具rviz(Robot Visualizer)可以幫助開發者顯示機器人3D模型、環境地圖、導航路線等信息。此外,ROS中還有消息查看、物理模擬等組件,提高了機器人開發的效率。

(5)免費並且開源

ROS遵照的BSD許可給使用者較大的自由,允許其修改和重新發布其中的應用代碼,甚至可以進行商業化的開發與銷售。ROS開源社區中的應用代碼以維護者來分,主要包含由Willow Garage公司和一些開發者設計、維護的核心庫部分,以及由不同國家的ROS社區組織開發和維護的全球範圍的開源代碼。

在短短的幾年裡,ROS軟體包的數量呈指數級增加,開發者可以在社區中下載、復用琳琅滿目的機器人功能模塊,大大加速了機器人的應用開發。

4. ROS是什麼

總結而言,ROS是什麼?

1. ROS的核心是一個分散式、低耦合的通訊機制;

2. ROS提供多種機器人開發工具,可以快速實現數據可視化、機器人模擬等功能;

3. ROS開源社區中包含大量機器人應用功能,可以幫助我們快速開發功能原型;

4. ROS已經成為一個龐大的生態系統,包含機器人領域的方方面面,同時也得到了越來越多第三方工具的支持,為機器人開發提供了系統化的解決方案。

ROS發展迅猛,短短10年時間就已經成為機器人領域的事實標準,基於ROS開發的百度Apollo無人車更是在春晚舞台上得到了廣泛讚譽。

但是ROS也並不是完美的,隨著ROS2的發布和完善,ROS必將成為機器人開發不可或缺的一環,實現"Powering the worlds robots!"的目標,而智能時代的機器人,也許將"Powering the world!"。

願ROS伴你度過一段美好的機器人開發之旅!

PS.附上一張ROS簡史:

更多內容可關注微信公眾號:古月居 (guyue_home)

或訪問古月居網站:

古月居 - 怕什麼真理無窮,進一寸有一寸的歡喜www.guyuehome.com


推薦閱讀:

超多模型,四層編程,能力風暴氪1號積木機器人暢玩體驗篇(附視頻)
德國研發黑猩猩機器人登月採礦,未來或將「稱霸月球」
服務機器人新秀公司——黑石機器人能否成為中國的Fanuc
無孔不入的毫米級機器人問世,黑科技受摺紙令人敬畏
極市分享|藍胖子機器人CTO張浩:機器人操控中的計算機視覺

TAG:機器人 | 機器人操作平台ROS |