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