基于OpenGL技術(shù)的軟件系統(tǒng)設(shè)計(jì)_第1頁(yè)
基于OpenGL技術(shù)的軟件系統(tǒng)設(shè)計(jì)_第2頁(yè)
基于OpenGL技術(shù)的軟件系統(tǒng)設(shè)計(jì)_第3頁(yè)
基于OpenGL技術(shù)的軟件系統(tǒng)設(shè)計(jì)_第4頁(yè)
基于OpenGL技術(shù)的軟件系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.第五章 基于OpenGL技術(shù)的軟件系統(tǒng)設(shè)計(jì)機(jī)器人三維運(yùn)動(dòng)仿真是機(jī)器人各項(xiàng)仿真中一個(gè)很重要的組成部分。它對(duì)于驗(yàn)證機(jī)器人工作原理、工作空間及進(jìn)行碰撞檢測(cè)等都具有非常重要的指導(dǎo)意義4。本章通將如何在Windows環(huán)境下使用VC+、OpenGL實(shí)現(xiàn)物體的三維實(shí)時(shí)運(yùn)動(dòng)仿真,并利用“模糊神經(jīng)網(wǎng)絡(luò)算法”來(lái)解決機(jī)械手臂到達(dá)指定環(huán)境中的某點(diǎn)位置運(yùn)動(dòng)的問(wèn)題,為機(jī)械運(yùn)動(dòng)控制系統(tǒng)的三維運(yùn)動(dòng)仿真及操作控制提供了一種新的方法52。5.1 OpenGL技術(shù)的實(shí)現(xiàn)5.1.1 OpenGL的概述OpenGL(全稱:Open Graphics Library)是定義了一個(gè)跨編程語(yǔ)言、跨平臺(tái)的編程接口的規(guī)格,它用于三維圖象(二維

2、的亦可)。OpenGL是個(gè)專業(yè)的圖形程序接口,是一個(gè)功能強(qiáng)大,調(diào)用方便的底層圖形庫(kù)。OpenGL的前身是SGI公司為其圖形工作站開發(fā)的IRIS GL。IRIS GL是一個(gè)工業(yè)標(biāo)準(zhǔn)的3D圖形軟件接口,功能雖然強(qiáng)大但是移植性不好,于是SGI公司便在IRIS GL的基礎(chǔ)上開發(fā)了OpenGL。OpenGL的英文全稱是“Open Graphics Library”,顧名思義,OpenGL便是“開放的圖形程序接口”。雖然Direct X在家用市場(chǎng)全面領(lǐng)先,但在專業(yè)高端繪圖領(lǐng)域,OpenGL是不能被取代的主角。OpenGL是與硬件無(wú)關(guān)的軟件接口,可以在不同的平臺(tái)如Windows 95、Windows NT、

3、Unix、Linux、MacOS、OS/2之間進(jìn)行移植。因此,支持OpenGL的軟件具有很好的移植性,可以獲得非常廣泛的應(yīng)用。由于OpenGL是圖形的底層圖形庫(kù),沒(méi)有提供幾何實(shí)體圖元,不能直接用以描述場(chǎng)景。但是通過(guò)一些轉(zhuǎn)換程序,可以很方便地將AutoCAD、3DS/3DSMAX等3D圖形設(shè)計(jì)軟件制作的DXF和3DS模型文件轉(zhuǎn)換成OpenGL的頂點(diǎn)數(shù)組。在OpenGL的基礎(chǔ)上還有Open Inventor、Cosmo3D、Optimizer等多種高級(jí)圖形庫(kù),適應(yīng)不同應(yīng)用,其中,Open Inventor應(yīng)用最為廣泛。該軟件是基于OpenGL面向?qū)ο蟮墓ぞ甙峁﹦?chuàng)建交互式3D圖形應(yīng)用程序的對(duì)象和

