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