王煒
近年來,隨著服務機器人研究的飛速發展,發展出大量應用于服務機器人的編程平臺,Windows下較為典型的通用編程平臺有LabVIEW[1]以及Microsoft Robotics Studio[7],前者提出了 G語言,開始使用編譯性圖形化編程,并將軟件與虛擬儀器結合,代替了許多傳統儀器,廣泛應用于工程項目中;后者為微軟開發的一款機器人開發環境,具備了可擴展、跨越硬件平臺、實時性等特點,同時包含了龐大的組件庫和仿真環境,方便用戶使用。Linux下新興的ROS[2]系統憑借其龐大的組件庫、合理的構架以及開源的特性,吸引了大量的開發用戶,其他開發的機器人平臺如 OROCOS[3]、Player[4]等也被應用于服務機器人研究。同時一些機器人器材制造商在產品中也會附帶自己的開發平臺(例如ABB),但是其通用性較差。縱觀這些編程平臺,總會或多或少存在某些缺陷。比如Microsoft Robotics Studio以及LabVIEW屬于商業軟件,不支持開源,自身系統龐大,面向對象多為工程師、設計人員;OROCOS、ROS缺乏友好的圖形用戶編程界面,使得普通用戶望而卻步。
本文針對以上編程環境存在的問題,設計了基于分層編程方式的服務機器人編程平臺,基本模塊層面向開發人員開放,開發人員將復雜的驅動、算法等基本模塊一次性編寫完成,通過統一接口協議嵌入模塊庫;任務規劃層提供友好的圖形化界面,用戶根據任務需求,將基本模塊像搭積木一樣搭建起來,即可完成對服務機器人的編程,實現各種任務。通過該分層模式,既兼顧了底層開發的需要,又使得不具備或具備很少專業知識的用戶也能方便的給機器人編程[5],同時該平臺還具有內核小,界面簡潔等優勢。通過在“交龍”服務機器人上進行測試與實驗,將語音識別、定位導航、物體識別、機械臂控制模塊嵌入該平臺,可以很方便的對“交龍”進行編程,完成各種不同的任務流程。
參考其他平臺的設計指標[1~4],考慮其獨立性、模塊化、可擴展性、實時性、重復利用性、編程語言等各個方面,該平臺將系統結構分為三層:基本模塊層、執行協調層、任務規劃層,如圖1所示:

圖1 平臺系統結構圖
基本模塊層提供了龐大的模塊庫,并通過模塊管理器進行統一管理;執行協調層由程序解釋器構成,一方面對任務規劃層的用戶程序進行解釋分析,另一方面通過模塊管理器調用相應模塊,完成相應的任務,該層對任務規劃層和基本模塊層起到協調的作用;任務規劃層提供友好的人機交互界面,方便用戶以圖形化編程的形式進行任務規劃。下文將針對各層進行詳細介紹。
基本模塊層由模塊庫和模塊管理器構成。模塊庫中包含設備驅動、控制算法、邏輯算法等基本模塊,構成了平臺的最底層。模塊管理器負責對模塊庫進行統一的數據通信管理和調度。
基本模塊層定義了統一的模塊接口協議,用戶可根據此協議編寫自定義模塊,將其納入模塊庫。協議中規定模塊以完成編譯的動態鏈接庫形式存儲,提高了底層執行效率。
不同模塊間數據通信傳輸是模塊管理器的設計難點,本文采用數據共享機制,如圖2所示:

圖2 數據共享機制結構圖
數據通訊分為數據存儲層、數據映射層和數據訪問層。在數據存儲層,每個模塊自行分配數據內存,保證了模塊數據的獨立性;通過數據映射層,平臺對所有模塊的數據地址以指針變量的形式進行統一管理,形成地址池,每個數據地址被映射到用戶自定義的變量;在數據訪問層,需要數據的用戶或者模塊直接通過自定義變量對共享數據進行訪問。通過該機制,用戶可直接利用數據而不必關心數據來源,實現了數據鏈接層透明化。
任務規劃和程序編寫主要體現在任務規劃層,利用圖形化編程界面設計,如圖3所示:

