摘 要:利用OpenGL技術(shù)在VC++編程平臺上開發(fā)數(shù)控加工仿真系統(tǒng),并結(jié)合語音識別技術(shù)實現(xiàn)語音控制。簡要介紹OpenGL及其三維仿真技術(shù),以及語音識別的原理和技術(shù)。通過應(yīng)用微軟語音應(yīng)用程序軟件開發(fā)工具包Speech SDK進行二次開發(fā),旨在通過語音輸入加工參數(shù)和操作命令,經(jīng)過數(shù)控程序譯碼進行代碼校驗和數(shù)據(jù)處理,實現(xiàn)對刀具和工件加工過程的動態(tài)模擬仿真,體現(xiàn)語音識別技術(shù)為數(shù)控加工領(lǐng)域所帶來的便利。
關(guān)鍵詞:OpenGL; 數(shù)控加工; 語音識別; Speech SDK
中圖分類號:TP391.9 文獻標(biāo)識碼:A
文章編號:1004-373X(2010)11-0121-04
Research on NC Machining Simulation Controlled by Speech Recognition Based on OpenGL
SHI Jun, FU Gang
(Northern Science Technology College, Shenyang Institute of Aeronautical Engineering, Shenyang 110034, China)
Abstract: The NC machining simulation system was developed with OpenGL technology on the VC++ programming platform, and the speech control was implemented in combination with the speech recognition technology. The OpenGL and its 3D simulation technology as well as principles and technology of speech recognition are introduced briefly. The secondary development of the system is performed with Microsoft speech application software development kit Speech SDK to input the machining parameters and operating commands by noice, carry out NC code checking and data processing through NC program decoding, and realize the dynamic simulation of the cutter movement and the workpiece machining process. It embodies the convinece caused by the speech recognition technology for the field of numerical control.
Keywords: OpenGL; NC machining; speech recognition; simulation; Speech SDK
0 引 言
數(shù)控加工仿真是利用計算機圖形學(xué)的手段對零件的切削加工過程進行動態(tài)模擬的技術(shù),是實現(xiàn)虛擬制造的主要手段。通過數(shù)控加工仿真,可以驗證數(shù)控程序的正確性、監(jiān)測加工過程、代替或減少實際加工中的試切工作、節(jié)省資源、避免風(fēng)險[1]。計算機圖形軟件開發(fā)接口OpenGL為三維幾何建模提供了有力的支持,是進行圖形化編程、數(shù)據(jù)可視化、實體仿真的重要工具。因此借助OpenGL強大的圖形能力,建立數(shù)控加工仿真系統(tǒng),實現(xiàn)高質(zhì)量的實體動態(tài)仿真。
以往的數(shù)控加工仿真系統(tǒng)需要輸入大量的加工參數(shù)和控制命令,并根據(jù)仿真結(jié)果調(diào)整參數(shù)后反復(fù)仿真,以取得最佳的加工效果,這樣卻帶來了工作量大、重復(fù)操作的問題。若結(jié)合語音識別技術(shù),實現(xiàn)語音控制數(shù)控加工仿真,不僅可以更加方便、快捷地輸入?yún)?shù)和命令,解放操作人員的雙手,減少工作量,而且適合遠程控制,從而進一步提高加工效率、增加經(jīng)濟價值。
1 OpenGL及其三維建模
OpenGL是由SGI公司在其GL(Graphics Library)的基礎(chǔ)上發(fā)展起來的三維圖形庫,作為三維圖形API的標(biāo)準(zhǔn)。OpenGL可以與Visual C++緊密接合,便于實現(xiàn)數(shù)控加工仿真的有關(guān)計算和圖形算法,并可保證算法的正確性和可靠性。
OpenGL在圖形顯示的過程中首先將物體轉(zhuǎn)化為描述幾何性質(zhì)的頂點與描述圖像的像素。幾何頂點數(shù)據(jù)經(jīng)過運算器、逐個頂點操作轉(zhuǎn)化成像素數(shù)據(jù);對于像素數(shù)據(jù),圖像操作的結(jié)果被存儲在紋理組裝用的內(nèi)存中。像素數(shù)據(jù)經(jīng)過光柵化、逐個片元處理形成圖形片元。最后,圖形片元再經(jīng)過逐個操作,得到最后的像素值送入幀緩沖器,從而實現(xiàn)圖形的顯示。OpenGL的工作流程[2]如圖1所示。
在OpenGL中進行主要的圖形操作并在計算機屏幕上渲染繪制出三維圖形的基本步驟如下:
(1) 根據(jù)基本圖形單元建立物體模型,并對所建立的模型進行數(shù)學(xué)描述;
(2) 把物體模型放在三維空間中的合適位置,并設(shè)置視點;
(3) 確定物體的色彩、光照條件、紋理方式等;
(4)進行從物體模型的數(shù)學(xué)描述及其色彩信息到計算機屏幕像素的轉(zhuǎn)換,即光柵化。
圖1 OpenGL工作流程圖
2 語音識別技術(shù)
語音識別(Speech Recognition)是計算機通過識別和理解過程把語音信號轉(zhuǎn)變?yōu)橄鄳?yīng)的文本或命令的技術(shù),它屬于多維模式識別和智能接口的范疇。語音識別技術(shù)是一項集聲學(xué)、語言學(xué)、計算機、信息處理、人工智能于一身的綜合技術(shù)。
語音識別分為兩步。第一步是根據(jù)識別系統(tǒng)的類型選擇一種能夠滿足要求的識別方法,采用語音分析方法分析出這種識別方法所要求的語音特征參數(shù),把這些參數(shù)作為標(biāo)準(zhǔn)模式存儲起來,形成“模板”,這一過程稱為 “訓(xùn)練”。第二步就是“識別”階段,根據(jù)實際需要選擇語音特征參數(shù),這些特征參數(shù)的時間序列構(gòu)成了測試模板,將其與己存在的參考模板逐一進行比較,進行測度估計,最后經(jīng)由專家知識庫判決,最佳匹配的參考模板即為識別結(jié)果。語音識別的原理[3]如圖2所示。
圖2 語音識別原理框圖
目前應(yīng)用較為廣泛的語音識別技術(shù)有矢量量化(Vector Quantization,VQ)、動態(tài)時間規(guī)整(Dynamic Time Warping,DTW)、隱馬爾可夫模型(Hidden Markov Models,HMM)以及人工神經(jīng)元網(wǎng)絡(luò)(Artificial Neural Network,ANN)等[4]。
3 語音控制數(shù)控加工仿真系統(tǒng)的設(shè)計與實現(xiàn)
3.1 功能設(shè)計
根據(jù)數(shù)控機床的零件加工流程和計算機仿真的基本原理,將語音控制數(shù)控加工仿真系統(tǒng)的功能模塊化,如圖3所示。
(1) 在語音識別控制模塊中,采用微軟公司開發(fā)的Speech SDK 5.1在VC++的編程平臺下進行二次開發(fā),實現(xiàn)小詞匯量、孤立詞、非特定人的語音識別系統(tǒng)。語音識別訓(xùn)練是針對本系統(tǒng)的命令和待識別詞或短語進行的。
圖3 語音控制數(shù)控加工仿真系統(tǒng)功能模塊圖
(2) 通過對數(shù)控加工程序進行詞法和語法分析來檢驗數(shù)控程序的正確性、有效性;數(shù)據(jù)處理負(fù)責(zé)提取與仿真有關(guān)的命令和狀態(tài)信息,從而進行參數(shù)設(shè)置、插補運算和續(xù)效性設(shè)置等操作[5]。
(3) 加工仿真模塊根據(jù)分析得到的加工指令,動態(tài)模擬刀具運動和進給切削工件的加工軌跡,并由語音控制操作。
(4) 信息管理模塊使用Microsoft SQL Server 2000作為后臺數(shù)據(jù)庫,存儲工件模型和刀具模型的參數(shù)和圖像信息,可以實現(xiàn)信息的添加、修改、刪除和查詢操作。用戶直接選擇合適的刀具和工件,節(jié)省輸入?yún)?shù)的時間,增強仿真效果,為加工仿真提供數(shù)據(jù)支持。
3.2 語音識別控制
微軟公司推出的Microsoft Speech SDK 5.1語音開發(fā)工具包提供了語音識別和語音合成的接口,并采用了HMM建模技術(shù),通過大量的語音數(shù)據(jù)訓(xùn)練,得到了精確廣泛的聲學(xué)模型,并具有較強的抗噪聲能力。
在進行語音識別工作前需要編寫一個*.XML的文法文件。SDK通過一個語音識別引擎來識別用戶的語音。文法中定義了需要識別的字和短語。簡單的文法例子如下[6]:
開始
暫停
加速
……
在
和
中插入的是一組待識別的字或短語,而中插入的是以為可選擇的可能匹配用戶語音的字或短語。在程序中需要定義以下語音識別所需的接口對象:
CComPtr
CComPtr
CComPtr
CComPtr
實現(xiàn)語音識別控制的主要步驟[7]如下:
(1) 初始化COM端口,通過調(diào)用函數(shù)CoInitialize(NULL)來實現(xiàn);
(2) 通過m_Recognizer對象調(diào)用CoCreateInstance()函數(shù)創(chuàng)建一個獨占型語音識別引擎,用CLSID_SpInprocRecognizer標(biāo)志設(shè)置,只允許該程序使用識別引擎;
(3) 調(diào)用ISpRecognizer::CreateRecoContext創(chuàng)建識別上下文接口(ISpRecoContext);
(4) 通過m_RecoContxt對象調(diào)用SetNotifyWindowMessage()函數(shù)告訴操作系統(tǒng)哪個是我們的識別消息,需要進行處理;
(5) 通過m_RecoContxt對象調(diào)用SetInterest()函數(shù)來告訴識別引擎,什么是我們感興趣的事件;
(6) 通過m_RecoContxt對象調(diào)用CreateGrammar()函數(shù)建立一個Rule對象,再調(diào)用LoadCmdFromFile()函數(shù)從XML文件中裝載對應(yīng)的語法規(guī)則;
(7) 通過m_RecoGrammar 對象調(diào)用SetRule-State()函數(shù)激活語法規(guī)則,開始接收音頻輸入并進行識別;
(8) 截獲識別消息(WM_RECOEVENT),通過event.RecoResult()獲取識別結(jié)果,分析判別后對參數(shù)或程序狀態(tài)進行設(shè)置。
當(dāng)用戶向系統(tǒng)發(fā)出一個語音指令后,系統(tǒng)界面馬上顯示指令結(jié)果,讓用戶確定所發(fā)出的指令是否被系統(tǒng)聽見,是否被正確識別。對于參數(shù)設(shè)置,需要進行短語分割和數(shù)字轉(zhuǎn)換,對于操作命令則直接識別后改變加工仿真的狀態(tài)。由于本系統(tǒng)所需識別的詞匯具有一定的局限性和規(guī)律性,系統(tǒng)可以根據(jù)已經(jīng)識別的字或短語通過聯(lián)想預(yù)先選取可能出現(xiàn)的后續(xù)詞,從而減少系統(tǒng)匹配的時間,提高系統(tǒng)的識別速度。
3.3 數(shù)控程序譯碼
系統(tǒng)在利用OpenGL技術(shù)進行動態(tài)加工仿真之前需要對數(shù)控加工程序進行分析、計算、判別以及譯碼等處理。對于檢查出來的詞法錯誤可以自動改正,對于出現(xiàn)不合理的數(shù)值和參數(shù)的語法錯誤則提示錯誤原因供用戶參考。
系統(tǒng)加載文本格式的數(shù)控加工程序,并按行存入數(shù)組,程序中設(shè)置不同的變量存儲相關(guān)參數(shù)。根據(jù)各功能字之間用空格隔開等特點,分析出代碼中所指定的命令和參數(shù)值,修改對應(yīng)的變量。同時應(yīng)考慮續(xù)效指令,若當(dāng)前行指令代碼沒有出現(xiàn)同組其他指令時,相應(yīng)變量會保持不變。對于絕對值或是增量值指令(G90/G91),應(yīng)采用直接替換參數(shù)或累加增量的方法,確保零件輪廓坐標(biāo)的準(zhǔn)確性。系統(tǒng)還能根據(jù)刀具的參數(shù)信息和刀具補償參數(shù)計算出刀具中心軌跡,用于實現(xiàn)刀具的仿真。數(shù)控程序譯碼流程圖如圖4所示。
圖4 數(shù)控程序譯碼流程圖
3.4 加工仿真
在仿真環(huán)境中建立刀具和工件的幾何模型。刀具和工件根據(jù)用戶選擇的模型以及語音輸入的參數(shù)可以通過OpenGL直接編程生成,并且通過glTranslatef(),glRotatef(),glScalef(),gluLookAt(),gluPerspective()等函數(shù)可以實現(xiàn)模型的平移、旋轉(zhuǎn)、縮放、視圖變換、正投影和透視投影等操作[8-10]。
系統(tǒng)根據(jù)數(shù)控程序譯碼階段得到的命令和狀態(tài)信息設(shè)置模擬加工參數(shù)。通過正投影的XY平面和XZ平面兩個視角同時動態(tài)模擬刀具的旋轉(zhuǎn)和相對工件運動形成的加工軌跡。系統(tǒng)界面還同時顯示數(shù)控加工代碼的當(dāng)前作用指令、刀具的各項指標(biāo)以及切削液狀態(tài)等信息,供用戶實時觀察及時查錯。零件輪廓由直線和圓弧組成,對于直線段,根據(jù)起點坐標(biāo)、終點坐標(biāo)以及進給速度F依據(jù)比例關(guān)系計算單位時間刀具移動的位移。對于圓弧,則應(yīng)確定單位時間內(nèi)刀具移動形成圓弧的弧長為一定值。通過余旋定理把弧長轉(zhuǎn)換成角度,也就是單位時間內(nèi)刀具移動形成圓弧的圓心角為一定值。設(shè)angB為連接圓弧起點和圓心的直線與X軸的夾角,angE為連接圓弧終點和圓心的直線與X軸的夾角,angleL即為計算求得的單位時間內(nèi)刀具切削圓弧所形成的圓心角。實現(xiàn)刀具切削圓弧軌跡的程序段如下,根據(jù)測試結(jié)果angleL要小于0.1,否則繪制出的圓弧會出現(xiàn)偏差。
glPushMatrix();//保存矩陣狀態(tài)
glColor3f(1.0f, 1.0f, 0.0f); //設(shè)置顏色
glBegin(GL_LINE_STRIP);//設(shè)置連續(xù)直線段擬和圓弧
for(float angle =angB; angle <= angleE; angle += angleL)
{
x=sin(angleL);
y=cos(angleL);
glVertex2f(x, y);//指定下一個繪制的點
}
glEnd(); //完成繪制
glPopMatrix();//恢復(fù)矩陣狀態(tài)
定義OpenGL的顯示模式為雙緩沖,調(diào)用glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE)函數(shù)進行設(shè)置,即所有的OpenGL繪制命令在非顯示緩沖區(qū)中執(zhí)行,繪制完成后調(diào)用glutSwapBuffers()函數(shù)將其內(nèi)容拷貝到顯示緩沖區(qū)中進行圖形顯示,這樣使得圖像轉(zhuǎn)換更為平滑,有效地改善了屏幕刷新時的閃爍問題。
4 結(jié) 語
語音控制數(shù)控加工仿真系統(tǒng)經(jīng)過大量測試得到的數(shù)據(jù)表明,在語音識別方面,在實驗室條件下可以達到98%的識別率,即使在小噪聲的環(huán)境下也可以保證95%以上的識別率,基本滿足系統(tǒng)的使用需求;在加工仿真方面,采用OpenGL圖形處理策略實現(xiàn)的刀具模擬、刀具軌跡顯示以及加工過程的仿真,提高了顯示的真實感與實時性。語音識別技術(shù)與數(shù)控仿真相結(jié)合,在一定程度上為數(shù)控加工降低了工作量、提高了生產(chǎn)效率、降低了生產(chǎn)成本,進一步推動語音識別技術(shù)在更廣泛領(lǐng)域的應(yīng)用,也推動?xùn)|北老工業(yè)基地的發(fā)展和振興。
參考文獻
[1]羅生梅,許奇武.OpenGL在數(shù)控加工仿真中的應(yīng)用[J].組合機床與自動化加工技術(shù),2008(4):89-91.
[2]高恩婷.基于VC++的OpenGL三維應(yīng)用程序的設(shè)計[J].蘇州大學(xué)學(xué)報:自然科學(xué)版,2007,23(4):37-41.
[3]王炳錫,屈丹,彭煊.實用語音識別基礎(chǔ)[M].北京:國防工業(yè)出版社,2005.
[4]韓紀(jì)慶,張磊,鄭鐵然.語音信號處理[M].北京:清華大學(xué)出版社,2004.
[5]馬銀戌,嚴(yán)忠.基于VB和OpenGL的數(shù)控車削仿真系統(tǒng)研究[J].機械工程師,2008(8):43-44.
[6]Microsoft Inc.. Speech API幫助文檔[EB/OL].\\. http://www.microsoft.com\\\\Microsoft Speech SDK 5.1\\\\Docs\\\\Help\\\\sapi.chm,2008.
[7]初琦.Speech SDK在語音機器人開發(fā)中的應(yīng)用[J].北京工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報,2008,7(4):32-36.
[8]Richard S Wright, Jr Benjamin Lipchak.OpenGL超級寶典[M].3版.北京:人民郵電出版社,2005.
[9]王永超.基于OpenGL的虛擬車床幾何建模[J].現(xiàn)代電子技術(shù),2008,31(12):165-168.
[10]林忠,黃陳蓉.數(shù)控車床虛擬加工的仿真技術(shù)與實現(xiàn)[J].機械設(shè)計與制造,2008(9):165-167.