陳磊+張建榮+余秋香+王健
摘 要:目前機(jī)器人控制軟件開發(fā)過程中,還沒有統(tǒng)一的平臺(tái)和標(biāo)準(zhǔn),并且對(duì)初學(xué)者的進(jìn)入門檻過高,同時(shí)大量的人力物力消耗在重復(fù)的設(shè)計(jì)過程中。文章提出了在Windows環(huán)境下,使用Eclipse及OpenGL開發(fā)出一套開發(fā)環(huán)境,并成功應(yīng)用于機(jī)器人中。首先介紹了三款主流的機(jī)器人軟件開發(fā)環(huán)境并分析了各自的優(yōu)缺點(diǎn);然后詳細(xì)闡述了如何在Windows環(huán)境下使用Eclipse的方法實(shí)現(xiàn)圖形化編程及可視化仿真。
關(guān)鍵詞:機(jī)器人;開發(fā)環(huán)境;圖形化編程;可視化仿真
中圖分類號(hào):TP242 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2018)07-0118-03
Abstract: At present, in the process of developing the robot control software, there is no unified platform and standards, and the threshold of entry for beginners is too high, while a lot of manpower and material resources are consumed in the repeated process of designing. In this paper, a set of development environments is created using Eclipse and OpenGL in the environment of Windows, and it is successfully applied to robot. Firstly, three kinds of mainstream robot software development environment are introduced and their advantages and disadvantages are analyzed. Then the paper describes how to realize graphical programming and visual simulation using Eclipse in Windows environment in detail.
Keywords: robot; development environment; graphical programming; visual simulation
引言
在個(gè)人電腦領(lǐng)域微軟公司的Windows系列操作系統(tǒng)占據(jù)了絕對(duì)的主導(dǎo)地位。然而在服務(wù)機(jī)器人[1]行業(yè)的生產(chǎn)和開發(fā)過程中,還沒有統(tǒng)一的標(biāo)準(zhǔn)及平臺(tái),不同的企業(yè)按照不同的標(biāo)準(zhǔn)和路線開發(fā)服務(wù)機(jī)器人設(shè)備。對(duì)于初學(xué)者而言,每一個(gè)開發(fā)人員都需要從底層硬件(單片機(jī)或ARM版)入手再到上層的交互軟件或控制軟件,大量的資源消耗在了重復(fù)的設(shè)計(jì)中。
機(jī)器人軟件開發(fā)平臺(tái)是用來給機(jī)器人設(shè)備開發(fā)程序的軟件,一般包括:統(tǒng)一的編程環(huán)境、統(tǒng)一的編譯執(zhí)行環(huán)境、模塊庫、仿真環(huán)境。目前具有代表性的機(jī)器人集成開發(fā)環(huán)境包括微軟的MRDS(Microsoft Robotics Studio)、ROS(Robot Operating System)以及MRPT(Mobile Robot Programming Toolkit)。
OpenGL開放圖形庫是由 SGI開發(fā)的一套獨(dú)立于操作系統(tǒng)和硬件環(huán)境的三維圖形(二維亦可)軟件庫。OpenGL的最大優(yōu)點(diǎn)是用它編寫的軟件可以在各個(gè)操作系統(tǒng)之間方便地移植[2]。
1 機(jī)器人開發(fā)平臺(tái)對(duì)比分析
1.1 ROS操作系統(tǒng)
2010年開源機(jī)器人操作系統(tǒng)ROS(robot operating system)[3]發(fā)布了,它提供了硬件抽象、設(shè)備驅(qū)動(dòng)、可視化工具、消息傳遞等諸多功能。ROS的首要設(shè)計(jì)目標(biāo)是在機(jī)器人研發(fā)領(lǐng)域提高代碼復(fù)用率。ROS主要特點(diǎn)有:點(diǎn)對(duì)點(diǎn)設(shè)計(jì)、不依賴編程語言、精簡與集成ROS-agnostic庫、便于測試、規(guī)模、開源。
1.2 微軟MRDS開發(fā)環(huán)境
微軟公司于2008年首次發(fā)布了其機(jī)器人系統(tǒng)軟件平臺(tái)Microsoft Robotic Studio,它使用了Windows窗口作為控制界面,開發(fā)人員可以直接通過軟件平臺(tái)控制機(jī)器人的運(yùn)動(dòng)方向。Microsoft Robotic Studio帶有多種傳感器的數(shù)據(jù)和驅(qū)動(dòng),開放人員在編程中可以方便的調(diào)用,同時(shí)微軟公司還與多家機(jī)器人生產(chǎn)廠商進(jìn)行合作,越來越多的機(jī)器人型號(hào)和傳感器型號(hào)將會(huì)添加到這個(gè)開發(fā)環(huán)境中,使開發(fā)者在開發(fā)的過程中更加方便快捷。Microsoft Robotic Studio含有多種功能組件:Visual Programming Language、Microsoft DSS Manifest Editor、虛擬環(huán)境組成[4]。
1.3 MRPT數(shù)據(jù)庫
Mobile Robot Programming Toolkit 是一個(gè)廣泛使用、跨平臺(tái)、開源的C++數(shù)據(jù)庫[5]。MRPT為開發(fā)人員提供便攜和良好測試的應(yīng)用程序和庫,涵蓋了數(shù)據(jù)結(jié)構(gòu)和常用機(jī)器人研究領(lǐng)域采用的算法。MRPT主要目的是幫助機(jī)器人設(shè)計(jì)者在即時(shí)定位與地圖構(gòu)建、計(jì)算機(jī)視覺和路徑規(guī)劃等領(lǐng)域設(shè)計(jì)算法。MRPT本身提供了強(qiáng)大的應(yīng)用程序,不過這些應(yīng)用程序都只是源代碼,如果要使用需要自行編譯。MRPT中已有庫的依賴圖譜,用戶可以僅選擇依賴的部分庫,減少編譯時(shí)間和以后的依賴問題。
1.4 各個(gè)軟件開發(fā)環(huán)境對(duì)比
通過上面的軟件介紹,我們對(duì)這3款開發(fā)環(huán)境進(jìn)行了對(duì)比,如表1所示。
2 圖形化開發(fā)環(huán)境的設(shè)計(jì)
針對(duì)上述產(chǎn)品存在的問題,本文設(shè)計(jì)的圖形化開發(fā)環(huán)境具有以下特點(diǎn):(1)不依賴特定硬件的結(jié)構(gòu),所有硬件的子程序都為獨(dú)立模塊。(2)程序編寫部分基于標(biāo)準(zhǔn)C++和Linux系統(tǒng)庫,無需依賴特定運(yùn)行環(huán)境。(3)生成的Windows下的可執(zhí)行性文件,用于可視化仿真對(duì)機(jī)器人進(jìn)行實(shí)時(shí)的仿真。(4)該軟件平臺(tái)開源的特性,將必定促進(jìn)各個(gè)模塊的改進(jìn),不斷的更新。endprint
2.1 整體框架結(jié)構(gòu)
服務(wù)機(jī)器人圖形化開發(fā)環(huán)境是用于提供機(jī)器人控制系統(tǒng)軟件開發(fā)環(huán)境的應(yīng)用程序,包括圖形化編輯器、代碼文本編輯器、編譯器、調(diào)試器、連接程序和圖形用戶界面工具。圖形化開發(fā)環(huán)境集成了圖形化編程功能、文本代碼編寫功能、代碼分析功能、代碼調(diào)試功能、代碼編譯功能等一體化的開發(fā)軟件服務(wù)套(組)。CSCI[6]部件之間的關(guān)系如圖1所示。
機(jī)器人圖形化集成環(huán)境CSCI部件名稱功能如下:(1)初始用戶界面:初始化、建立窗口式用戶接口界面,用戶界面包括菜單、快捷鍵、狀態(tài)欄等。(2)文件:對(duì)圖形化編程的操作,包括新建、打開、保存、另存為、打印和退出功能。(3)視圖:對(duì)工具欄和??看翱?、狀態(tài)欄以及應(yīng)用程序外觀進(jìn)行管理。(4)圖形化編程:通過選擇、拖拽、連接控制器與其他所需的部件完成圖形化編程工作;生成對(duì)應(yīng)的Windows與Linux程序;Windows程序經(jīng)過編譯與連接后生成可執(zhí)行文件;Linux程序可經(jīng)過交叉編譯與連接生成可執(zhí)行程序并下載到飛思卡爾I.MX6Q嵌入式計(jì)算機(jī)。(5)圖形庫管理:包含部件庫和算法庫,部件庫包含圖形化編程所需的控制器類(如:I.MX6Q、樹莓派)、人機(jī)交互類(如:攝像頭)、傳感器類(如:超聲波測距傳感器、紅外測距傳感器)、驅(qū)動(dòng)器類(如:L298)等部件進(jìn)行維護(hù)管理;算法庫(如:Dijkstra算法、A*算法)是對(duì)自行編寫的函數(shù)進(jìn)行維護(hù)管理。(6)可視化:包含積木世界構(gòu)建、積木庫和機(jī)器人庫管理、遙控、路徑規(guī)劃、腳本編輯等功能。(7)樣例庫:包含一個(gè)樣例的圖形化編程圖形。(8)調(diào)試:調(diào)試Windows程序,運(yùn)行過程可選擇可視化。(9)幫助:軟件使用幫助文檔等功能。
這些模塊在Eclipse平臺(tái)中進(jìn)行開發(fā),下面將對(duì)圖形化編程模塊和可視化仿真模塊進(jìn)行闡述。
2.2 圖形化編程模塊
圖形化編程菜單主要是通過對(duì)部件庫中部件進(jìn)行選擇、拖拽、設(shè)置屬性等,當(dāng)開發(fā)者完成圖形化編程工作后,可進(jìn)一步完成圖形化編程的后續(xù)工作,包括生成C程序、保存C程序、編譯與連接、交叉編譯與連接、程序下載。對(duì)于完成圖形化編程的圖形,點(diǎn)擊文件/保存菜單可以對(duì)圖形進(jìn)行保存,保存為文本文件。
下面對(duì)形化編程模塊主要的函數(shù)名和功能進(jìn)行說明:(1)MKport1IsSelected(CPoint point)觸發(fā)該函數(shù)進(jìn)行接口類型識(shí)別。(2)DrawLine(CPoint point0,CPoint point1)通過觸發(fā)該函數(shù)繪制模塊之間的連線。(3)DrawNewModule(CPoint point, inti)通過觸發(fā)該函數(shù)繪制所拖入的模塊或者進(jìn)行模塊拖拽操作。(4)DeleteLine(inti, CPoint point0, CPoint point1)通過觸發(fā)該函數(shù)刪除模塊之間的連線。(5)DeleteNewModule(CPoint point, inti)通過觸發(fā)該函數(shù)刪除所選中的模塊。(6)ReDrawAll()通過觸發(fā)該函數(shù)進(jìn)行客戶區(qū)重繪。
2.3 可視化仿真模塊
當(dāng)完成圖形化編程并且服務(wù)機(jī)器人實(shí)際運(yùn)行需要可視化監(jiān)控時(shí),可以點(diǎn)擊圖形化編程界面的可視化菜單進(jìn)入可視化模塊。為簡化對(duì)移動(dòng)機(jī)器人所處實(shí)際環(huán)境的數(shù)學(xué)描述,可對(duì)現(xiàn)實(shí)世界采用積木世界方法進(jìn)行描述。機(jī)器人所處的環(huán)境可用規(guī)定的積木圖形或者激光掃描所得到的圖形來確定。另外,為了讓現(xiàn)實(shí)世界的數(shù)學(xué)描述更方便存儲(chǔ)以及仿真過程中機(jī)器人能夠更方便的識(shí)別障礙物大小,在積木世界的基礎(chǔ)上又采用柵格法對(duì)仿真環(huán)境進(jìn)行描述,每一塊小柵格大小可以根據(jù)實(shí)際情況自行設(shè)定。障礙物和服務(wù)機(jī)器人可以充分利用3ds Max的快速建模能力,將3DS文件的圖形信息讀入OpenGL繪圖環(huán)境中,并利用OpenGL的圖形處理功能對(duì)圖形顯示進(jìn)行控制[7]。
下面對(duì)可視化模塊主要的函數(shù)名和功能進(jìn)行說明:(1)OnDraw()拖入圖形后以及圖形的移動(dòng)以及放大縮小時(shí)進(jìn)行重繪。(2)OnLButtonDown()通過鼠標(biāo)左鍵按下觸發(fā)消息響應(yīng),主要是完成圖形的拖入、已拖入的圖形的選中和選中框出現(xiàn)時(shí)選中四個(gè)角之一對(duì)該圖形進(jìn)行放縮。(3)OnMouseMove()通過鼠標(biāo)移動(dòng)出發(fā)消息響應(yīng),主要是完成圖形的拖動(dòng)和移動(dòng)過程、放大縮小過程以及狀態(tài)欄的鼠標(biāo)坐標(biāo)顯示過程。(4)OnLButtonUp()通過鼠標(biāo)左鍵放開觸發(fā)消息響應(yīng),主要是完成最終所確定的圖形的位置等描述的存儲(chǔ)和最終觸發(fā)OnDraw函數(shù)進(jìn)行重繪。(5)DrawGrid()主要功能是進(jìn)行背景的柵格繪制。(6)OnMouseWheel()通過鼠標(biāo)滾輪觸發(fā)消息響應(yīng),主要功能是完成整個(gè)仿真區(qū)的放大縮小。(7)OnTimer()定時(shí)器消息響應(yīng)函數(shù),主要功能是在仿真的過程中,完成機(jī)器人的啟動(dòng)、移動(dòng)、轉(zhuǎn)彎、停止等功能。(8)OnVisualDel()刪除。在構(gòu)建積木世界時(shí)刪除障礙物或機(jī)器人或者在仿真時(shí)刪除障礙物。(9)OnIdvSaveas()保存。對(duì)于已經(jīng)構(gòu)建好了的積木世界,將其保存為文本文件。(10)OnIdvOpen()打開。對(duì)于已經(jīng)存在的XML格式的積木世界,可以在可視化模塊中打開直接使用,或者在此基礎(chǔ)上進(jìn)行修改。
2.4 開發(fā)環(huán)境的應(yīng)用
通過機(jī)器人圖形化開發(fā)環(huán)境仿真、生成路徑規(guī)劃代碼,并一鍵下載到機(jī)器人ARM[8]板中,機(jī)器人ARM運(yùn)行路徑規(guī)劃代碼,進(jìn)而實(shí)現(xiàn)服務(wù)機(jī)器人的路徑規(guī)劃,機(jī)器人界面如圖2所示。
3 結(jié)束語
通過本文的闡述可以看出利用Eclipse平臺(tái)建立機(jī)器人開發(fā)環(huán)境,不但可以比較方便地開發(fā)出可視化操作平臺(tái),而且簡化了編寫程序的過程,提高了開發(fā)效率和程序的可靠性。
參考文獻(xiàn):
[1]肖雄軍.服務(wù)機(jī)器人的發(fā)展[J].自動(dòng)化博覽,2004(06).
[2]孫振海,陳利,張慶明.Delphi中OpenGL三維仿真開發(fā)環(huán)境設(shè)計(jì)及應(yīng)用[J].計(jì)算機(jī)仿真,2006.
[3]張建偉,張立偉,胡穎,等.開源機(jī)器人操作系統(tǒng)-ROS[M].北京:科學(xué)出版社,2012.
[4]Johns, Kyle.Professional Microsoft Robotics Developer Studio[M].2008.
[5]MRPT網(wǎng)站[EB/OL].http://sourceforge.net/projects/mrpt/.
[6]溫昱.軟件架構(gòu)設(shè)計(jì)[M].北京:電子工業(yè)出版社,2013.
[7]殷素峰,高雪強(qiáng),楊勝強(qiáng).在OpenGL環(huán)境下開發(fā)3DS文件瀏覽器[J].工程圖學(xué)學(xué)報(bào),2005(6).
[8]周立功.ARM嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2008.endprint