安 峰
(蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院 納米科技學(xué)院, 蘇州 215123)
基于開源操作系統(tǒng)ROS的機(jī)器人軟件開發(fā)
安 峰
(蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院 納米科技學(xué)院, 蘇州 215123)
ROS(機(jī)器人操作系統(tǒng))是一套機(jī)器人軟件框架,基于這一框架,人們可以快速開發(fā)出控制機(jī)器人的一系列應(yīng)用,是目前大多數(shù)機(jī)器人系統(tǒng)的首選軟件平臺。掃地機(jī)器人、四軸飛行器、機(jī)器小車等,雖然各自的配件、外形或功能等各不相同,但是它們有一個(gè)共同點(diǎn)就是均運(yùn)行在ROS系統(tǒng)框架之上。ROS本身的優(yōu)良設(shè)計(jì)使其兼具了精簡與集成、多語言多平臺支持、點(diǎn)對點(diǎn)設(shè)計(jì)以及開源免費(fèi)等特點(diǎn)。目前,越來越多的機(jī)器人廠商將基于ROS平臺進(jìn)行軟件設(shè)計(jì)研發(fā),而更多廠商的使用反過來又成為ROS的進(jìn)一步完善與普及的巨大推動力。
ROS;機(jī)器人;節(jié)點(diǎn);操作系統(tǒng);導(dǎo)航
引 言
機(jī)器人現(xiàn)在越來越多地出現(xiàn)在人們的視野當(dāng)中,如掃地機(jī)器人、卡通機(jī)器人、足球機(jī)器人等。通常認(rèn)為機(jī)器人(Robot)是自動執(zhí)行工作的機(jī)器裝置。它既可以接受人類指揮,又可以運(yùn)行預(yù)先編排的程序,還可以根據(jù)以人工智能技術(shù)制定的原則綱領(lǐng)行動。它的任務(wù)是協(xié)助或取代人類的某些工作,例如生產(chǎn)業(yè)、建筑業(yè)或是危險(xiǎn)的工作。它是高級整合控制論、機(jī)械電子、計(jì)算機(jī)、材料和仿生學(xué)的產(chǎn)物。在工業(yè)、醫(yī)學(xué)、農(nóng)業(yè)、建筑業(yè)甚至軍事等領(lǐng)域中均有重要用途。
機(jī)器人可以大致上分為兩大類:工業(yè)機(jī)器人和特種機(jī)器人。所謂工業(yè)機(jī)器人就是面向工業(yè)領(lǐng)域的多關(guān)節(jié)機(jī)械手或多自由度機(jī)器人;而特種機(jī)器人則是除工業(yè)機(jī)器人之外的、用于非制造業(yè)并服務(wù)于人類的各種先進(jìn)機(jī)器人,包括:服務(wù)機(jī)器人、水下機(jī)器人、娛樂機(jī)器人、軍用機(jī)器人、農(nóng)業(yè)機(jī)器人、機(jī)器人化機(jī)器等。在特種機(jī)器人中,有些分支發(fā)展很快,有獨(dú)立成體系的趨勢,如服務(wù)機(jī)器人、水下機(jī)器人、軍用機(jī)器人、微操作機(jī)器人等。
圖1是已經(jīng)面世的一些機(jī)器人類型。
圖1 常見的一些機(jī)器人
不管外形如何千變?nèi)f化、功能如何千差萬別,從設(shè)計(jì)的角度來看,機(jī)器人通常是由硬件和軟件來組成的。硬件部分包括計(jì)算控制核心、執(zhí)行機(jī)構(gòu)、驅(qū)動裝置、檢測裝置、控制系統(tǒng)和復(fù)雜機(jī)械等;軟件部分則包括傳感器信息采集、控制算法、通信、計(jì)算控制算法等。
隨著機(jī)器人領(lǐng)域的快速發(fā)展和復(fù)雜化,硬件設(shè)計(jì)已經(jīng)不再是機(jī)器人設(shè)計(jì)上的最大困難,取而代之的是軟件設(shè)計(jì)的復(fù)雜性、代碼的復(fù)用性和模塊化,如機(jī)器人導(dǎo)航、視覺判斷、智能化等。人們迫切需要一款軟件平臺,基于這款平臺,全世界的機(jī)器人生產(chǎn)廠商、開發(fā)人員可以使用前人已經(jīng)設(shè)計(jì)好的算法,或者是很方便地導(dǎo)入自己的算法,而不用去關(guān)心因硬件平臺(如是控制機(jī)械手還是螺旋槳)的不同而導(dǎo)致的問題。已有的開源機(jī)器人系統(tǒng)不能很好地適應(yīng)這一需求,于是在2010年,Willow Garage公司發(fā)布了開源機(jī)器人操作系統(tǒng)ROS(Robot Operating System),很快在機(jī)器人研究領(lǐng)域展開了學(xué)習(xí)和使用ROS的熱潮。
ROS系統(tǒng)起源于2007年斯坦福大學(xué)人工智能實(shí)驗(yàn)室的項(xiàng)目與機(jī)器人技術(shù)公司W(wǎng)illow Garage的個(gè)人機(jī)器人項(xiàng)目(Personal Robots Program)之間的合作,2008年之后就由Willow Garage來進(jìn)行推動,隨著PR2那些不可思議的表現(xiàn),譬如疊衣服、插插座、做早飯,ROS也得到越來越多的關(guān)注。Willow Garage公司表示希望借助開源的力量使PR2變成“全能”機(jī)器人。
PR2價(jià)格高昂,2011年零售價(jià)高達(dá)40萬美元。PR2現(xiàn)主要用于研究,它有兩條手臂,每條手臂7個(gè)關(guān)節(jié),手臂末端是一個(gè)可以張合的鉗子,PR2依靠底部的4個(gè)輪子移動。在PR2的頭部、胸部、肘部、鉗子上安裝有高分辨率攝像頭、激光測距儀、慣性測量單元、觸覺傳感器等豐富的傳感設(shè)備。在PR2的底部有兩臺8核的電腦作為機(jī)器人各硬件的控制和通信中樞。兩臺電腦安裝有Ubuntu和ROS。
ROS是開源的,是用于機(jī)器人的一種后操作系統(tǒng),或者說次級操作系統(tǒng)。它提供類似操作系統(tǒng)所提供的功能,包含硬件抽象描述、底層驅(qū)動程序管理、共用功能的執(zhí)行、程序間的消息傳遞、程序發(fā)行包管理,它也提供一些工具程序和庫用于獲取、建立、編寫和運(yùn)行多機(jī)整合的程序。
ROS的首要設(shè)計(jì)目標(biāo)是在機(jī)器人研發(fā)領(lǐng)域提高代碼復(fù)用率,ROS是一種分布式處理框架(又名Nodes),這使可執(zhí)行文件能被單獨(dú)設(shè)計(jì),并且在運(yùn)行時(shí)松散耦合。這些過程可以封裝到數(shù)據(jù)包(Packages)和堆棧(Stacks)中,以便于共享和分發(fā)。ROS還支持代碼庫的聯(lián)合系統(tǒng),使得協(xié)作亦能被分發(fā)。這種從文件系統(tǒng)級別到社區(qū)一級的設(shè)計(jì)讓獨(dú)立地決定發(fā)展和實(shí)施工作成為可能,上述所有功能都能由ROS的基礎(chǔ)工具實(shí)現(xiàn)。
ROS的運(yùn)行架構(gòu)是一種使用ROS通信模塊實(shí)現(xiàn)模塊間P2P的松耦合的網(wǎng)絡(luò)連接的處理架構(gòu),它執(zhí)行若干種類型的通信,包括基于服務(wù)的同步RPC(遠(yuǎn)程過程調(diào)用)通信、基于Topic的異步數(shù)據(jù)流通信,還有參數(shù)服務(wù)器上的數(shù)據(jù)存儲,但是ROS本身并沒有實(shí)時(shí)性。
ROS的主要特點(diǎn)可以歸納為以下幾條:
(1) 點(diǎn)對點(diǎn)設(shè)計(jì)
一個(gè)使用ROS的系統(tǒng)包括一系列進(jìn)程,這些進(jìn)程存在于多個(gè)不同的主機(jī),并且在運(yùn)行過程中通過端對端的拓?fù)浣Y(jié)構(gòu)進(jìn)行聯(lián)系。雖然基于中心服務(wù)器的那些軟件框架也可以實(shí)現(xiàn)多進(jìn)程和多主機(jī)的優(yōu)勢,但是在這些框架中,當(dāng)各電腦通過不同的網(wǎng)絡(luò)進(jìn)行連接時(shí),中心數(shù)據(jù)服務(wù)器就會發(fā)生問題。ROS的點(diǎn)對點(diǎn)設(shè)計(jì)以及服務(wù)和節(jié)點(diǎn)管理器等機(jī)制可以分散由計(jì)算機(jī)視覺和語音識別等功能帶來的實(shí)時(shí)計(jì)算壓力,能夠適應(yīng)多機(jī)器人遇到的挑戰(zhàn)。點(diǎn)對點(diǎn)設(shè)計(jì)如圖2所示。
圖2 節(jié)點(diǎn)設(shè)計(jì)
(2) 多語言支持
在寫代碼的時(shí)候,許多編程者會比較偏向某一些編程語言。這些偏好是個(gè)人在每種語言的編程時(shí)間、調(diào)試效果、語法、執(zhí)行效率以及各種技術(shù)和文化的原因?qū)е碌慕Y(jié)果。為了解決這些問題,我們將ROS設(shè)計(jì)成了語言中立性的框架結(jié)構(gòu)。ROS現(xiàn)在支持許多種不同的語言,例如C++、Python、Octave和LISP,也包含其他語言的多種接口實(shí)現(xiàn)。
ROS的特殊性主要體現(xiàn)在消息通信層,而不是更深的層次。端對端的連接和配置利用XML-RPC機(jī)制進(jìn)行實(shí)現(xiàn),XML-RPC也包含了大多數(shù)主要語言的合理實(shí)現(xiàn)描述。我們希望ROS能夠利用各種語言實(shí)現(xiàn)得更加自然,更符合各種語言的語法約定,而不是基于C語言給各種其他語言提供實(shí)現(xiàn)接口。然而,在某些情況下利用已經(jīng)存在的庫封裝后支持更多新的語言是很方便的,比如Octave的客戶端就是通過C++的封裝庫進(jìn)行實(shí)現(xiàn)的。
為了支持交叉語言,ROS利用了簡單的、語言無關(guān)的接口,定義語言去描述模塊之間的消息傳送。接口定義語言使用了簡短的文本去描述每條消息的結(jié)構(gòu),也允許消息的合成,就是利用接口定義語言描述的一個(gè)點(diǎn)的消息。
每種語言的代碼產(chǎn)生器會產(chǎn)生類似本種語言目標(biāo)文件,在消息傳遞和接收的過程中通過ROS自動連續(xù)并行的實(shí)現(xiàn)。這就節(jié)省了重要的編程時(shí)間,也避免了錯(cuò)誤:之前3行的接口定義文件自動擴(kuò)展成137行的C++代碼、96行的Python代碼、81行的Lisp代碼和99行的Octave代碼。因?yàn)橄⑹菑母鞣N簡單的文本文件中自動生成的,所以很容易列舉出新的消息類型。在編寫的時(shí)候,已知的基于ROS的代碼庫包含超過400種消息類型,這些消息從傳感器傳送數(shù)據(jù),使得物體檢測到了周圍的環(huán)境。最后的結(jié)果就是一種語言無關(guān)的消息處理,讓多種語言可以自由的混合和匹配使用。
(3) 精簡與集成
大多數(shù)已經(jīng)存在的機(jī)器人軟件工程都包含了可以在工程外重復(fù)使用的驅(qū)動和算法,不幸的是,由于多方面的原因,大部分代碼的中間層都過于混亂,以至于很困難提取出它的功能,也很難把它們從原型中提取出來應(yīng)用到其他方面。
為了應(yīng)對這種趨勢,ROS建立的系統(tǒng)具有模塊化的特點(diǎn),各模塊中的代碼可以單獨(dú)編譯,而且編譯使用的CMake工具使它很容易地就實(shí)現(xiàn)精簡的理念。ROS基本將復(fù)雜的代碼封裝在庫里,只是創(chuàng)建了一些小的應(yīng)用程序?yàn)镽OS顯示庫的功能,允許了對簡單的代碼超越原型進(jìn)行移植和重新使用。作為一種新加入的優(yōu)勢,單元測試當(dāng)代碼在庫中分散后也變得非常容易,一個(gè)單獨(dú)的測試程序可以測試庫中很多的特點(diǎn)。
ROS利用了很多現(xiàn)在已經(jīng)存在的開源項(xiàng)目的代碼,比如說從Player項(xiàng)目中借鑒了驅(qū)動、運(yùn)動控制和仿真方面的代碼,從OpenCV中借鑒了視覺算法方面的代碼,從OpenRAVE借鑒了規(guī)劃算法的內(nèi)容,還有很多其他的項(xiàng)目。在每一個(gè)實(shí)例中,ROS都用來顯示多種多樣的配置選項(xiàng),以及和各軟件之間進(jìn)行數(shù)據(jù)通信,同時(shí)對它們進(jìn)行微小的包裝和改動。ROS可以不斷地從社區(qū)維護(hù)中進(jìn)行升級,包括從其他的軟件庫、應(yīng)用補(bǔ)丁中升級ROS的源代碼。
(4) 工具包豐富
為了管理復(fù)雜的ROS軟件框架,利用了大量的小工具去編譯和運(yùn)行多種多樣的ROS組建,從而設(shè)計(jì)成了內(nèi)核,而不是構(gòu)建一個(gè)龐大的開發(fā)和運(yùn)行環(huán)境。這些工具擔(dān)任了各種各樣的任務(wù),例如組織源代碼的結(jié)構(gòu)、獲取和設(shè)置配置參數(shù)、形象化端對端的拓?fù)溥B接、測量頻帶使用寬度、生動地描繪信息數(shù)據(jù)、自動生成文檔等等。盡管已經(jīng)測試通過像全局時(shí)鐘和控制器模塊的記錄器的核心服務(wù),但是還是希望能把所有的代碼模塊化,畢竟效率上的損失遠(yuǎn)遠(yuǎn)是穩(wěn)定性和管理的復(fù)雜性上無法彌補(bǔ)的。ROS已有的工具包、應(yīng)用如圖3所示。
圖3 ROS已有的工具包、應(yīng)用
(5) 免費(fèi)并且開源
ROS所有的源代碼都是公開發(fā)布的,這必定將促進(jìn)ROS軟件各層次的調(diào)試,不斷地改正錯(cuò)誤。雖然像Microsoft Robotics Studio和Webots這樣的非開源軟件也有很多值得贊美的屬性,但是我們認(rèn)為一個(gè)開源的平臺也是無可為替代的。當(dāng)硬件和各層次的軟件同時(shí)設(shè)計(jì)和調(diào)試的時(shí)候這一點(diǎn)是尤其真實(shí)的。
ROS以分布式的關(guān)系遵循這BSD許可,也就是說允許各種商業(yè)和非商業(yè)的工程進(jìn)行開發(fā)。ROS通過內(nèi)部處理的通信系統(tǒng)進(jìn)行數(shù)據(jù)的傳遞,不要求各模塊在同樣的可執(zhí)行功能上連接在一起。如此,利用ROS構(gòu)建的系統(tǒng)可以很好的使用他們豐富的組件:個(gè)別的模塊可以包含被各種協(xié)議保護(hù)的軟件,這些協(xié)議從GPL到BSD,但是許可的一些“污染物”將在模塊的分解上就完全被消滅掉。
[1] ROS官網(wǎng). http://wiki.ros.org/.
[2] willowgarage公司網(wǎng)站.http://www.willowgarage.com/.
[3] 張建偉,張立偉,胡穎,等.開源機(jī)器人操作系統(tǒng)——ROS[M].北京: 科學(xué)出版社,2012.
[4] Jason M. O'Kane. A Gentle Introduction to ROS[M]. Charleston :CreateSpace Independent Publishing Platform,2013.
[5] 恩里克·費(fèi)爾南德斯. ROS機(jī)器人程序設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2016.
[6] 戈貝爾. ROS入門實(shí)例[M].羅哈斯,劉柯山,彭也益,等譯.廣州:中山大學(xué)出版社,2016.
安峰(講師/系統(tǒng)架構(gòu)師),主要研究領(lǐng)域?yàn)闄C(jī)器人定位與導(dǎo)航。
Robot Software Development Based on Open-source Operating System ROS
An Feng
(Suzhou Industrial Park Institute of Services Outsourcing,NTO,Suzhou 215123,China)
The Robot Operating System(ROS) is a software framework.The engineer can quickly develop a robot application based on this framework.At present,many robots such as thesweeping robot and the four-axis aircraft,they all run on the ROS system framework although they have the respective parts,appearance or function and so on.The ROS has the characteristics such as simplification and integration,multi language and multi platform supporting,point to point design and open-source free.More and more robot manufacturers will develop based on ROS platform.The use of more manufacturers in turn to further improve and popularize ROS.
ROS;robot;node;operating system;navigation
TP273
A
迪娜
2016-12-22)