4、方法,提供了預(yù)定義的對(duì)象和用于交互的事件處理模塊,創(chuàng)建和編輯3D場(chǎng)景的高級(jí)應(yīng)用程序單元,有打印對(duì)象和用其它圖形格式交換數(shù)據(jù)的能力。OpenGL的發(fā)展一直處于一種較為遲緩的態(tài)勢(shì),每次版本的提高新增的技術(shù)很少,大多只是對(duì)其中部分做出修改和完善。1992年7月,SGI公司發(fā)布了OpenGL的1.0版本,隨后又與微軟公司共同開發(fā)了Windows NT版本的OpenGL,從而使一些原來(lái)必須在高檔圖形工作站上運(yùn)行的大型3D圖形處理軟件也可以在微機(jī)上運(yùn)用。1995年OpenGL的1.1版本面市,該版本比1.0的性能有許多提高,并加入了一些新的功能。其中包括改進(jìn)打印機(jī)支持,在增強(qiáng)元文件中包含OpenGL的調(diào)用

5、,頂點(diǎn)數(shù)組的新特性,提高頂點(diǎn)位置、法線、顏色、色彩指數(shù)、紋理坐標(biāo)、多邊形邊緣標(biāo)識(shí)的傳輸速度,引入了新的紋理特性等等。OpenGL 1.5又新增了“OpenGL Shading Language”,該語(yǔ)言是“OpenGL 2.0”的底核,用于著色對(duì)象、頂點(diǎn)著色以及片斷著色技術(shù)的擴(kuò)展功能。OpenGL 2.0標(biāo)準(zhǔn)的主要制訂者并非原來(lái)的SGI,而是逐漸在ARB中占據(jù)主動(dòng)地位的3DLabs。2.0版本首先要做的是與舊版本之間的完整兼容性,同時(shí)在頂點(diǎn)與像素及內(nèi)存管理上與DirectX共同合作以維持均勢(shì)。OpenGL 2.0將由OpenGL 1.3的現(xiàn)有功能加上與之完全兼容的新功能所組成,如圖5-1。借此

6、可以對(duì)在ARB停滯不前時(shí)代各家推出的各種糾纏不清的擴(kuò)展指令集做一次徹底的精簡(jiǎn)。此外,硬件可編程能力的實(shí)現(xiàn)也提供了一個(gè)更好的方法以整合現(xiàn)有的擴(kuò)展指令51。5.1.2 OpenGL三維成形過(guò)程OpenGL具有超強(qiáng)的圖形繪制能力,包括繪制物體、啟動(dòng)光照、管理位圖、紋理映射、動(dòng)畫、圖形增強(qiáng)及交互技術(shù)等功能。綜合以上功能,作為圖形硬件的軟件接口,OpenGL主要是將三維的物體投影到一個(gè)二維平面上,之后處理得到像素,進(jìn)行顯示。OpenGL首先將物體轉(zhuǎn)化為可以描述物體幾何性質(zhì)的頂點(diǎn)(Vertex)與描述圖像的像素(Pixel),在執(zhí)行一系列操作后,最終將這些數(shù)據(jù)轉(zhuǎn)化成像素?cái)?shù)據(jù)。也就是說(shuō),OpenGL是基于點(diǎn)

7、的。在OpenGL中,無(wú)論何種情況,指令總是被順序處理。有一組頂點(diǎn)定義的圖元(Pirmitive)執(zhí)行完繪制操作后,后繼圖元才能作用53。簡(jiǎn)單的圖形生成過(guò)程如圖1.1所示。(1) 對(duì)圖元的定義:圖元由一組頂點(diǎn)定義,這一組頂點(diǎn)可以是一個(gè)或是多個(gè)頂點(diǎn)。每個(gè)頂點(diǎn)信息可以是二維的也可以是三維的,可以使用24個(gè)坐標(biāo)。頂點(diǎn)信息可以由位置坐標(biāo)、顏色值、法向量、紋理坐標(biāo)組成。法線、紋理、顏色值會(huì)在處理每個(gè)頂點(diǎn)的過(guò)程中被使用和改變。紋理坐標(biāo)決定圖元上紋理圖像的映射方式;法線是用于光照計(jì)算的;顏色與顏色的變化取決于是否有光照。OpenGL將點(diǎn)、線段、多邊形等通過(guò)在函數(shù)glBegin()和glEnd()之間一系列頂

