肖 凱,黃志剛,曹 晉,劉偉陽
(廣東工業(yè)大學(xué)機電工程學(xué)院,廣東廣州510006)
嵌入式系統(tǒng)以其高可靠性和實時性在工業(yè)領(lǐng)域得到了廣泛應(yīng)用,不僅能在惡劣環(huán)境下工作,且能對外界事件或數(shù)據(jù)進(jìn)行實時響應(yīng)?;贚inux內(nèi)核的Android系統(tǒng)繼承了嵌入式系統(tǒng)的高可靠性和實時性,并在此基礎(chǔ)上擁有友好的可視化圖形界面。隨著越來越多的事物被數(shù)字化,Android系統(tǒng)在移動智能終端市場的占有率變?yōu)樽畲骩1]。
目前,國產(chǎn)的大部分商用線切割數(shù)控軟件存在操作復(fù)雜、界面設(shè)計不友好等缺陷,而進(jìn)口軟件則普遍價格較貴,且對使用者有較高的專業(yè)要求[2]。電火花線切割數(shù)控編程經(jīng)歷了從手工編程、單板機到自動編程PC機的發(fā)展過程,其中單板機操作簡單、穩(wěn)定,對環(huán)境要求較低,但需手工編程且無交互界面和圖形跟蹤;PC機雖然實現(xiàn)了編控一體,但對環(huán)境要求較高且穩(wěn)定性差。電火花線切割數(shù)控編程尚未應(yīng)用在Android移動設(shè)備上,嚴(yán)重制約了電火花線切割技術(shù)的發(fā)展。楊瑞[3]開發(fā)了一款基于Android平臺的SIEMENS數(shù)控機床模擬系統(tǒng),使用SVG展示圖元并實現(xiàn)元件的組件設(shè)計、參數(shù)設(shè)定、數(shù)控代碼生成、刀軌仿真等相關(guān)操作。陳翔[4]開發(fā)了一款基于Android平臺的瀏覽CAD二維看圖軟件,使用了基于畫布模型的圖形框架,并實現(xiàn)了CAD標(biāo)準(zhǔn)圖形交換文件關(guān)鍵圖元信息的數(shù)據(jù)提取。由目前研究可見,基于Android平臺的自動編程系統(tǒng)還面臨一些待解決的關(guān)鍵問題,比如:未能選擇合適的圖形框架,影響系統(tǒng)的擴展性和開發(fā)效率;基于手勢的移動設(shè)備交互式繪圖缺乏有效研究,導(dǎo)致用戶體驗欠佳。
本文基于Android平臺對電火花線切割自動編程系統(tǒng)展開一系列研究,在使用OpenGL ES圖形引擎的基礎(chǔ)上,對Andoird平臺的自動編程系統(tǒng)、移動設(shè)備交互式繪圖展開研究,設(shè)計了自動編程系統(tǒng)的總體結(jié)構(gòu)和人機交互流程,最后實現(xiàn)了系統(tǒng)功能,并在繪制圖形且由系統(tǒng)自動生成G代碼的基礎(chǔ)上對其進(jìn)行驗證,其目的在于實現(xiàn)具有較好的人機交互性和實用性的自動編程系統(tǒng)。
目前,Android系統(tǒng)主要有以下幾個方面的圖形引擎及應(yīng)用[5]:
(1)基于渲染流水線的OpenGL ES。OpenGL獨立于硬件系統(tǒng)、窗口系統(tǒng)和操作系統(tǒng),可與各種編程語言緊密結(jié)合,便于實現(xiàn)繪圖的有關(guān)計算[6]。而OpengGL ES是OpenGL三維圖形API的子集,針對手機、PDA和游戲主機等嵌入式設(shè)備而設(shè)計[7]。OpengGL ES是由OpenGL子集組成,創(chuàng)造了圖形加速與軟件間靈活強大的底層交互接口。
(2)基于畫布模型的二維圖形庫。Android的核心圖形庫為Skia,是開源2D向量圖形處理函數(shù)庫,且從Android 3.0版開始,已能支持OpenGL ES API對硬件加速[8]。Skia與操作系統(tǒng)的內(nèi)置界面庫結(jié)合程度高,相比于渲染流水線方式,其開發(fā)難度較低,但擴展性較差。
(3)基于HTML5 Canvas或移動SVG的實現(xiàn)方式。使用JavaScript腳本實現(xiàn)的交互繪圖,具有開發(fā)難度較低、豐富渲染特性和跨平臺性等主要優(yōu)點。但由于瀏覽器兼容差和運行占用資源較大等原因,該方式目前在Android設(shè)備上的應(yīng)用還較少。
由于OpenGl ES底層直接由C語言等實現(xiàn)[9],圖形渲染性能最好且支持矢量圖繪制。目前,實際應(yīng)用的繪圖系統(tǒng)大多數(shù)都采用OpenGL圖形引擎實現(xiàn)?;谝陨峡紤],本研究采用了OpenGL ES圖形引擎來開發(fā)基于Android平臺的電火花線切割自動編程系統(tǒng)。
系統(tǒng)的功能結(jié)構(gòu)框架見圖1。該系統(tǒng)主要完成線切割加工的前處理操作,不僅要實現(xiàn)線切割加工二維圖形的繪制,而且要能生成相應(yīng)的G代碼。對于采用觸摸方式的電火花線切割自動編程系統(tǒng),必須設(shè)計良好的交互界面,如能提供菜單、工具欄及快捷的輸入方式;圖形繪制能輸出用戶的交互結(jié)果,展示用戶的設(shè)計草圖,以便下一步進(jìn)行工程應(yīng)用;圖形編輯對已繪制圖形進(jìn)行快捷的修改、增添、刪除等操作,以提高開發(fā)效率;尺寸標(biāo)注和圖層管理是繪圖過程中必備的功能;生成的G代碼是線切割加工的理論依據(jù)。
圖1 系統(tǒng)功能結(jié)構(gòu)框架圖
Java是一種面向?qū)ο蟆⒑唵我子玫恼Z言,Android對其提供了很多技術(shù)支持,故采用Java作為系統(tǒng)開發(fā)的基本程序語言。系統(tǒng)的技術(shù)框架見圖2,主要分為三部分:一是結(jié)合Hanlder消息機制[10]、狀態(tài)標(biāo)志、時間判斷等實現(xiàn)人機交互;二是通過Java編寫生成頂點數(shù)組的算法并調(diào)用OpenGL ES API來實現(xiàn)圖形渲染;三是考慮到C/C++的效率比Java高,故將求直線長度、點的變換、最小包圍矩形、交點、排序等算法采用C/C++實現(xiàn),并提供接口供Java語言調(diào)用。
Handler消息傳遞機制由 Message、Message Queue及Looper三者組成。其中Message攜帶了描述信息和任意數(shù)據(jù)對象,是Handler消息機制發(fā)送的消息載體;MessageQueue是一系列 Message隊列,其順序與發(fā)送時間相關(guān)聯(lián);Looper是在線程中不斷從消息隊列中取出消息,發(fā)送給需要接受消息的對象。三者的關(guān)系見圖3。
圖2 系統(tǒng)技術(shù)結(jié)構(gòu)框架圖
圖3 Handler消息機制原理圖
基于Android平臺的自動編程系統(tǒng)采用電容觸摸屏交互式自動編程方式。相對于PC機采用鼠標(biāo)和鍵盤操作,Android平臺以觸摸屏和虛擬鍵盤操作為主,兩者在操作方式上有顯著區(qū)別。目前,電火花線切割自動編程的人機交互主要是在PC機上開發(fā)。因此,人機交互問題是該系統(tǒng)能否滿足實用性要求的關(guān)鍵,而圖元排序則是該系統(tǒng)實現(xiàn)自動編程、輸出可加工G代碼的關(guān)鍵。
Android系統(tǒng)處理觸摸手勢其實是觸發(fā)一個事件。本系統(tǒng)結(jié)合Android的事件傳遞機制[11]和Handler消息傳遞機制[12]來處理觸摸事件。圖4是事件交互處理的流程圖。
(1)使用Handler消息機制將手指觸摸事件保存為當(dāng)前事件的副本,將在后續(xù)手勢識別中決定是否發(fā)送。
(2)手勢觸控判斷是通過計算手指觸摸時間判斷是單點觸控還是多點觸控。若為單點觸控,則通過計算手指移動距離及之前的點選操作判斷是否執(zhí)行框選、移動或選擇操作;而多點觸控默認(rèn)執(zhí)行縮放操作,但如果之前點擊了框選操作且沒有執(zhí)行縮放操作,則執(zhí)行框選操作,此時將屏蔽除縮放以外的所有其他操作。
(3)如果沒有執(zhí)行步驟(2)的操作,則使用Handler延遲200 ms發(fā)送之前保存事件的副本。先判斷是否點擊菜單欄按鈕,如未點擊,則判斷視圖中所有圖形與手指點擊的位置是否有干涉。如發(fā)生干涉,則干涉圖形顯示為選中狀態(tài)并給用戶提示;如未發(fā)生干涉,則直接結(jié)束判斷,事件相應(yīng)終止。如果點擊了菜單欄上的按鈕,并且此功能需從視圖中獲取事件才能執(zhí)行操作,則執(zhí)行圖形繪制和編輯的手勢操作,事件隨后相應(yīng)終止。
事件交互的主要思想是通過手指觸摸事件和移動距離來判斷手勢操作的類型,縮放、移動、矩形框選擇、選擇、圖形繪制和編輯的操作。
圖4 事件交互流程圖
先對觸控信號進(jìn)行采集,再處理采集到的觸控信號,即為手勢識別[13]。一般來說,從概念到手勢存在多對一的映射,反過來也是這樣。手勢又分為接觸式手勢和非接觸式手勢,且手勢是含糊不完全指定的,比如表示“退出”這一概念,對于非接觸式手勢,人們可用雙手在頭頂上揮動;對于接觸式手勢,人們可采用雙擊屏幕的方式。手勢的表達(dá)在不同個體之間存在差異,甚至相同個體在不同對象之間也存在差異。
(1)縮放手勢。在執(zhí)行手勢縮放操作的過程中,必須屏蔽所有其他操作,且檢測到的兩個觸控點在一定時間T內(nèi)有位置差。圖5是生活中常用的手勢縮放動作,其中有兩點觸控也有多點觸控,如果檢測到有兩點觸控位置差值在時間T內(nèi)有連續(xù)遞增或遞減,則其他觸控將被屏蔽并執(zhí)行縮放操作。實體測試研究表明:將T設(shè)置為200 ms能實現(xiàn)縮放的功能。
圖5 縮放手勢示意圖
(2)移動手勢。為了得知是否執(zhí)行了移動觸摸手勢,需判斷時間和手指移動距離這兩個因素。圖6是移動手勢的示意圖,其表達(dá)式為:
式中:ΔT為點擊到移動的時間差;Td為點擊的時間;Tm為出現(xiàn)移動后的時間;f(Ps,Pm)為求兩點距離的函數(shù);Δd為兩點之間的距離;Ps為點擊位置;Pm為當(dāng)前移動到的位置。
圖6 手勢移動示意圖
根據(jù)測試結(jié)果分析,在同時滿足ΔT<50 ms及Δd>20 dp(像素)兩個條件時,進(jìn)入移動狀態(tài)并屏蔽所有其他操作,此時能滿足需求。
電火花線切割自動編程系統(tǒng)需進(jìn)行大量的人機交互,特別是圖形的繪制。為了提高系統(tǒng)的實用性和專業(yè)性,需根據(jù)Android系統(tǒng)自身特點來設(shè)計整個交互界面。該系統(tǒng)的界面采用靈活的Fragment和ViewPager組合開發(fā)。系統(tǒng)的界面包括:動畫閃屏、主頁、文件瀏覽界面、設(shè)置和圖形繪制和編輯。圖7是圖形編輯界面。
圖7 圖形編輯界面
G代碼是在以首尾相接的一系列圖元輪廓構(gòu)成的連續(xù)曲線的基礎(chǔ)上生成的,而繪圖生成的加工零件圖形信息是雜亂無章、不連續(xù)的,故在此之前需對所繪圖元重新排序,使之形成一套完整連續(xù)的圖元鏈。根據(jù)電火花線切割加工的條件,先確定穿絲孔位、電極絲、放電間隙等信息,再對加工輪廓圖元進(jìn)行排序,基本思想是以用戶選擇的加工起點和排序方向為基準(zhǔn),將混排的圖元按首尾相接的順序排列,其基本流程如下:
(1)以穿絲孔位為加工起點,并以距離加工起點最近的輪廓上的某點為基點,以用戶選擇的方向為排序方向。
(2)確定基點所在的圖元為第一個輪廓。如果基點與該輪廓的終點重合,則將該圖元的終點設(shè)置為起點、起點設(shè)置為終點。如果該圖元為多段線或復(fù)雜曲線,則將其內(nèi)部的線條鏈表按順序依次加入圖元鏈中,并將該圖元的終點設(shè)置為新基點。
(3)搜索剩下的其他圖元,并將其依次加入圖元鏈中,如果發(fā)現(xiàn)剩下圖元的起點或終點與基點重合,則退出,否則繼續(xù)。
(4)將找到的圖元進(jìn)行步驟(2)中類似的操作,并執(zhí)行步驟(3)的操作。
圖8是圖元排序流程圖,如果基點為圖元中間某一點,則將該圖元拆分為兩個圖元。
圖8 圖元排序流程圖
系統(tǒng)實現(xiàn)功能和人機交互流程主要包括:
(1)圖形繪制、圖形編輯、文件交換、圖層功能、標(biāo)注功能、撤銷、恢復(fù)、生成G代碼等功能。
(2)系統(tǒng)交互實現(xiàn)了手勢放大與縮小、手指觸摸圖形并選擇圖形、手指移動屏幕或移動圖形、手指觸摸標(biāo)記點并移動繪制的當(dāng)前點、選擇圖形并觸摸指示器改變圖形參數(shù)、點擊框選進(jìn)行矩形選擇對象、執(zhí)行繪圖流程時提示相應(yīng)的幫助信息等。
為了對系統(tǒng)的可交互性、圖形繪制、編輯和G代碼的生成進(jìn)行驗證,在搭載Android系統(tǒng)的小米平板電腦上安裝該系統(tǒng),設(shè)計的零件見圖9。雖然Android手持設(shè)備的屏幕通常較小,但在繪制圖形的過程中,使用了Android系統(tǒng)提供的豐富動畫和操作方式來提高人機交互體驗,比如:對動畫提示繪圖幫助信息、動畫彈出菜單欄來選擇操作模式、閃爍的指示器幫助用戶準(zhǔn)確觸摸位置、彈出對話框判斷用戶意圖等進(jìn)行了優(yōu)化。
圖9 零件圖繪制圖
對應(yīng)生成的G代碼見圖10。由系統(tǒng)自動生成的G代碼不僅可輸出加工,還可直接進(jìn)行修改編輯。驗證結(jié)果表明該系統(tǒng)可按照提示、幫助的信息設(shè)計草圖,同時擁有多種交互方式使電火花線切割自動編程更加人性化、便捷化和實用化。
圖10 生成G代碼圖
OpenGL ES作為Android平臺電火花線切割自動編程系統(tǒng)開發(fā)的圖形引擎,可顯示高質(zhì)量的矢量圖形。對于在搭載Android系統(tǒng)的移動設(shè)備上開發(fā)電火花線切割自動編程系統(tǒng),只要設(shè)計合適的人機交互流程,完全能滿足自動編程系統(tǒng)要求并獲取較好的人機交互體驗。