李夢男 邵振洲 渠 瀛 施智平 關(guān) 永 魏洪興
1(首都師范大學(xué)信息工程學(xué)院 北京 100048) 2(輕型工業(yè)機(jī)器人與安全驗證北京市重點實驗室 北京 100088) 3(成像技術(shù)北京市高精尖創(chuàng)新中心 北京 100048) 4(田納西大學(xué)工程學(xué)院 諾克斯維爾 37996) 5(北京航空航天大學(xué)機(jī)械工程及自動化學(xué)院 北京 100083)
當(dāng)今,隨著服務(wù)機(jī)器人基礎(chǔ)工作的不斷完善,人機(jī)交互方向的研究日益成為機(jī)器人領(lǐng)域的熱門。傳統(tǒng)的搖桿、按鍵等交互方式具有操作繁瑣、不靈活、接口沒有統(tǒng)一的標(biāo)準(zhǔn)等缺點,已不能滿足于當(dāng)今的智能服務(wù)機(jī)器人。機(jī)器人通信框架也可稱為機(jī)器人操作系統(tǒng)的ROS一定程度上解決了以上機(jī)器人軟件開發(fā)與人機(jī)交互中的痛點問題,因為其完美支持各種人機(jī)交互的傳感器設(shè)備和擁有豐富的算法支撐。但是目前流行的人機(jī)交互方式存在著一些問題,例如Kinect和RealSense等視覺體感設(shè)備容易受周圍環(huán)境的影響而使識別準(zhǔn)確率下降;LeapMotion等手勢識別控制器的交互方式局限性很大;語音識別又會受到距離、周圍嘈雜環(huán)境的影響等[1-3]。因這些人機(jī)交互方式的魯棒性、實時性、自適應(yīng)性等方面均存在一定的缺陷,所以目前并沒有得到很好的推廣應(yīng)用。
相比以上各種人機(jī)交互的傳感設(shè)備,集語音識別、攝像頭、陀螺儀、手勢識別、定位導(dǎo)航等多種傳感器于一體的智能移動設(shè)備作為服務(wù)機(jī)器人的人機(jī)交互終端更具有一定優(yōu)勢[4-5]。因其集成度高可省去一些交互設(shè)備,節(jié)約成本,還可為基于云概念的機(jī)器人提供多遠(yuǎn)程終端的支持,提高云端的擴(kuò)展性[6],例如導(dǎo)游機(jī)器人、點餐機(jī)器人等。因此,將移動終端系統(tǒng)與ROS互聯(lián)通信,對于出現(xiàn)在家庭、銀行、餐飲、娛樂、教育等場所的服務(wù)機(jī)器人有著很好的應(yīng)用前景[7-9]。
目前,一些組織(包括Google,Willow Garage等)已經(jīng)作出了很多貢獻(xiàn),主要解決移動終端領(lǐng)域使用率最高的Android和iOS設(shè)備與目前流行的機(jī)器人系統(tǒng)ROS間的通信問題。其中,rosbridge協(xié)議的提出是為了讓非ROS環(huán)境可與ROS節(jié)點進(jìn)行通信,其基本思路是通過一個中間橋梁WebSocket來聯(lián)系通信雙方各自的協(xié)議,但此種方式存在著通信過程冗余、效率低、通信安全漏洞、平臺兼容性等問題[10]。因此,在移動平臺本地系統(tǒng)實現(xiàn)ROS環(huán)境是一種很好的解決方式,不僅可以提高與ROS通信的效率,還會增加人機(jī)交互系統(tǒng)的擴(kuò)展性。當(dāng)前,iOS設(shè)備與ROS交互的ROSPod (2015)并沒有完全實現(xiàn)ROS通信的全部功能,而且穩(wěn)定性不好[11]。另外一種實現(xiàn)方式是基于在Google I/O大會上發(fā)布的一個純java實現(xiàn)ROS基本通信組件的客戶端庫rosjava[12]。因基于該庫開發(fā)的android_core功能包具有很好的穩(wěn)定性,使其成為了在Android移動終端構(gòu)建與ROS機(jī)器人通信應(yīng)用的重要組件。
然而,基于rosjava的Android應(yīng)用功能包集合android_core雖然提供了ROS中基本的發(fā)布訂閱通信方式,但是在應(yīng)對交互過程中需要機(jī)器人不斷反饋其任務(wù)執(zhí)行狀態(tài)信息給移動終端以及移動終端需要執(zhí)行任務(wù)搶占時,此通信方式便不滿足要求了。此外,該通信方式?jīng)]有網(wǎng)絡(luò)異常實時檢測功能,在遠(yuǎn)程人機(jī)交互方面存在著通信安全隱患。例如機(jī)器人正執(zhí)行Android移動終端發(fā)送的命令時,網(wǎng)絡(luò)突然中斷,與移動終端失去聯(lián)系的ROS機(jī)器人就會面臨失控的危險。因此,基于rosjava研究一種介于Android和ROS間的支持任務(wù)搶占與中間狀態(tài)信息反饋,并且可以實時監(jiān)測兩者連接狀態(tài)的可靠通信方式顯得尤為重要。
本文一方面設(shè)計了一種實時監(jiān)測Android與ROS間連接狀態(tài)的功能模塊“CheckNodeConnection”,在建立TCP/IP協(xié)議連接的應(yīng)用層加入心跳包反饋機(jī)制,使得ROS機(jī)器人端時刻知道Android移動終端的連接狀態(tài),在任務(wù)執(zhí)行過程突然通信中斷時可進(jìn)入預(yù)設(shè)的安全模式,增加了人機(jī)交互的安全性與友好性。另一方面,基于rosjava為Android移動終端開發(fā)了匹配ROS Actionlib中“ROS Action Protocol”的通信機(jī)制“RosActionOnAndroid”,滿足了交互過程中移動終端需要不斷獲取機(jī)器人的狀態(tài)反饋信息,以及可按優(yōu)先級進(jìn)行任務(wù)搶占的需求。
ROS運(yùn)行于主操作系統(tǒng)之上,提供了一種分布式通信框架,由各自獨立的功能節(jié)點(Node)組成。節(jié)點作為處理任務(wù)計算的進(jìn)程,在不同的系統(tǒng)任務(wù)中可依據(jù)工作需求調(diào)整其承載的功能粒度,極大地增加了系統(tǒng)的模塊化和代碼的封裝程度[13]。各節(jié)點間通過發(fā)布/訂閱消息模型進(jìn)行異步通信,通信的雙方節(jié)點并不清楚對等端的存在,連接工作均交給中間管理者ROS Master。每個節(jié)點的信息都要在ROS Master上進(jìn)行注冊,可以將其看作一個查詢表,為各個節(jié)點提供類似DNS的服務(wù),即各個節(jié)點的主機(jī)名、IP地址、端口號等信息。其具體存儲是在ROS Master內(nèi)部的Parameter Server上,用戶可通過封裝有XMLRPC的接口進(jìn)行存儲和檢索其中的信息。其中所有的資源(包括node、topic、service、parameter等)都是在某個命名空間中使用特定的Name進(jìn)行了定義。計算圖層中的Name在ROS的封裝體系中非常重要,是各資源間的連接橋梁,還保障了不同資源間的Name不會沖突[14]。
ROS的分布式通信框架是一種點對點P2P(Peer-to-Peer)的松耦合的網(wǎng)絡(luò)連接的處理架構(gòu),其主要的數(shù)據(jù)傳輸方式包括基于話題(Topic)的異步數(shù)據(jù)流通信、基于服務(wù)(Service)的請求回應(yīng)模型以及基于遠(yuǎn)程過程調(diào)用(RPC)的節(jié)點管理器Master等[15]。根據(jù)通信協(xié)議進(jìn)行分類主要分為兩種:
(1) XML-RPC協(xié)議:包括ROS Master和ROS Parameters(搭載在Master上的參數(shù)服務(wù)器)。XML-RPC的全稱是XML Remote Procedure Call,中文名叫作XML遠(yuǎn)程過程調(diào)用,是Apache軟件基金會為解決分布式計算問題而創(chuàng)作的一種通信協(xié)議。在該協(xié)議的Server端綁定各種供用戶使用的方法,Client端可以依據(jù)該協(xié)議來遠(yuǎn)程調(diào)用Server端的方法。具有跨平臺、分布式、XML作為傳輸信息格式、多種數(shù)據(jù)結(jié)構(gòu)等特點。其工作流程如圖1所示。
圖1 XML-RPC工作流程圖
(2) TCPROS協(xié)議:基于TCP協(xié)議的ROS應(yīng)用層數(shù)據(jù)協(xié)議,用于解析Topic和Service的數(shù)據(jù)流。TCPROS為了保證通信雙方的傳輸類型一致,會在協(xié)議頭中給出Topic名的md5 hash算法處理之后的值,每次改動消息類型時,md5的值都會隨之改變,這樣就避免了新舊消息類型不一致的問題。TCPROS的協(xié)議頭所占字節(jié)數(shù)一般是固定的,其中seq可以檢測是否丟包,stamp可以檢測消息實時性。該協(xié)議還為用戶提供了一些底層傳輸設(shè)置接口,例如Subscriber中的選項tcp_nodelay如果為1,便給socket設(shè)置TCP_NODELAY選項,降低延遲,但可能會降低傳輸效率。另外Service Client選項的persistent設(shè)置為1,則該service的鏈接會開放多個請求通道。
目前,ROS和Android實現(xiàn)通信的方式主要有兩類: rosbridge和rosjava。
1.2.1rosbridge
rosbridge協(xié)議的提出是為了讓非ROS環(huán)境可與ROS節(jié)點進(jìn)行通信,基本思想是通過一個中間橋梁WebSocket來聯(lián)系通信雙方各自的協(xié)議。對于Android與ROS通信來講,可在Android平臺實現(xiàn)WebSocket,其以JSON格式的API為非ROS環(huán)境提供ROS通信支持,包括基于話題的發(fā)布訂閱和服務(wù)的各種操作,依據(jù)rosbridge協(xié)議解析JSON,這部分工作已經(jīng)在一個開源項目RosBridgeClient中進(jìn)行了實現(xiàn),該庫依賴java_websocket和json_simple兩個庫。ROS機(jī)器人中需要運(yùn)行rosbridge_server作為監(jiān)聽rosbridge協(xié)議的服務(wù)器,通過RosBridgeClient和rosbridge_server便可使得Android應(yīng)用與ROS機(jī)器人功能節(jié)點通過rosbridge協(xié)議進(jìn)行通信,總體框圖如圖2所示。
圖2 Android終端與ROS機(jī)器人使用rosbridge通信示意圖
以rosbridge協(xié)議進(jìn)行通信的方式是輕量級、跨平臺的,依據(jù)第三方庫可以快速構(gòu)建自己ROS機(jī)器人的交互Android APP,不需要在 Android平臺上過多依賴java實現(xiàn)的ROS組件。但是增加中間rosbridge協(xié)議無疑會帶來傳輸效率降低、擴(kuò)展困難、通信安全問題等缺點。此外,第三方庫沒有經(jīng)過單元測試,并不能保證其魯棒性。
1.2.2rosjava
rosjava使用java實現(xiàn)了ROS中的基本通信機(jī)制,以及一些必要的核心工具(例如tf,geometry)和一些驅(qū)動。android_core是Google基于rosjava開發(fā)的用來在Android平臺實現(xiàn)ROS應(yīng)用的組件集合,包括Android視圖與ROS節(jié)點相結(jié)合的數(shù)據(jù)顯示功能組件,并且實現(xiàn)了Android中所需的基本組件Activity(RosActivity)和Service(NodeMainExecutorService)。RosActivity是ROS應(yīng)用程序在Android上進(jìn)行部署所必不可少的程序組件,用來與用戶進(jìn)行交互,NodeMainExecutorService主要用來獲取ROS Master,進(jìn)而執(zhí)行和管理Android中ROS節(jié)點(NodeMain)的生命周期。開發(fā)者可通過android_core來構(gòu)建自己機(jī)器人的移動終端交互APP。此外,通過Google提供的原生開發(fā)工具NDK(Native Development Kit)來實現(xiàn)java與C/C++間的相互調(diào)用,開發(fā)者可在Android開發(fā)應(yīng)用中調(diào)用自己的ROSCPP相關(guān)庫函數(shù),保護(hù)一些敏感算法。
本文主要研究使用rosjava構(gòu)建的Android應(yīng)用與ROS機(jī)器人交互通信中的可靠性問題,包括兩點:一是通過TCPROS建立通信連接時的網(wǎng)絡(luò)異常檢測;二是增加Android以ROS交互時的任務(wù)搶占與反饋機(jī)制。
ROS作為一種分布式系統(tǒng)框架,需要一個中間服務(wù)ROS Master管理各個節(jié)點間的聯(lián)系。它為各節(jié)點提供了名字注冊服務(wù),即各節(jié)點通過XMLRPC協(xié)議在Master上進(jìn)行注冊自己的信息。例如名字、話題、服務(wù)等。使得各節(jié)點間可以通過話題、服務(wù)等建立TCP連接,雙方通過TCPROS/UDPROS協(xié)議便可進(jìn)行數(shù)據(jù)傳輸。此時的ROS Master只是維護(hù)各節(jié)點的基本信息,在對節(jié)點間通信異常情況未做任何處理。對于一些人機(jī)交互方面,例如發(fā)送機(jī)器人手臂控制消息讓其做復(fù)雜任務(wù),機(jī)器人需長時間執(zhí)行用戶命令,但若在此期間移動終端連接中斷,便不能給機(jī)器人發(fā)送停止信號,這時便可能發(fā)生機(jī)器人失控帶來的危險。所以,對于一些交互節(jié)點的連接狀態(tài)采取必要的監(jiān)控是非常重要的。
Android移動交互終端與ROS機(jī)器人間是通過基于TCPROS協(xié)議進(jìn)行數(shù)據(jù)傳輸?shù)摹T搮f(xié)議基于標(biāo)準(zhǔn)TCP協(xié)議,在三次握手建立連接與四次揮手關(guān)閉連接的過程中出現(xiàn)網(wǎng)絡(luò)異常時,則通信雙方能夠互相感知。但是在建立好連接的狀態(tài)下,如若出現(xiàn)連接中斷,則雙方便不會及時知道對方的狀態(tài)如何。 這里提到的連接中斷包括網(wǎng)絡(luò)故障、通信雙方的應(yīng)用程序崩潰以及通信雙方的主機(jī)崩潰等。解決此類問題可采用以下兩種策略。
許多TCP的具體實現(xiàn)提供了一個稱作Keep-Alive的機(jī)制用來檢測死連接,其工作方式是在TCP通信鏈接通道空閑一段時間間隔后發(fā)送一個Keep-Alive包。如果對方主機(jī)的對等應(yīng)用程序正常運(yùn)行,就會響應(yīng)一個ACK應(yīng)答。如果對方主機(jī)可到達(dá)但是對等應(yīng)用程序沒有運(yùn)行,則會響應(yīng)RST消息,發(fā)送Keep-Alive消息的TCP程序就會撤銷連接并返回ECONNRESET錯誤給應(yīng)用程序。如果對方既沒有響應(yīng)ACK又沒有返回RST消息,就會按照設(shè)定的嘗試次數(shù)繼續(xù)發(fā)送Keep-Alive探詢消息,在規(guī)定次數(shù)內(nèi)未收到對方響應(yīng),則表明對方不可到達(dá)或已經(jīng)崩潰,這時就會返回ETIMEDOUT錯誤。
此種方式有三個重要參數(shù)tcp_keepalive_probes、tcp_keepalive_time、tcp_keepalive_intvl,其中tcp_keepalive_time為探測時間間隔,默認(rèn)為7 200秒,對于實時檢測幾乎沒有意義,如果改變參數(shù),又會失去清除長時間死連接這一最初的意義。此外,keep-alive不僅會檢測死連接,還會撤銷它們,在某些使用場合是不希望發(fā)生的,并且對于TCP以短連接為主的方式不起作用。
在應(yīng)用層實現(xiàn)對連接中斷的檢測是本文的研究關(guān)鍵點,基本思想和Keep-Alive類似,定時向?qū)Φ确桨l(fā)送自定義探針,對等方需返回對應(yīng)協(xié)議的應(yīng)答,但由于是在應(yīng)用層實現(xiàn)的,可以根據(jù)應(yīng)用程序靈活掌握檢測時間。為減少Android移動終端的計算壓力,本文將檢測通信網(wǎng)絡(luò)狀態(tài)的TCP Server設(shè)計在ROS機(jī)器人的任務(wù)執(zhí)行服務(wù)端,開發(fā)一個監(jiān)聽ROS節(jié)點連接狀態(tài)的功能模塊(CheckNodeConnection),如圖3所示。該模塊提供了一系列編程接口,ROS機(jī)器人可主動監(jiān)測、被動監(jiān)測Android中ROS節(jié)點的網(wǎng)絡(luò)連接狀態(tài),其中主動監(jiān)測是在ROS機(jī)器人端輸入需要監(jiān)控節(jié)點的Caller ID,而被動監(jiān)測是Android端節(jié)點主動發(fā)起被監(jiān)聽請求,請求中包含需要被監(jiān)控節(jié)點的Caller ID?!癈heckNodeConnection”模塊得到需要被監(jiān)控節(jié)點的Caller ID之后,就會實例化一個與ROS Master中的XMLRPC Server對應(yīng)的XMLRPC Client。通過XMLRPC協(xié)議調(diào)用“l(fā)ookupNode”方法,然后通過“Resolver”模塊解析返回的結(jié)果XmlRpcValue,得到需要被監(jiān)控節(jié)點的URL之后就可與被監(jiān)控節(jié)點建立TCP連接,并保持自定義心跳協(xié)議的長連接。一旦通信出現(xiàn)異?;蛘逜ndroid端應(yīng)用程序崩潰等情況發(fā)生,“CheckNodeConnection”模塊就會檢測到連接異常,并通知相關(guān)任務(wù)執(zhí)行模塊進(jìn)入預(yù)設(shè)的安全模式,防止機(jī)器人失控帶來危險。此外,還可在Android移動交互端進(jìn)行提示用戶故障所在,增加交互的友好性。
圖3 “CheckNodeConnection”模塊總體框圖
Android移動終端與ROS機(jī)器人間的交互需要一種可時刻反饋任務(wù)執(zhí)行狀態(tài)信息以及可搶占任務(wù)執(zhí)行的通信機(jī)制來提高人機(jī)交互的可靠性[16]。ROS中的Actionlib功能包提供了這種通信機(jī)制,但是,在android_core中并未提供與ROS Actionlib進(jìn)行通信的功能。因此,作者開發(fā)了一套用于Android移動終端與Actionlib中ActionServer通信的“RosActionOnAndroid” java開發(fā)包。其總體結(jié)構(gòu)框圖如圖4所示。
圖4 “RosActionOnAndroid”開發(fā)包總體框圖
該開發(fā)包主要由Action Client/Server功能模塊和其對應(yīng)的狀態(tài)機(jī)組成,client和server分別為用戶提供相應(yīng)的編程接口。例如Action Client會提供目標(biāo)Publisher的設(shè)置接口,提供發(fā)送goal到Action Server的接口,Action Server有對應(yīng)該goal話題的Subscriber,提供給用戶MessageListener接口,用戶可根據(jù)消息進(jìn)行相應(yīng)任務(wù)的執(zhí)行,依據(jù)執(zhí)行情況可進(jìn)行Action Server狀態(tài)機(jī)的設(shè)置,Action Client中的狀態(tài)機(jī)狀態(tài)會跟隨Action Server的狀態(tài)變化而改變。
“RosActionOnAndroid”采用client-server的工作模式,兩者之間通過“ROS Action Protocol”進(jìn)行通信,該協(xié)議是對基礎(chǔ)ROS消息進(jìn)行的封裝,包括目標(biāo)(goal)、結(jié)果(result)、反饋(feedback)、狀態(tài)(state)、取消(cancel)。消息的傳遞方式還是采用基于TCPROS協(xié)議的發(fā)布訂閱通信模式,client和server分別維護(hù)各自的任務(wù)執(zhí)行狀態(tài)機(jī),為用戶提供可搶占任務(wù)、中間狀態(tài)信息反饋等各種接口。用戶可通過該開發(fā)包在Android端構(gòu)建Action Client與ROS機(jī)器人中對應(yīng)執(zhí)行任務(wù)計算的Action Server進(jìn)行通信,包括發(fā)送任務(wù)目標(biāo)、取消目標(biāo)、獲取Action Server端任務(wù)執(zhí)行的反饋信息與最終結(jié)果等。
對于Android端的ActionClient功能包類圖如圖5所示,ActionClient實現(xiàn)了rosjava中的NodeMain接口,并實現(xiàn)了其中的虛方法,所以在android_core的RosActivity中實例化一個ActionClient節(jié)點,便可與ROS機(jī)器人中的Action Server通過“ROS Action Protocol”進(jìn)行通信。
圖5 ActionClient功能包類圖
本文提供了一個應(yīng)用案例,為某一服務(wù)機(jī)器人平臺開發(fā)一個Android移動終端交互APP,如圖6所示。該應(yīng)用程序可與機(jī)器人進(jìn)行遠(yuǎn)程交互,例如語音識別、視覺傳輸、導(dǎo)航、手臂運(yùn)動規(guī)劃控制等,并將本文設(shè)計的網(wǎng)絡(luò)通信異常檢測機(jī)制與“RosActionOnAndroid”通信機(jī)制加入其中來提高該交互過程的可靠性與精確性。
圖6 ROS服務(wù)機(jī)器人與其Android移動終端交互APP
本文針對網(wǎng)絡(luò)通信異常檢驗設(shè)計了一個簡單普遍的應(yīng)用案例,Android移動終端與ROS機(jī)器人如圖7所示進(jìn)行組網(wǎng)設(shè)計,分別對Android智能手機(jī)、路由器兩部分進(jìn)行斷網(wǎng)、強(qiáng)制關(guān)機(jī)來模擬網(wǎng)絡(luò)故障、主機(jī)死機(jī)等情況,分別驗證ROS機(jī)器人是否即刻感知其移動交互終端的連接斷開。
圖7 移動終端與ROS機(jī)器人的組網(wǎng)示意圖
這兩部分的實驗過程大體一致,這里針對Android智能手機(jī)斷網(wǎng)進(jìn)行實驗,測試ROS機(jī)器人是否感知移動終端通信異常。正常情況下,Android移動終端會與ROS機(jī)器人保持連接,每30 ms發(fā)送一次自定義協(xié)議心跳包,在該實驗過程時間范圍內(nèi)Android移動終端向ROS機(jī)器人發(fā)送的字節(jié)數(shù)如圖8所示。當(dāng)在A點時人為關(guān)閉Android移動終端網(wǎng)絡(luò),再經(jīng)過5次探測后確定移動終端網(wǎng)絡(luò)異常,在B點ROS機(jī)器人會得到感知,從而進(jìn)入預(yù)設(shè)的安全模式。
圖8 ROS機(jī)器人向Android移動終端發(fā)送心跳包的時序圖
本文通過“RosActionOnAndroid”在Android移動終端構(gòu)建與ROS機(jī)器人手臂交互控制的應(yīng)用,來測試其可通過執(zhí)行任務(wù)狀態(tài)信息的時刻反饋來提高控制精度和通過監(jiān)控手臂運(yùn)動時的速度來防止危險發(fā)生。
機(jī)器人手臂多由電機(jī)模塊組成,采用關(guān)節(jié)位置驅(qū)動的方式,在物理機(jī)器臂運(yùn)動時會受到內(nèi)部電機(jī)的速度、加速度等參數(shù)的制約,如果不加處理的話,就會使得算法規(guī)劃的手臂運(yùn)動軌跡與物理機(jī)器臂運(yùn)動的路徑不一致。此時,Android移動終端與ROS機(jī)器人交互時,RosActionOnAndroid就能很好地解決這一問題。
本文通過“RosActionOnAndroid”在Android移動終端實時獲取ROS機(jī)器人手臂的運(yùn)動位置,動態(tài)逼近目標(biāo)值來提高控制運(yùn)動路徑精度。例如,控制機(jī)器臂末端畫一個完整圓圈,以某一起點開始再回到該點,如圖9中的A所示,通過算法得到末端畫圓所經(jīng)過的路點如圖10所示。如果將規(guī)劃后的手臂運(yùn)動路徑直接發(fā)送到ROS機(jī)器人,驅(qū)動手臂運(yùn)動,由于物理機(jī)器人手臂運(yùn)動經(jīng)過每個路點的時間不會正好與運(yùn)動學(xué)算法規(guī)劃的時間相吻合,便導(dǎo)致真實路徑偏離理論的圓弧,如圖9中的B所示。然而,通過“RosActionOnAndroid”與ROS機(jī)器人通過Actionlib機(jī)制通信,通過ROS機(jī)器人時刻返回當(dāng)前運(yùn)動狀態(tài)決定下一路點的控制時間,便會使軌跡接近理論圓弧,如圖9中的C所示。
圖9 機(jī)器人手臂畫圓測試
圖10 手臂末端執(zhí)行器畫圓所經(jīng)過的路點
此外,通過“RosActionOnAndroid”可在Android移動交互終端實時獲得機(jī)器人的任務(wù)執(zhí)行狀態(tài)信息,監(jiān)控其是否符合安全運(yùn)作模式,動態(tài)設(shè)置安全閾值。例如,移動終端發(fā)送指令給ROS機(jī)器人手臂去執(zhí)行某種任務(wù),并監(jiān)控其手臂運(yùn)動速度是否超出閾值,這時便需要目標(biāo)指令、手臂各個關(guān)節(jié)的速度值以及可任務(wù)搶占和終止四個數(shù)據(jù)傳輸通道,則基本的ROS發(fā)布訂閱通信模式就不適用了。
本實驗將Android移動終端,通過“RosActionOnAndroid”與ROS機(jī)器人手臂運(yùn)動規(guī)劃服務(wù)端的ActionServer綁定連接,并時刻獲取其手臂運(yùn)動規(guī)劃中的速度值,當(dāng)移動終端發(fā)現(xiàn)速度值超出預(yù)先設(shè)置的閾值時,則發(fā)送取消任務(wù)指令。在一次執(zhí)行任務(wù)時的各個關(guān)節(jié)的位置、速度如圖11中A、B所示,其中當(dāng)速度值超出1.0 radian/s時,則修正該規(guī)劃路徑,并限制其在該最大速度繼續(xù)執(zhí)行任務(wù),如圖11中的C所示。
圖11 機(jī)器人手臂運(yùn)動的位置、 速度以及超出閾值后的速度曲線圖
本文主要研究設(shè)計了Android移動終端與ROS機(jī)器人交互中的可靠性通信機(jī)制,一方面設(shè)計了網(wǎng)絡(luò)異常檢測模塊“CheckNodeConnection”可避免在通信故障時機(jī)器人失控等危險發(fā)生;另一方面開發(fā)的“RosActionOnAndroid”功能包可提供任務(wù)搶占、執(zhí)行狀態(tài)信息反饋等功能,使得交互方式更加安全,控制更加精準(zhǔn)。未來ROS服務(wù)機(jī)器人與Android移動終端互聯(lián)交互是一個必然趨勢,兩者之間交互通信的可靠性應(yīng)當(dāng)?shù)玫街匾暋?/p>
由于目前的ROS通信機(jī)制尚不能保證很好的消息傳遞實時性,未來工作考慮結(jié)合ROS2.0中采用的數(shù)據(jù)分發(fā)服務(wù)(DDS)技術(shù),提高分布式系統(tǒng)的實時性[17]。并且繼續(xù)研究提高網(wǎng)絡(luò)異常檢測的實時性,完善應(yīng)用層自定義心跳反饋協(xié)議,并逐步形成標(biāo)準(zhǔn)。對于“RosActionOnAndroid”通信機(jī)制內(nèi)部的狀態(tài)機(jī)應(yīng)進(jìn)一步提高其可擴(kuò)展性,更易于開發(fā)者使用。
[1] Xiao Y,Zhang Z,Beck A,et al.Human-robot interaction by understanding upper body gestures[J].Presence,2014,23(2):133-154.
[2] Jin H,Chen Q,Chen Z,et al.Multi-LeapMotion sensor based demonstration for robotic refine tabletop object manipulation task[J].Caai Transactions on Intelligence Technology,2016,1(1):104-113.
[3] 左軒塵,韓亮亮,莊杰,等.基于ROS的空間機(jī)器人人機(jī)交互系統(tǒng)設(shè)計[J].計算機(jī)工程與設(shè)計,2015(12):3370-3374.
[4] Aroca R V,Péricles A,Oliveira B S D,et al.Towards smarter robots with smartphones[C]//5th Workshop in Applied Robotics and Automation,2012:1-6.
[5] Barbosa J P D A,Lima F D P D C,Coutinho L D S,et al.ROS,Android and cloud robotics:How to make a powerful low cost robot[C]//International Conference on Advanced Robotics.IEEE,2015.
[6] Kehoe B,Patil S,Abbeel P,et al.A Survey of Research on Cloud Robotics and Automation[J].IEEE Transactions on Automation Science & Engineering,2015,12(2):398-409.
[7] Mayachita I,Widyarini R,Sono H R,et al.Implementation of Entertaining Robot on ROS Framework[J].Procedia Technology,2013,11(1):380-387.
[8] Hendrich N,Bistry H,Zhang J.Architecture and Software Design for a Service Robot in an Elderly-Care Scenario[J].Engineering,2015,1(1):27-35.
[9] Oros N,Krichmar J L.Smartphone based robotics:Powerful,flexible and inexpensive robots for hobbyists,educators,students and researchers[J].IEEE Robotics & Automation Magazine,2013,11(1):19-29.
[10] Dieber B,Kacianka S,Rass S,et al.Application-level Security for ROS-based Applications[C]//International Conference on Intelligent Robots and Systems,2016.
[11] Codd-Downey R,Jenkin M.RCON:Dynamic mobile interfaces for command and control of ROS-enabled robots[C]//International Conference on Informatics in Control,Automation and Robotics.IEEE,2015:66-73.
[12] Kohler D,Conley K.Rosjava:an implementation of ROS in pure Java with Android suport[EB/OL].[2013-05-15].http://code.gogle.com/p/rosjava.
[13] Zoppi A.A lightweight open-source communication framework for native integration of resource constrained robotics devices with ROS[D].Italy:Politecnico di Milano.
[14] Quigley M,Conley K,Gerkey B P,et al.ROS:an open-source Robot Operating System[C]//ICRA Workshop on Open Source Software.2009.
[15] 賈娟娟,施智平,關(guān)永,等.ROS中XML-RPC協(xié)議實現(xiàn)的形式化驗證[J].小型微型計算機(jī)系統(tǒng),2015,36(12):2629-2633.
[16] Yepes J C,Yepes J J,Martínez J R,et al.Implementation of an Android based teleoperation application for controlling a KUKA-KR6 robot by using sensor fusion[C]//Health Care Exchanges.IEEE,2013:1-5.
[17] 樊澤棟,丁博,史殿習(xí),等.機(jī)器人中間件消息實時性保證機(jī)制的研究與實現(xiàn)[J].軟件,2015,36(10):21-25.