8、點(diǎn)的數(shù)據(jù)繪制出圖形。(2) 對(duì)圖元的操作:OpenGL用交換矩陣、光照、反走樣、像素操作等方法控制圖元的繪制。圖元的操作處理過(guò)程結(jié)束后,只留下圖元可見部分,準(zhǔn)備進(jìn)行光柵化(投影)處理54。像素處理比較特殊:對(duì)像素、位圖、影像直接進(jìn)行像素操作,然后進(jìn)行光柵化,后者是有些數(shù)據(jù)被存儲(chǔ)在紋理中供頂點(diǎn)使用。(3) 光柵化(Rasterization)過(guò)程:將圖元轉(zhuǎn)化為二維圖像,完成每個(gè)圖像點(diǎn)的顏色與深度的計(jì)算,生成結(jié)果為基片(Fragment),即各圖元的二維結(jié)果。(4) 基片操作:處理過(guò)程包括基片是否遮擋、測(cè)試、融合等,最后得到像素,存入顯示幀緩沖中,完成整個(gè)繪制過(guò)程。圖5-1 OpenGL圖形繪制過(guò)

9、程5.2 基于VC+中的OpenGL技術(shù)的實(shí)現(xiàn)基于OpenGL的開放性接口,利用目前流行功能強(qiáng)大的Visual C+開發(fā)環(huán)境編程,Visual C+以其與OpenGL接口的高兼容性,是的開發(fā)過(guò)程簡(jiǎn)單易用。5.2.1 VC+ 編程平臺(tái)幾乎所有世界級(jí)的軟件,從Web瀏覽器到面向任務(wù)的企業(yè)級(jí)應(yīng)用,都是使用Microsoft Visual C+開發(fā)系統(tǒng)來(lái)開發(fā)的。要用C+來(lái)開發(fā)Windows的高性能應(yīng)用程序,Visual C+是效率較高的首選工具之一。Visual C+作為一種程序設(shè)計(jì)語(yǔ)言,它同時(shí)也是一個(gè)集成開發(fā)工具,提供了軟件代碼自動(dòng)生成和可視化的資源編輯功能。本次設(shè)計(jì)采用Visual C+ 6.0作

10、為開發(fā)軟件。5.2.2 OpenGL 3D建模工具OpenGL能夠建立兩種三維幾何模型。一種是線框模型.一種是表面模型。在進(jìn)行建模時(shí)任意復(fù)雜的三維實(shí)體用一個(gè)個(gè)小的多邊形面來(lái)近似表示。OpenGL的輔助庫(kù)實(shí)際上也采用了這種方式來(lái)繪制圖形。建模的關(guān)健就是設(shè)法把復(fù)雜的三維實(shí)體分解為小多邊形。OpenGL通過(guò)以下格式來(lái)定義多邊形: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

11、.0, 0.0, 0.0);glEnd();OpenGL的建模實(shí)質(zhì)上就是根據(jù)所給定的頂點(diǎn)數(shù)據(jù)和面信息建立起各個(gè)多邊形面元,并將其存儲(chǔ)到顯示列表中,在需要時(shí)予以調(diào)用。目前較為常用的有3幾種建模方案。(1) 利用OpenGL的輔助庫(kù)函數(shù)。如前所述,輔助庫(kù)也提供了一些繪制簡(jiǎn)單實(shí)體的函數(shù),如果所要繪制的幾何形狀比較簡(jiǎn)單可直接采用,若對(duì)于復(fù)雜的幾何形體則顯得有些力不從心。輔助庫(kù)中繪制實(shí)體的函數(shù).命令格式也限制得很死。例如,繪制圓柱體的函數(shù)。只能為沿z向伸展,且以原點(diǎn)為圓心。繪蒯這些形體雖然可只執(zhí)行一條指令??墒潜仨毥?jīng)過(guò)平移和旋轉(zhuǎn)變換后才能滿足最終要求,使建模過(guò)程變得非常繁瑣,同時(shí)也影響了系統(tǒng)的效率。(2

12、) 利用現(xiàn)有的CAD系統(tǒng)來(lái)完成建模。商品化的CAD軟件(如AutoCAD、lAG lI、Solidworks等),具有很強(qiáng)的三維建模能力。能夠用交互的方式十分方便地建立起復(fù)雜的幾何模型,用它們來(lái)輔助完成建模工作是十分合適的。關(guān)鍵是如何從幾何造型文件中提取出幾何形體數(shù)據(jù),用于OpenGL繪圖。這就需要對(duì)圖形文件的格式有深入的了解。5.2.3 三維建模應(yīng)用中的考慮綜合以上三種方法,對(duì)于簡(jiǎn)單標(biāo)準(zhǔn)的實(shí)體,直接采用輔助庫(kù)函數(shù)建模;對(duì)簡(jiǎn)單的實(shí)體如多邊形的拉伸、回轉(zhuǎn)體等則采用自定義手工建模的方法。而對(duì)于比較復(fù)雜的曲面等,則利用AutoCAD等CAD軟件繪制所需圖形在OpenGL中讀取顯示的方法。在VC+6.