圖3 圖形化編程界面示意圖
用戶可以很便捷的完成對服務機器人的編程。
在界面風格設計中,本文力求簡潔清晰,保證用戶上手簡單。菜單主要分為主菜單和調試菜單,主菜單提供了對程序的管理功能(創建、刪除、拷貝、編輯等)以及各個窗口(編程窗口、變量窗口、模塊面板)的管理功能。調試菜單為用戶提供了簡單的調試功能(運行、單步執行、暫停、停止等),方便用戶對程序進行監控。
在編程風格設計中,該界面采用了流程圖式編程,箭頭連線通過連接不同的模塊,表示任務的流程走向;這種編程風格使得用戶可以很直觀的將規劃的任務流程反映在編程界面上,用戶只需要根據任務的要求將模塊面板以及模塊庫中的相應模塊直接拖拽到編程界面,按照流程用連線連接即可。平臺采取自動識別用戶變量類型,并依靠前文提到的數據共享機制進行數據傳遞。
圖標是圖形化編程的基本單元,在編程中起著關鍵作用,合理的設計也就尤為重要,在RT軟件中,組件單元包含了狀態、輸入、輸出、命令四個基本部分,本文在其基本單元的設計中借鑒了RT[6]的組件形式,同時融入了自己的特點,具體體現在如下幾個方面:
(1)易于理解:圖標名稱采用文字顯示,上標為模塊名稱,下標為模塊命令名稱或參數,簡單易懂,用戶可通過接口對名稱進行自定義,對于當前模塊的運行狀態,則通過不同的顏色框予以表示。
(2)參數表達:LabVIEW、RT等平臺的參數之間通過連線來表現傳遞關系,而該平臺采用流程式編程,連線表達的是任務的走向,輸入輸出參數采用文本輸入形式。同時為了保證界面干凈整潔,參數可選擇顯示或隱藏,隱藏狀態下鼠標滑到相應圖標上會顯示參數,參數的編輯修改通過雙擊圖標實現。
(3)集結性:編程界面圖標數量過多,會使得整個界面排列紊亂,為了保證界面簡潔干凈,同時方便用戶將不同功能的模塊歸類劃分,該平臺提供了圖標集結功能,用戶可以將多個模塊(圖標)整合為一個模塊(Block),Block可以編輯注釋,便于程序瀏覽。每一個Block即為一個新的功能模塊,用戶可以對其進行模塊操作。
(4)存儲格式:由于程序全部由圖標和連線架構而成,因此采用通用的XML格式存儲,方便對圖標和連線進行統一管理。
(5)多分支性:考慮到判斷選擇語句的應用以及多線程同步的需求,本文在連線上添加了參數,解釋器會根據滿足參數要求的連線方向執行程序。
執行協調層由程序解釋器構成,完成用戶程序的運行和調試功能。
該層采取解釋執行方案,在程序運行過程中,程序解釋器解釋當前用戶的任務流程,調度相應模塊,具體流程,如圖4所示:

圖4 程序解釋執行圖
該種執行方式一方面考慮到了用戶的使用方便,方便用戶進行單步調試,另一方面也顧及了程序的執行速度。
2011年中國服務機器人大賽中,該平臺在“交龍”服務機器人上首次正式使用。該機器人裝載有激光測距傳感器、攝像頭、麥克風等基本傳感器以及云臺、機械臂、電動機等執行機構,如圖5所示:

圖5 交龍機器人圖
在比賽中,“交龍”機器人需要完成特征人識別任務,具體任務流程如下:
(1)機器人通過門道進入比賽場地,并走到預先設定的一個點。
(2)由裁判預先給定三名測試人員的識別順序,三名給出名字的人員依次站到機器人面前,機器人給他們介紹自己,詢問他們的名字,被測試人員給予機器人的任何信息,都可被機器人用來作為識別的手段,但是不允許觸摸機器人,然后,機器人必須判別是否已經記住該人員,如果記住則開始識別下一個人員,沒有記住可以跳過去,不扣分。識別結束后,測試人員離開場地。
(3)三名人員識別后,機器人自主行走到第二點。
(4)由裁判給出五名測試人員的出場順序,他們依次站到機器人面前,面向機器人保持十秒鐘,機器人要能識別出他們并且能夠說出他們的名字。其中一測試個人員是機器人不認識的,機器人要表達(語音或動作)出他不認識這個人。在這個過程中不允許觸摸機器人,握手除外。識別過程中,如果機器人識別不出一個人,可以提前選擇放棄,如果識別錯誤將會受到懲罰。
(5)識別結束,能夠自主離開的機器人自主離開房間,沒有預先說明的可以關掉機器人,該項比賽結束。
針對任務流程,用戶利用該平臺編寫了相關圖形化程序,如圖6所示:

圖6 特征人識別任務程序圖
圖中Block為功能模塊,每一個Block里面包含許多基本模塊,如“人腿監測”Block的展開后即為發聲、導航、云臺控制等基本模塊。通過模塊集合的形式,使得界面更加簡潔。箭頭方向標識了整個程序的運行流程,由于采用流程式編程風格,任務的規劃可以通過程序界面清晰明了的表現出來。
程序運行過程中,當前正在執行的模塊會以深色框標識出(如圖6中Wait模塊),變量窗口實時顯示變量數據,方便用戶跟蹤流程,用戶可通過單步執行、順序執行、暫停、結束等按鈕對程序進行斷點調試。
在比賽過程中,依靠該平臺簡潔的編程環境和獨特分層編程理念,有效縮短了編程和調試時間,僅用2個小時就完成了“特征人識別”任務的規劃,并最終順利完成整個任務流程,獲得該項目冠軍。通過該比賽編程實例,驗證了該平臺極高的編程效率。其清晰明了的編程界面也吸引了眾多參賽隊伍的興趣。
為了簡化服務機器人編程流程,本文提出了分層式圖形化編程平臺,通過分層式編程思想,將底層模塊開發與頂層任務規劃合理分開。一方面通過基本模塊層為開發人員定義接口模板,將其編寫的龐大模塊庫封裝為統一格式,從而使得上層用戶不必關心底層實現方法;另一方面,在任務規劃層設計圖形化的流程式編程環境,使得用戶可以將任務流程方便直接的轉化為計算機程序;執行協調層負責兩層之間的協調,完成程序的運行和調試。簡約的風格也使得用戶不需要掌握太多的編程知識即可入手,從而可以將更多的精力集中在任務規劃層,提高服務機器人編程效率,方便用戶完成復雜任務規劃。通過比賽編程實例驗證了該編程平臺的有效性和便捷性。
[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]張小冰,陳衛東, 曹其新. 面向服務機器人的簡易編程環境設計[J]. 上還交通大學學報, 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.