基于OpenGL三維軟件的設計_第1頁
基于OpenGL三維軟件的設計_第2頁
基于OpenGL三維軟件的設計_第3頁
基于OpenGL三維軟件的設計_第4頁
基于OpenGL三維軟件的設計_第5頁
免費預覽已結束,剩余10頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第五章基于OpenGL技術的軟件系統設計機器人三維運動仿真是機器人各項仿真中一個很重要的組成部分。它對于驗證機器人工作原理、工作空間及進行碰撞檢測等都具有非常重要的指導意義40本章通將如何在Windows環境下使用VC+、OpenGL實現物體的三維實時運動仿真,并利用“模糊神經網絡算法”來解決機械手臂到達指定環境中的某點位置運動的問題,為機械運動控制系統的三維運動仿真及操作控制提供了一種新的方法52。OpenGL技術的實現OpenGL的概述OpenGL(全稱:OpenGraphicsLibrary)是定義了一個跨編程語言、跨平臺的編程接口的規格,它用于三維圖象(二維的亦可)。OpenGL是個專

2、業的圖形程序接口,是一個功能強大,調用方便的底層圖形庫。OpenGL的前身是SGI公司為其圖形工作站開發的IRISGL0IRISGL是一個工業標準的3D圖形軟件接口,功能雖然強大但是移植性不好,于是SGI公司便在IRISGL的基礎上開發了OpenGLoOpenGL的英文全稱是“OpenGraphicsLibrary”,顧名思義,OpenGL便是“開放的圖形程序接口”。雖然DirectX在家用市場全面領先,但在專業高端繪圖領域,OpenGL是不能被取代的主角。OpenGL是與硬件無關的軟件接口,可以在不同的平臺如Windows95、WindowsNT、Unix、Linux、MacOS、OS/2之

3、間進行移植。因此,支持OpenGL的軟件具有很好的移植性,可以獲得非常廣泛的應用。由于OpenGL是圖形的底層圖形庫,沒有提供幾何實體圖元,不能直接用以描述場景。但是通過一些轉換程序,可以很方便地將AutoCAD、3DS/3DSMAX等3D圖形設計軟件制作的DXF和3DS模型文件轉換成OpenGL的頂點數組。在OpenGL的基礎上還有OpenInventor、Cosmo3D、Optimizer等多種高級圖形庫,適應不同應用,其中,OpenInventor應用最為廣泛。該軟件是基于OpenGL面向對象的工具包,提供創建交互式3D圖形應用程序的對象和方法,提供了預定義的對象和用于交互的事件處理模塊

4、,創建和編輯3D場景的高級應用程序單元,有打印對象和用其它圖形格式交換數據的能力。OpenGL的發展一直處于一種較為遲緩的態勢,每次版本的提高新增的技術很少,大多只是對其中部分做出修改和完善。1992年7月,SGI公司發布了OpenGL的1.0版本,隨后又與微軟公司共同開發了WindowsNT版本的OpenGL,從而使一些原來必須在高檔圖形工作站上運行的大型3D圖形處理軟件也可以在微機上運用。1995年OpenGL的1.1版本面市,該版本比1.0的性能有許多提高,并加入了一些新的功能。其中包括改進打印機支持,在增強元文件中包含OpenGL的調用,頂點數組的新特性,提高頂點位置、法線、顏色、色彩

5、指數、紋理坐標、多邊形邊緣標識的傳輸速度,引入了新的紋理特性等等。OpenGL1.5又新增了“OpenGLShadingLanguage,該語言是“OpenGL2.0”的底核,用于著色對象、頂點著色以及片斷著色技術的擴展功能。OpenGL2.0標準的主要制訂者并非原來的SGI,而是逐漸在ARB中占據主動地位的3DLabSo2.0版本首先要做的是與舊版本之間的完整兼容性,同時在頂點與像素及內存管理上與DirectX共同合作以維持均勢。OpenGL2.0將由OpenGL1.3的現有功能加上與之完全兼容的新功能所組成,如圖5-1。借此可以對在ARB停滯不前時代各家推出的各種糾纏不清的擴展指令集做一次

6、徹底的精簡。止匕外,硬件可編程能力的實現也提供了一個更好的方法以整合現有的擴展指令51。OpenGL三維成形過程OpenGL具有超強的圖形繪制能力,包括繪制物體、啟動光照、管理位圖、紋理映射、動畫、圖形增強及交互技術等功能。綜合以上功能,作為圖形硬件的軟件接口,OpenGL主要是將三維的物體投影到一個二維平面上,之后處理得到像素,進行顯示。OpenGL首先將物體轉化為可以描述物體幾何性質的頂點(Vertex)與描述圖像的像素(Pixel),在執行一系列操作后,最終將這些數據轉化成像素數據。也就是說,OpenGL是基于點的。在OpenGL中,無論何種情況,指令總是被順序處理。有一組頂點定義的圖元

