基于OpenGL的工業(yè)機器人三維仿真設(shè)計與實現(xiàn)
關(guān)鍵詞:機器人;三雄仿真;OpenGL;離線壕程
1 引言
機器人離線編程(OIP,OffLineProgram)具有不需要停止機器人工作和可以通過圖形仿真來避免實際機器人運動中的碰撞等優(yōu)點。目前國內(nèi)基本沒有針對機器人仿真的成型工具,國外有一些商品軟件如 RoboCAD,ROTSY,Evision等系統(tǒng),但是RoboCAD價格比較昂貴,不能夠普遍推廣;ROTSY是基于Motoman機器人的一套仿真系統(tǒng),但是他的普遍性不強而且價格也比較高。本文以江蘇省“十五”攻關(guān)項目網(wǎng)絡(luò)化焊接機器人研制課題為背景,設(shè)計了基于OpenGL的工業(yè)機器人三維仿真機離線軟件RobotM,完成了對于Couma機器人的離線仿真程序開發(fā)。
OpenGI是與圖形硬件無關(guān)的程序設(shè)計接口,而且OpenGI的類庫完成三維圖形的底層操作,同時又具有建模方便、實時三維仿真、真實感強、平臺獨立性、真實性強、對于系統(tǒng)的要求并不是很高等優(yōu)點。所以RobotM利用OpenGL和微軟的VC+開發(fā)工具以及MFC類庫作為底層的圖形庫接口實現(xiàn)仿真設(shè)計。離線仿真原理如圖1所示。
2 系統(tǒng)結(jié)構(gòu)詳述
系統(tǒng)模塊圖如圖2所示。
圖2說明了RobotM采用了分層次結(jié)構(gòu)設(shè)計的方法,將整體程序設(shè)計成為3層結(jié)構(gòu),每一層的設(shè)計都相對獨立,從而提高了程序的可移植性并且減輕了程序的維護難度。
2.1模型層設(shè)計
模型層利用OpenGI和MFC類庫,構(gòu)建了一系列底層的類對象,RobotM利用這些封裝好的類對象來構(gòu)建場景以及完成場景和用戶的交互。在RobotM設(shè)計中增加了空間實體、空間模型、機器人模型的概念。
空間實體就是單個的最簡單的部件,而空間模型是若干個實體按照一定方式的組合。由于機器人仿真具有一定的特殊性,把機器人設(shè)定為一個實體或者一個模型顯然是不合適的,所以可以把機器人以每一個轉(zhuǎn)軸為界限分割成若干部分,而把分割好的各個部分都作為空間模型,從而形成了若干空間實體一空間模型,若干空間模型一機器人模型的組合方式。
利用這種分層次的組合方式可以很容易控制仿真程序的顯示和交互,例如利用RobotM仿真一個汽車焊接生產(chǎn)線時,用一個空間模型對象來描述汽車對象可以很容易地控制這個汽車對象。RobotM對于每種空間實體類型都利用OpenGI提供的GlgenList/glCallList函數(shù)實現(xiàn)了一套構(gòu)建/繪制的函數(shù),利用空間實體一空間模型一機器人模型的組織方式和C++面向?qū)ο蠹夹g(shù)中的多態(tài)性,最終把機器人模型和空間模型的繪制工作都歸結(jié)為空間實體對象的繪制。
RobotM把仿真內(nèi)容保存為流文件。文件是按照分層結(jié)構(gòu)且以相對路徑存儲并設(shè)計的,即工作區(qū)、機器人模型、空間模型、路徑等文件如圖2所示,用戶通過打開工作區(qū)文件從而搜索并獲取其他類型文件的信息以建立場景對象。機器人、模型、路徑文件都可以為其他的工程所用,具有比較良好的重用性;相對路徑使得用戶即使改變了工程目錄存放的位置也不會影響文件的獲取,增加了RobotM的健壯性。
2.2場景層設(shè)計
場景層主要功能是完成場景中對象的建立、保存、繪制以及交互。作為模型層和示教層的中間層,場景層是機器人仿真系統(tǒng)中的連接部分。場景層從文件建立的過程如圖3所示。
由圖3可以看出場景的建立是一個從若干文件到仿真程序的空間實體對象的轉(zhuǎn)換過程,RobotM把用戶選取的工作區(qū)和其他一系列的文件轉(zhuǎn)化為RobotM 可以識別的數(shù)據(jù)結(jié)構(gòu)對象;同樣的,把RobotM中的數(shù)據(jù)結(jié)構(gòu)對象根據(jù)一定規(guī)則寫入文件完成了保存過程。場景的繪制是仿真程序的重要部分。場景層利用模型層的實體繪制的接口,通過場景一(機器人)一空間模型一空間實體的方式調(diào)用各自的繪制函數(shù),RobotM需要在屏幕上顯示動畫來表示仿真結(jié)果,所以程序的繪制效率十分重要。
除了運用普通的OpenGI繪制的各種增加效率的方式之外,本文為提高繪圖效率,在RobotM中提出了“必要重構(gòu)”的方法。即利用幾個BOOI量做為場景的各個部分(包括機器人模型、空間模型等部分)的重構(gòu)標(biāo)志(重構(gòu)是指利用OpenGL提供的glGenIist函數(shù)將需要繪制的內(nèi)容保存在內(nèi)存區(qū)域中,每次繪制時直接從中提取,而不需要再次組織)。RobotM在繪制的每一幀都只重構(gòu)改變過位置或者旋轉(zhuǎn)角度的對象(機器人模型和空間模型對象包括在內(nèi)),而對于沒有改變的對象則直接調(diào)用glCallList將對象繪制出來。這樣每一幀的繪制效率有很大提高,在程序仿真的時候不會出現(xiàn)顯示打頓的現(xiàn)象。
基于OpenGI的工業(yè)機器人三雛仿真設(shè)計與實現(xiàn)場景的交互提供給用戶比較便捷的操作功能。用戶根據(jù)自己的需要可以修改觀察和控制整個場景的方式(如旋轉(zhuǎn)、平移、改變光照等),還可以直接用鼠標(biāo)在場景中選取目標(biāo)點或者空間實體。
2.3示教層設(shè)計
示教層主要是完成離線編程設(shè)計。上2層已經(jīng)為示教層的設(shè)計打下了良好的基礎(chǔ)。機器人離線編程的關(guān)鍵內(nèi)容是能夠根據(jù)用戶的輸入確定仿真程序中機器人的運動方式和機器人運動位置,這種關(guān)系與實際機器人和示教盒之間的關(guān)系相類似。RobotM通過保存各個位置點和各個點之間的運動方式來描述機器人運動的軌跡來實現(xiàn)仿真。
RobotM有一個小型解釋器,他能夠?qū)崿F(xiàn)機器人編程語言和RobotM能夠識別的運動文件格式的相互轉(zhuǎn)換。由于機器人編程實現(xiàn)的運動程序編譯器有自己的語法和語義,所以RobotM必須能夠?qū)崿F(xiàn)控制柜運行的機器人控制文件和RobotM設(shè)計的程序相互轉(zhuǎn)換。
RobotM提供了2種確定機器人仿真運動末端點的方式:即轉(zhuǎn)角運動和定點運動。轉(zhuǎn)角運動如同實際機器人運動中的示教盒示教,能夠通過用戶輸入在仿真程序中,使得指定的機器人各個關(guān)節(jié)部分運動,從而實現(xiàn)機器人的轉(zhuǎn)角運動;而定點運動是RobotM中相對來說比較重要的同時也是轉(zhuǎn)角運動無法做到的。利用場景層提供的接口,用glLoadName給場景中的每個需要確定位置的空間實體/空間模型/機器人模型創(chuàng)建惟一標(biāo)示的ID,在用戶鼠標(biāo)選取空間中的點時利用ID來確定用戶所選取的對象,在獲取對象之后利用OpenGI的glUnProjeet函數(shù)獲取鼠標(biāo)點擊位置在空間中的“世界”坐標(biāo)系下的位置,完成鼠標(biāo)平面坐標(biāo)一空間坐標(biāo)的轉(zhuǎn)換,利用仿真機器人的運動方法使仿真機器人末端點運動到該空間坐標(biāo),從而確定機器人需要運動到的某個點的位置。
通過若干步的上述2種過程的重復(fù),完成這一系列點的設(shè)置,可以創(chuàng)建出路徑文件。路徑文件可以用來仿真也可以下傳到機器人控制柜。
c++相關(guān)文章:c++教程
評論