13、0開發(fā)環(huán)境下開發(fā)OpenGL應(yīng)用程序需解決OpenGL與VC+6.0窗口系統(tǒng)的接口問(wèn)題,主要是為OpenGL創(chuàng)建適當(dāng)?shù)膱D形操作描述表并設(shè)置正確的像素格式。此外就是要將OpenGL編程與VC+中的事件編程相結(jié)合。在VC+ 6.0事件處理程序中,利用OpenGL進(jìn)行圖形繪制,從而真正地將OpenGL融入到程序中,使之于程序的其他部分有機(jī)地結(jié)合成為一個(gè)整體。OpenGL的繪圖方式與Windows的一般的繪圖方式是不同的,其區(qū)別主要表現(xiàn)在以下3個(gè)方面:(l) Windows用GDI繪圖。GDI是Windows中二維圖形的繪圖接口,GDI繪圖內(nèi)容包括點(diǎn)、線、面以及一系列繪圖筆刷等。這些繪制內(nèi)容可以輸出到

14、屏幕內(nèi)存或打印機(jī)等設(shè)備。這種方式是在Windows的設(shè)備描述表(DevieeConiexts簡(jiǎn)稱為DC) 52中進(jìn)行的。所有的Windows圖形程序中都需要申請(qǐng)一個(gè)DC并在DC中完成各種繪圖操作。(2) OpenGL采用的是渲染描述表(RenderContext簡(jiǎn)稱RC)繪圖。實(shí)際上,在OpenGL應(yīng)用程序中RC與DC的工作方式是相同的。對(duì)于GDI,DC存儲(chǔ)了各種圖形繪圖操作的狀態(tài)變量;而Rc中存儲(chǔ)了OpenGL所需的渲染信息如象素格式等。(3) 象素格式。象素格式?jīng)Q定了子象素顏色的設(shè)置與DC和RC相關(guān)聯(lián)的輔助緩沖區(qū)象素格式的設(shè)置,其內(nèi)容是OpenGL調(diào)用與Windows繪制操作之間的中間轉(zhuǎn)換

15、設(shè)置。因此要在Windows環(huán)境下實(shí)現(xiàn)OpenGL函數(shù)功能,就必須先設(shè)置象素格式。OpenGL為windows提供了一系列處理象素格式的函數(shù),這些函數(shù)是:ehoosePixelFormat,用來(lái)比較傳過(guò)來(lái)的象素格式描述和OpenGL支持的象素格式,返回一個(gè)最佳匹配的象素格式索引:setPixelFormat,用格式索引來(lái)設(shè)置DC的象素格式,另外OpenGL窗口風(fēng)格必須包含wsCLIPCHILDREN和 wsCLIPSIBLINGS類型,否則設(shè)置失敗。在VC+6.0可以編寫只有一個(gè)窗口需要繪制的單文檔程序和多個(gè)窗口需要繪制的多文檔程序。在本文中只需要一個(gè)窗口來(lái)繪制機(jī)械手模型,所以采用單文檔模式。

