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