<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > 基于OpenGL的工業(yè)機器人三維仿真設計與實(shí)現

基于OpenGL的工業(yè)機器人三維仿真設計與實(shí)現

作者: 時(shí)間:2012-03-12 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:研究了仿真中的應用及其實(shí)現方法,利用卓越的渲染功能對場(chǎng)景和機器人進(jìn)行繪制,形成真實(shí)感比較強的三雄仿真環(huán)境,介紹了自行開(kāi)發(fā)的機器人離線(xiàn)壕程程序RobotM,RobotM具有機器人模型的創(chuàng )建、動(dòng)畫(huà)仿真、自動(dòng)路徑產(chǎn)生等功能,實(shí)現了機器人離線(xiàn)鳊程與仿真系統。

  關(guān)鍵詞:機器人;三雄仿真;;離線(xiàn)壕程

  1 引言

  機器人離線(xiàn)編程(OIP,OffLineProgram)具有不需要停止機器人工作和可以通過(guò)圖形仿真來(lái)避免實(shí)際機器人運動(dòng)中的碰撞等優(yōu)點(diǎn)。目前國內基本沒(méi)有針對機器人仿真的成型工具,國外有一些商品軟件如 RoboCAD,ROTSY,Evision等系統,但是RoboCAD價(jià)格比較昂貴,不能夠普遍推廣;ROTSY是基于Motoman機器人的一套仿真系統,但是他的普遍性不強而且價(jià)格也比較高。本文以江蘇省“十五”攻關(guān)項目網(wǎng)絡(luò )化焊接機器人研制課題為背景,了基于OpenGL的機離線(xiàn)軟件RobotM,完成了對于Couma機器人的離線(xiàn)仿真程序開(kāi)發(fā)。

  OpenGI是與圖形硬件無(wú)關(guān)的程序接口,而且OpenGI的類(lèi)庫完成三維圖形的底層操作,同時(shí)又具有建模方便、實(shí)時(shí)、真實(shí)感強、平臺獨立性、真實(shí)性強、對于系統的要求并不是很高等優(yōu)點(diǎn)。所以RobotM利用OpenGL和微軟的VC+開(kāi)發(fā)工具以及MFC類(lèi)庫作為底層的圖形庫接口實(shí)現仿真。離線(xiàn)仿真原理如圖1所示。

  

離線(xiàn)仿真原理

  2 系統結構詳述

  系統模塊圖如圖2所示。

  

RobotM采用了分層次結構圖

  圖2說(shuō)明了RobotM采用了分層次結構設計的方法,將整體程序設計成為3層結構,每一層的設計都相對獨立,從而提高了程序的可移植性并且減輕了程序的維護難度。

   2.1模型層設計

  模型層利用OpenGI和MFC類(lèi)庫,構建了一系列底層的類(lèi)對象,RobotM利用這些封裝好的類(lèi)對象來(lái)構建場(chǎng)景以及完成場(chǎng)景和用戶(hù)的交互。在RobotM設計中增加了空間實(shí)體、空間模型、機器人模型的概念。

  空間實(shí)體就是單個(gè)的最簡(jiǎn)單的部件,而空間模型是若干個(gè)實(shí)體按照一定方式的組合。由于機器人仿真具有一定的特殊性,把機器人設定為一個(gè)實(shí)體或者一個(gè)模型顯然是不合適的,所以可以把機器人以每一個(gè)轉軸為界限分割成若干部分,而把分割好的各個(gè)部分都作為空間模型,從而形成了若干空間實(shí)體一空間模型,若干空間模型一機器人模型的組合方式。

  利用這種分層次的組合方式可以很容易控制仿真程序的顯示和交互,例如利用RobotM仿真一個(gè)汽車(chē)焊接生產(chǎn)線(xiàn)時(shí),用一個(gè)空間模型對象來(lái)描述汽車(chē)對象可以很容易地控制這個(gè)汽車(chē)對象。RobotM對于每種空間實(shí)體類(lèi)型都利用OpenGI提供的GlgenList/glCallList函數實(shí)現了一套構建/繪制的函數,利用空間實(shí)體一空間模型一機器人模型的組織方式和C++面向對象技術(shù)中的多態(tài)性,最終把機器人模型和空間模型的繪制工作都歸結為空間實(shí)體對象的繪制。

  RobotM把仿真內容保存為流文件。文件是按照分層結構且以相對路徑存儲并設計的,即工作區、機器人模型、空間模型、路徑等文件如圖2所示,用戶(hù)通過(guò)打開(kāi)工作區文件從而搜索并獲取其他類(lèi)型文件的信息以建立場(chǎng)景對象。機器人、模型、路徑文件都可以為其他的工程所用,具有比較良好的重用性;相對路徑使得用戶(hù)即使改變了工程目錄存放的位置也不會(huì )影響文件的獲取,增加了RobotM的健壯性。

  2.2場(chǎng)景層設計

  場(chǎng)景層主要功能是完成場(chǎng)景中對象的建立、保存、繪制以及交互。作為模型層和示教層的中間層,場(chǎng)景層是機器人仿真系統中的連接部分。場(chǎng)景層從文件建立的過(guò)程如圖3所示。

  

