杜晉華,杜 剛,張 虎
1(中國地質(zhì)大學(xué)(北京) 信息工程學(xué)院,北京 100083)
2(湖北大學(xué) 物理與電子科學(xué)學(xué)院,武漢 430062)
近年來,伴隨人工智能技術(shù)和傳感技術(shù)等新型技術(shù)的快速發(fā)展,智能機器人技術(shù)獲得了突飛猛進的進步.與之對應(yīng)的是機器人相關(guān)體系結(jié)構(gòu)和操作系統(tǒng)迎來了發(fā)展的黃金時期,出現(xiàn)了以ROS為代表的專用于機器人的操作系統(tǒng)[1].
鑒于ROS 操作系統(tǒng)在架構(gòu)的模塊化與層次化上的良好表現(xiàn),國內(nèi)外很多學(xué)者都基于ROS 進行了有關(guān)研究與技術(shù)實現(xiàn),如基于ROS 實現(xiàn)機器人的各子功能部件的三維建模與開發(fā)[2]有效降低了工作復(fù)雜度、使用ROS 作為機器人控制的嵌入式底層避免了對策略核心的重復(fù)設(shè)計與實現(xiàn)[3]、通過ROS 提供的各種功能包來進行二次開發(fā)[4]以期減少成本投入以及使用ROS 進行相關(guān)仿真實驗[5]取代實際重復(fù)性或長周期的實地實驗,并能保證更高精度的數(shù)據(jù)獲取等.除此之外,國外研究大多集中于具體ROS 應(yīng)用的實現(xiàn),包括但不限于基于ROS的仿人雙臂機器人PR2[6]的實現(xiàn)、汽車自動駕駛路徑規(guī)劃與導(dǎo)航[7]的實現(xiàn)、家用服務(wù)型機器人系統(tǒng)[8]的實現(xiàn)、醫(yī)療輔助式機器人交互邏輯[9]的實現(xiàn)等.
除直接基于ROS 操作系統(tǒng)進行機器人方面的工作外,也有部分開發(fā)人員考慮借鑒ROS的邏輯,為專門化的機器人提供相應(yīng)的操作系統(tǒng),這種操作系統(tǒng)在保留ROS的主要功能和特點的前提下,都會在某一特定方面做出一定優(yōu)化,以期更好地控制與服務(wù)于相關(guān)機器人.其中有代表性的是ROCOS 操作系統(tǒng),主要實現(xiàn)了多臺機器人的配合調(diào)度.
本文將對ROS和其變種ROCOS 做簡要介紹,并詳細對比分析兩者的架構(gòu)邏輯,希望對有關(guān)機器人系統(tǒng)研究方面的人員提供一定的參考價值.
ROS (Robot Operating System),即機器人操作系統(tǒng),是用于編寫機器人軟件程序的一種具有高度靈活性的軟件架構(gòu),是一個適用于機器人的開源的元操作系統(tǒng).它提供了操作系統(tǒng)應(yīng)有的服務(wù),包括硬件抽象,底層設(shè)備控制,常用函數(shù)的實現(xiàn),進程間消息傳遞,以及包管理.它也提供用于獲取、編譯、編寫和跨計算機運行代碼所需的工具和庫函數(shù).
在它誕生之前,很多專家致力于實現(xiàn)一個能夠自我感知、自我導(dǎo)航和自我控制的復(fù)雜機器人設(shè)計.過程中,大家發(fā)現(xiàn)很多現(xiàn)有資源難以共享或者直接使用,所以都認為機器人研究需要一個開放式的協(xié)作框架,用以整合和提高各種資源的利用率.所以在這樣的需求下,2007年ROS 自斯坦福大學(xué)誕生,并在大量研究人員的共同努力下,逐漸發(fā)展和完善.ROS 發(fā)展歷史如圖1.
圖1 ROS 發(fā)展歷史
目前,ROS 廣泛應(yīng)用于機器人領(lǐng)域,主要實現(xiàn)機器人的建模、感知、導(dǎo)航和規(guī)劃,并能直接和機器人連接通訊,以實現(xiàn)對其物理實體的控制.
ROCOS是世界杯機器人操作系統(tǒng)(RObotCup Operating System)的英文縮寫,是以ROS 操作系統(tǒng)為原型,剔除不必要的功能分支,專用于多機器人調(diào)度的軟件架構(gòu).
它源自機器人世界杯RobotCup,一個為促進人工智能和機器人等相關(guān)領(lǐng)域研究的國際項目.該項目是以足球機器人為主要研究平臺,以推進人工智能和機器人研究的國際比賽,旨在研究如何在實時性強,即高動態(tài)性和高對抗性的環(huán)境中,調(diào)度多臺機器人完成指定的工作任務(wù),和實現(xiàn)多機配合的智能化.圖2是RobotCup 賽場實況.
圖2 RobotCup 賽場實況
ROCOS 最先由卡內(nèi)基梅隆大學(xué)(CMU)在1997年發(fā)起構(gòu)建,其核心思路是在控制子系統(tǒng)的實現(xiàn)時按照STP (Skill-Tactic-Play) 框架進行分層開發(fā),之后于2012年對其改版,提出SSPS (Skill-State-Play-Selector)框架,有效提高了各機器人之間的配合度,在響應(yīng)機器指令方面也有很大提升.
與此同時,世界上其他機器人強校如康奈爾大學(xué)等也在積極引進ROCOS 并投入到對其優(yōu)化與研發(fā)中.我國浙江大學(xué)也在持續(xù)跟進,其控制學(xué)院工業(yè)控制國家重點實驗室于2003年就著手ROCOS的研究,2020年已形成比較完善的ROCOS 版本,并對ROCOS 實效做了相應(yīng)的測試與研究[10,11].表1說明了浙江大學(xué)現(xiàn)有ROCOS 在世界機器人比賽上的優(yōu)異表現(xiàn).
表1 RoboCup SSL 榮譽榜
從硬件實現(xiàn)角度,ROS 系統(tǒng)可分為3個層次:OS層、中間層和應(yīng)用層.其中OS 層為底層,主要使用Linux 系統(tǒng)實現(xiàn)(如Ubuntu),中間層實現(xiàn)ROS 核心通信機制以及功能庫,應(yīng)用層通過運行ROS Master (管理者)來負責(zé)系統(tǒng)正常運行.
具體到中間層的實現(xiàn),又可將ROS 架構(gòu)細分為計算圖層、文件系統(tǒng)層和開源社區(qū)層,如圖3.
圖3 ROS 架構(gòu)
2.1.1 計算圖層
ROS 系統(tǒng)軟件的功能模塊以節(jié)點為單位獨立運行,通過端對端的拓撲結(jié)構(gòu)連接.所以ROS 引進計算圖來描述這種拓撲結(jié)構(gòu),進而體現(xiàn)程序的運行方式.
計算圖的構(gòu)成方式是:ROS 創(chuàng)建一個連接所有進程(節(jié)點)的網(wǎng)絡(luò),其中的任何進程(節(jié)點)都可以訪問此網(wǎng)絡(luò),并通過該網(wǎng)絡(luò)與其他進程(節(jié)點)交互,獲取其他進程(節(jié)點)發(fā)布的信息,并將自身數(shù)據(jù)發(fā)布到網(wǎng)絡(luò)上.其中,構(gòu)成計算圖網(wǎng)絡(luò)的各個節(jié)點(node)、主題(topic)、服務(wù)(server)等都有唯一的名稱做標識.
1)節(jié)點:是主要的計算執(zhí)行進程,功能包(在第2.1.2 節(jié)中詳細定義)中創(chuàng)建的每個可執(zhí)行程序在被啟動加載到系統(tǒng)進程中后,該進程就是一個ROS 節(jié)點,如圖4中的node1、node2等都是節(jié)點.節(jié)點都是各自獨立的可執(zhí)行文件,能夠通過主題(topic)、服務(wù)(server)或參數(shù)服務(wù)器(parameter server) 與其他節(jié)點通信.ROS 通過使用節(jié)點將代碼和功能解耦,提高了系統(tǒng)的容錯力和可維護性.
2)消息:節(jié)點通過消息(message)完成彼此的溝通.它是ROS中一個進程(節(jié)點)發(fā)送到其他進程(節(jié)點)的信息.消息類型是消息的數(shù)據(jù)結(jié)構(gòu),ROS 系統(tǒng)提供了很多標準類型的消息可以直接使用,如果要使用非標準類型的消息,需要進行自定義.
3)主題:每個消息都必須發(fā)布到相應(yīng)的主題(topic),通過主題來實現(xiàn)在ROS 計算圖網(wǎng)絡(luò)中的路由轉(zhuǎn)發(fā).節(jié)點發(fā)送數(shù)據(jù)被稱為該節(jié)點正在向主題發(fā)布消息.節(jié)點可以通過訂閱某個主題,接收來自其他節(jié)點的消息.通過主題進行消息路由不需要節(jié)點之間直接連接,這意味著發(fā)布者節(jié)點和訂閱者節(jié)點之間不需要知道彼此是否存在,從而保證發(fā)布者節(jié)點與訂閱者節(jié)點之間的解耦合.
4)服務(wù):在一些特殊的場合,節(jié)點間需要點對點的高效率通信并及時獲取應(yīng)答,此時需要用服務(wù)的方式進行交互.提供服務(wù)的節(jié)點被稱為服務(wù)端,向服務(wù)端發(fā)起請求并等待響應(yīng)的節(jié)點被稱為客戶端,客戶端發(fā)起一次請求并得到服務(wù)端的一次響應(yīng)就完成了一次服務(wù)通信過程.如圖4中node1 向node3 發(fā)起一次請求,并得到node3 返回給node1的響應(yīng).
圖4 計算圖示例
2.1.2 文件系統(tǒng)層
與其他操作系統(tǒng)類似,一個ROS 程序的不同組件需要被放在不同的文件夾下進行管理,而這些文件夾則根據(jù)不同的功能來對文件進行組織,它們構(gòu)成了ROS的文件系統(tǒng).
在文件系統(tǒng)中,最基本的管理單元就是功能包.功能包是ROS中軟件組織的基本形式,一個功能包具有用于創(chuàng)建ROS 程序的最小結(jié)構(gòu)和最少內(nèi)容,它可以包含ROS 運行的進程(節(jié)點)和配置文件等.
一個功能包可以按照圖5的方式分為多個部分,其中具體到每個子部分如下文.
圖5 ROS 文件系統(tǒng)中的功能包
1)功能包清單:主要用于記錄功能包的信息以及發(fā)行者、功能包之間的依賴關(guān)系以及編譯的相關(guān)信息等.在功能包中扮演管理者的角色.
2)消息類型:用于描述ROS 采用話題通信時消息的類型,通過該文件可了解這個功能包的相關(guān)通信接口.
3)服務(wù)類型:用于描述ROS 采用服務(wù)通信時服務(wù)的類型,通過該文件也可了解這個功能包的相關(guān)通信接口.
4)代碼:節(jié)點是通過相應(yīng)的編程語言進行編寫的,其代碼稱作源代碼,存放于特定文件夾中.
其中,由功能包還可以組成更大的功能包,被稱之為元功能包,用以實現(xiàn)更大、更復(fù)雜的功能.
而在元功能包之上,還有一層文件夾,被稱作工作空間.工作空間是一個包含功能包、可編譯源文件和編譯包的文件夾,當用戶想同時編譯不同的功能包或保存本地開發(fā)包時必須使用這一機制.用戶可根據(jù)實際需要創(chuàng)建多個工作空間,在每個工作空間中開發(fā)不同用途的功能包.
如圖6所示,工作空間通常由3 種文件夾構(gòu)成.
圖6 ROS 文件系統(tǒng)中的工作空間示例
1)src 源文件空間:該文件夾放置各個功能包和用于這些功能包的CMake 配置文件CMakeLists.txt.由于ROS中的源碼采用catkin 工具進行編譯,而catkin工具基于CMake 技術(shù),所以在src 源文件空間和各個功能包中都會有CMakeLists.txt,它起編譯配置的作用.
2)build 編譯空間:該文件夾放置CMake和catkin編譯功能包時產(chǎn)生的緩存、配置、中間文件等.
3)devel 開發(fā)空間:該文件夾放置編譯好的可執(zhí)行程序,這些可執(zhí)行程序不需要安裝就能直接運行.一旦功能包源碼編譯和測試通過后,可以將這些編譯好的可執(zhí)行文件直接導(dǎo)出與其他開發(fā)人員分享.
2.1.3 開源社區(qū)層
開源社區(qū)層是位于ROS 架構(gòu)最外面的層次(注意這里討論的范圍還在中間層,其實開源社區(qū)上還有應(yīng)用層).由于ROS的開源讓很多人得以共享資源,這個共享資源的平臺稱之為ROS的開源社區(qū),如圖7.
圖7 ROS 開源社區(qū)構(gòu)成
ROS的開源社區(qū)主要由網(wǎng)站、博客和代碼資源構(gòu)成.因為ROS有各種功能的功能包,但ROS 安裝時只會安裝固定的一部分,所以用戶搭建自己的機器人時,如果需要特定功能的功能包,可以自己寫功能包源碼,也可以從開源社區(qū)中尋找,采用軟件源的形式下載別人的功能包來參考使用.
具體的開源社區(qū)功能模塊構(gòu)成如下:
1)發(fā)行版(Distribution):ROS 發(fā)行版包括一系列帶有版本號、可以直接安裝的功能包.
2)軟件源(Repository):ROS 依賴于共享網(wǎng)絡(luò)上的開源代碼,不同的組織機構(gòu)可以開發(fā)或者共享自己的機器人軟件.
3)文檔社區(qū)(Wiki):記錄ROS 信息文檔的主要論壇.
4)郵件列表(Mailing list):交流ROS 更新的主要渠道,同時也可以交流ROS 開發(fā)的各種疑問.
5)問答社區(qū)(Answers):咨詢ROS 相關(guān)問題的網(wǎng)站.
6)博客(Blog):發(fā)布ROS 社區(qū)中的新聞[12]、圖片、視頻等內(nèi)容.
因為ROCOS 操作系統(tǒng)是在ROS 系統(tǒng)的基礎(chǔ)之上做出的單方向(多機調(diào)度)的優(yōu)化.所以從實現(xiàn)角度看,其架構(gòu)與ROS 類似,也可分為3個層次:OS 層、中間層和應(yīng)用層.其中OS 層為底層,主要使用Linux 系統(tǒng)實現(xiàn)(如Ubuntu),中間層實現(xiàn)ROCOS 核心通信機制以及功能庫,應(yīng)用層主要通過圖形界面的模式為用戶提供服務(wù).
具體到中間層的實現(xiàn),ROCOS 更加關(guān)注具體的機器人仿真與通訊細節(jié),可將ROS 架構(gòu)細分為后端策略層、前端控制層、文件系統(tǒng)層和開源社區(qū)層,如圖8.
圖8 ROCOS 架構(gòu)
2.2.1 后端策略層
后端策略層是ROCOS 用于實現(xiàn)機器人操控邏輯、處理I/O 信息(如視覺信息、從機器人傳回的通訊信息、傳感器信息等)和形成指令的控制中心.
在圖9中,機器人的正常運行有賴于多個相互關(guān)聯(lián)系統(tǒng)的信息交互與功能配合.具體包括:視覺子系統(tǒng)、決策子系統(tǒng)、通訊子系統(tǒng)、機器人硬件子系統(tǒng)以及場地輔助子系統(tǒng)等.其中,ROCOS 操作系統(tǒng)裝載于策略機上,由其后端策略層處理從其他子系統(tǒng)搜集到的實時信息,并進行整合、處理與計算,之后依靠代碼邏輯做出相應(yīng)的決策和命令,通過通訊機制傳輸給機器人,完成邏輯層與物理層之間的配合.
圖9 ROCOS 在整個大型系統(tǒng)中的位置
為完成相應(yīng)功能,后端策略層需要依賴外置功能包,并使用合理的框架對功能進行解耦和處理.
涉及到的功能包與運行環(huán)境具體包括:
1)開發(fā)環(huán)境:為有效組織代碼邏輯、合理預(yù)留前端控制層需要的接口以及確保應(yīng)用層較好的可視化效果,選擇具有優(yōu)良跨平臺特性、面向?qū)ο蟮?、含豐富API、支持OpenGL的QT 作為默認集成開發(fā)環(huán)境.
2)開發(fā)語言:在ROCOS中,絕大部分底層邏輯代碼采用C++11 規(guī)范完成開發(fā).而考慮到多機器人的調(diào)度,使用具有可擴展、簡單高效、與平臺無關(guān)等特性的LUA 語言實現(xiàn)相應(yīng)的功能.(具體實現(xiàn)中需要引入第三方軟件包tolua++)
3)相關(guān)庫:后端策略層需要對大批量、實時性數(shù)據(jù)進行處理,有賴于C++里支持線性代數(shù)運算、矩陣和矢量運算、數(shù)值分析及其相關(guān)的算法的開源模版庫Eigen.另外,為實現(xiàn)后端策略層和前端控制層、前端控制層和通訊子系統(tǒng)的數(shù)據(jù)傳輸,需要引入與平臺和語言無關(guān)、可擴展且輕便高效的序列化數(shù)據(jù)結(jié)構(gòu)協(xié)議Protobuf.
具體而言,后端策略層通過C++和LUA 兩種計算機語言的有機結(jié)合,用 C++進行各種基礎(chǔ)算法、動作任務(wù)的編寫,LUA 進行上層任務(wù)的分配,構(gòu)建出一個能使機器人從完成一個簡單動作到多個機器人進行相互協(xié)調(diào)配合的框架.
框架結(jié)構(gòu)如圖10所示.
圖10 ROCOS 后端策略層分層
1)使用C++完成底層skill 動作層的開發(fā):該層主要完成單臺機器人的單個動作,與硬件實現(xiàn)緊密相關(guān),如實現(xiàn)到達指定點、轉(zhuǎn)體等.
具體實現(xiàn)框架為:
1.#include "src/utils/PlayerTask.h"……
2.extern "C"_declspec(dllexport) PlayerTask
player_plan(const WorldModel* model,int robot_id);
3.enum FourQuadrant{LeftUp,……}area;
4.PlayerTask player_plan(const WorldModel*model,int robot_id){
5.PlayerTask task;
6.……
7.if (ball.y>0) {
8.if (ball.x>0) {area=RightUp;}
9.else {area=RightDown;}
10.}
11.else {……}
12.switch (area){
13.case LeftUp:
14.task.orientate=(ball - goal).angle();//dir
15.task.target_pos=point2f(half_x,-half_y);
16.break;
17.case LeftDown:
18.……}
19.return task;}
2)使用LUA 完成task 任務(wù)層的開發(fā):該層主要調(diào)用多個skill 函數(shù),并將其封裝為一個完整的task 任務(wù),用以將該任務(wù)分配給單臺機器人執(zhí)行,如足球機器人執(zhí)行到達指定點拿球的任務(wù)(具體包含到達拿球點skill、控球skill、檢測是否拿球skill 等).
具體實現(xiàn)框架為:
1.gPlayTable.CreatePlay{
2.firstState="halt",
3.switch=function()
4.return "halt"
5.end,
6.["halt"]={
7.["Leader"]=task.stop(),
8.["Special"]=task.stop(),
9.match="[LS]"
10.},
11.name="NormalPlayV1",
12.applicable={exp="a",a=true},
13.attribute="attack",
14.timeout=99999
15.}
3)使用LUA 完成play 場景層的開發(fā):該層主要調(diào)用多個task 對象,并將其封裝為一個完整的play 場景,用以對多臺機器人進行任務(wù)分配,使之并行執(zhí)行多個任務(wù),如多臺家用機器人處于清掃場景(掃地機器人分配地面清掃任務(wù)、擦窗機器人分配玻璃清潔任務(wù)等).其實現(xiàn)框架與task 層類似.
如果對策略層做進一步的細化,可將其分為6個工作層:
1)視覺和傳感器的信息處理:將視覺系統(tǒng)傳過來的信息進行分析整合,過濾重復(fù)內(nèi)容.另外,需要對從機器人本體上傳感器(如紅外傳感器)獲得的工作信息進行處理,為后續(xù)指令的下達提供依據(jù);
2)運動預(yù)測:通過保留過去若干秒內(nèi)的圖像信息,將位置信息轉(zhuǎn)化為速度信息,根據(jù)數(shù)學(xué)計算來預(yù)測環(huán)境中各實體(包括機器人在內(nèi))位置,該工作也為機器人合理的路徑規(guī)劃打下基礎(chǔ);
3)路徑規(guī)劃:實現(xiàn)機器人的動態(tài)避障,在完成移動任務(wù)的同時確保機器人不與各類靜止、運動物體發(fā)生嚴重碰撞;
4)多層決策協(xié)作:實現(xiàn)從一個機器人完成一個動作到多臺機器人協(xié)同運作的多決策層的有機配合;
5)場景實現(xiàn):包括場景動態(tài)變換后的任務(wù)更新以及動態(tài)分配;
6)各種相關(guān)的算法:包括基于硬件提供功能的抽象與二次開發(fā).
2.2.2 前端控制層
前端控制層是ROCOS 用于仿真機器人實時場景、提供應(yīng)用層控制接口以及與通信子系統(tǒng)連接配置等功能的集成.
圖11是足球機器人前端控制層在應(yīng)用層的圖形頁面,其構(gòu)成包括左部的環(huán)境仿真與右部的控制面板,用以實現(xiàn)對機器人控制的可視化處理.
圖11 ROCOS 前端控制層在應(yīng)用層的圖形頁面
具體使用過程中,需要在控制面板中設(shè)置相關(guān)參數(shù)、選擇研究模式.如果場地子系統(tǒng)可以提供支持,可選擇實地模式,并在結(jié)合下文的通訊子系統(tǒng)后,完成實地圖像在系統(tǒng)上的二維仿真建模與控制;如果場地子系統(tǒng)不提供支持,用戶可以脫機進行研究,在ROCOS中填充自定義的程序?qū)崿F(xiàn)文件,系統(tǒng)將解析用戶的文件并在環(huán)境仿真界面進行仿真運算,可獲得與實地模式同等的研究效果.
圖12是ROCOS 前端控制層功能的另一方面體現(xiàn),ROCOS 搭載的策略機可直接和信號發(fā)射機連接,通過無線、藍牙等技術(shù)實現(xiàn)與機器人之間的通訊.其具體實現(xiàn)邏輯仿照無線電系統(tǒng)和無線網(wǎng)絡(luò)系統(tǒng)的實現(xiàn)模式:當機器人與策略機連接在同一網(wǎng)段,或兩者頻率收發(fā)器均設(shè)置為相同的頻點,即可實現(xiàn)自主式非人工連接.
圖12 ROCOS 前端控制層在應(yīng)用層的圖形頁面
為完成相應(yīng)功能,前端控制層也需要依賴外置的功能包,并使用合理的框架對功能進行解耦和處理.
值得注意的是:由于前端控制層的框架不是特別清晰,也需要之后隨著ROCOS的版本迭代逐步優(yōu)化,這里僅對其依賴的功能包做進一步的說明:
1)仿真:為實現(xiàn)機器人環(huán)境與實體的三維建模與實時仿真,需要引入開源的圖形函數(shù)庫OpenGL 進行場景建模,也需要引入開源的動態(tài)引擎庫ODE 提供相應(yīng)的支持.
2)驅(qū)動:需要為ROCOS 配置相應(yīng)從其他子系統(tǒng)獲取信息和進行I/O 管理的軟件,如與信號通訊相關(guān)的發(fā)射機驅(qū)動、加密狗驅(qū)動;與視覺信息捕獲相關(guān)的顯卡驅(qū)動等.
2.2.3 文件系統(tǒng)層
ROCOS的文件系統(tǒng)層和ROS 沒有特別大的差別,而且在對文件系統(tǒng)管理的文件樹結(jié)構(gòu)也大致相同,均包含基本的文件夾架構(gòu):
1)bin:該文件夾保存可執(zhí)行的程序和命令,大多是在ROCOS的終端界面可直接運行的命令行.
2)include:該文件夾用于放置頭文件.由于ROCOS里面的某一具體的頭文件屬于某一具體的功能包,如果一個功能包需要依賴另外的功能包,自然必須包含另外功能包的頭文件,功能包的頭文件在功能包安裝的時候被直接存放于該文件夾.
3)lib:主要存放一些.so 結(jié)尾的可執(zhí)行程序.
4)etc:主要存放ROS和catkin 配置文件.
5)share:放置ROCOS 里面已經(jīng)安裝的功能包,主要包含功能包的各種信息,包括其接口、配置信息等.值得注意的是,如果用戶需要真正操作機器人,并不是直接在該文件夾下進行,需要額外建立一個文件夾,即上文提及的工作空間,然后在工作空間下創(chuàng)建自己的功能包,進行一系列開發(fā)工作.
2.2.4 開源社區(qū)層
由于ROCOS 相對較為小眾,所以并不像ROS 一樣提供一個廣泛開源的社區(qū),它主要依托Git 實現(xiàn)代碼開源與數(shù)據(jù)共享(Git是目前世界上最先進的分布式版本控制系統(tǒng)).
本文介紹的浙江大學(xué)實現(xiàn)的ROCOS,就在應(yīng)用Git 系統(tǒng)的主流版本管理網(wǎng)站Github 上進行了開源[13],目前有包括筆者在內(nèi)的多個開發(fā)者參與到相關(guān)代碼的研發(fā)與優(yōu)化中.
為檢驗ROCOS 架構(gòu)的合理性及其在單一實現(xiàn)方向上所展示出的強針對性,分別就ROS 系統(tǒng)和ROCOS系統(tǒng)進行仿真實驗.
由于本文主要針對浙江大學(xué)實現(xiàn)的ROCOS 做研究,研究者位處系統(tǒng)的優(yōu)化人員之列,所以不能估計本ROCOS的構(gòu)建成本.從浙江大學(xué)實驗室獲悉的詳細數(shù)據(jù)是:ROCOS的初始架構(gòu)時間花費不到半年,相較ROS 系統(tǒng)直接作為成品或工具而言,其成本偏高.但注意使用ROS的用戶需要花費至少1 到2年的時間學(xué)習(xí)ROS的基本技術(shù),ROCOS 僅需1個月或者更短,所以從總時間成本投入上,ROCOS 更勝一籌.
而通常情況下,ROCOS是為專門化領(lǐng)域或?qū)iT性需求所構(gòu)建,所以與ROS 普適性構(gòu)建相比,其與機器人的適配性會更好.
基于上述原因,本次實驗以SSL (Small Size League)小型足球機器人(其二維參數(shù)如圖13)為研究對象,在一臺策略機上運行Ubuntu 下ROS 系統(tǒng)、一臺策略機上運行Ubuntu 下ROCOS系統(tǒng).為保證實驗不受無關(guān)因素干擾,確保兩臺機器有相同硬件環(huán)境配置:Intel core i5-8300,2.3 GHz,四核,內(nèi)存 8 GB.并同時接入SSL_Vision 對應(yīng)顯卡,加載相應(yīng)視覺軟件.相關(guān)參數(shù)如圖14.
圖13 小型足球機器人二維參數(shù)
圖14 SSL_Vision 配置環(huán)境及參數(shù)
從圖14可知,初始條件下,數(shù)據(jù)傳輸率均為0.在仿真實驗中,該值將指征系統(tǒng)的仿真效果以及穩(wěn)定性.
使用5 臺藍色標識標記的足球機器人進行仿真模擬,使用LUA 腳本指定其分別實現(xiàn)多邊形路徑規(guī)劃與隊列路徑規(guī)劃,檢驗數(shù)據(jù)傳輸率、ROCOS 計算速度與計算精度以及畫面延時情況.
在圖15中,圖15(a)是初始場景:可以看到數(shù)據(jù)傳輸率穩(wěn)定在62 幀/s,靜態(tài)仿真效果良好.圖15(b)和圖15(c)分別是多機路徑規(guī)劃場景中的多邊形路徑和隊列路徑動態(tài)仿真,可以看到數(shù)據(jù)傳輸率仍舊維持在62 幀/s,所以系統(tǒng)穩(wěn)定性非常好.
圖15 ROCOS 多場景適應(yīng)性仿真圖
使用命令行查看CPU 使用情況可以看到(ROCOS沒有提供獨立任務(wù)管理器)如圖16.
圖16 Ubuntu 下命令行任務(wù)管理器數(shù)據(jù)
初始靜態(tài)仿真時刻CPU 占有率為179.5%,而動態(tài)仿真時刻CPU 占有率為145.5% (注意這里占有率超過100%屬系統(tǒng)問題,相對占有率為準確值).可以看出相對占有率不增反降,主要原因在于靜態(tài)仿真需要維持機器人仿真二維視圖在可視時間內(nèi)保持靜止,實際仍在進行計算,所以CPU 占用率較高.
為對比ROCOS的顯著提升效果,在ROS 上做同組對比實驗.
在圖17中,圖17(a)是初始場景:可以看到數(shù)據(jù)傳輸率穩(wěn)定在60 幀/s,靜態(tài)仿真效果與ROCOS 持平.圖17(b)和圖17(c)分別是多機路徑規(guī)劃場景中的多邊形路徑和隊列路徑動態(tài)仿真,可以看到數(shù)據(jù)傳輸率下降較為嚴重,低至30 幀/s 左右,所以系統(tǒng)穩(wěn)定性不甚理想.
圖17 ROS 多場景適應(yīng)性仿真圖
同樣使用命令行查看CPU 使用情況如圖18.
圖18 Ubuntu 下ROS 自定義任務(wù)管理器數(shù)據(jù)
初始靜態(tài)仿真時刻CPU 占有率為0.3%,而動態(tài)仿真時刻CPU 占有率為70.9%.可以看出雖然靜態(tài)環(huán)境下,ROS 系統(tǒng)的效率極高,但轉(zhuǎn)為動態(tài)環(huán)境后CPU 占有率提升70.6%,與ROCOS 不增反降相比,具有普適性的ROS 系統(tǒng)在針對性領(lǐng)域效果不甚理想,由此可以看出ROCOS 系統(tǒng)所具有的強針對性:在專一領(lǐng)域,它的功能更加穩(wěn)定且效果良好.
在機器人領(lǐng)域,給研究人員帶來極大阻礙的就是在程序運行過程中,無法實時查看相關(guān)參數(shù).此外,在機器人運行過程中如果出現(xiàn)問題,一般很難立即定位問題來源,極大程度上制約了項目推進速度和效率.
ROS 系統(tǒng)允許用戶根據(jù)機器人實際情況,借助系統(tǒng)提供的功能包自行定義交互式輔助軟件.仍以SSL為例.ROS 交互界面如圖19.
圖19 ROS 交互界面
使用ROS 提供的元功能包以及小型足球機器人硬件開發(fā)文檔提供的相關(guān)接口,實現(xiàn)上述界面,可執(zhí)行簡單的機器人控制:包括速度、自身行為、動作觸發(fā)、多機選擇.但實際使用過程中,一旦出現(xiàn)程序問題,只能確定觸發(fā)源為當前時刻的前一條指令,無法確定具體原因.
主要原因在于交互界面不靈活,不能實現(xiàn)用戶“所想即所得”,即實時性動態(tài)調(diào)整可交互元素.ROCOS 可以實現(xiàn)上述需求.
如圖20,使用ROCOS 搭建系統(tǒng)交互界面,可在可視化窗口中有選擇地或者全部顯示用戶需要獲取的中間參數(shù),在控制面板中,以列表形式提供各參數(shù)的設(shè)置接口,并允許用戶在使用系統(tǒng)時動態(tài)調(diào)整列表項.凡系統(tǒng)可從實體機器人硬件或者仿真后臺程序中獲取的參數(shù)項,均可在控制面板動態(tài)定義.
與此同時,在本次實驗中,ROCOS 系統(tǒng)由于主要針對多機調(diào)度,所以從圖20中可以看出,針對每一臺機器人都可以獲取其獨立的參數(shù).為多機系統(tǒng)的設(shè)計與控制提供了極大方便.
圖20 ROCOS 交互界面
通過以上對比,可見ROCOS 在交互方面也獲得了較大程度的提升.與ROS 相比,在強針對性領(lǐng)域,顯示出足夠優(yōu)勢.
本文對基于Linux內(nèi)核(Ubuntu)下的ROS 操作系統(tǒng)和ROCOS 操作系統(tǒng)分別進行了對比式的介紹和說明,并對二者具體的系統(tǒng)架構(gòu)進行了相對詳盡的描述,最后以對比實驗的方式論證了ROCOS的系統(tǒng)特性與系統(tǒng)優(yōu)勢.雖然目前ROS的適用范圍仍在不斷擴大,但像ROCOS 這樣從ROS中發(fā)展而來的強針對性操作系統(tǒng)才剛剛起步.它在保留ROS 原有的點對點設(shè)計、多語言支持、架構(gòu)精簡、組件化工具包豐富以及免費且開源等特點的基礎(chǔ)上,更強調(diào)對某一特定場景的支持(如本文提及的ROCOS 就是對多機調(diào)度場景的支持),顯然它會比ROS 更專一,功能更穩(wěn)定,與特定場景的適配性更好.
截止目前,由于ROCOS 需要的成本投入遠低于ROS,用戶不需要學(xué)習(xí)ROS中大量復(fù)雜而多元的概念,僅需要參照現(xiàn)有ROCOS 實現(xiàn)模式,去實現(xiàn)自己方向的ROCOS 系統(tǒng),所以其成本更低.基于ROCOS的顯著優(yōu)勢,隨著近年來人工智能等技術(shù)的不斷推向深入,像ROCOS 這樣的操作系統(tǒng)在未來可能會更有市場.雖然目前看來,它還有很長的路要走.