7、(Pirmitive)執行完繪制操作后,后繼圖元才能作用53。簡單的圖形生成過程如圖1.1所示。(1)對圖元的定義:圖元由一組頂點定義,這一組頂點可以是一個或是多個頂點。每個頂點信息可以是二維的也可以是三維的,可以使用24個坐標。頂點信息可以由位置坐標、顏色值、法向量、紋理坐標組成。法線、紋理、顏色值會在處理每個頂點的過程中被使用和改變。紋理坐標決定圖元上紋理圖像的映射方式;法線是用于光照計算的;顏色與顏色的變化取決于是否有光照。OpenGL將點、線段、多邊形等通過在函數glBegin()和glEnd()之間一系列頂點的數據繪制出圖形。(2)對圖元的操作:OpenGL用交換矩陣、光照、反走樣、

8、像素操作等方法控制圖元的繪制。圖元的操作處理過程結束后,只留下圖元可見部分,準備進行光柵化(投影)處理54。像素處理比較特殊:對像素、位圖、影像直接進行像素操作,然后進行光柵化,后者是有些數據被存儲在紋理中供頂點使用。(3)光柵化(RasterizationM程:將圖元轉化為二維圖像,完成每個圖像點的顏色與深度的計算,生成結果為基片(Fragment),即各圖元的二維結果。(4)基片操作:處理過程包括基片是否遮擋、測試、融合等,最后得到像素,存入顯示幀緩沖中,完成整個繪制過程。頂點法向顏色紋理像素頂點像素圖元、像素操作光柵化基本操作幀緩沖頂點零件加工圖5-1OpenGL圖形繪制過程基于VC+中

9、的OpenGL技術的實現基于OpenGL的開放性接口,利用目前流行功能強大的VisualC+開發環境編程,VisualC+以其與OpenGL接口的高兼容性,是的開發過程簡單易用。VC+編程平臺幾乎所有世界級的軟件,從Web瀏覽器到面向任務的企業級應用,都是使用MicrosoftVisualC+開發系統來開發的。要用C+來開發Windows的高性能應用程序,VisualC+是效率較高的首選工具之一。VisualC+作為一種程序設計語言,它同時也是一個集成開發工具,提供了軟件代碼自動生成和可視化的資源編輯功能。本次設計采用VisualC+6.0作為開發軟件。OpenGL3D建模工具OpenGL能夠

10、建立兩種三維幾何模型。一種是線框模型.一種是表面模型。在進行建模時任意復雜的三維實體用一個個小的多邊形面來近似表示。OpenGL的輔助庫實際上也采用了這種方式來繪制圖形。建模的關健就是設法把復雜的三維實體分解為小多邊形。OpenGL通過以下格式來定義多邊形:glBegin(GL_POl,YGoN);glVertex3f(0.0,0.0,0.0);glVertex3f(0.0,3.0,0.0);giVertex3f(3.0,3.0,0.0);glVertex3f(4.0,1.5,0.0);glVertex3f(3.0,0.0,0.0);glEnd();OpenGL的建模實質上就是根據所給定的頂點

11、數據和面信息建立起各個多邊形面元,并將其存儲到顯示列表中,在需要時予以調用。目前較為常用的有3幾種建模方案。(1)利用OpenGL的輔助庫函數。如前所述,輔助庫也提供了一些繪制簡單實體的函數,如果所要繪制的幾何形狀比較簡單可直接采用,若對于復雜的幾何形體則顯得有些力不從心。輔助庫中繪制實體的函數.命令格式也限制得很死。例如,繪制圓柱體的函數。只能為沿z向伸展,且以原點為圓心。繪蒯這些形體雖然可只執行一條指令??墒潜仨毥涍^平移和旋轉變換后才能滿足最終要求,使建模過程變得非常繁瑣,同時也影響了系統的效率。(2)利用現有的CAD系統來完成建模。商品化的CAD軟件(如AutoCAD、lAGlI、Sol

12、idworks等),具有很強的三維建模能力。能夠用交互的方式十分方便地建立起復雜的幾何模型,用它們來輔助完成建模工作是十分合適的。關鍵是如何從幾何造型文件中提取出幾何形體數據,用于OpenGL繪圖。這就需要對圖形文件的格式有深入的了解。三維建模應用中的考慮綜合以上三種方法,對于簡單標準的實體,直接采用輔助庫函數建模;對簡單的實體如多邊形的拉伸、回轉體等則采用自定義手工建模的方法。而對于比較復雜的曲面等,則利用AutoCAD等CAD軟件繪制所需圖形在OpenGL中讀取顯示的方法。在VC+6.0開發環境下開發OpenGL應用程序需解決OpenGL與VC+6.0窗口系統的接口問題,主要是為OpenG

13、L創建適當的圖形操作描述表并設置正確的像素格式。此外就是要將OpenGL編程與VC+中的事件編程相結合。在VC+6.0事件處理程序中,利用OpenGL進行圖形繪制,從而真正地將OpenGL融入到程序中,使之于程序的其他部分有機地結合成為一個整體。OpenGL的繪圖方式與Windows的一般的繪圖方式是不同的,其區別主要表現在以下3個方面:Windows用GDI繪圖。GDI是Windows中二維圖形的繪圖接口,GDI繪圖內容包括點、線、面以及一系列繪圖筆刷等。這些繪制內容可以輸出到屏幕內存或打印機等設備。這種方式是在Windows的設備描述表(DevieeConiexts簡稱為DC)52中進行的

14、。所有的Windows圖形程序中都需要申請一個DC并在DC中完成各種繪圖操作。OpenGL采用的是渲染描述表(RenderContext簡稱RC)繪圖。實際上,在OpenGL應用程序中RC與DC的工作方式是相同的。對于GDI,DC存儲了各種圖形繪圖操作的狀態變量;而Rc中存儲了OpenGL所需的渲染信息如象素格式等。(3)象素格式。象素格式決定了子象素顏色的設置與DC和RC相關聯的輔助緩沖區象素格式的設置,其內容是OpenGL調用與Windows繪制操作之間的中間轉換設置。因此要在Windows環境下實現OpenGL函數功能,就必須先設置象素格式。OpenGL為windows提供了一系列處理象

15、素格式的函數,這些函數是:ehoosePixelFormat用來比較傳過來的象素格式描述和OpenGL支持的象素格式,返回一個最佳匹配的象素格式索引:setPixelFormat,用格式索引來設置DC的象素格式,另外OpenGL窗口風格必須包含wsCLIPCHILDREN和wsCLIPSIBLINGS類型,否則設置失敗。在VC+6.0可以編寫只有一個窗口需要繪制的單文檔程序和多個窗口需要繪制的多文檔程序。在本文中只需要一個窗口來繪制機械手模型,所以采用單文檔模式?;趩挝臋n的OpenGL圖形程序框架的基本步驟如下:(1)設置編程環境為了能夠使用即OpenGL命令,首先需要在預編譯頭文件STDA

16、FX.H中添加:#includegl/gl.h、#includegl/glu.h、#includegl/glaux.h,這樣預編譯頭文件才能提供對OpenGL庫和用戶庫的支持34。還應當通過Project菜單下的“Settings”選項在Link選項卡中鏈接以下庫:OPENGL32.LIB、GLU32.LIB以及GLAUX.LIB。(2)建立程序框架新建一個基于單文檔的工程,利用MFCClasswizard添力口消息WMCREATE、WMDESTROY、WMSIZE和WMTIMER的響應函數。按OpenGL的要求設置好窗口的屬性和風格,并設置好顯示的象素格式。在PreCreateV石ndow函

17、數中設置視窗口為具有WSCLIPCHILDREN和wsCUPSIBLINGS風格的窗口,以保證成功地設置像素格式。在setupPixelFormat函數中設置象素格式:PIXELFORMATDESCRIPTORPfd=sizeof(PixELFoRMATDEseRToR)/pfd結構的大小1,PFD_DRAW_TO_WINDOW,PFD_SUPPORT_OPENGL,PFD_DOUBLEBUFFER,PFD_TYPE_RGBA,24,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,PFD_MAIN_PLANE,0,0,0,0/支持在窗口中繪圖/支持OpenGL/雙緩存模式/R

18、GBA顏色模式/24位顏色深度/忽略顏色位/沒有非透明度緩存/忽略移位位/無累加緩存/忽略累加位/32位深度緩存/無模板緩存/無輔助緩存/主層/保留/忽略層,可見性和損毀掩模/版本號;一般說來上述象素結構,需要用戶改動的地方較少,最有可能改動的就是PFD_DOUBLEBUFFER,這個參數的意義是支持雙緩存機制,若要用OpenGL實現動畫,則必須選擇此參數。在結構pfd(PixelFormatDescriptor)定義完之后,調用ChoosepixelFormat確定pfd結構是否存在。若返回值為TRUE,則調用函數setPixelFormat為DC設置象素格式。(3)獲得Windows設備描

19、述表,然后為其設置象素格式,并與的渲染描述表聯系起來。在InitializeOPenoL中關聯DC和RC。M_pDC=pDC:獲取Windows設備描述表;SetUppixelFormat():為DC設置象素格式;M_hRC二wglCreateContext(m_pDC->GetsafeHde(),用設置好象素格式的DC來創建OpenGL的M_hRC:wglMakeCurrent(M_pDC->GetsafeHdc(),M_hRC),該函數把RC和DC相連接起來,并且通過該函數,應用程序可以隨時連接到一個不同的RC。另外,釋放RC也可通過該函數來完成。(4)調用OpenGL命令進行

20、圖形繪制。在RendersceneS數中進行圖形繪制和控制。SwapBuffers(m_pDC->GetSafeHdc():該函數是Win32API提供的一個用于OpenGL的函數。當OpenGL使用雙緩存技術以支持動畫顯示時,需要使用該函數將在BackBuffer上繪制的場景交換到FrontBuffer中顯示,SwapBuffers()需要與圖形操作描述表相聯的設備描述表句柄作為參數。在該函數之后可以編寫控制過程的函數。(5)退出程序,在onDestroy函數中釋放DC和RC。wglMakeCurrent(hDC,NULL):釋放繪制描述表;wglDeleteContext(hRC):

21、刪除繪制描述表;ReleaseDC(hwin,hDC):釋放設備描述表53。完成上述操作后,基于OpenGL的開發平臺就創建好了?;赪INDriver的USB驅動開發在當前較為流行的驅動開發工具有:Windrver、WINDDK、DRIVERSTDIO等,其中Windriver具有簡潔高效、不涉及操作系統底層編程并且具有很好的兼容性的特點56。只要掌握一種編程語言、熟悉相應設備的工作機制,任何人都能在短時間內利用Windriver開發出令人滿意的設備驅動。這是因為Windrver把所有繁雜的底層操作都封裝在一個內核模塊中,而提供給用戶標準的WindriverAPI函數來實現硬件訪問。如此則將

22、驅動開發的繁雜工作變成了僅僅是調用硬件操作的標準API函數,大大的簡化了驅動開發者的工作、加快了開發周期。而且它支持包括Windows系列、WindowsCE、Linux和Solars等多種操作系統。同時可以利用多種集成開發環境和編程語言來實現,支持的集成開發環境包括VB、VC、Delphi和C+Builder等,編程語言包括C、Pascal和Basic等57。在同類工具中,Windriver在這方面具有明顯的優勢。Windriver開發設備驅動的一般方法是:在配置并安裝好設備之后,用戶可以打開Windriver的驅動向導DriverWizard,首先在向導中配置設備資源,包括I/O地址范圍,

23、如有必要還可以設置內存、寄存器地址范圍以及用到的中斷口;然后用戶可以對設備進行一些測試操作,檢驗硬件的有效性;設置完成之后,用戶可以選擇一種特定的開發環境或編程語言,讓Windriver根據用戶的先前設置生成一個相應開發環境下的設備驅動樣本。用戶可以直接利用驅動樣本中的標準WindriverAPI函數來實現對硬件的操作和訪問58。而API函數實際上要通過Windrivrer的內核模塊才能實現硬件訪問,其結構框架如圖一所示。這屬于用戶模式的驅動程序,一般情況下此種模式便已夠用。如果用戶模式驅動的性能不能滿足實際需要,效率不夠高,用戶可以在此基礎上開發內核模式的驅動(KernelPlugIn)。內

24、核模式59的驅動性能一般要優于用戶模式的驅動,只是其開發過程稍微復雜一點。具體如何利用Windriver開發USB驅動包括以下步驟60:(1)配置并安裝設備到PC機;(2)運行DriverWizard,配置設備資源,并完成設備測試;(3)選擇驅動開發環境,利用DriverWizard產生相應的設備驅動樣本;(4)在相應的開發環境中,移植驅動樣本中的API函數代碼,并編寫具體的功能代碼,建立用戶模式的驅動程序;(1)動態加載Windriver的內內核模塊;(2)打包發布驅動程序。用戶所寫代碼Windriver代碼用戶級驅罰”(EXEorDLL)i用戶模式WinDriverAPI函數(Windrv

25、r.h)內核級驅動(SYSorVXD)用戶內核函數WinDriver(SYSorVXD)內核嵌入用戶驅動代碼圖5-2Windriver結構框本系統使用Windriver配合VC+6.0開發USBD12的驅動,編譯發布后包含“My_USBDriver.inf”和“My_USBDriver.sys”兩個文件,其具體操作不再敘述。軟件系統的設計通過上述關鍵設計技術,使用VC+設計了本控制系統軟件。軟件設計的主題思想是模塊化設計,將各需要的模塊打包設計,使用dll動態程序鏈接庫的模式調用,具軟件結構圖如圖5-3所示。從圖中可以看出,本軟件一共使用了4條線程,分別為USB通訊線程、OPEGL三維模型線程

26、、用于操作界面線程、推理線程,各個線程采用Windows消息隊列的形式實現數據的交互,USB線程負責采集數據后交與交與推理線程計算控制電壓角度,同時采集的位置信息交與OpenGL線程繪制三維圖形,在用戶更改參數后,用戶界面操作線程將數據交與推理機制或者USB通訊線程。使用Windows線程技術,有效的防止了消息沖突和誤處理,提高了數據交互速度底層物理硬件通訊事件機制物理硬件機器手臂物理模型參數模糊神經網絡模型m推理線程Wess:POWER_INIT_USB():USBPOINT1Read():USBPOINT1Read():USBPOINT2Read():USBPOINT3Read()USB通

27、訊線程用戶界面線程用戶編程文本ndowsepip*excut_Pos()arm1_Pos()arm2_Pos()arm3_Pos()arm4_Pos()arm5_Pos()基于OPENGL機器人模型線程物理硬件圖5-3軟件設計結構框圖通過上述設計出系統軟件界面如圖5-4所示。).070圖5-4系統軟件界面圖圖5-5關鍵操作對話框該軟件的使用方式如下:(1)連接六自由度機器手臂電氣線纜;(2)檢查各個連接部件是否完好,通電;(3)插入USB六自由度控制系統;(4)打開軟件,此時軟件將自動檢測是否有設備連接,如果設備連接良好,則在會在連接狀態上顯示“設備已連接”,如果設備斷線,則顯示“設備離線”,

28、此時需要檢查線路后重新連接USB電纜,然后點擊“刷新設備連接”;(5)點擊“操作控制區”中的“設備歸零位”,此時手臂的各個關節將運動起來,自動找到設備0點;(6)編寫控制程序a)在“程序控制”界面中,選擇“新建”控制文件。此時將有文本框將顯示“000START'、“空行”、“001END”;b)在基本運動中選取基本控制,如選取“S軸旋轉”,將出現圖5-5對話框,旋轉“左旋”、“0-60”度、中速后確定,文本控制將顯示“000START”、“001L1B-L-ZS60”、“空行”、“002END”;c)如此選取其他軸的運動,和運動之間穿插上述完成后執行下面程序指令、延時執行以下指令等,具

29、體指令表見表5-1所示;(8)點擊“運行”、或“演示”按鈕。(9)同時觀察三維窗口中或機械手臂的運行狀態。表5-1六自由度機器手臂偽碼指令表指令名稱偽碼1號關節旋轉L1B12號關節旋轉L2B3號關節旋轉L3B4號關節旋轉L4B5號關節旋轉L5B6號關節抓取L6B左旋或+旋L左旋或-旋R下筆旋轉LB當前轉動范圍NS原點轉動范圍ZS爪抓取力度GN爪松開RN開始START結束END延時T(n)2等待執行W跳轉2JP(n)21、左右指令編寫為在英文狀態下使用,半角;2、T(n)中n表示延時時間長短,單位為ms;JP(n)中n表示跳轉指令編號;3、表格中所有指令為專用語言,不具備其他任何語言的意義;機器

30、手臂性能測試與分析性能測試通過對末端執行器手爪握力、手臂伸展運動過程中帶負載、不帶負載的重復定位進行了測試。在測試過程中,將都以水平面作為運動區域平面伸展范圍分析,測試如下進行。(1)末端執行器-手爪握力測試通過對末端執行器手爪受力標定后,在手爪上安裝一個經過標定的認證的20Kg測力傳感器,經由軟件控制手爪的握力,每次握住十分鐘后張開爪,繼而增加握力,如此反復。握力每次增加1Kg,手臂姿態為垂直水平面。經過測試后,其實驗數據見表5-2。表5-2手爪握力測試末端執行器狀態間隔時間(分鐘)測量值握緊1Kg101Kg松開100Kg握緊2Kg102Kg松開100Kg握緊3Kg103Kg松開100Kg握緊4Kg104Kg松開140Kg握緊5Kg105Kg松開200Kg握緊6Kg106Kg松開OO0.05Kg握緊7Kg

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論