李泰國(guó),李文新,王偉文,高家祺
(蘭州空間技術(shù)物理研究所,甘肅 蘭州 730000)
隨著空間探索的不斷深入,空間機(jī)械臂應(yīng)用技術(shù)已經(jīng)成為空間技術(shù)的重要研究方向。由于機(jī)器臂結(jié)構(gòu)復(fù)雜、真實(shí)設(shè)備成本昂貴、實(shí)驗(yàn)條件受限等問(wèn)題,會(huì)對(duì)機(jī)械臂的實(shí)驗(yàn)研究開(kāi)展帶來(lái)一定難度。因此,在機(jī)械臂的設(shè)計(jì)研究中,圖形仿真系統(tǒng)作為一種安全靈活的工具,發(fā)揮著非常重要的作用,并廣泛應(yīng)用于機(jī)械臂研究和開(kāi)發(fā)的各個(gè)方面。機(jī)械臂圖形仿真涉及機(jī)械臂機(jī)構(gòu)學(xué)、運(yùn)動(dòng)學(xué)、零件建模、機(jī)械臂三維實(shí)現(xiàn)、運(yùn)動(dòng)控制和機(jī)械臂路徑規(guī)劃,是一項(xiàng)綜合性的有創(chuàng)新意義和實(shí)用價(jià)值的研究課題。因此針對(duì)機(jī)械臂在不同平臺(tái)下(如OpenGL、MATLAB機(jī)器人工具箱、LabView、ADAMS等)不同性能的仿真試驗(yàn),給機(jī)械臂的研究帶來(lái)了便利。能夠?yàn)闄C(jī)器臂結(jié)構(gòu)方案與相關(guān)設(shè)計(jì)提供強(qiáng)有力的支撐;能夠有效地幫助設(shè)計(jì)師掌握機(jī)械臂工作空間的形態(tài)和極限;也能夠?yàn)殡x線編程人員提供一種有效的驗(yàn)證手段;還能幫助檢測(cè)機(jī)械臂的工作環(huán)境與機(jī)械臂之間是否存在干涉,以保證機(jī)械臂運(yùn)行的絕對(duì)安全等[1-4]。
目前,存在多種設(shè)計(jì)軟件方便進(jìn)行機(jī)械臂的仿真研究,包括三維設(shè)計(jì)軟件UG、Pro/E、Solidworks,仿真軟件ADAMS、機(jī)器人專用軟件WorkSpace、專用計(jì)算軟件Matlab等。但是從三維建模,嵌入控制算法,實(shí)現(xiàn)3D仿真難易程度等多方面進(jìn)行分析,發(fā)現(xiàn)UG、Pro/E、Solidworks等在機(jī)構(gòu)仿真方面有一定的優(yōu)勢(shì),但是難以滿足機(jī)械臂控制仿真的要求;ADAMS和WorkSpace等仿真軟件在嵌入用戶開(kāi)發(fā)算法方面存在明顯的不足;Matlab在算法開(kāi)發(fā)和正確性驗(yàn)證方面有優(yōu)勢(shì),但是難于直接對(duì)控制器進(jìn)行驅(qū)動(dòng)。而OpenGL是一個(gè)跨平臺(tái)、開(kāi)源的圖形程序接口,具有較好的可視化功能,能夠?yàn)榉抡婕皥?chǎng)景可視化提供較好的環(huán)境,可使用光效、霧效、紋理等特效功能,模擬現(xiàn)實(shí)世界物體對(duì)光的反射、散射原理,增強(qiáng)了曲面的材質(zhì)感和臨場(chǎng)感,達(dá)到了良好的現(xiàn)實(shí)逼真效果。采用OpenGL技術(shù),在Windows環(huán)境下以Visual C++為基礎(chǔ)進(jìn)行機(jī)械臂三維重構(gòu)可視化研究,便于嵌入用戶控制算法,滿足機(jī)械臂控制仿真的要求。
在計(jì)算機(jī)圖形學(xué)中有兩種方式表示三維模型:多邊形構(gòu)成和NURBS曲面構(gòu)成。在三維圖形的繪制過(guò)程中,如果直接利用OpenGL庫(kù)提供的基本幾何體構(gòu)造復(fù)雜的圖形是相當(dāng)困難的。原因在于OpenGL只能通過(guò)基本的幾何圖元點(diǎn)、線及多邊形建立三維模型,但是它不提供建立三維模型的高級(jí)命令。此外,如果直接利用OpenGL繪制復(fù)雜三維模型,則需要在程序設(shè)計(jì)時(shí)使用大量的繪圖語(yǔ)句。這樣OpenGL程序在運(yùn)行時(shí)將占有大量?jī)?nèi)存,導(dǎo)致程序執(zhí)行效率降低,相應(yīng)地會(huì)增加程序設(shè)計(jì)的復(fù)雜度和工作量;并且程序的通用性和簡(jiǎn)便性很難滿足,給系統(tǒng)的開(kāi)發(fā)帶來(lái)了極大困難。
由于OpenGL對(duì)模型的數(shù)據(jù)格式相對(duì)比較通用,沒(méi)有特殊的要求。在仿真研究過(guò)程中比較可取的做法是先利用專業(yè)建模軟件(如3D Studio MAX、Pro/E等)建立需要的三維模型,然后轉(zhuǎn)換為OpenGL可以識(shí)別的模型數(shù)據(jù)格式(如3DS文件、STL文件等),最后將創(chuàng)建的模型數(shù)據(jù)導(dǎo)入OpenGL。然后在開(kāi)發(fā)環(huán)境(Visual C++、LabView等)中直接獲取模型數(shù)據(jù),結(jié)合OpenGL進(jìn)行繪制及交互控制。該方法的優(yōu)勢(shì)在于可以利用專業(yè)建模軟件3D Studio MAX的優(yōu)點(diǎn),快速建立復(fù)雜三維模型,還可以借助OpenGL的編程接口對(duì)模型進(jìn)行實(shí)時(shí)繪制和交互控制,提高程序的執(zhí)行效率,降低建模時(shí)間,加快系統(tǒng)開(kāi)發(fā)進(jìn)程[5-8]。
利用3D Studio MAX軟件創(chuàng)建模型并導(dǎo)出成3DS文件的流程如圖1所示。
圖1 3DS文件創(chuàng)建流程
3DS文件結(jié)構(gòu)由Chunk(塊)組成,每個(gè)Chunk描述了諸如場(chǎng)景數(shù)據(jù),每個(gè)編輯窗口的狀態(tài)、材質(zhì)、網(wǎng)格數(shù)據(jù)等[9]。Chunk由兩部分組成:ID和Length(下一個(gè)數(shù)據(jù)的位置)。二進(jìn)制的3DS文件采用小尾端格式存儲(chǔ),即低字節(jié)在前,高字節(jié)在后。3DS中每個(gè)塊的數(shù)據(jù)組織格式包括“塊ID”、“塊長(zhǎng)度”和“塊數(shù)據(jù)”。
每個(gè)3DS文件都包括一個(gè)塊ID是“0x4D4D”的基本塊?;緣K是在3DS文件中必須存在的,也可用于檢測(cè)一個(gè)文件是不是3DS文件,它由ID為“0x3D3D”的編輯塊和ID為“0xB000”的關(guān)鍵幀塊組成。3DS編輯塊表明程序數(shù)據(jù)的開(kāi)始,包括材質(zhì)列表塊、兩配置塊、視口定義塊、物體定義塊等。3DS關(guān)鍵幀塊表明開(kāi)始定義關(guān)鍵幀信息。3DS主要的幾個(gè)塊的ID及信息,包括(0xAFFF,材質(zhì)信息開(kāi)始)、(0xA000,材質(zhì)名稱)、(0xA300,材質(zhì)紋理名稱)、(0x4130,與三角面相關(guān)的材質(zhì)信息)、(0x4000,模型中對(duì)象信息)、(0x4110,對(duì)象中定點(diǎn)信息)、(0x4120,對(duì)象中三角面信息)、(0x4140,紋理坐標(biāo))。
為使Windows能正確執(zhí)行OpenGL的API函數(shù),首先必須對(duì)繪圖環(huán)境進(jìn)行初始化,只有在OpenGL繪制環(huán)境中,OpenGL命令才能被接收并執(zhí)行,所以必須創(chuàng)建OpenGL繪制環(huán)境。OpenGL繪制環(huán)境初始化過(guò)程如表1所示。
表1 OpenGL繪制環(huán)境初始化
如1.2節(jié)所述,3DS文件中采用的是塊結(jié)構(gòu),并且塊與塊之間存在嵌套關(guān)系,所以可以采用遞歸的方法讀取3DS文件中的三維模型數(shù)據(jù)?;诿嫦?qū)ο蟮某绦蛟O(shè)計(jì)思想,設(shè)計(jì)了5個(gè)類用于空間機(jī)械臂3DS文件的讀取和重繪,分別是tChunk(定義塊信息)、t3DModel(定義模型信息)、t3DObject(定義模型對(duì)象信息)、tMaterialInfo(定義材質(zhì)信息)和tFace(定義頂點(diǎn)信息和紋理坐標(biāo)信息)。3DS文件讀取的算法偽代碼如下所述:
參數(shù)定義為:
ChunkLength:表示3DS文件長(zhǎng)度;
ReadBytesLen:表示讀出的數(shù)據(jù)字節(jié)數(shù);
TempBytesLen:用于保存讀出數(shù)據(jù)字節(jié)數(shù)的臨時(shí)變量。
算法步驟:
Step1:初始化變量,打開(kāi)3DS文件;
Step2:讀取第一塊數(shù)據(jù)的ID及數(shù)據(jù)長(zhǎng)度ChunkLength;
Step2.1:判斷ID為0x4D4D,ReadBytesLen加6,執(zhí)行Step3;
Step2.2:判斷ID不為0x4D4D,則執(zhí)行Step6。
Step3:讀取下一塊數(shù)據(jù)的ID及數(shù)據(jù)長(zhǎng)度TempBytesLen;
Step3.1:判斷ID為0xA000,則將解析后的材質(zhì)名稱保存至材質(zhì)信息名稱隊(duì)列;
Step3.2:判斷ID為0xA020,則將解析后的材質(zhì)顏色保存至材質(zhì)信息顏色隊(duì)列;
Step3.3:判斷ID為0xA200,則將解析后的紋理信息保存至紋理信息隊(duì)列;
Step3.4:判斷ID為0xA300,則將解析后的材質(zhì)文件名稱保存至材質(zhì)文件名稱隊(duì)列;
Step3.5:如果為其他ID,忽略其數(shù)據(jù)信息。
Step4:ReadBytesLen=ReadBytesLen+TempBytesLen;
Step5:判斷已讀入數(shù)據(jù)長(zhǎng)度ReadBytesLen是否小于塊長(zhǎng)度ChunkLength;
Step5.1:如果ReadBytesLen小于或等于ChunkLength,繼續(xù)執(zhí)行Step3;
Step5.2:如果ReadBytesLen大于ChunkLength,執(zhí)行Step6。
Step6:程序結(jié)束。
將三維模型及場(chǎng)景數(shù)據(jù)從3DS文件讀出后,需要在OpenGL環(huán)境下完成三維模型的重繪[10-11]。三維模型重繪算法偽代碼如下所述:
參數(shù)定義:
算法步驟:
Step1:計(jì)算3DS模型中各個(gè)面的法向量;
Step1.4:保存計(jì)算后的各個(gè)面的法向量。
Step2:設(shè)置三維模型的材質(zhì)紋理;
Step3:設(shè)置OpenGL繪圖環(huán)境;
Step3.1:創(chuàng)建繪圖描述表并設(shè)置像素格式;
Step3.2:初始化模型、大小;
Step3.3:設(shè)置光照、旋轉(zhuǎn)角度、轉(zhuǎn)速及模式。
Step4:遍歷3DModel對(duì)象,對(duì)存儲(chǔ)的對(duì)象逐一進(jìn)行繪制,如果有紋理映射信息,則打開(kāi)紋理映射;
Step5:開(kāi)始以ViewMode模式繪制,先遍歷所有的面,然后嵌套遍歷三角形所有的點(diǎn),獲得面對(duì)每個(gè)點(diǎn)的索引。給出法向量,最后完成繪制;
Step6:根據(jù)機(jī)械臂運(yùn)動(dòng)學(xué)求解結(jié)果判斷機(jī)械臂是否需要重繪;
Step6.1:如果是機(jī)械臂正運(yùn)動(dòng)學(xué)控制,則按從以太網(wǎng)接收到的機(jī)械臂各關(guān)節(jié)角的個(gè)數(shù)進(jìn)行機(jī)械臂形狀的重繪;
Step6.2:如果是機(jī)械臂逆運(yùn)動(dòng)學(xué)控制,則根據(jù)從以太網(wǎng)接收到的機(jī)械臂末端狀態(tài)解算出各關(guān)節(jié)角,再進(jìn)行機(jī)械臂形狀的重繪。
Step7:程序結(jié)束。
空間七自由度機(jī)械臂是一個(gè)完全結(jié)構(gòu)對(duì)稱的冗余型機(jī)械臂,與臂桿兩端相連接的3個(gè)關(guān)節(jié)完全相同并且對(duì)稱。通過(guò)對(duì)空間機(jī)械臂的結(jié)構(gòu)特征進(jìn)行分析,建立的空間機(jī)械臂D-H坐標(biāo)系如圖2所示,D-H參數(shù)如表2所示。
圖2 空間機(jī)械臂D-H坐標(biāo)系
連桿iθidi/mmai-1/mmαi-11θ1000°2θ2d2090°3θ3d3a3-90°4θ40a40°5θ5d500°6θ6d6090°7θ7d70-90°
其中,d2=d3=d5=d6=d7=515;a3=a4=5 540。
根據(jù)機(jī)械臂D-H參數(shù)可以完成機(jī)械臂的正運(yùn)動(dòng)學(xué)和逆運(yùn)動(dòng)學(xué)的求解,根據(jù)正運(yùn)動(dòng)學(xué)的解算可以完成機(jī)械臂正運(yùn)動(dòng)的仿真控制;若已知機(jī)械臂末端執(zhí)行器的坐標(biāo)位置,則可以通過(guò)該位置坐標(biāo)結(jié)合逆運(yùn)動(dòng)學(xué)求解公式計(jì)算出機(jī)械臂各個(gè)關(guān)節(jié)的角度值,可以完成機(jī)械臂的逆運(yùn)動(dòng)控制及路徑規(guī)劃控制。將機(jī)械臂的正逆運(yùn)動(dòng)學(xué)的求解算法嵌入基于OpenGL的空間機(jī)械臂三維模型中,通過(guò)利用圖形程序接口來(lái)完成場(chǎng)景及三維模型的更新顯示,以此可以達(dá)到動(dòng)態(tài)顯示三維仿真的效果[12-14]。
根據(jù)系統(tǒng)需求分析,空間機(jī)械臂三維可視化系統(tǒng)的整體架構(gòu)設(shè)計(jì)如圖3所示。
在設(shè)計(jì)完成后,在Visual C++環(huán)境下該系統(tǒng)的運(yùn)行效果如圖4所示。
圖3 機(jī)械臂三維可視化系統(tǒng)架構(gòu)
圖4 空間機(jī)械臂三維可視化系統(tǒng)運(yùn)行效果
利用3D Studio MAX建模具有模型逼真形象、開(kāi)發(fā)效率高的特點(diǎn),完成空間機(jī)械臂三維模型及場(chǎng)景的創(chuàng)建。在Visual C++ 6.0環(huán)境下,完成三維模型數(shù)據(jù)3DS文件的讀取與解析,采用OpenGL技術(shù)進(jìn)行三維模型的重繪,大大降低了OpenGL建立復(fù)雜模型的難度。在此基礎(chǔ)上,運(yùn)用OpenGL對(duì)三維模型的處理技術(shù),對(duì)三維模型場(chǎng)景進(jìn)行實(shí)時(shí)渲染,使得生成的場(chǎng)景逼真,真實(shí)感強(qiáng)。建立的空間機(jī)械臂三維可視化系統(tǒng)可實(shí)現(xiàn)空間機(jī)械臂的運(yùn)動(dòng)學(xué)仿真,為進(jìn)一步研究空間機(jī)械臂的路徑規(guī)劃研究奠定基礎(chǔ)。
[1] 唐立才,張海濤,張敬鵬,等.基于OSG的空間機(jī)械臂三維仿真平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,2015,23(3):987-989.
[2] 廖 明,周良辰,閭國(guó)年,等.基于OpenGL驅(qū)動(dòng)的三維場(chǎng)景重構(gòu)[J].計(jì)算機(jī)應(yīng)用研究,2015,32(4):1276-1280.
[3] 董天平,馬 燕,劉倫鵬.基于OpenGL的工業(yè)化機(jī)器人仿真研究[J].重慶師范大學(xué)學(xué)報(bào):自然科學(xué)版,2013,30(2):60-64.
[4] 陳 琳,戴 駿,馮俊杰,等.基于OpenGL的多機(jī)器人仿
真環(huán)境[J].組合機(jī)床與自動(dòng)化加工技術(shù),2014(9):10-13.
[5] 李 新,李珊珊.3ds模型在OpenGL中的讀取和重繪[J].首都師范大學(xué)學(xué)報(bào):自然科學(xué)版,2008,29(2):101-104.
[6] 萬(wàn) 鵬,姜立軍,陳學(xué)東,等.基于圖像處理的外螺紋三維模型重構(gòu)[J].圖學(xué)學(xué)報(bào),2012,33(1):68-72.
[7] HERBORT S,WOHLER C.An introduction to image-based 3D surface reconstruction and a survey of photometric methods[J].3D Research,2011,2(3):1-17.
[8] MERAT P,AGHILI F,SU Chunyi.Modeling,control and simulation of a 6-DOF reconfigurable space manipulator with lockable cylindrical joints[C]//International conference on intelligent robotics and applications.[s.l.]:[s.n.],2013:121-131.
[9] 劉志林,蘇 麗.基于COSMOSMotion的機(jī)械臂三維虛擬仿真[J].機(jī)械設(shè)計(jì)與制造,2010(12):92-94.
[10] Shreiner D.OpenGL編程指南[M].王 銳,譯.第8版.北京:機(jī)械工業(yè)出版社,2014.
[11] 錢(qián)小平,楊慶華,荀 一,等.基于Java3D的機(jī)械臂三維虛擬場(chǎng)景創(chuàng)建及運(yùn)動(dòng)學(xué)仿真[J].機(jī)電工程,2014,31(1):47-51.
[12] CHEN M Q,GONG Y W. Research on technology of three-dimension Roam based on OpenGL[C]//International conference on computer application and system modeling.[s.l.]:[s.n.],2010:562-564.
[13] LIU N,PANG M Y.Rendering soft shadows with OpenGL based on planar projection method[C]//2nd international conference on network infrastructure and digital content.[s.l.]:IEEE,2010:235-239.
[14] 僧德文,李仲學(xué),李春民,等.基于OpenGL的真實(shí)感圖形繪制技術(shù)及應(yīng)用[J].計(jì)算機(jī)應(yīng)用研究,2005,22(3):173-175.