王煒
近年來(lái),隨著服務(wù)機(jī)器人研究的飛速發(fā)展,發(fā)展出大量應(yīng)用于服務(wù)機(jī)器人的編程平臺(tái),Windows下較為典型的通用編程平臺(tái)有LabVIEW[1]以及Microsoft Robotics Studio[7],前者提出了 G語(yǔ)言,開始使用編譯性圖形化編程,并將軟件與虛擬儀器結(jié)合,代替了許多傳統(tǒng)儀器,廣泛應(yīng)用于工程項(xiàng)目中;后者為微軟開發(fā)的一款機(jī)器人開發(fā)環(huán)境,具備了可擴(kuò)展、跨越硬件平臺(tái)、實(shí)時(shí)性等特點(diǎn),同時(shí)包含了龐大的組件庫(kù)和仿真環(huán)境,方便用戶使用。Linux下新興的ROS[2]系統(tǒng)憑借其龐大的組件庫(kù)、合理的構(gòu)架以及開源的特性,吸引了大量的開發(fā)用戶,其他開發(fā)的機(jī)器人平臺(tái)如 OROCOS[3]、Player[4]等也被應(yīng)用于服務(wù)機(jī)器人研究。同時(shí)一些機(jī)器人器材制造商在產(chǎn)品中也會(huì)附帶自己的開發(fā)平臺(tái)(例如ABB),但是其通用性較差??v觀這些編程平臺(tái),總會(huì)或多或少存在某些缺陷。比如Microsoft Robotics Studio以及LabVIEW屬于商業(yè)軟件,不支持開源,自身系統(tǒng)龐大,面向?qū)ο蠖酁楣こ處?、設(shè)計(jì)人員;OROCOS、ROS缺乏友好的圖形用戶編程界面,使得普通用戶望而卻步。
本文針對(duì)以上編程環(huán)境存在的問(wèn)題,設(shè)計(jì)了基于分層編程方式的服務(wù)機(jī)器人編程平臺(tái),基本模塊層面向開發(fā)人員開放,開發(fā)人員將復(fù)雜的驅(qū)動(dòng)、算法等基本模塊一次性編寫完成,通過(guò)統(tǒng)一接口協(xié)議嵌入模塊庫(kù);任務(wù)規(guī)劃層提供友好的圖形化界面,用戶根據(jù)任務(wù)需求,將基本模塊像搭積木一樣搭建起來(lái),即可完成對(duì)服務(wù)機(jī)器人的編程,實(shí)現(xiàn)各種任務(wù)。通過(guò)該分層模式,既兼顧了底層開發(fā)的需要,又使得不具備或具備很少專業(yè)知識(shí)的用戶也能方便的給機(jī)器人編程[5],同時(shí)該平臺(tái)還具有內(nèi)核小,界面簡(jiǎn)潔等優(yōu)勢(shì)。通過(guò)在“交龍”服務(wù)機(jī)器人上進(jìn)行測(cè)試與實(shí)驗(yàn),將語(yǔ)音識(shí)別、定位導(dǎo)航、物體識(shí)別、機(jī)械臂控制模塊嵌入該平臺(tái),可以很方便的對(duì)“交龍”進(jìn)行編程,完成各種不同的任務(wù)流程。
參考其他平臺(tái)的設(shè)計(jì)指標(biāo)[1~4],考慮其獨(dú)立性、模塊化、可擴(kuò)展性、實(shí)時(shí)性、重復(fù)利用性、編程語(yǔ)言等各個(gè)方面,該平臺(tái)將系統(tǒng)結(jié)構(gòu)分為三層:基本模塊層、執(zhí)行協(xié)調(diào)層、任務(wù)規(guī)劃層,如圖1所示:
圖1 平臺(tái)系統(tǒng)結(jié)構(gòu)圖
基本模塊層提供了龐大的模塊庫(kù),并通過(guò)模塊管理器進(jìn)行統(tǒng)一管理;執(zhí)行協(xié)調(diào)層由程序解釋器構(gòu)成,一方面對(duì)任務(wù)規(guī)劃層的用戶程序進(jìn)行解釋分析,另一方面通過(guò)模塊管理器調(diào)用相應(yīng)模塊,完成相應(yīng)的任務(wù),該層對(duì)任務(wù)規(guī)劃層和基本模塊層起到協(xié)調(diào)的作用;任務(wù)規(guī)劃層提供友好的人機(jī)交互界面,方便用戶以圖形化編程的形式進(jìn)行任務(wù)規(guī)劃。下文將針對(duì)各層進(jìn)行詳細(xì)介紹。
基本模塊層由模塊庫(kù)和模塊管理器構(gòu)成。模塊庫(kù)中包含設(shè)備驅(qū)動(dòng)、控制算法、邏輯算法等基本模塊,構(gòu)成了平臺(tái)的最底層。模塊管理器負(fù)責(zé)對(duì)模塊庫(kù)進(jìn)行統(tǒng)一的數(shù)據(jù)通信管理和調(diào)度。
基本模塊層定義了統(tǒng)一的模塊接口協(xié)議,用戶可根據(jù)此協(xié)議編寫自定義模塊,將其納入模塊庫(kù)。協(xié)議中規(guī)定模塊以完成編譯的動(dòng)態(tài)鏈接庫(kù)形式存儲(chǔ),提高了底層執(zhí)行效率。
不同模塊間數(shù)據(jù)通信傳輸是模塊管理器的設(shè)計(jì)難點(diǎn),本文采用數(shù)據(jù)共享機(jī)制,如圖2所示:
圖2 數(shù)據(jù)共享機(jī)制結(jié)構(gòu)圖
數(shù)據(jù)通訊分為數(shù)據(jù)存儲(chǔ)層、數(shù)據(jù)映射層和數(shù)據(jù)訪問(wèn)層。在數(shù)據(jù)存儲(chǔ)層,每個(gè)模塊自行分配數(shù)據(jù)內(nèi)存,保證了模塊數(shù)據(jù)的獨(dú)立性;通過(guò)數(shù)據(jù)映射層,平臺(tái)對(duì)所有模塊的數(shù)據(jù)地址以指針變量的形式進(jìn)行統(tǒng)一管理,形成地址池,每個(gè)數(shù)據(jù)地址被映射到用戶自定義的變量;在數(shù)據(jù)訪問(wèn)層,需要數(shù)據(jù)的用戶或者模塊直接通過(guò)自定義變量對(duì)共享數(shù)據(jù)進(jìn)行訪問(wèn)。通過(guò)該機(jī)制,用戶可直接利用數(shù)據(jù)而不必關(guān)心數(shù)據(jù)來(lái)源,實(shí)現(xiàn)了數(shù)據(jù)鏈接層透明化。
任務(wù)規(guī)劃和程序編寫主要體現(xiàn)在任務(wù)規(guī)劃層,利用圖形化編程界面設(shè)計(jì),如圖3所示:
圖3 圖形化編程界面示意圖
用戶可以很便捷的完成對(duì)服務(wù)機(jī)器人的編程。
在界面風(fēng)格設(shè)計(jì)中,本文力求簡(jiǎn)潔清晰,保證用戶上手簡(jiǎn)單。菜單主要分為主菜單和調(diào)試菜單,主菜單提供了對(duì)程序的管理功能(創(chuàng)建、刪除、拷貝、編輯等)以及各個(gè)窗口(編程窗口、變量窗口、模塊面板)的管理功能。調(diào)試菜單為用戶提供了簡(jiǎn)單的調(diào)試功能(運(yùn)行、單步執(zhí)行、暫停、停止等),方便用戶對(duì)程序進(jìn)行監(jiān)控。
在編程風(fēng)格設(shè)計(jì)中,該界面采用了流程圖式編程,箭頭連線通過(guò)連接不同的模塊,表示任務(wù)的流程走向;這種編程風(fēng)格使得用戶可以很直觀的將規(guī)劃的任務(wù)流程反映在編程界面上,用戶只需要根據(jù)任務(wù)的要求將模塊面板以及模塊庫(kù)中的相應(yīng)模塊直接拖拽到編程界面,按照流程用連線連接即可。平臺(tái)采取自動(dòng)識(shí)別用戶變量類型,并依靠前文提到的數(shù)據(jù)共享機(jī)制進(jìn)行數(shù)據(jù)傳遞。
圖標(biāo)是圖形化編程的基本單元,在編程中起著關(guān)鍵作用,合理的設(shè)計(jì)也就尤為重要,在RT軟件中,組件單元包含了狀態(tài)、輸入、輸出、命令四個(gè)基本部分,本文在其基本單元的設(shè)計(jì)中借鑒了RT[6]的組件形式,同時(shí)融入了自己的特點(diǎn),具體體現(xiàn)在如下幾個(gè)方面:
(1)易于理解:圖標(biāo)名稱采用文字顯示,上標(biāo)為模塊名稱,下標(biāo)為模塊命令名稱或參數(shù),簡(jiǎn)單易懂,用戶可通過(guò)接口對(duì)名稱進(jìn)行自定義,對(duì)于當(dāng)前模塊的運(yùn)行狀態(tài),則通過(guò)不同的顏色框予以表示。
(2)參數(shù)表達(dá):LabVIEW、RT等平臺(tái)的參數(shù)之間通過(guò)連線來(lái)表現(xiàn)傳遞關(guān)系,而該平臺(tái)采用流程式編程,連線表達(dá)的是任務(wù)的走向,輸入輸出參數(shù)采用文本輸入形式。同時(shí)為了保證界面干凈整潔,參數(shù)可選擇顯示或隱藏,隱藏狀態(tài)下鼠標(biāo)滑到相應(yīng)圖標(biāo)上會(huì)顯示參數(shù),參數(shù)的編輯修改通過(guò)雙擊圖標(biāo)實(shí)現(xiàn)。
(3)集結(jié)性:編程界面圖標(biāo)數(shù)量過(guò)多,會(huì)使得整個(gè)界面排列紊亂,為了保證界面簡(jiǎn)潔干凈,同時(shí)方便用戶將不同功能的模塊歸類劃分,該平臺(tái)提供了圖標(biāo)集結(jié)功能,用戶可以將多個(gè)模塊(圖標(biāo))整合為一個(gè)模塊(Block),Block可以編輯注釋,便于程序?yàn)g覽。每一個(gè)Block即為一個(gè)新的功能模塊,用戶可以對(duì)其進(jìn)行模塊操作。
(4)存儲(chǔ)格式:由于程序全部由圖標(biāo)和連線架構(gòu)而成,因此采用通用的XML格式存儲(chǔ),方便對(duì)圖標(biāo)和連線進(jìn)行統(tǒng)一管理。
(5)多分支性:考慮到判斷選擇語(yǔ)句的應(yīng)用以及多線程同步的需求,本文在連線上添加了參數(shù),解釋器會(huì)根據(jù)滿足參數(shù)要求的連線方向執(zhí)行程序。
執(zhí)行協(xié)調(diào)層由程序解釋器構(gòu)成,完成用戶程序的運(yùn)行和調(diào)試功能。
該層采取解釋執(zhí)行方案,在程序運(yùn)行過(guò)程中,程序解釋器解釋當(dāng)前用戶的任務(wù)流程,調(diào)度相應(yīng)模塊,具體流程,如圖4所示:
圖4 程序解釋執(zhí)行圖
該種執(zhí)行方式一方面考慮到了用戶的使用方便,方便用戶進(jìn)行單步調(diào)試,另一方面也顧及了程序的執(zhí)行速度。
2011年中國(guó)服務(wù)機(jī)器人大賽中,該平臺(tái)在“交龍”服務(wù)機(jī)器人上首次正式使用。該機(jī)器人裝載有激光測(cè)距傳感器、攝像頭、麥克風(fēng)等基本傳感器以及云臺(tái)、機(jī)械臂、電動(dòng)機(jī)等執(zhí)行機(jī)構(gòu),如圖5所示:
圖5 交龍機(jī)器人圖
在比賽中,“交龍”機(jī)器人需要完成特征人識(shí)別任務(wù),具體任務(wù)流程如下:
(1)機(jī)器人通過(guò)門道進(jìn)入比賽場(chǎng)地,并走到預(yù)先設(shè)定的一個(gè)點(diǎn)。
(2)由裁判預(yù)先給定三名測(cè)試人員的識(shí)別順序,三名給出名字的人員依次站到機(jī)器人面前,機(jī)器人給他們介紹自己,詢問(wèn)他們的名字,被測(cè)試人員給予機(jī)器人的任何信息,都可被機(jī)器人用來(lái)作為識(shí)別的手段,但是不允許觸摸機(jī)器人,然后,機(jī)器人必須判別是否已經(jīng)記住該人員,如果記住則開始識(shí)別下一個(gè)人員,沒(méi)有記住可以跳過(guò)去,不扣分。識(shí)別結(jié)束后,測(cè)試人員離開場(chǎng)地。
(3)三名人員識(shí)別后,機(jī)器人自主行走到第二點(diǎn)。
(4)由裁判給出五名測(cè)試人員的出場(chǎng)順序,他們依次站到機(jī)器人面前,面向機(jī)器人保持十秒鐘,機(jī)器人要能識(shí)別出他們并且能夠說(shuō)出他們的名字。其中一測(cè)試個(gè)人員是機(jī)器人不認(rèn)識(shí)的,機(jī)器人要表達(dá)(語(yǔ)音或動(dòng)作)出他不認(rèn)識(shí)這個(gè)人。在這個(gè)過(guò)程中不允許觸摸機(jī)器人,握手除外。識(shí)別過(guò)程中,如果機(jī)器人識(shí)別不出一個(gè)人,可以提前選擇放棄,如果識(shí)別錯(cuò)誤將會(huì)受到懲罰。
(5)識(shí)別結(jié)束,能夠自主離開的機(jī)器人自主離開房間,沒(méi)有預(yù)先說(shuō)明的可以關(guān)掉機(jī)器人,該項(xiàng)比賽結(jié)束。
針對(duì)任務(wù)流程,用戶利用該平臺(tái)編寫了相關(guān)圖形化程序,如圖6所示:
圖6 特征人識(shí)別任務(wù)程序圖
圖中Block為功能模塊,每一個(gè)Block里面包含許多基本模塊,如“人腿監(jiān)測(cè)”Block的展開后即為發(fā)聲、導(dǎo)航、云臺(tái)控制等基本模塊。通過(guò)模塊集合的形式,使得界面更加簡(jiǎn)潔。箭頭方向標(biāo)識(shí)了整個(gè)程序的運(yùn)行流程,由于采用流程式編程風(fēng)格,任務(wù)的規(guī)劃可以通過(guò)程序界面清晰明了的表現(xiàn)出來(lái)。
程序運(yùn)行過(guò)程中,當(dāng)前正在執(zhí)行的模塊會(huì)以深色框標(biāo)識(shí)出(如圖6中Wait模塊),變量窗口實(shí)時(shí)顯示變量數(shù)據(jù),方便用戶跟蹤流程,用戶可通過(guò)單步執(zhí)行、順序執(zhí)行、暫停、結(jié)束等按鈕對(duì)程序進(jìn)行斷點(diǎn)調(diào)試。
在比賽過(guò)程中,依靠該平臺(tái)簡(jiǎn)潔的編程環(huán)境和獨(dú)特分層編程理念,有效縮短了編程和調(diào)試時(shí)間,僅用2個(gè)小時(shí)就完成了“特征人識(shí)別”任務(wù)的規(guī)劃,并最終順利完成整個(gè)任務(wù)流程,獲得該項(xiàng)目冠軍。通過(guò)該比賽編程實(shí)例,驗(yàn)證了該平臺(tái)極高的編程效率。其清晰明了的編程界面也吸引了眾多參賽隊(duì)伍的興趣。
為了簡(jiǎn)化服務(wù)機(jī)器人編程流程,本文提出了分層式圖形化編程平臺(tái),通過(guò)分層式編程思想,將底層模塊開發(fā)與頂層任務(wù)規(guī)劃合理分開。一方面通過(guò)基本模塊層為開發(fā)人員定義接口模板,將其編寫的龐大模塊庫(kù)封裝為統(tǒng)一格式,從而使得上層用戶不必關(guān)心底層實(shí)現(xiàn)方法;另一方面,在任務(wù)規(guī)劃層設(shè)計(jì)圖形化的流程式編程環(huán)境,使得用戶可以將任務(wù)流程方便直接的轉(zhuǎn)化為計(jì)算機(jī)程序;執(zhí)行協(xié)調(diào)層負(fù)責(zé)兩層之間的協(xié)調(diào),完成程序的運(yùn)行和調(diào)試。簡(jiǎn)約的風(fēng)格也使得用戶不需要掌握太多的編程知識(shí)即可入手,從而可以將更多的精力集中在任務(wù)規(guī)劃層,提高服務(wù)機(jī)器人編程效率,方便用戶完成復(fù)雜任務(wù)規(guī)劃。通過(guò)比賽編程實(shí)例驗(yàn)證了該編程平臺(tái)的有效性和便捷性。
[1]Bishop. RH Learning with LabView 2009[M]. New Jersey, USA: Prentice Hall, 2009.
[2]Robot Operating System: http://www.ros.org/wiki ,2010.
[3]Bruyninckx. H Open robot control software: the OROCOS project[C]. Proceedings ICRA. IEEE International Conference on, Belgium, 2001: 2523- 2528.
[4]Cervera. E Practical multi-robot applications with player and JADE [C]. 10th International Conference on Control Automation Robotics and Vision, Hanoi, 2008:2004 -2009.
[5]張小冰,陳衛(wèi)東, 曹其新. 面向服務(wù)機(jī)器人的簡(jiǎn)易編程環(huán)境設(shè)計(jì)[J]. 上還交通大學(xué)學(xué)報(bào), 2007, 41(11):1811-1815.
[6]Ando, N Suehiro, T Kitagaki, K et al. RT-middleware:distributed component middleware for RT[C]. Intelligent Robots and Systems International Conference on, Australia,2005: 3933 - 3938.
[7]Jackson. J Microsoft robotics studio: A technical introduction[J]. Robotics & Automation Magazine, IEEE,2007: 82-87.