16、基于單文檔的OpenGL圖形程序框架的基本步驟如下:(1) 設(shè)置編程環(huán)境為了能夠使用即OpenGL命令,首先需要在預(yù)編譯頭文件STDAFX.H中添加:#include gl/gl.h 、#include gl/glu.h、#include gl/glaux.h,這樣預(yù)編譯頭文件才能提供對(duì)OpenGL庫(kù)和用戶庫(kù)的支持34。還應(yīng)當(dāng)通過(guò)Project菜單下的 “Settings”選項(xiàng)在Link選項(xiàng)卡中鏈接以下庫(kù):OPENGL32.LIB、GLU32.LIB以及GLAUX.LIB。(2) 建立程序框架新建一個(gè)基于單文檔的工程,利用MFCClasswizard添加消息WMCREATE、 WMDESTRO

17、Y、WMSIZE和WMTIMER的響應(yīng)函數(shù)。按OpenGL的要求設(shè)置好窗口的屬性和風(fēng)格,并設(shè)置好顯示的象素格式。在PreCreateV石ndow函數(shù)中設(shè)置視窗口為具有 WSCLIPCHILDREN和wsCUPSIBLINGS風(fēng)格的窗口,以保證成功地設(shè)置像素格式。在setupPixelFormat函數(shù)中設(shè)置象素格式:PIXELFORMATDESCRIPTOR Pfd=sizeof(PixELFoRMATDEseRToR) /pfd結(jié)構(gòu)的大小1, /版本號(hào)PFD_DRAW_TO_WINDOW, /支持在窗口中繪圖PFD_SUPPORT_OPENGL, /支持OpenGLPFD_DOUBLEBUFF

