鄭雪峰, 姚 鑫, 陳 龍
(杭州電子科技大學(xué)電子信息學(xué)院,杭州310018)
近年來隨著國家工業(yè)4.0計(jì)劃的實(shí)施,工業(yè)自動(dòng)化發(fā)展進(jìn)程不斷推進(jìn)。機(jī)器人技術(shù)作為實(shí)現(xiàn)工業(yè)生產(chǎn)自動(dòng)化的核心技術(shù),國家對(duì)這方面的人才需求相應(yīng)增大[1-4]。在高校開展機(jī)器人相關(guān)課程就有了十分重大的意義[5-6]。
基于上述的問題,提出一種基于OpenGL的6軸機(jī)器人運(yùn)動(dòng)學(xué)仿真實(shí)驗(yàn)系統(tǒng)以代替?zhèn)鹘y(tǒng)的機(jī)器人實(shí)驗(yàn)[7-8]。該系統(tǒng)使用Visual Studio作為開發(fā)環(huán)境,C#作為開發(fā)語言,使用OpenGL搭建三維仿真空間,通過加載機(jī)器人關(guān)節(jié)的STL文件建立6軸機(jī)器人仿真模型,運(yùn)用齊次變換(Denavit-Hartenberg,D-H)及機(jī)器人正向動(dòng)力學(xué)知識(shí)計(jì)算關(guān)節(jié)的位置,用OpenGL的平移、旋轉(zhuǎn)變換移動(dòng)機(jī)器人關(guān)節(jié)模擬機(jī)器人的運(yùn)動(dòng)[9-12]。三維空間視角變換及物體的移動(dòng)涉及的內(nèi)容相對(duì)抽象,機(jī)器人運(yùn)動(dòng)學(xué)的D-H參數(shù)的選取也是學(xué)生較難理解的知識(shí)點(diǎn)。通過軟件仿真直觀地理解復(fù)雜抽象的問題,提高學(xué)生學(xué)習(xí)理論知識(shí)的興趣,編程設(shè)計(jì)也可提高學(xué)生的編程水平。
OpenGL三維仿真場(chǎng)景是將一個(gè)三維空間投影到一個(gè)二維的屏幕上,視角確定屏幕上顯示內(nèi)容,攝像機(jī)則確定了觀察者的位置。將攝像頭理解成人的眼睛,攝像頭的參數(shù)則代表了人眼睛的位置以及人目光的方向。視角參數(shù)可以看成攝像機(jī)的光學(xué)參數(shù),及攝像頭的焦距及景深。
使用glViewPort(GLIntx,GLInty,GLSizei Width,GLSizei Height)設(shè)置視口,其中前兩個(gè)參數(shù)為窗口左下角位置,后兩個(gè)參數(shù)為窗口大小。
設(shè)置視角參數(shù)函數(shù)為gluPerspective(double fovY,double aspectRatio,double zNear,double zFar)其參數(shù)的示意圖如圖1所示,fovY為圖1中的θ角,決定了視角的大小。aspectRatio為視角的寬高比,即圖1的aspect。zNear為圖1所示的近平面距離,zFar為圖1所示的遠(yuǎn)平面距離。攝像機(jī)參數(shù)的矩陣形式為:
圖1 視角參數(shù)示意圖
式中:R為右向量;U為上向量;D為方向向量;P為位置向量。其物理含義如圖2所示,這些參數(shù)決定了攝像頭的朝向及位置。
圖2 攝像機(jī)參數(shù)示意圖
模擬機(jī)器人的運(yùn)動(dòng)需要將機(jī)器人關(guān)節(jié)進(jìn)行平移和旋轉(zhuǎn)變換,OpenGL為物體的平移、旋轉(zhuǎn)提供了相應(yīng)的函數(shù)。其基本原理是將需要變換的向量左乘一個(gè)變換矩陣來實(shí)現(xiàn)。平移變換可由glTranslated(doublex,doubley,doublez)函數(shù)實(shí)現(xiàn):
式中,(Tx,Ty,Tz)組成的齊次矩陣即是模型的變換矩陣,可將物體向x,y,z方向移動(dòng)Tx,Ty,Tz的距離。
旋轉(zhuǎn)變換可由glRotated(double angle,doublex,doubley,doublez)函數(shù)實(shí)現(xiàn)。
繞x軸旋轉(zhuǎn):
繞y軸旋轉(zhuǎn):
繞z軸旋轉(zhuǎn):
式中,cosθ和sinθ組成的齊次矩陣可以實(shí)現(xiàn)將物體向3軸方向旋轉(zhuǎn)運(yùn)動(dòng)。
此外,旋轉(zhuǎn)還有一種繞任意軸的旋轉(zhuǎn)矩陣:
式中,(rx,ry,rz)向量為旋轉(zhuǎn)軸。
正向運(yùn)動(dòng)學(xué)的計(jì)算是從機(jī)器人底座開始建連桿坐標(biāo)系,使用齊次變換依次計(jì)算得到機(jī)器人第六軸末端的狀態(tài),其中的難點(diǎn)在于連桿坐標(biāo)系的建立和D-H參數(shù)的選擇[13-15]。
本實(shí)驗(yàn)的坐標(biāo)系將從機(jī)器人底座的原點(diǎn)開始,依次在每個(gè)旋轉(zhuǎn)軸末端建立右手坐標(biāo)系,具體建立步驟為:
步驟1以關(guān)節(jié)的旋轉(zhuǎn)軸作為zi軸;
步驟2xi軸為zi軸與zi-1軸的公垂線;
步驟3xi和zi的交點(diǎn)作為oi;
步驟4利用右手坐標(biāo)系確定yi。
機(jī)器人的D-H變換中,一個(gè)關(guān)節(jié)坐標(biāo)系到另一個(gè)關(guān)節(jié)的坐標(biāo)系的變換,可由4個(gè)參數(shù)來描述:θi為關(guān)節(jié)角度;di為關(guān)節(jié)距離;ai為連桿長度;αi為連桿扭角。其中關(guān)節(jié)角度為z方向旋轉(zhuǎn)角,關(guān)節(jié)距離為z方向移動(dòng)距離,連桿長度為x方向移動(dòng)距離,連桿扭角為x方向旋轉(zhuǎn)角度。本實(shí)驗(yàn)中從xi-1,yi-1,zi-1坐標(biāo)系變換到xi,yi,zi坐標(biāo)系的變換順序?yàn)閦平移、x平移和x旋轉(zhuǎn)旋轉(zhuǎn)。從原點(diǎn)坐標(biāo)系到第1軸末端坐標(biāo)系的變換可以表示為:
式中,T zi、T xi、R xi、R zi分別為4個(gè)齊次變換矩陣。其形式如下:
H i齊次變換矩陣可以簡化為:
機(jī)器人D-H參數(shù)需要實(shí)際機(jī)器人的機(jī)械結(jié)構(gòu)確定,使用機(jī)器人模型為某公司的AIR10P機(jī)器人,其機(jī)械結(jié)構(gòu)圖如圖3所示。
圖3 AIR10P機(jī)器人機(jī)械結(jié)構(gòu)圖(mm)
根據(jù)圖3及第2.1節(jié)介紹的連桿坐標(biāo)系建立方法及齊次變換順序,最終D-H參數(shù)選擇見表1。
表1 AIR10P機(jī)器人D-H參數(shù)表
表中,θ為其初始值,實(shí)際值應(yīng)是初始值加上關(guān)節(jié)旋轉(zhuǎn)角度。
建立1個(gè)三維的仿真環(huán)境,首先需要根據(jù)本文第1節(jié)的內(nèi)容確定視口及視角大小,設(shè)置的代碼為:
其中視口的大小為初始窗口的大小,初始視角為60°,視角寬高比為窗口的寬高比,可視最近距離為1個(gè)像素,最遠(yuǎn)為64 000個(gè)像素。
根據(jù)機(jī)器人體積的大小,攝像頭初始位置為(0,2 000,1 000),注視中點(diǎn)為(0,0,200),初始向上向量為(0,0,1)。
在三維空間中繪制一個(gè)網(wǎng)格地面作為參照平面,繪制使用Gl.glBegin(Gl.GL_QUADS)命令,使用Gl.glVertex3d(·)函數(shù)矩形4個(gè)點(diǎn),并將網(wǎng)格設(shè)置成白灰相間的顏色。
OpenGL三維空間比較抽象,為更具體的理解三維空間的方向,使用Gl.glBegin(Gl.GL_LINES)指令繪制紅、黃、藍(lán)3條直線,分別為三維空間的x,y,z3個(gè)方向。最終得到的三維空間如圖4所示。
圖4 三維空間仿真圖
機(jī)器人3D模型組件的分部件模型如圖5所示。其中:圖5(a)為機(jī)器人模型底座;圖5(b)為機(jī)器人模型肩部(連桿1);圖5(c)為機(jī)器人模型上臂(連桿2);圖5(d)為機(jī)器人模型肘部(連桿3);圖5(e)為機(jī)器人模型前臂(連桿4);圖5(f)為機(jī)器人模型腕部(連桿5);圖5(g)為機(jī)器人模型的法蘭盤(連桿6)。
圖5 機(jī)器人部件STL模型
STL格式的三維圖形本質(zhì)是由眾多三角形組成的,要在OpenGL中將STL模型顯示出來,需要將模型的三角形頂點(diǎn)坐標(biāo)讀取出來,每個(gè)頂點(diǎn)包括一個(gè)三維坐標(biāo)及一個(gè)三維的法向量,并用OpenGL的畫三角指令畫出即可。使用關(guān)鍵的代碼為:
由于STL文件中并沒有物體顏色的描述,為使機(jī)器人模型更逼真,可使用glMaterialfv(int face,int pname,float[]@params);函數(shù)設(shè)置機(jī)器人的材質(zhì)特性,光照特性及顏色。機(jī)器人部件坐標(biāo)的計(jì)算則根據(jù)第3節(jié)機(jī)器人的正向運(yùn)動(dòng)學(xué)計(jì)算得出,然后使用OpenGL中模型的平移、旋轉(zhuǎn)變換,移動(dòng)到響應(yīng)的坐標(biāo),最終構(gòu)建的順序如圖6(a)~(h)所示。
圖6 機(jī)器人模型搭建順序圖
為模擬機(jī)器人運(yùn)動(dòng),只需要改變機(jī)器人關(guān)節(jié)角度θ的值即可。模擬機(jī)器人的6個(gè)關(guān)節(jié)從起始狀態(tài)運(yùn)動(dòng)到30°的運(yùn)動(dòng)狀態(tài)圖如圖7(a)~(d)所示。
圖7 機(jī)器人運(yùn)動(dòng)過程圖
本實(shí)驗(yàn)基于OpenGL框架設(shè)計(jì)了一種6軸機(jī)器人的仿真實(shí)驗(yàn),并實(shí)現(xiàn)了6軸機(jī)器人的正向運(yùn)動(dòng)學(xué)在三維環(huán)境中的仿真功能。該實(shí)驗(yàn)將應(yīng)用于本科生的實(shí)驗(yàn)教學(xué),達(dá)到以下的教學(xué)目的。
(1)使用C#語言以及OpenGL框架作為實(shí)驗(yàn)平臺(tái),提高學(xué)生的編程水平。
(2)掌握三維空間狀態(tài)矩陣的平移、旋轉(zhuǎn)變化在OpenGL及機(jī)器人運(yùn)動(dòng)學(xué)中的具體應(yīng)用,使學(xué)生能夠深刻理解矩陣變換的物理意義。
(3)在仿真軟件中實(shí)現(xiàn)了機(jī)器人的正向運(yùn)動(dòng)學(xué),使學(xué)生通過實(shí)踐理解D-H變換及D-H參數(shù)較抽象的知識(shí)的理解。
本實(shí)驗(yàn)的設(shè)計(jì)重在培養(yǎng)學(xué)生的實(shí)踐能力,讓學(xué)生在學(xué)習(xí)編程的同時(shí),充分調(diào)動(dòng)學(xué)生的主動(dòng)性,激發(fā)學(xué)生的學(xué)習(xí)熱情,取得了良好的教學(xué)效果。