簡(jiǎn)述
ROS為Robot Operating System(機(jī)器人操作系統(tǒng))的簡(jiǎn)寫,是一個(gè)面向機(jī)器人的開源元操作系統(tǒng)(open-source,meta-operating system)。它能夠提供類似傳統(tǒng)操作系統(tǒng)的諸多功能,如硬件抽象、底層設(shè)備控制、進(jìn)程間消息傳遞和程序包管理等。此外,它還提供相關(guān)工具和庫(kù),用于獲取、編譯、編輯代碼以及在多個(gè)計(jì)算機(jī)之間運(yùn)行程序完成分布式計(jì)算。ROS的運(yùn)行架構(gòu)是一種使用ROS通信模塊實(shí)現(xiàn)模塊間P2P的松耦合的網(wǎng)絡(luò)連接的處理架構(gòu),它執(zhí)行若干種類型的通訊,包括基于服務(wù)的同步RPC(遠(yuǎn)程過(guò)程調(diào)用)通訊、基于Topic的異步數(shù)據(jù)流通訊,還有參數(shù)服務(wù)器上的數(shù)據(jù)存儲(chǔ)。
、
歷史
ROS起源于2007年前后斯坦福大學(xué)人工智能實(shí)驗(yàn)室的STAIR(Stanford Artificial Intelligence Robot)項(xiàng)目與Willow Garage公司的個(gè)人機(jī)器人項(xiàng)目(Personal Robotics project)之間的合作。在2009年初推出了ROS0.4,現(xiàn)在所用系統(tǒng)的框架在這個(gè)版本中已初具雛形。經(jīng)過(guò)近一年的測(cè)試后,于2010年初推出了ROS1.0版,并在當(dāng)年三月份推出了正式發(fā)行版本:ROS Box Turtle,到現(xiàn)在(2016年5月)已經(jīng)發(fā)行了10個(gè)版本,最新版本是ROS Kinetic Kame。比較有趣的是,ROS各版本均以龜作為發(fā)行代號(hào),至今已設(shè)計(jì)出10種造型奇特的“ROS龜”。
從2008年至2013年,ROS主要由Willow Garage公司管理維護(hù),但這并不意味著ROS是封閉的系統(tǒng),相反,它是由眾多學(xué)校及科研機(jī)構(gòu)聯(lián)合開發(fā)及維護(hù)的,這種聯(lián)合開發(fā)模式也為ROS系統(tǒng)生態(tài)的構(gòu)建與壯大帶來(lái)有力的促進(jìn)。2013年,Willow Garage公司被Suitable Technologies公司收購(gòu),此前幾個(gè)月,ROS的開發(fā)和維護(hù)管理工作被移交給了新成立的開源基金會(huì) Open Source Robotics Foundation。
特點(diǎn)
ROS的主要目標(biāo)是為機(jī)器人研究和開發(fā)提供代碼復(fù)用的支持。ROS是一個(gè)分布式的進(jìn)程(即“節(jié)點(diǎn)”)框架,這些進(jìn)程被封裝在易于被分享和發(fā)布的程序包和功能包中。ROS也支持一種類似于代碼儲(chǔ)存庫(kù)的聯(lián)合系統(tǒng),這個(gè)系統(tǒng)也可以實(shí)現(xiàn)工程的協(xié)作及發(fā)布??梢允挂粋€(gè)工程的開發(fā)和實(shí)現(xiàn)從文件系統(tǒng)到用戶接口完全獨(dú)立決策(不受ROS限制)。同時(shí),所有的工程都可以被ROS的基礎(chǔ)工具整合在一起。
ROS在某些程度上和其他常見(jiàn)的機(jī)器人架構(gòu)有些相似之處,如:Player、Orocos、CARMEN、Orca和Microsoft Robotics Studio。對(duì)于簡(jiǎn)單的無(wú)機(jī)械手的移動(dòng)平臺(tái)來(lái)說(shuō),Player是非常不錯(cuò)的選擇。ROS則不同,它被設(shè)計(jì)為適用于有機(jī)械臂和運(yùn)動(dòng)傳感器的移動(dòng)平臺(tái)(傾角激光、云臺(tái)、機(jī)械臂傳感器)。與Player相比,ROS更有利于分布式計(jì)算環(huán)境。當(dāng)然,Player 提供了較多的硬件驅(qū)動(dòng)程序,ROS則在高層架構(gòu)上提供了更多的算法應(yīng)用(如集成OpenCV的視覺(jué)算法)。
ROS的主要特點(diǎn)可以歸納為以下幾條:
(1)點(diǎn)對(duì)點(diǎn)設(shè)計(jì)
ROS通過(guò)點(diǎn)對(duì)點(diǎn)設(shè)計(jì)以及服務(wù)和節(jié)點(diǎn)管理器等機(jī)制可以分散由于計(jì)算機(jī)視覺(jué)和語(yǔ)音識(shí)別等功能帶來(lái)的實(shí)時(shí)計(jì)算壓力,這種設(shè)計(jì)能適應(yīng)服務(wù)機(jī)器人遇到的調(diào)戰(zhàn)。
(2)不依賴編程語(yǔ)言
ROS支持多種現(xiàn)代高級(jí)編程語(yǔ)言,C++、Python和Lisp語(yǔ)言已經(jīng)在ROS中實(shí)現(xiàn)編譯,并得到應(yīng)用,Octave和Java的測(cè)試庫(kù)也已經(jīng)實(shí)現(xiàn)。為了支持多語(yǔ)言編程,ROS采用了一種語(yǔ)言中立的接口定義語(yǔ)言(language-neutral interface definition language,IDL )來(lái)實(shí)現(xiàn)各模塊之間的消息傳送。
(3)精簡(jiǎn)與集成
ROS建立的系統(tǒng)具有模塊化的特點(diǎn),各模塊中的代碼可以單獨(dú)編譯,而且編譯使用的CMake工具使它很容易的就實(shí)現(xiàn)精簡(jiǎn)的理念。ROS基本將復(fù)雜的代碼封裝在庫(kù)里,只是創(chuàng)建了一些小的應(yīng)用程序?yàn)镽OS顯示庫(kù)的功能,這就允許了對(duì)簡(jiǎn)單的代碼超越原型進(jìn)行移植和重新使用。作為一種新加入的有優(yōu)勢(shì),單元測(cè)試當(dāng)代碼在庫(kù)中分散后也變得非常的容易,一個(gè)單獨(dú)的測(cè)試程序可以測(cè)試庫(kù)中很多的特點(diǎn)。
ROS不修改用戶的主函數(shù),所以代碼可以被其他的機(jī)器人軟件使用。其優(yōu)點(diǎn)是ROS很容易和其他的機(jī)器人軟件平臺(tái)集成。例如,在計(jì)算機(jī)視覺(jué)方面,ROS已經(jīng)與OpenCV實(shí)現(xiàn)集成。在驅(qū)動(dòng)、導(dǎo)航和模擬器方面,ROS已經(jīng)與Player系統(tǒng)實(shí)現(xiàn)集成。在規(guī)劃算法方面,ROS也已與OpenAVE系統(tǒng)實(shí)現(xiàn)集成。
(4)便于測(cè)試
為機(jī)器人開發(fā)軟件比其他軟件開發(fā)更具挑戰(zhàn)性,主要是因?yàn)檎{(diào)試準(zhǔn)備時(shí)間長(zhǎng),且調(diào)試過(guò)程復(fù)雜。況且,因?yàn)橛布S修、經(jīng)費(fèi)有限等因素,不一定隨時(shí)有機(jī)器人可供使用。ROS提供兩種策略來(lái)解決上述問(wèn)題。
1.精心設(shè)計(jì)的ROS系統(tǒng)框架將底層硬件控制模塊和頂層數(shù)據(jù)處理與決策模塊分離,從而可以使用模擬器替代底層硬件模塊,獨(dú)立測(cè)試頂層部分,提高測(cè)試效率。
2.ROS另外提供了一種簡(jiǎn)單的方法可以在調(diào)試過(guò)程中記錄傳感器數(shù)據(jù)及其他類型的消息數(shù)據(jù),并在試驗(yàn)后按時(shí)間戳回放。通過(guò)這種方式,每次運(yùn)行機(jī)器人可以獲得更多的測(cè)試機(jī)會(huì)。例如,可以記錄傳感器的數(shù)據(jù),并通過(guò)多次回放測(cè)試不同的數(shù)據(jù)處理算法
(5)開源
ROS遵從BSD協(xié)議,這給了使用者很大的自由,使開發(fā)者可以清楚的查看、自由的使用源代碼,如果有需要,可以根據(jù)不同的系統(tǒng)及硬件環(huán)境對(duì)源代碼進(jìn)行修改,或者進(jìn)行二次開發(fā)。
(6)強(qiáng)大的庫(kù)及社區(qū):
ROS提供了廣泛的庫(kù)文件實(shí)現(xiàn)以機(jī)動(dòng)性、操作控制、感知為主的機(jī)器人功能。同時(shí)由于其開源特性,ROS的支持與發(fā)展依托著一個(gè)強(qiáng)大的社區(qū)。其官方網(wǎng)站尤其關(guān)注兼容性和支持文檔,提供了一套“一站式”的方案使得用戶得以搜索并學(xué)習(xí)來(lái)自全球開發(fā)者數(shù)以千計(jì)的ROS程序包。
小結(jié)
隨著技術(shù)的發(fā)展及人們需求的提高,機(jī)器人集成了越來(lái)越多的功能、傳感器,對(duì)用戶來(lái)說(shuō)這越來(lái)越方便,但對(duì)開發(fā)者來(lái)說(shuō)恰恰相反,功能的增加帶來(lái)開發(fā)與集成難度迅速上升,機(jī)器人操作系統(tǒng)的出現(xiàn)有效緩解了這種問(wèn)題。從計(jì)算機(jī)和智能手機(jī)的發(fā)展過(guò)程來(lái)看,合適與成熟的操作系統(tǒng)是智能機(jī)器人行業(yè)大規(guī)模發(fā)展和在人們的生活中普及的必要條件??梢灶A(yù)見(jiàn),未來(lái)幾年將會(huì)出現(xiàn)眾多機(jī)器人操作系統(tǒng),在經(jīng)過(guò)充分的發(fā)展競(jìng)爭(zhēng)后將會(huì)有為數(shù)不多的幾個(gè)操作系統(tǒng)會(huì)發(fā)展壯大并占據(jù)絕大部分市場(chǎng),就像曾經(jīng)的計(jì)算機(jī)操作系統(tǒng)和現(xiàn)在的手機(jī)操作系統(tǒng)。