黃開宏 楊興銳 曾志文 盧惠民 鄭志強(qiáng)
(國(guó)防科技大學(xué)機(jī)電工程與自動(dòng)化學(xué)院,湖南長(zhǎng)沙,410073)
基于ROS戶外移動(dòng)機(jī)器人軟件系統(tǒng)構(gòu)建
黃開宏 楊興銳 曾志文 盧惠民 鄭志強(qiáng)
(國(guó)防科技大學(xué)機(jī)電工程與自動(dòng)化學(xué)院,湖南長(zhǎng)沙,410073)
在機(jī)器人功能日益復(fù)雜的情況下,如何簡(jiǎn)單快速地為機(jī)器人構(gòu)建所需的軟件系統(tǒng)是一個(gè)值得探討的問題。本文首先分析了機(jī)器人軟件系統(tǒng)開發(fā)過程中面臨的問題并介紹了機(jī)器人操作系統(tǒng)(Robot Operating System, ROS)這一軟件平臺(tái)的基本概況、基本概念和主要特點(diǎn),然后基于ROS為本實(shí)驗(yàn)室研制的四輪戶外移動(dòng)機(jī)器人構(gòu)建了一套軟件系統(tǒng),實(shí)現(xiàn)了移動(dòng)機(jī)器人的底層驅(qū)動(dòng)控制、遠(yuǎn)程遙控、識(shí)別可通行區(qū)域等功能。該軟件系統(tǒng)充分展示了利用ROS軟件平臺(tái)構(gòu)建機(jī)器人軟件系統(tǒng)的靈活性、易用性和功能豐富等特點(diǎn)。
機(jī)器人,ROS,戶外移動(dòng),可通行區(qū)域識(shí)別
隨著機(jī)器人領(lǐng)域的快速發(fā)展,機(jī)器人的各項(xiàng)能力在日趨完善,為機(jī)器人編寫軟件這一工作也變得越來越復(fù)雜繁重。
機(jī)器人軟件系統(tǒng)日益復(fù)雜的原因很多,如:
1)機(jī)器人的功能層次化要求在加深。
機(jī)器人越是智能,軟件系統(tǒng)的功能分層越是明顯,從簡(jiǎn)單的底層硬件驅(qū)動(dòng)到中層的環(huán)境感知、運(yùn)動(dòng)規(guī)劃,再到高層的邏輯推理、行為決策,最終導(dǎo)致軟件系統(tǒng)越來越復(fù)雜、龐大。
2)機(jī)器人的計(jì)算平臺(tái)在擴(kuò)展。
現(xiàn)有機(jī)器人的計(jì)算平臺(tái)已經(jīng)從傳統(tǒng)的PC平臺(tái)、嵌入式平臺(tái)延伸至新興的智能手機(jī)、平板電腦等移動(dòng)設(shè)備,相應(yīng)的操作系統(tǒng)也發(fā)展到安卓、IOS等用于移動(dòng)設(shè)備的操作系統(tǒng)。機(jī)器人的軟件系統(tǒng)是否具備跨平臺(tái)的能力已經(jīng)成為開發(fā)者考慮的一個(gè)重要因素。
3)機(jī)器人用到的硬件越來越復(fù)雜。
機(jī)器人配備的傳感器從簡(jiǎn)單的光電開關(guān)、觸碰開關(guān),發(fā)展到超聲測(cè)距、激光測(cè)距,再發(fā)展到如今的激光雷達(dá)、RGBD深度攝像頭等復(fù)雜設(shè)備。這些傳感器不斷提升了機(jī)器人的感知能力,相伴而來的則有越來越大的數(shù)據(jù)吞吐量,這對(duì)軟件系統(tǒng)的實(shí)時(shí)性、可靠性等方面提出了挑戰(zhàn)。
4)對(duì)軟件仿真的需求在加深。
通過計(jì)算機(jī)對(duì)實(shí)際的機(jī)器人系統(tǒng)進(jìn)行仿真模擬可以有效地縮短機(jī)器人的開發(fā)時(shí)間和成本。但是,開發(fā)一套具有實(shí)時(shí)性和真實(shí)性高、通用性強(qiáng)、使用方便的仿真軟件往往需要耗費(fèi)大量的時(shí)間。
為了簡(jiǎn)化編程工作,許多機(jī)器人軟件開發(fā)平臺(tái)應(yīng)運(yùn)而生。比較著名的商業(yè)軟件平臺(tái)有微軟公司的Robotics Developer Studio (MRDS)[1]集成開發(fā)環(huán)境,NI公司的LabVIEW Robotics模塊,LEGO公司的MINDSTORMS套件等等。也有許多來自于高校的開源軟件項(xiàng)目,如美國(guó)南加州大學(xué)機(jī)器人研究實(shí)驗(yàn)室開發(fā)的Player/Stage項(xiàng)目[2]、美國(guó)卡內(nèi)基梅隆大學(xué)的CARMEN工具箱[3]等等。這些軟件平臺(tái)特點(diǎn)各一,涵蓋了機(jī)器人領(lǐng)域的各個(gè)方面,如Player套件著重強(qiáng)調(diào)硬件及驅(qū)動(dòng)的模塊化;也有專門針對(duì)仿真功能的軟件,像卡內(nèi)基梅隆大學(xué)的USARSim[4]和OpenRAVE[5]仿真環(huán)境;其他的如對(duì)一些比較成熟的算法進(jìn)行封裝,像視覺領(lǐng)域里的OpenCV函數(shù)庫(kù)、強(qiáng)調(diào)任務(wù)規(guī)劃的MissionLab平臺(tái)等等。文獻(xiàn)[6]對(duì)各種軟件平臺(tái)、仿真環(huán)境、工具庫(kù)做了比較詳細(xì)的對(duì)比。
由于機(jī)器人領(lǐng)域的廣泛性,不同的應(yīng)用環(huán)境對(duì)機(jī)器人的軟件系統(tǒng)有不同的要求,一個(gè)平臺(tái)不可能滿足所有應(yīng)用的要求。但是有一些要求是共性問題,比如易用性、開發(fā)效率、跨平臺(tái)、多編程語言、分布式部署、代碼可重用等等。針對(duì)這些問題的解決,機(jī)器人操作系統(tǒng)(ROS, Robot Operating System)[7]走在了眾多軟件平臺(tái)的前列。
ROS是一個(gè)機(jī)器人軟件平臺(tái),它能為異質(zhì)計(jì)算機(jī)集群提供類似操作系統(tǒng)的功能。它的前身是斯坦福人工智能實(shí)驗(yàn)室為了支持STAIR和Personal Robots Program等大型服務(wù)機(jī)器人項(xiàng)目而建立的交換庭(switchyard)項(xiàng)目。2008年,Willow Garage公司完善了該項(xiàng)目的研發(fā),2009年正式對(duì)外發(fā)布ROS開源軟件項(xiàng)目。
作為一個(gè)開源軟件,ROS的宗旨在于構(gòu)建一個(gè)能夠整合不同研究成果,實(shí)現(xiàn)算法發(fā)布、代碼重用的機(jī)器人軟件平臺(tái)。它提供類似操作系統(tǒng)所提供的功能,包含硬件抽象描述、底層驅(qū)動(dòng)程序管理、共用功能的執(zhí)行、程序間的消息傳遞、程序發(fā)行包管理以及一些用于獲取、建立、編寫和運(yùn)行多機(jī)整合程序的工具程序和軟件庫(kù)。由于這些功能滿足了廣大開發(fā)者的需求,ROS得到了廣泛的應(yīng)用。不少研究人員在ROS的基礎(chǔ)上開發(fā)了許多如定位繪圖、行動(dòng)規(guī)劃、感知、仿真等高層功能軟件包,使得這一軟件平臺(tái)的功能更加豐富,發(fā)展更加迅速。截至目前,ROS的核心程序已經(jīng)發(fā)行至第六版,并且以每年兩個(gè)版本的速度在更新。如今基于ROS進(jìn)行軟件開發(fā)的機(jī)器人已多達(dá)95種,其范圍涵蓋移動(dòng)機(jī)器人、機(jī)械手、類人機(jī)器人、無人車和無人飛行器等熱點(diǎn)領(lǐng)域,而且大部分傳感器在ROS上都得到了比較好的支持。基于ROS開發(fā)的應(yīng)用程序更是多達(dá)2000種,涵蓋了硬件驅(qū)動(dòng)、模擬仿真、運(yùn)動(dòng)規(guī)劃、運(yùn)動(dòng)控制、環(huán)境感知等各個(gè)方面。ROS已經(jīng)逐步成為機(jī)器人研發(fā)領(lǐng)域的通用性軟件平臺(tái)。
本文詳細(xì)介紹ROS的主要特點(diǎn),并結(jié)合實(shí)際情況介紹如何利用ROS為四輪移動(dòng)機(jī)器人搭建能夠?qū)崿F(xiàn)遠(yuǎn)程遙控、可通行區(qū)域識(shí)別等功能的軟件系統(tǒng)。
與Windows、Linux等傳統(tǒng)意義上的計(jì)算機(jī)操作系統(tǒng)不同,機(jī)器人操作系統(tǒng)ROS并不負(fù)責(zé)計(jì)算機(jī)進(jìn)程管理與調(diào)度。實(shí)際上它是一系列運(yùn)行在上述計(jì)算機(jī)操作系統(tǒng)上的軟件工具集。ROS的核心功能是提供一種軟件點(diǎn)對(duì)點(diǎn)通信機(jī)制,基于這個(gè)機(jī)制,開發(fā)人員可以非常靈活和高效地組織機(jī)器人的軟件系統(tǒng)。
“節(jié)點(diǎn)”、“消息”、“話題”和“服務(wù)”是ROS中的四個(gè)基本概念。
1.1 節(jié)點(diǎn)
“節(jié)點(diǎn)”是與機(jī)器人功能相關(guān)的任務(wù)進(jìn)程,可以認(rèn)為一個(gè)節(jié)點(diǎn)就是一個(gè)軟件模塊。這些節(jié)點(diǎn)可以是硬件的驅(qū)動(dòng)程序,負(fù)責(zé)采集傳感器數(shù)據(jù)或給執(zhí)行器發(fā)送命令等;也可以是實(shí)現(xiàn)諸如視覺算法、運(yùn)動(dòng)規(guī)劃、邏輯推理等高級(jí)功能的運(yùn)算進(jìn)程;或者是幫助調(diào)試、記錄數(shù)據(jù)或者監(jiān)察系統(tǒng)狀態(tài)的輔助進(jìn)程等等。整個(gè)軟件系統(tǒng)可以看作是一個(gè)圖,其中任務(wù)進(jìn)程是這個(gè)圖的節(jié)點(diǎn),進(jìn)程之間的點(diǎn)對(duì)點(diǎn)通信是連接節(jié)點(diǎn)的邊。利用ROS提供的可視化工具,開發(fā)人員可以實(shí)時(shí)地觀察系統(tǒng)的運(yùn)行情況,如圖 1所示,圓圈代表了不同的節(jié)點(diǎn),連線和箭頭代表了節(jié)點(diǎn)間的通信和通信方向。
圖1 正在運(yùn)行的三個(gè)節(jié)點(diǎn)程序
1.2 消息
“消息”是數(shù)據(jù)在ROS中的表現(xiàn)形式,是節(jié)點(diǎn)之間的通信內(nèi)容。不管是來自傳感器的數(shù)據(jù),還是算法的運(yùn)算結(jié)果,都可以定義為消息。由于ROS是面對(duì)多種編程語言的,為了能夠進(jìn)行跨語言環(huán)境開發(fā),ROS使用了一種名為IDL的定義語言來定義消息的結(jié)構(gòu)和類型。利用諸如整型、浮點(diǎn)型、字符串和布爾型等標(biāo)準(zhǔn)的數(shù)據(jù)類型,用戶可以根據(jù)自己需要定義不同的消息,消息的元素可以是單一變量、數(shù)組或者常量。同時(shí),ROS還支持消息的嵌套,即一種消息的定義里可以包含其他消息,而且嵌套深度不受限制。圖2給出了一個(gè)IDL消息定義文件的例子。這個(gè)名為Joy.msg的文本文件定義了一個(gè)Joy數(shù)據(jù)消息,用于記錄手柄設(shè)備的信息。
圖2 消息定義文件
IDL的語法簡(jiǎn)單明了,每一行的左邊是數(shù)據(jù)的類型,右邊是數(shù)據(jù)的名稱。圖2的消息包含了一個(gè)Header消息、一個(gè)32位浮點(diǎn)數(shù)組和一個(gè)32位整型數(shù)組,其中Header消息也是由類似的方法進(jìn)行定義。ROS的代碼生成器根據(jù)這個(gè)IDL文本文件自動(dòng)生成適合目標(biāo)語言的代碼,并在節(jié)點(diǎn)通信的過程中自動(dòng)對(duì)該數(shù)據(jù)消息進(jìn)行串行化和反串行化。
以上面數(shù)據(jù)為例,代碼生成器將自動(dòng)產(chǎn)生137行C++代碼(或者96行Python代碼、81行LISP代碼、99行Octave代碼)。因此通過編寫簡(jiǎn)單的IDL文本文件就可以實(shí)現(xiàn)非常復(fù)雜多樣的數(shù)據(jù)消息類型,不但有效減少開發(fā)者的編程工作量,還保證了代碼的一致性。到目前為止,ROS平臺(tái)上已有超過400種數(shù)據(jù)消息,范圍涵蓋了傳感器信息、目標(biāo)檢測(cè)信息、地圖信息、動(dòng)作指令等等,基本滿足了廣大研究人員的需要。
1.3 話題
“話題”是傳遞“消息”的一種形式。每個(gè)話題都有一個(gè)“名稱”字符串作為索引。節(jié)點(diǎn)通過訂閱某些話題來得到自己感興趣的數(shù)據(jù)。這種基于話題發(fā)布/訂閱的通信形式非常靈活,一個(gè)話題可以同時(shí)有多個(gè)發(fā)布者或訂閱者,一個(gè)節(jié)點(diǎn)也可以同時(shí)發(fā)布或者訂閱多個(gè)話題,話題的發(fā)布者或者訂閱者不需要知曉對(duì)方的存在,所有發(fā)布、訂閱行為都是動(dòng)態(tài)進(jìn)行的。
1.4 服務(wù)
雖然基于話題發(fā)布/訂閱的通信形式非常靈活,但是并不適合進(jìn)行節(jié)點(diǎn)間的同步或者事件觸發(fā),因此,ROS引入了“服務(wù)”的概念。這與互聯(lián)網(wǎng)上的服務(wù)器—客戶端結(jié)構(gòu)類似(如網(wǎng)頁(yè)服務(wù)),作為客戶端的節(jié)點(diǎn)向提供服務(wù)的節(jié)點(diǎn)發(fā)出請(qǐng)求,接受到請(qǐng)求的節(jié)點(diǎn)根據(jù)請(qǐng)求中攜帶的參數(shù)進(jìn)行響應(yīng)并返回結(jié)果。比如在移動(dòng)機(jī)器人中,實(shí)現(xiàn)任務(wù)規(guī)劃的“高層”節(jié)點(diǎn)可以向負(fù)責(zé)運(yùn)動(dòng)控制的“低層”節(jié)點(diǎn)發(fā)出移動(dòng)請(qǐng)求,請(qǐng)求中包括目標(biāo)點(diǎn)坐標(biāo)、速度、時(shí)間等信息?!暗蛯印惫?jié)點(diǎn)根據(jù)這些信息執(zhí)行任務(wù),完成后將執(zhí)行情況返回,比如是否到達(dá)了預(yù)期的目標(biāo)點(diǎn)、實(shí)際到達(dá)點(diǎn)的坐標(biāo)是多少、運(yùn)動(dòng)中消耗了多少能量等等。
1.5 點(diǎn)對(duì)點(diǎn)通信機(jī)制
ROS的點(diǎn)對(duì)點(diǎn)通信方式需要某種查找機(jī)制來使得各個(gè)進(jìn)程能夠動(dòng)態(tài)地查找到其他進(jìn)程以便進(jìn)行通信。在ROS里,這個(gè)功能由主機(jī)(master)實(shí)現(xiàn)。主機(jī)也被稱為命名服務(wù)器(name server),與互聯(lián)網(wǎng)的DNS服務(wù)器類似,它只提供命名查找服務(wù),并不負(fù)責(zé)通信數(shù)據(jù)的中轉(zhuǎn),這是ROS與CARMEN等基于數(shù)據(jù)中心的軟件平臺(tái)的最大區(qū)別。
CARMEN等系統(tǒng)雖然能實(shí)現(xiàn)基于網(wǎng)絡(luò)的分布式運(yùn)行,但是它們要求其中一臺(tái)計(jì)算機(jī)擔(dān)當(dāng)數(shù)據(jù)中心的角色,所有數(shù)據(jù)都必須經(jīng)過這個(gè)數(shù)據(jù)中心進(jìn)行交換,因而很容易在異構(gòu)的計(jì)算網(wǎng)絡(luò)中發(fā)生問題,比如帶寬較窄的無線網(wǎng)絡(luò)產(chǎn)生擁堵,或者數(shù)據(jù)中心負(fù)荷太重。相反,ROS采用的點(diǎn)對(duì)點(diǎn)通信拓?fù)浣Y(jié)構(gòu)可以明顯減少不必要的數(shù)據(jù)流量,因?yàn)檐浖M(jìn)程可以直接互聯(lián)進(jìn)行數(shù)據(jù)交換,不需要中轉(zhuǎn)。
ROS的這種通信機(jī)制是基于計(jì)算機(jī)操作系統(tǒng)提供的網(wǎng)絡(luò)套接字(Socket)實(shí)現(xiàn)的,所以ROS秉承了網(wǎng)絡(luò)套接字通信的幾個(gè)優(yōu)點(diǎn):
1)支持多種編程語言。
由于所有節(jié)點(diǎn)的通信都是通過網(wǎng)絡(luò)套接字實(shí)現(xiàn)的,這意味著只要能夠提供套接字接口,節(jié)點(diǎn)程序可以用任何編程語言實(shí)現(xiàn)。ROS當(dāng)前已經(jīng)實(shí)現(xiàn)對(duì)C/C++、Python、Octave和LISP等編程語言的支持。
2)支持分布式計(jì)算。
由于大量采用了套接字通信,ROS系統(tǒng)很自然地具備了實(shí)現(xiàn)分布式計(jì)算的能力。節(jié)點(diǎn)程序可以運(yùn)行在任何具有網(wǎng)絡(luò)連接的主機(jī)上,這些主機(jī)可以是具有強(qiáng)大運(yùn)算能力的基站服務(wù)器,可以是小型的ARM嵌入式系統(tǒng),甚至可以是基于安卓系統(tǒng)的移動(dòng)手機(jī)或者平板電腦。這些異構(gòu)的運(yùn)算平臺(tái)都可以成為機(jī)器人系統(tǒng)的一部分。
3)支持信息資源的任意組合。
4)支持不同速率、不同數(shù)據(jù)類型的通信。
移動(dòng)機(jī)器人技術(shù)的研究屬于多學(xué)科相互交叉、相互滲透的前沿課題,對(duì)它的研究具有很大的理論價(jià)值和廣闊的應(yīng)用前景。本文以實(shí)驗(yàn)室研制的四輪車式戶外移動(dòng)機(jī)器人為基礎(chǔ),介紹利用ROS構(gòu)建能實(shí)現(xiàn)遠(yuǎn)程操控和環(huán)境感知功能的軟件系統(tǒng)和基礎(chǔ)框架。
2.1 機(jī)械平臺(tái)
如圖3所示,該機(jī)器人采用了四輪車式底盤結(jié)構(gòu),前輪對(duì)車體的運(yùn)動(dòng)方向進(jìn)行控制,后輪負(fù)責(zé)驅(qū)動(dòng)車體前進(jìn)。前輪的擺動(dòng)角度由舵機(jī)控制,同時(shí)配有旋轉(zhuǎn)編碼盤對(duì)前輪的滾動(dòng)進(jìn)行計(jì)數(shù),實(shí)現(xiàn)里程計(jì)的功能。后輪由一個(gè)150W直流伺服電機(jī)驅(qū)動(dòng),通過配套的電機(jī)驅(qū)動(dòng)器實(shí)現(xiàn)精確的后輪轉(zhuǎn)速和位置閉環(huán)控制。該機(jī)器人具有體積小、成本低廉、行進(jìn)速度快等優(yōu)點(diǎn),適合在平坦路面快速前進(jìn)。目前該機(jī)器人最高時(shí)速可達(dá)15km/h。
圖3 四輪車式戶外移動(dòng)機(jī)器人
2.2 硬件系統(tǒng)
機(jī)器人的硬件控制系統(tǒng)如圖4所示,由監(jiān)控計(jì)算機(jī)、機(jī)載計(jì)算機(jī)、嵌入式控制器以及電機(jī)驅(qū)動(dòng)器組成。機(jī)載計(jì)算機(jī)采用Intel Core i7系列的四核中央處理器,工作頻率達(dá)3.5GHz,同時(shí)配有8G內(nèi)存以及64G固態(tài)存儲(chǔ)器,可滿足機(jī)器人對(duì)運(yùn)算性能的需求。嵌入式控制器通過串口與主控計(jì)算機(jī)相連。該控制器由ARM單片機(jī)實(shí)現(xiàn),負(fù)責(zé)將計(jì)算機(jī)傳來的指令轉(zhuǎn)化為對(duì)舵機(jī)和直流電機(jī)的控制信號(hào),并同時(shí)將實(shí)時(shí)采集得到的測(cè)程編碼器讀數(shù)以及電池電壓讀數(shù)送往主控計(jì)算機(jī)。
圖4 硬件控制系統(tǒng)
在傳感器配置方面,該機(jī)器人配有Xsens慣性測(cè)量傳感器(IMU)以及GPS信號(hào)接收器,兩者配合測(cè)程編碼器可實(shí)現(xiàn)較精確的機(jī)器人自定位。該機(jī)器人同時(shí)配有bumblebee雙目視覺系統(tǒng),以實(shí)現(xiàn)機(jī)器人對(duì)戶外環(huán)境的視覺感知。
2.3 軟件系統(tǒng)
利用ROS構(gòu)建的移動(dòng)機(jī)器人軟件系統(tǒng)是本文的研究重點(diǎn)。如圖5所示,整個(gè)軟件系統(tǒng)可以根據(jù)功能劃分為底盤驅(qū)動(dòng)、遠(yuǎn)程控制、導(dǎo)航模塊以及可通行區(qū)域識(shí)別四個(gè)部分。
圖5 軟件系統(tǒng)模塊結(jié)構(gòu)
2.3.1 底盤驅(qū)動(dòng)
底盤驅(qū)動(dòng)節(jié)點(diǎn)是整個(gè)軟件系統(tǒng)中最基礎(chǔ)的部分,它實(shí)現(xiàn)軟件與硬件信息互換的功能。在本機(jī)器人中,控制車體運(yùn)動(dòng)的指令有兩部分內(nèi)容,分別為車體的行進(jìn)速度與行進(jìn)方向,對(duì)應(yīng)著直流電機(jī)的轉(zhuǎn)速和舵機(jī)的擺角。在本軟件系統(tǒng)中,控制車體運(yùn)動(dòng)的指令以名為Cmd的話題進(jìn)行發(fā)布,而底盤驅(qū)動(dòng)節(jié)點(diǎn)(Base節(jié)點(diǎn))通常是這一話題的唯一訂閱者。Base節(jié)點(diǎn)運(yùn)行在機(jī)載計(jì)算機(jī)上,它接收到指令以后,根據(jù)指令的內(nèi)容向RS232串口發(fā)送數(shù)據(jù)。ARM控制器再對(duì)這些數(shù)據(jù)進(jìn)行響應(yīng),最終改變機(jī)器人的運(yùn)動(dòng)狀態(tài)。
2.3.2 導(dǎo)航控制
導(dǎo)航控制模塊是移動(dòng)機(jī)器人的決策核心,其內(nèi)部建立了一個(gè)有限狀態(tài)機(jī)來控制機(jī)器人的工作狀態(tài)。當(dāng)機(jī)器人處于手動(dòng)控制模式時(shí),該模塊從遠(yuǎn)程控制模塊讀取操作指令,并以此產(chǎn)生相應(yīng)的運(yùn)動(dòng)指令。當(dāng)機(jī)器人處于自動(dòng)控制模式時(shí),該模塊根據(jù)可通信區(qū)域識(shí)別模塊對(duì)道路狀況的識(shí)別結(jié)果,控制機(jī)器人沿著道路前進(jìn)。目前自動(dòng)模式的功能還比較單一,但是可以作為以后開展其他算法研究的基礎(chǔ),比如視覺里程計(jì)、同步定位與建圖(SLAM)算法等等。
2.3.3 遠(yuǎn)程控制
遠(yuǎn)程控制是移動(dòng)機(jī)器人的一項(xiàng)基本功能,它涉及指令的產(chǎn)生、傳送、執(zhí)行三個(gè)部分。ROS平臺(tái)具有實(shí)現(xiàn)分布式計(jì)算的能力,可以非常容易地實(shí)現(xiàn)遠(yuǎn)程操控功能。在本機(jī)器人中,遠(yuǎn)程控制節(jié)點(diǎn)(Teleop節(jié)點(diǎn))是運(yùn)行在監(jiān)控計(jì)算機(jī)上的控制程序。操作人員通過操作監(jiān)控計(jì)算機(jī)上的鍵盤和手柄產(chǎn)生控制指令,Teleop節(jié)點(diǎn)利用ROS提供的驅(qū)動(dòng)程序讀取到這些設(shè)備的輸入數(shù)據(jù),然后通過發(fā)布話題的方式將數(shù)據(jù)發(fā)布到軟件節(jié)點(diǎn)網(wǎng)絡(luò)上。機(jī)載計(jì)算機(jī)上運(yùn)行的Base節(jié)點(diǎn)通過訂閱這一話題來得到指令數(shù)據(jù),然后以此驅(qū)動(dòng)底盤運(yùn)動(dòng)。
2.3.4 可通行區(qū)域識(shí)別
ROS平臺(tái)得到廣泛應(yīng)用的一個(gè)重要原因是它對(duì)計(jì)算視覺的支持比較好,不僅對(duì)目前主流的攝像頭提供驅(qū)動(dòng)支持,還整合了OpenCV這一重量級(jí)圖像處理軟件庫(kù)。這為開發(fā)者節(jié)省了大量的時(shí)間和工作,使得開發(fā)者可以在較短的時(shí)間內(nèi)搭建出可用的且性能較好的圖像處理模塊。
對(duì)可通行區(qū)域進(jìn)行識(shí)別是戶外移動(dòng)機(jī)器人實(shí)現(xiàn)自主導(dǎo)航的關(guān)鍵環(huán)節(jié)。針對(duì)這一問題,本戶外移動(dòng)機(jī)器人利用Bumblebee雙目攝像頭,在ROS系統(tǒng)提供組件基礎(chǔ)上,實(shí)現(xiàn)了準(zhǔn)確快速的可通行區(qū)域識(shí)別功能。
該模塊的節(jié)點(diǎn)結(jié)構(gòu)如圖 6示,3個(gè)節(jié)點(diǎn)進(jìn)程呈現(xiàn)類似流水線的結(jié)構(gòu)。其中Bumblebee2節(jié)點(diǎn)是ROS針對(duì)該攝像頭的現(xiàn)成軟件包,它從攝像頭讀取得到類似圖7所示的圖像數(shù)據(jù),這些圖像數(shù)據(jù)以left/image_raw和right/image_raw話題的形式發(fā)布。
圖6 可通行區(qū)域模塊的節(jié)點(diǎn)結(jié)構(gòu)及話題
圖7 從雙目攝像頭采集得到的圖像
在得到圖像數(shù)據(jù)后,stereo_image_proc軟件包可以對(duì)圖像進(jìn)行校正、匹配,最終得到一副620x320的深度圖像disparity。最后,Region_classification節(jié)點(diǎn)利用一種改進(jìn)的V視差圖構(gòu)建算法檢測(cè)出可通行區(qū)域[8],得到如圖 8所示的結(jié)果。實(shí)驗(yàn)結(jié)果的統(tǒng)計(jì)數(shù)據(jù)表明,該軟件對(duì)可通行區(qū)域的識(shí)別成功率可達(dá)到92.3%,滿足戶外移動(dòng)機(jī)器人自主導(dǎo)航的需要。
圖8 (左)原始灰度圖;(中)視差圖;(右)可通行區(qū)域結(jié)果
該軟件模塊不僅可以在線地對(duì)圖像進(jìn)行實(shí)時(shí)處理,還可以利用ROS提供的Rxbag工具將實(shí)驗(yàn)過程中采集得到的圖像以及其他通過話題形式發(fā)布的數(shù)據(jù)完整地記錄下來,以便日后進(jìn)行回放和處理,有效提高調(diào)試機(jī)器人的效率。
利用ROS提供的開源平臺(tái)和軟件工具集,我們只需少量的編程工作即可搭建一套較為完整的機(jī)器人軟件系統(tǒng)。以本文為例,軟件節(jié)點(diǎn)共計(jì)11個(gè),其中ROS提供的節(jié)點(diǎn)為8個(gè),占總數(shù)量的72%,有效地縮短了開發(fā)時(shí)間,減少了重復(fù)勞動(dòng)。
由于時(shí)間關(guān)系,目前本軟件系統(tǒng)實(shí)現(xiàn)的功能還比較少,沒有完全利用ROS已有的各種功能,比如Gazbo仿真器、同步定位與建圖(SLAM)工具包、路徑規(guī)劃與導(dǎo)航工具包等等。我們相信,隨著機(jī)器人功能的發(fā)展,利用ROS構(gòu)建軟件系統(tǒng)的優(yōu)勢(shì)將越來越明顯。
本文對(duì)ROS的優(yōu)點(diǎn)、原理、特點(diǎn)等方面進(jìn)行較為詳細(xì)的介紹,同時(shí)利用基于ROS構(gòu)建的四輪戶外移動(dòng)機(jī)器人軟件系統(tǒng),實(shí)現(xiàn)底盤驅(qū)動(dòng)、遠(yuǎn)程遙控、可通行區(qū)域識(shí)別等功能,并充分展示了ROS搭建機(jī)器人軟件系統(tǒng)的靈活性和方便性,為廣大機(jī)器人研究人員提供了一套可參考方案。
隨著ROS這一開源項(xiàng)目的發(fā)展,將會(huì)有越來越多的研究人員以及開發(fā)者投入到對(duì)這一平臺(tái)的開發(fā)與應(yīng)用中來。我們相信,ROS未來將為我們提供更多、更復(fù)雜的功能,有效促進(jìn)機(jī)器人領(lǐng)域的交流與發(fā)展。
[1] Jackson J. Microsoft robotics studio: A technical introduction [J]. IEEE Robotics & Automation Magazine, 2007, 14:82-87.
[2] Gerkey B, Vaughan R T, Howard A. The player/stage project: Tools for multi-robot and distributed sensor systems//Proceedings of the 11th international conference on advanced robotics 2003[C], 2003:317-323.
[3] Montemerlo M, Roy N, Thrun S. Perspectives on Standardization in Mobile Robot Programming: The Carnegie Mellon Navigation (CARMEN) Toolkit//Proceedings of the Conference on Intelligent Robots and Systems (IROS) 2003[C].
[4] Carpin S, Lewis M, Wang J, et al. USARSim: a robot simulator for research and education//IEEE International Conference on Robotics and Automation, 2007[C]:1400-1405.
[5] Diankov R, Kuffner J. Openrave: A planning architecture for autonomous robotics, CMU-RI-TR-08-34[R]. Pittsburgh: Robotics Institute,2008.
[6] Harris A, Conrad J M. Survey of popular robotics simulators, frameworks, and toolkits//2011 Proceedings of IEEE[C]. Southeastcon:243-249.
[7] Quigley M, Gerkey B, Conley K et al. ROS: an open-source Robot Operating System//ICRA workshop on open source software[C], 2009.
[8] 朱效洲. 戶外環(huán)境下基于視覺的移動(dòng)機(jī)器人可通行區(qū)域識(shí)別研究[D]. 長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué), 2012.
[1] HKS TR-K180 用戶手冊(cè).