場(chǎng)景層從文件建立的過(guò)程圖

  由圖3可以看出場(chǎng)景的建立是一個(gè)從若干文件到仿真程序的空間實(shí)體對象的轉換過(guò)程,RobotM把用戶(hù)選取的工作區和其他一系列的文件轉化為RobotM 可以識別的數據結構對象;同樣的,把RobotM中的數據結構對象根據一定規則寫(xiě)入文件完成了保存過(guò)程。場(chǎng)景的繪制是仿真程序的重要部分。場(chǎng)景層利用模型層的實(shí)體繪制的接口,通過(guò)場(chǎng)景一(機器人)一空間模型一空間實(shí)體的方式調用各自的繪制函數,RobotM需要在屏幕上顯示動(dòng)畫(huà)來(lái)表示仿真結果,所以程序的繪制效率十分重要。

  除了運用普通的OpenGI繪制的各種增加效率的方式之外,本文為提高繪圖效率,在RobotM中提出了“必要重構”的方法。即利用幾個(gè)BOOI量做為場(chǎng)景的各個(gè)部分(包括機器人模型、空間模型等部分)的重構標志(重構是指利用OpenGL提供的glGenIist函數將需要繪制的內容保存在內存區域中,每次繪制時(shí)直接從中提取,而不需要再次組織)。RobotM在繪制的每一幀都只重構改變過(guò)位置或者旋轉角度的對象(機器人模型和空間模型對象包括在內),而對于沒(méi)有改變的對象則直接調用glCallList將對象繪制出來(lái)。這樣每一幀的繪制效率有很大提高,在程序仿真的時(shí)候不會(huì )出現顯示打頓的現象。

  基于OpenGI的三雛仿真設計與實(shí)現場(chǎng)景的交互提供給用戶(hù)比較便捷的操作功能。用戶(hù)根據自己的需要可以修改觀(guān)察和控制整個(gè)場(chǎng)景的方式(如旋轉、平移、改變光照等),還可以直接用鼠標在場(chǎng)景中選取目標點(diǎn)或者空間實(shí)體。

  2.3示教層設計

  示教層主要是完成離線(xiàn)編程設計。上2層已經(jīng)為示教層的設計打下了良好的基礎。機器人離線(xiàn)編程的關(guān)鍵內容是能夠根據用戶(hù)的輸入確定仿真程序中機器人的運動(dòng)方式和機器人運動(dòng)位置,這種關(guān)系與實(shí)際機器人和示教盒之間的關(guān)系相類(lèi)似。RobotM通過(guò)保存各個(gè)位置點(diǎn)和各個(gè)點(diǎn)之間的運動(dòng)方式來(lái)描述機器人運動(dòng)的軌跡來(lái)實(shí)現仿真。

  RobotM有一個(gè)小型解釋器,他能夠實(shí)現機器人編程語(yǔ)言和RobotM能夠識別的運動(dòng)文件格式的相互轉換。由于機器人編程實(shí)現的運動(dòng)程序編譯器有自己的語(yǔ)法和語(yǔ)義,所以RobotM必須能夠實(shí)現控制柜運行的機器人控制文件和RobotM設計的程序相互轉換。

  RobotM提供了2種確定機器人仿真運動(dòng)末端點(diǎn)的方式:即轉角運動(dòng)和定點(diǎn)運動(dòng)。轉角運動(dòng)如同實(shí)際機器人運動(dòng)中的示教盒示教,能夠通過(guò)用戶(hù)輸入在仿真程序中,使得指定的機器人各個(gè)關(guān)節部分運動(dòng),從而實(shí)現機器人的轉角運動(dòng);而定點(diǎn)運動(dòng)是RobotM中相對來(lái)說(shuō)比較重要的同時(shí)也是轉角運動(dòng)無(wú)法做到的。利用場(chǎng)景層提供的接口,用glLoadName給場(chǎng)景中的每個(gè)需要確定位置的空間實(shí)體/空間模型/機器人模型創(chuàng )建惟一標示的ID,在用戶(hù)鼠標選取空間中的點(diǎn)時(shí)利用ID來(lái)確定用戶(hù)所選取的對象,在獲取對象之后利用OpenGI的glUnProjeet函數獲取鼠標點(diǎn)擊位置在空間中的“世界”坐標系下的位置,完成鼠標平面坐標一空間坐標的轉換,利用仿真機器人的運動(dòng)方法使仿真機器人末端點(diǎn)運動(dòng)到該空間坐標,從而確定機器人需要運動(dòng)到的某個(gè)點(diǎn)的位置。

  通過(guò)若干步的上述2種過(guò)程的重復,完成這一系列點(diǎn)的設置,可以創(chuàng )建出路徑文件。路徑文件可以用來(lái)仿真也可以下傳到機器人控制柜。

  • 評論


    相關(guān)推薦

    技術(shù)專(zhuān)區

    關(guān)閉
    国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
    <dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>