18、ER, /雙緩存模式PFD_TYPE_RGBA, /RGBA顏色模式24, /24位顏色深度0, 0, 0, 0, 0, 0, /忽略顏色位0, /沒(méi)有非透明度緩存0, /忽略移位位0, /無(wú)累加緩存0, 0, 0, 0, /忽略累加位32, /32位深度緩存0, /無(wú)模板緩存0, /無(wú)輔助緩存PFD_MAIN_PLANE, /主層0, /保留0, 0, 0 /忽略層,可見性和損毀掩模;一般說(shuō)來(lái)上述象素結(jié)構(gòu),需要用戶改動(dòng)的地方較少,最有可能改動(dòng)的就是PFD_DOUBLEBUFFER,這個(gè)參數(shù)的意義是支持雙緩存機(jī)制,若要用OpenGL實(shí)現(xiàn)動(dòng)畫,則必須選擇此參數(shù)。在結(jié)構(gòu)pfd(PixelForma

19、tDescriptor)定義完之后,調(diào)用ChoosepixelFormat確定pfd結(jié)構(gòu)是否存在。若返回值為TRUE,則調(diào)用函數(shù)setPixelFormat為DC設(shè)置象素格式。(3) 獲得Windows設(shè)備描述表,然后為其設(shè)置象素格式,并與的渲染描述表聯(lián)系起來(lái)。在InitializeOPenoL中關(guān)聯(lián)DC和RC。M_pDC=pDC:獲取Windows設(shè)備描述表;SetUppixelFormat():為DC設(shè)置象素格式;M_hRC : wglCreateContext( m_pDC->GetsafeHde(),用設(shè)置好象素格式的DC來(lái)創(chuàng)建OpenGL的M_hRC:wglMakeCurren

20、t(M_pDC->GetsafeHdc(), M_hRC),該函數(shù)把RC和DC相連接起來(lái),并且通過(guò)該函數(shù),應(yīng)用程序可以隨時(shí)連接到一個(gè)不同的RC。另外,釋放RC也可通過(guò)該函數(shù)來(lái)完成。(4) 調(diào)用OpenGL命令進(jìn)行圖形繪制。在Renderscene函數(shù)中進(jìn)行圖形繪制和控制。SwapBuffers(m_pDC->GetSafeHdc():該函數(shù)是Win32API提供的一個(gè)用于OpenGL的函數(shù)。當(dāng)OpenGL使用雙緩存技術(shù)以支持動(dòng)畫顯示時(shí),需要使用該函數(shù)將在BackBuffer上繪制的場(chǎng)景交換到FrontBuffer中顯示,SwapBuffers()需要與圖形操作描述表相聯(lián)的設(shè)備描述表

21、句柄作為參數(shù)。在該函數(shù)之后可以編寫控制過(guò)程的函數(shù)。(5) 退出程序,在onDestroy函數(shù)中釋放DC和RC。wglMakeCurrent(hDC ,NULL):釋放繪制描述表;wglDeleteContext(hRC):刪除繪制描述表;ReleaseDC(hwin,hDC):釋放設(shè)備描述表53。完成上述操作后,基于OpenGL的開發(fā)平臺(tái)就創(chuàng)建好了。5.3 基于WIN Driver的USB驅(qū)動(dòng)開發(fā)在當(dāng)前較為流行的驅(qū)動(dòng)開發(fā)工具有:Windrver、WIN DDK、DRIVER STDIO等,其中Windriver 具有簡(jiǎn)潔高效、不涉及操作系統(tǒng)底層編程并且具有很好的兼容性的特點(diǎn)56。只要掌握一種編

22、程語(yǔ)言、熟悉相應(yīng)設(shè)備的工作機(jī)制,任何人都能在短時(shí)間內(nèi)利用Windriver 開發(fā)出令人滿意的設(shè)備驅(qū)動(dòng)。這是因?yàn)閃indrver 把所有繁雜的底層操作都封裝在一個(gè)內(nèi)核模塊中,而提供給用戶標(biāo)準(zhǔn)的Windriver API 函數(shù)來(lái)實(shí)現(xiàn)硬件訪問(wèn)。如此則將驅(qū)動(dòng)開發(fā)的繁雜工作變成了僅僅是調(diào)用硬件操作的標(biāo)準(zhǔn)API函數(shù),大大的簡(jiǎn)化了驅(qū)動(dòng)開發(fā)者的工作、加快了開發(fā)周期。而且它支持包括Windows系列、Windows CE、Linux和Solars等多種操作系統(tǒng)。同時(shí)可以利用多種集成開發(fā)環(huán)境和編程語(yǔ)言來(lái)實(shí)現(xiàn),支持的集成開發(fā)環(huán)境包括VB、VC、Delphi和C+ Builder等,編程語(yǔ)言包括C、Pascal 和B

23、asic 等57。在同類工具中,Windriver 在這方面具有明顯的優(yōu)勢(shì)。Windriver 開發(fā)設(shè)備驅(qū)動(dòng)的一般方法是:在配置并安裝好設(shè)備之后,用戶可以打開Windriver的驅(qū)動(dòng)向?qū)river Wizard,首先在向?qū)е信渲迷O(shè)備資源,包括I/O 地址范圍,如有必要還可以設(shè)置內(nèi)存、寄存器地址范圍以及用到的中斷口;然后用戶可以對(duì)設(shè)備進(jìn)行一些測(cè)試操作,檢驗(yàn)硬件的有效性;設(shè)置完成之后,用戶可以選擇一種特定的開發(fā)環(huán)境或編程語(yǔ)言,讓W(xué)indriver根據(jù)用戶的先前設(shè)置生成一個(gè)相應(yīng)開發(fā)環(huán)境下的設(shè)備驅(qū)動(dòng)樣本。用戶可以直接利用驅(qū)動(dòng)樣本中的標(biāo)準(zhǔn)Windriver API 函數(shù)來(lái)實(shí)現(xiàn)對(duì)硬件的操作和訪問(wèn)58。而

