鄭雪峰, 姚 鑫, 陳 龍
(杭州電子科技大學電子信息學院,杭州310018)
近年來隨著國家工業4.0計劃的實施,工業自動化發展進程不斷推進。機器人技術作為實現工業生產自動化的核心技術,國家對這方面的人才需求相應增大[1-4]。在高校開展機器人相關課程就有了十分重大的意義[5-6]。
基于上述的問題,提出一種基于OpenGL的6軸機器人運動學仿真實驗系統以代替傳統的機器人實驗[7-8]。該系統使用Visual Studio作為開發環境,C#作為開發語言,使用OpenGL搭建三維仿真空間,通過加載機器人關節的STL文件建立6軸機器人仿真模型,運用齊次變換(Denavit-Hartenberg,D-H)及機器人正向動力學知識計算關節的位置,用OpenGL的平移、旋轉變換移動機器人關節模擬機器人的運動[9-12]。三維空間視角變換及物體的移動涉及的內容相對抽象,機器人運動學的D-H參數的選取也是學生較難理解的知識點。通過軟件仿真直觀地理解復雜抽象的問題,提高學生學習理論知識的興趣,編程設計也可提高學生的編程水平。
OpenGL三維仿真場景是將一個三維空間投影到一個二維的屏幕上,視角確定屏幕上顯示內容,攝像機則確定了觀察者的位置。將攝像頭理解成人的眼睛,攝像頭的參數則代表了人眼睛的位置以及人目光的方向。視角參數可以看成攝像機的光學參數,及攝像頭的焦距及景深。
使用glViewPort(GLIntx,GLInty,GLSizei Width,GLSizei Height)設置視口,其中前兩個參數為窗口左下角位置,后兩個參數為窗口大小。
設置視角參數函數為gluPerspective(double fovY,double aspectRatio,double zNear,double zFar)其參數的示意圖如圖1所示,fovY為圖1中的θ角,決定了視角的大小。aspectRatio為視角的寬高比,即圖1的aspect。zNear為圖1所示的近平面距離,zFar為圖1所示的遠平面距離。攝像機參數的矩陣形式為:

圖1 視角參數示意圖

式中:R為右向量;U為上向量;D為方向向量;P為位置向量。其物理含義如圖2所示,這些參數決定了攝像頭的朝向及位置。

圖2 攝像機參數示意圖
模擬機器人的運動需要將機器人關節進行平移和旋轉變換,OpenGL為物體的平移、旋轉提供了相應的函數。其基本原理是將需要變換的向量左乘一個變換矩陣來實現。平移變換可由glTranslated(doublex,doubley,doublez)函數實現:

式中,(Tx,Ty,Tz)組成的齊次矩陣即是模型的變換矩陣,可將物體向x,y,z方向移動Tx,Ty,Tz的距離。
旋轉變換可由glRotated(double angle,doublex,doubley,doublez)函數實現。
繞x軸旋轉:

繞y軸旋轉:

繞z軸旋轉:

式中,cosθ和sinθ組成的齊次矩陣可以實現將物體向3軸方向旋轉運動。
此外,旋轉還有一種繞任意軸的旋轉矩陣:

式中,(rx,ry,rz)向量為旋轉軸。
正向運動學的計算是從機器人底座開始建連桿坐標系,使用齊次變換依次計算得到機器人第六軸末端的狀態,其中的難點在于連桿坐標系的建立和D-H參數的選擇[13-15]。
本實驗的坐標系將從機器人底座的原點開始,依次在每個旋轉軸末端建立右手坐標系,具體建立步驟為:
步驟1以關節的旋轉軸作為zi軸;
步驟2xi軸為zi軸與zi-1軸的公垂線;
步驟3xi和zi的交點作為oi;
步驟4利用右手坐標系確定yi。
機器人的D-H變換中,一個關節坐標系到另一個關節的坐標系的變換,可由4個參數來描述:θi為關節角度;di為關節距離;ai為連桿長度;αi為連桿扭角。其中關節角度為z方向旋轉角,關節距離為z方向移動距離,連桿長度為x方向移動距離,連桿扭角為x方向旋轉角度。本實驗中從xi-1,yi-1,zi-1坐標系變換到xi,yi,zi坐標系的變換順序為z平移、x平移和x旋轉旋轉。從原點坐標系到第1軸末端坐標系的變換可以表示為:

式中,T zi、T xi、R xi、R zi分別為4個齊次變換矩陣。其形式如下:

H i齊次變換矩陣可以簡化為:

機器人D-H參數需要實際機器人的機械結構確定,使用機器人模型為某公司的AIR10P機器人,其機械結構圖如圖3所示。

圖3 AIR10P機器人機械結構圖(mm)
根據圖3及第2.1節介紹的連桿坐標系建立方法及齊次變換順序,最終D-H參數選擇見表1。

表1 AIR10P機器人D-H參數表
表中,θ為其初始值,實際值應是初始值加上關節旋轉角度。
建立1個三維的仿真環境,首先需要根據本文第1節的內容確定視口及視角大小,設置的代碼為:

其中視口的大小為初始窗口的大小,初始視角為60°,視角寬高比為窗口的寬高比,可視最近距離為1個像素,最遠為64 000個像素。
根據機器人體積的大小,攝像頭初始位置為(0,2 000,1 000),注視中點為(0,0,200),初始向上向量為(0,0,1)。
在三維空間中繪制一個網格地面作為參照平面,繪制使用Gl.glBegin(Gl.GL_QUADS)命令,使用Gl.glVertex3d(·)函數矩形4個點,并將網格設置成白灰相間的顏色。
OpenGL三維空間比較抽象,為更具體的理解三維空間的方向,使用Gl.glBegin(Gl.GL_LINES)指令繪制紅、黃、藍3條直線,分別為三維空間的x,y,z3個方向。最終得到的三維空間如圖4所示。

圖4 三維空間仿真圖
機器人3D模型組件的分部件模型如圖5所示。其中:圖5(a)為機器人模型底座;圖5(b)為機器人模型肩部(連桿1);圖5(c)為機器人模型上臂(連桿2);圖5(d)為機器人模型肘部(連桿3);圖5(e)為機器人模型前臂(連桿4);圖5(f)為機器人模型腕部(連桿5);圖5(g)為機器人模型的法蘭盤(連桿6)。

圖5 機器人部件STL模型
STL格式的三維圖形本質是由眾多三角形組成的,要在OpenGL中將STL模型顯示出來,需要將模型的三角形頂點坐標讀取出來,每個頂點包括一個三維坐標及一個三維的法向量,并用OpenGL的畫三角指令畫出即可。使用關鍵的代碼為:

由于STL文件中并沒有物體顏色的描述,為使機器人模型更逼真,可使用glMaterialfv(int face,int pname,float[]@params);函數設置機器人的材質特性,光照特性及顏色。機器人部件坐標的計算則根據第3節機器人的正向運動學計算得出,然后使用OpenGL中模型的平移、旋轉變換,移動到響應的坐標,最終構建的順序如圖6(a)~(h)所示。

圖6 機器人模型搭建順序圖
為模擬機器人運動,只需要改變機器人關節角度θ的值即可。模擬機器人的6個關節從起始狀態運動到30°的運動狀態圖如圖7(a)~(d)所示。

圖7 機器人運動過程圖
本實驗基于OpenGL框架設計了一種6軸機器人的仿真實驗,并實現了6軸機器人的正向運動學在三維環境中的仿真功能。該實驗將應用于本科生的實驗教學,達到以下的教學目的。
(1)使用C#語言以及OpenGL框架作為實驗平臺,提高學生的編程水平。
(2)掌握三維空間狀態矩陣的平移、旋轉變化在OpenGL及機器人運動學中的具體應用,使學生能夠深刻理解矩陣變換的物理意義。
(3)在仿真軟件中實現了機器人的正向運動學,使學生通過實踐理解D-H變換及D-H參數較抽象的知識的理解。
本實驗的設計重在培養學生的實踐能力,讓學生在學習編程的同時,充分調動學生的主動性,激發學生的學習熱情,取得了良好的教學效果。