24、API 函數(shù)實(shí)際上要通過(guò)Windrivrer 的內(nèi)核模塊才能實(shí)現(xiàn)硬件訪問(wèn),其結(jié)構(gòu)框架如圖一所示。這屬于用戶模式的驅(qū)動(dòng)程序,一般情況下此種模式便已夠用。如果用戶模式驅(qū)動(dòng)的性能不能滿足實(shí)際需要,效率不夠高,用戶可以在此基礎(chǔ)上開發(fā)內(nèi)核模式的驅(qū)動(dòng)(Kernel PlugIn)。內(nèi)核模式59的驅(qū)動(dòng)性能一般要優(yōu)于用戶模式的驅(qū)動(dòng),只是其開發(fā)過(guò)程稍微復(fù)雜一點(diǎn)。具體如何利用Windriver開發(fā)USB驅(qū)動(dòng)包括以下步驟60:(1) 配置并安裝設(shè)備到 PC 機(jī);(2) 運(yùn)行 Driver Wizard,配置設(shè)備資源,并完成設(shè)備測(cè)試;(3) 選擇驅(qū)動(dòng)開發(fā)環(huán)境,利用 Driver Wizard 產(chǎn)生相應(yīng)的設(shè)備驅(qū)動(dòng)樣本;

25、(4) 在相應(yīng)的開發(fā)環(huán)境中,移植驅(qū)動(dòng)樣本中的 API 函數(shù)代碼,并編寫具體的功能代碼,建立用戶模式的驅(qū)動(dòng)程序;(1) 動(dòng)態(tài)加載 Windriver 的內(nèi)內(nèi)核模塊;(2) 打包發(fā)布驅(qū)動(dòng)程序。圖5-2 Windriver結(jié)構(gòu)框本系統(tǒng)使用Windriver配合VC+ 6.0開發(fā)USB D12的驅(qū)動(dòng),編譯發(fā)布后包含“My_USBDriver.inf”和“My_USBDriver.sys”兩個(gè)文件,其具體操作不再敘述。5.4 軟件系統(tǒng)的設(shè)計(jì)通過(guò)上述關(guān)鍵設(shè)計(jì)技術(shù),使用VC+設(shè)計(jì)了本控制系統(tǒng)軟件。軟件設(shè)計(jì)的主題思想是模塊化設(shè)計(jì),將各需要的模塊打包設(shè)計(jì),使用dll動(dòng)態(tài)程序鏈接庫(kù)的模式調(diào)用,其軟件結(jié)構(gòu)圖如圖5-

26、3所示。從圖中可以看出,本軟件一共使用了4條線程,分別為USB通訊線程、OPEGL三維模型線程、用于操作界面線程、推理線程,各個(gè)線程采用Windows消息隊(duì)列的形式實(shí)現(xiàn)數(shù)據(jù)的交互,USB線程負(fù)責(zé)采集數(shù)據(jù)后交與交與推理線程計(jì)算控制電壓角度,同時(shí)采集的位置信息交與OpenGL線程繪制三維圖形,在用戶更改參數(shù)后,用戶界面操作線程將數(shù)據(jù)交與推理機(jī)制或者USB通訊線程。使用Windows線程技術(shù),有效的防止了消息沖突和誤處理,提高了數(shù)據(jù)交互速度。圖5-3 軟件設(shè)計(jì)結(jié)構(gòu)框圖通過(guò)上述設(shè)計(jì)出系統(tǒng)軟件界面如圖5-4所示。圖5-4 系統(tǒng)軟件界面圖圖5-5 關(guān)鍵操作對(duì)話框該軟件的使用方式如下:(1) 連接六自由度機(jī)

27、器手臂電氣線纜;(2) 檢查各個(gè)連接部件是否完好,通電;(3) 插入U(xiǎn)SB六自由度控制系統(tǒng);(4) 打開軟件,此時(shí)軟件將自動(dòng)檢測(cè)是否有設(shè)備連接,如果設(shè)備連接良好,則在會(huì)在連接狀態(tài)上顯示“設(shè)備已連接”,如果設(shè)備斷線,則顯示“設(shè)備離線”,此時(shí)需要檢查線路后重新連接USB電纜,然后點(diǎn)擊“刷新設(shè)備連接”;(5) 點(diǎn)擊“操作控制區(qū)”中的“設(shè)備歸零位”,此時(shí)手臂的各個(gè)關(guān)節(jié)將運(yùn)動(dòng)起來(lái),自動(dòng)找到設(shè)備0點(diǎn);(6) 編寫控制程序a) 在“程序控制”界面中,選擇“新建”控制文件。此時(shí)將有文本框?qū)@示“000 START”、“空行”、“001 END”;b) 在基本運(yùn)動(dòng)中選取基本控制,如選取“S軸旋轉(zhuǎn)”,將出現(xiàn)圖5-

28、5對(duì)話框,旋轉(zhuǎn)“左旋”、“0-60”度、中速后確定,文本控制將顯示“000 START”、“001 L1B-L-ZS60”、“空行”、“002 END”;c) 如此選取其他軸的運(yùn)動(dòng),和運(yùn)動(dòng)之間穿插上述完成后執(zhí)行下面程序指令、延時(shí)執(zhí)行以下指令等,具體指令表見表5-1所示;(8) 點(diǎn)擊“運(yùn)行”、或“演示”按鈕。(9) 同時(shí)觀察三維窗口中或機(jī)械手臂的運(yùn)行狀態(tài)。表5-1 六自由度機(jī)器手臂偽碼指令表指令名稱偽碼1號(hào)關(guān)節(jié)旋轉(zhuǎn)L1B12號(hào)關(guān)節(jié)旋轉(zhuǎn)L2B3號(hào)關(guān)節(jié)旋轉(zhuǎn)L3B4號(hào)關(guān)節(jié)旋轉(zhuǎn)L4B5號(hào)關(guān)節(jié)旋轉(zhuǎn)L5B6號(hào)關(guān)節(jié)抓取L6B左旋或+旋L左旋或-旋R下筆旋轉(zhuǎn)LB當(dāng)前轉(zhuǎn)動(dòng)范圍NS原點(diǎn)轉(zhuǎn)動(dòng)范圍ZS爪抓取力度GN爪松

29、開RN開始START結(jié)束END延時(shí)T(n)2等待執(zhí)行W跳轉(zhuǎn)JP(n)21、左右指令編寫為在英文狀態(tài)下使用,半角;2、T(n)中n表示延時(shí)時(shí)間長(zhǎng)短,單位為ms;JP(n)中n表示跳轉(zhuǎn)指令編號(hào);3、表格中所有指令為專用語(yǔ)言,不具備其他任何語(yǔ)言的意義;5.5 機(jī)器手臂性能測(cè)試與分析5.5.1 性能測(cè)試通過(guò)對(duì)末端執(zhí)行器手爪握力、手臂伸展運(yùn)動(dòng)過(guò)程中帶負(fù)載、不帶負(fù)載的重復(fù)定位進(jìn)行了測(cè)試。在測(cè)試過(guò)程中,將都以水平面作為運(yùn)動(dòng)區(qū)域平面伸展范圍分析,測(cè)試如下進(jìn)行。(1) 末端執(zhí)行器-手爪握力測(cè)試通過(guò)對(duì)末端執(zhí)行器手爪受力標(biāo)定后,在手爪上安裝一個(gè)經(jīng)過(guò)標(biāo)定的認(rèn)證的20Kg測(cè)力傳感器,經(jīng)由軟件控制手爪的握力,每次握住十分鐘后張開爪,繼而增加握力,如此反復(fù)。握力每次增加1Kg,手臂姿態(tài)為垂直水平面。經(jīng)過(guò)測(cè)試后,其實(shí)驗(yàn)數(shù)據(jù)見表5-2。表5-2 手爪握力測(cè)試末端執(zhí)行器狀態(tài)間隔時(shí)間(分鐘)測(cè)量值握緊1Kg101Kg松開100 Kg握緊2Kg102Kg松開100 Kg握緊3Kg103Kg松開100 Kg握緊4Kg104Kg松開140 Kg握緊5Kg105Kg松開200 Kg握緊6Kg106Kg松開0.05Kg握緊7Kg107Kg松開0.2Kg1、不代表無(wú)限長(zhǎng)時(shí)間,為1個(gè)小時(shí)測(cè)試,此時(shí)還沒(méi)有

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論