四自由度機(jī)器人手臂工作空間分析_第1頁
四自由度機(jī)器人手臂工作空間分析_第2頁
四自由度機(jī)器人手臂工作空間分析_第3頁
四自由度機(jī)器人手臂工作空間分析_第4頁
四自由度機(jī)器人手臂工作空間分析_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、四自由度機(jī)器人手臂設(shè)計(jì)-工作空間分析050696135 張東紅 指導(dǎo)老師:劉鐵軍 講 師第1章 緒論11 機(jī)器人的概念我們一直試圖為自己的研究對象下一個(gè)明確的定義-就象其他所有的技術(shù)領(lǐng)域一樣-始終未能如愿。關(guān)于機(jī)器人的概念,真有點(diǎn)像盲人摸象,仁者見仁,智者見智。在此,摘錄一下有代表性的關(guān)于機(jī)器人的定義:牛津字典:Automation with human appearance or functioning like human科幻作家阿西莫夫(Asimov)提出的機(jī)器人三原則:第一,機(jī)器人不能傷害人類,也不能眼見人類受到傷害而袖手旁觀;第二,機(jī)器人必須絕對服從人類,除非人類的命令與第一條相違背

2、;第三,機(jī)器人必須保護(hù)自身不受傷害,除非這與上述兩條違背;日本著名學(xué)者加藤一郎提出的機(jī)器人三要件:1具有腦、手、腳等要素的個(gè)體;2具有非接觸傳感器(眼、耳等)和接觸傳感器;3具有用于平衡和定位的傳感器;世界標(biāo)準(zhǔn)化組織(ISO)機(jī)器人是一種能夠通過編程和自動控制來執(zhí)行諸如作業(yè)或移動等任務(wù)的機(jī)器。細(xì)細(xì)分析以上定義,可以看出,針對同一對象+所做的定義,其內(nèi)涵有很大的區(qū)別,有的注重其功能,有的則偏重與結(jié)構(gòu)。這也就難怪對同一國家關(guān)于機(jī)器人數(shù)量的統(tǒng)計(jì),不同資料的數(shù)據(jù)會很大差別。雖然現(xiàn)在還沒有一個(gè)嚴(yán)格而準(zhǔn)確的普遍被接受的機(jī)器人定義,但我們還是希望能對機(jī)器人做某些本質(zhì)性的把握。首先,機(jī)器人是機(jī)器而不是人,它是

3、人類制造的替代人類從事某種作業(yè)的工具,它只能是人的某些功能的延伸。在某些方面,機(jī)器人可具有超越人類的能力,但從本質(zhì)上說機(jī)器人永遠(yuǎn)不可能全面超越人類。其次,機(jī)器人在結(jié)構(gòu)上具有一定的仿生性。很多工業(yè)機(jī)器人模仿人的手臂或軀體結(jié)構(gòu),以求動作靈活。海洋機(jī)器人則在一定程度上模仿了魚類結(jié)構(gòu),以期待得到最小的水流阻力。第三,現(xiàn)代機(jī)器人是一種機(jī)電一體化的自動裝置,其典型特征之一是機(jī)器人受微機(jī)控制,具有(重復(fù))編程的功能。12 機(jī)器人的基本組成和分類機(jī)器人由機(jī)械部分、傳感部分、控制部分三大部分組成。這三大部分可分成驅(qū)動系統(tǒng)、機(jī)械結(jié)構(gòu)系統(tǒng)、感受系統(tǒng)、機(jī)器人環(huán)境交互系統(tǒng)、人機(jī)交互系統(tǒng)、控制系統(tǒng)六個(gè)子系統(tǒng)。1驅(qū)動系統(tǒng)要

4、使機(jī)器人運(yùn)行起來,需給各個(gè)關(guān)節(jié)即每個(gè)運(yùn)動自由度安置傳動裝置,這就是驅(qū)動系統(tǒng)。2.機(jī)械機(jī)構(gòu)系統(tǒng)機(jī)器人的機(jī)械結(jié)構(gòu)系統(tǒng)有機(jī)身手臂末端操作器三大件組成。每一大件都有若干個(gè)自由度,構(gòu)成一個(gè)多自由度的機(jī)械系統(tǒng)。3.感受系統(tǒng)它由內(nèi)部傳感器模塊和外部傳感器模塊組成,獲取內(nèi)部和外部環(huán)境狀態(tài)中有意義的信息。智能傳感器的使用提高了機(jī)器人的機(jī)動性適應(yīng)性和智能化的水準(zhǔn)。人類的感受系統(tǒng)對感知外部世界信息是極其靈巧的,然而,對于一些特殊的信息,傳感器比人類的感受系統(tǒng)更有效。4.機(jī)器人-環(huán)境交互系統(tǒng)機(jī)器人-環(huán)境交互系統(tǒng)是實(shí)現(xiàn)機(jī)器人與外部環(huán)境中的設(shè)備相互聯(lián)系和協(xié)調(diào)系統(tǒng)。機(jī)器人與外部設(shè)備集成為一個(gè)功能單元。如加工制造單元焊接單元

5、裝配單元等。當(dāng)然,也可以是多臺機(jī)器人多臺機(jī)床或設(shè)備,多個(gè)零件存儲裝置等集成為一個(gè)去執(zhí)行復(fù)雜任務(wù)的功能單元。5.人-機(jī)交互系統(tǒng)人機(jī)交互系統(tǒng)是人與機(jī)器人進(jìn)行聯(lián)系和參與機(jī)器人控制的裝置。6控制系統(tǒng)的任務(wù)是根據(jù)機(jī)器人的作業(yè)指令程序以及從傳感器反饋回來的信號,支配機(jī)器人的執(zhí)行機(jī)構(gòu)去完成規(guī)定的運(yùn)動和功能。如果機(jī)器人不具備信息反饋特征,則為開環(huán)控制系統(tǒng);具備信息反饋特征,則為閉環(huán)控制系統(tǒng)。根據(jù)控制原理可分為程序控制系統(tǒng),適應(yīng)性控制系統(tǒng)和人工智能控制系統(tǒng)。根據(jù)控制運(yùn)動的形式可分為點(diǎn)位控制和連續(xù)軌跡控制。按不同的分類方式,機(jī)器人可以分為不同的類型。下面給出幾種常用的分類方法:1按技術(shù)特征來劃分,機(jī)器人可以分為第

6、一代機(jī)器人、第二代機(jī)器人和第三代機(jī)器人。2按控制類型來劃分,可分為以下幾種:(1)伺服控制機(jī)器人 (2)非伺服控制機(jī)器人 (3)PTP控制機(jī)器人 (4)CP控制機(jī)器人 3按機(jī)械結(jié)構(gòu)來劃分,可以分為直角坐標(biāo)型機(jī)器人、極坐標(biāo)型機(jī)器人、關(guān)節(jié)型機(jī)器人、SCARA型機(jī)器人以及移動機(jī)器人。4按用途來劃分,可分為工業(yè)機(jī)器人、工業(yè)機(jī)器人、醫(yī)療機(jī)器人、海洋機(jī)器人、軍用機(jī)器人、太空機(jī)器人、管道機(jī)器人、娛樂機(jī)器人等等。13 機(jī)器人技術(shù)的應(yīng)用研究機(jī)器人的最初目的是為了幫助人們擺脫繁重勞動和簡單的重復(fù)勞動,以及替代人到有輻射等危險(xiǎn)環(huán)境中進(jìn)行作業(yè)。因此機(jī)器人最早在汽車制造業(yè)和核工業(yè)領(lǐng)域得以應(yīng)用機(jī)器人技術(shù)的不斷發(fā)展,工業(yè)領(lǐng)

7、域的焊接、噴漆、搬運(yùn)、裝配等場合,已經(jīng)開始大量使用機(jī)器人。第2章 工作空間的分析21 引言機(jī)器人的工作空間就是機(jī)器人末端構(gòu)件上的參考點(diǎn)所能達(dá)到的點(diǎn)的集合。機(jī)器人工作空間的大小代表了機(jī)器人的活動范圍,它是衡量機(jī)器人工作能力的一個(gè)重要運(yùn)動學(xué)指標(biāo)。在機(jī)器人的設(shè)計(jì)、控制及應(yīng)用過程中,工作空間都是一個(gè)需要考慮的重要問題。例如根據(jù)工作空間的要求來確定機(jī)器人的結(jié)構(gòu)尺寸,冗余度機(jī)器人回避障礙物的動作規(guī)劃等等,都要考慮機(jī)器人的可達(dá)空間。此外也可用工作空間來衡量一個(gè)設(shè)計(jì)中的機(jī)器人機(jī)構(gòu)的合理性。求解機(jī)器人的工作空間可以使用解析法,圖解法或者數(shù)值法,解析法是通過多次包絡(luò)來確定工作空間邊界,雖然可以把工作空間的邊界用方

8、程表示出來,但從工程角度上來說,其直觀性不強(qiáng),十分煩瑣,一般只適用于關(guān)節(jié)數(shù)少與3的。圖解法也可以用來求解機(jī)器人的工作空間邊界,得到的往往是工作空間的各類剖截面或剖解線。這種方法直觀性強(qiáng),但是也受到自由度數(shù)目的限制,當(dāng)關(guān)節(jié)數(shù)較多時(shí)必須進(jìn)行分組處理。機(jī)器人工作空間計(jì)算的數(shù)值方法是以極值理論和優(yōu)化方法為基礎(chǔ)的首先計(jì)算機(jī)器人工作空間邊界曲面上的特征點(diǎn),用這些點(diǎn)構(gòu)成的線表示機(jī)器人的邊界曲線,用這些邊界曲線構(gòu)成的面表示機(jī)器人的邊界曲面。隨著計(jì)算機(jī)的廣泛應(yīng)用,對機(jī)械手工作空間的分析越來越傾向與數(shù)值方法。這是因?yàn)閿?shù)值方法可以利用計(jì)算機(jī)的高速數(shù)值運(yùn)算能力和圖形顯示功能,方便快捷的得到機(jī)器人工作空間的形狀。本文采

9、用數(shù)值法,通過對運(yùn)動學(xué)方程來求解機(jī)器人工作空間。22 工作空間的參數(shù)方程機(jī)器人的運(yùn)動學(xué)方程為: (1)由它的運(yùn)動學(xué)方程可以得到工作空間的參數(shù)方程。式中前三列是末端坐標(biāo)軸相對基坐標(biāo)的方向余弦,第四列表示末端坐標(biāo)系的原點(diǎn)相對于基坐標(biāo)系的位置向量。當(dāng)給定了機(jī)器人的結(jié)構(gòu)參數(shù),工作空間就由廣義坐標(biāo)確定。由于實(shí)際結(jié)構(gòu)和驅(qū)動裝置的限制,廣義坐標(biāo)不能任意取值,有一定的范圍,即: (2)如果選末端點(diǎn)P為參考點(diǎn),設(shè)他在末端坐標(biāo)系中的齊次坐標(biāo)為,則: (3)將它展開,即: (4)可以把P點(diǎn)的集合定義為機(jī)器人的工作空間,即: (5)23 利用運(yùn)動學(xué)方程求解利用運(yùn)動學(xué)方程求解其末端參考點(diǎn)相對于基坐標(biāo)的坐標(biāo)系,下面為一個(gè)

10、典型的運(yùn)動學(xué)方程求解圓柱坐標(biāo)臂。圓柱坐標(biāo)臂的結(jié)構(gòu)如圖2.1,該機(jī)械臂有移動轉(zhuǎn)動移動三個(gè)連桿,它的工作范圍是一個(gè)空心圓柱建立DH坐標(biāo)系,如圖21所示,關(guān)節(jié)變量為,連桿的坐標(biāo)變換矩陣為: (6) (7) (8) (9) (10)運(yùn)動學(xué)方程為: (11)圖2.1 圓柱坐標(biāo)系結(jié)構(gòu)示意圖本文設(shè)計(jì)的是四自由度的機(jī)器人手臂,根據(jù)以上簡單的實(shí)例可以求出運(yùn)動學(xué)方程:圖2.2 四自由度機(jī)器人手臂關(guān)節(jié)nnandnn關(guān)節(jié)變量n190°001-90°+90°20°a2 02-180°0390°a303-0180°40°0d44090

11、6;圖2.2中,a2=402mm;a3=42mm,d4的值為手爪末端夾鉗中心到關(guān)節(jié)4坐標(biāo)原點(diǎn)的長度,值為600mm。0T4= A1 A2 A3 A4= 0T4=得工作空間運(yùn)動學(xué)方程:第3章 編程軟件介紹31 程序語言介紹Visual C+60是Microsoft Visual Studio 6.0家族成員之一,是一個(gè)功能極為強(qiáng)大的可視化軟件開發(fā)工具。與其他的可視化編程環(huán)境(如Visual Basic)一樣,Visual C+60集程序的代碼編輯、編譯、連接、調(diào)試等功能于一體,給編程人員提供了一個(gè)完整、全面而又方便的開發(fā)環(huán)境,并提供了許多有效的輔助開發(fā)工具。Visual C+基于CC+,所以它擁

12、有兩種編程方式,一種是傳統(tǒng)的基于Windows API的C編程方式,雖然其代碼效率較高,但開發(fā)難度與開發(fā)工作量也隨著正增高,目前使用這種編程方式的用戶已經(jīng)很少;另一種是基于MFC的C+編程方式,雖然其代碼運(yùn)行效率相對很低,但開發(fā)難度小、開發(fā)工作量小、源代碼效率高,已經(jīng)成為Visual C+開發(fā)Windows應(yīng)用程序的主流。32 基于VC+ 6.0的OpenGL簡介 隨著計(jì)算機(jī)多媒體技術(shù)、可視化技術(shù)及圖形學(xué)技術(shù)的發(fā)展,我們可以使用計(jì)算機(jī)來精確地再現(xiàn)現(xiàn)實(shí)世界中的絢麗多彩的三維物體,并充分發(fā)揮自身的創(chuàng)造性思維,通過人機(jī)交互來模擬、改造現(xiàn)實(shí)世界,這就是目前最為時(shí)髦的虛擬現(xiàn)實(shí)技術(shù)。通過這種技術(shù),建筑工程

13、師可以直接設(shè)計(jì)出美觀的樓房模型;軍事指揮員可以模擬戰(zhàn)場進(jìn)行軍事推演,網(wǎng)民可以足不出戶游覽故宮博物館等名勝古跡等。而虛擬現(xiàn)實(shí)技術(shù)最重要的一部分內(nèi)容就是三維圖形編程。當(dāng)前,三維圖形編程工具中最為突出的是SGI公司的OpenGL(Open Graphics Language,開放式的圖形語言),它已經(jīng)成為一個(gè)工業(yè)標(biāo)準(zhǔn)的計(jì)算機(jī)三維圖形軟件開發(fā)接口,并廣泛應(yīng)用于游戲開發(fā)、建筑、產(chǎn)品設(shè)計(jì)、醫(yī)學(xué)、地球科學(xué)、流體力學(xué)等領(lǐng)域。值得一提的是,雖然微軟有自己的三維編程開發(fā)工具DirectX,但它也提供OpenGL圖形標(biāo)準(zhǔn),因此,OpenGL可以在微機(jī)中廣泛應(yīng)用。OpenGL是用于開發(fā)簡捷的交互式二維和三維圖形應(yīng)用程

14、序的最佳環(huán)境,任何高性能的圖形應(yīng)用程序,從3D動畫、CAD輔助設(shè)計(jì)到可視化訪真,都可以利用OpenGL高質(zhì)量、高性能的特點(diǎn)。OpenGL自1992年出現(xiàn)以來,逐漸發(fā)展完善,已成為一個(gè)唯一開放的,獨(dú)立于應(yīng)用平臺的圖形標(biāo)準(zhǔn),一個(gè)典型的OpenGL應(yīng)用程序可以在任何平臺上運(yùn)行-只需要使用目標(biāo)系統(tǒng)的OpenGL庫重新編譯一下。OpenGL非常接近硬件,是一個(gè)圖形與硬件的接口,包括了100多個(gè)圖形函數(shù)用來建立三維模型和進(jìn)行三維實(shí)時(shí)交互。OpenGL強(qiáng)有力的圖形函數(shù)不要求開發(fā)人員把三維物體模型的數(shù)據(jù)寫成固定的數(shù)據(jù)格式,也不要求開發(fā)人員編寫矩陣變換、外部設(shè)備訪問等函數(shù),大大地簡化了編寫三維圖形的程序。例如:

15、1 OpenGL提供一系列的三維圖形單元(圖元)供開發(fā)者調(diào)用。2 OpenGL提供一系列的圖形變換函數(shù)。 3 OpenGL提供一系列的外部設(shè)備訪問函數(shù),使開發(fā)者可以方便地訪問鼠標(biāo)、鍵盤、空間球、數(shù)據(jù)手套等外部設(shè)備。由于微軟在Windows中包含了OpenGL,所以O(shè)penGL可以與Visual C+緊密接合,簡單快捷地實(shí)現(xiàn)有關(guān)計(jì)算和圖形算法,并保證算法的正確性和可靠性。簡單地說,OpenGL具有建模、變換、色彩處理、光線處理、紋理影射、圖像處理、動畫及物體運(yùn)動模糊等功能:第4章 OpenGL的編程環(huán)境4.1 OpenGL的工作流程圖4.1 OpenGL 的工作流程如上圖所示,幾何頂點(diǎn)數(shù)據(jù)包括模

16、型的頂點(diǎn)集、線集、多邊形集,這些數(shù)據(jù)經(jīng)過流程圖的上部,包括運(yùn)算器、逐個(gè)頂點(diǎn)操作等;圖像數(shù)據(jù)包括象素集、影像集、位圖集等,圖像象素?cái)?shù)據(jù)的處理方式與幾何頂點(diǎn)數(shù)據(jù)的處理方式是不同的,但它們都經(jīng)過光柵化、逐個(gè)片元(Fragment)處理直至把最后的光柵數(shù)據(jù)寫入幀緩沖器。在OpenGL中的所有數(shù)據(jù)包括幾何頂點(diǎn)數(shù)據(jù)和象素?cái)?shù)據(jù)都可以被存儲在顯示列表中或者立即可以得到處理。OpenGL中,顯示列表技術(shù)是一項(xiàng)重要的技術(shù)。OpenGL要求把所有的幾何圖形單元都用頂點(diǎn)來描述,這樣運(yùn)算器和逐個(gè)頂點(diǎn)計(jì)算操作都可以針對每個(gè)頂點(diǎn)進(jìn)行計(jì)算和操作,然后進(jìn)行光柵化形成圖形碎片;對于象素?cái)?shù)據(jù),象素操作結(jié)果被存儲在紋理組裝用的內(nèi)存中

17、,再象幾何頂點(diǎn)操作一樣光柵化形成圖形片元。整個(gè)流程操作的最后,圖形片元都要進(jìn)行一系列的逐個(gè)片元操作,這樣最后的象素值送入幀緩沖器實(shí)現(xiàn)圖形的顯示。根據(jù)這個(gè)流程,我們可以歸納出在OpenGL中進(jìn)行主要的圖形操作直至在計(jì)算機(jī)屏幕上渲染繪制出三維圖形景觀的基本步驟:1)根據(jù)基本圖形單元建立景物模型,并且對所建立的模型進(jìn)行數(shù)學(xué)描述(OpenGL中把:點(diǎn)、線、多邊形、圖像和位圖都作為基本圖形單元)。2)把景物模型放在三維空間中的合適的位置,并且設(shè)置視點(diǎn)(viewpoint)以觀察所感興趣的景觀。3)計(jì)算模型中所有物體的色彩,其中的色彩根據(jù)應(yīng)用要求來確定,同時(shí)確定光照條件、紋理粘貼方式等。4)把景物模型的數(shù)

18、學(xué)描述及其色彩信息轉(zhuǎn)換至計(jì)算機(jī)屏幕上的象素,這個(gè)過程也就是光柵化(rasterization)。在這些步驟的執(zhí)行過程中,OpenGL可能執(zhí)行其他的一些操作,例如自動消隱處理等。另外,景物光柵化之后被送入幀緩沖器之前還可以根據(jù)需要對像素?cái)?shù)據(jù)進(jìn)行操作。42 OpenGL程序的框架設(shè)計(jì)OpenGL程序框架的創(chuàng)建包括了四個(gè)部分:創(chuàng)建C+ Builder 60工程; 定義C+ Builder 60和OpenGL的接口和變量,通過設(shè)計(jì)C+ Builder 60和OpenGL的接口,將OpenGL指令嵌入到c+ Builder 60中, 做到用戶用C+ Builder 60發(fā)出指令,OpenGL響應(yīng)繪圖;初

19、始化OpenGL環(huán)境;定義創(chuàng)建和繪制物體函數(shù)。431 設(shè)置C+ Builder 60環(huán)境啟動C+ Builder 60后,默認(rèn)會生成一個(gè)名稱為project1的工程,包含了一個(gè)名稱為Form1的窗體,各文件都采用默認(rèn)生成的文件名。在生成默認(rèn)工程和窗體后,在Form1的 “Object Inspector”中選擇”Events “添加FormCreate(、FormResize(、FormC1ose(和FormKeyDown(四個(gè)事件函數(shù)。FormCreate(事件函數(shù)是窗口建立事件的處理函數(shù),在事件函數(shù)中主要實(shí)現(xiàn)OpenGL的初始化工作。FormResize(事件函數(shù)重新定位窗口,當(dāng)窗口發(fā)生變

20、化時(shí)處理此事件函數(shù)。函數(shù)完整代碼如下:glViewport(0,0,width,height;glMatrixMode(GL_ PROJECTION;glLosdentity(;gluPerspective (450, (GLfloatwidth height,3.0,7.0 ;glMatrixMode(GL_MODELVIEW;FormClose(響應(yīng)窗口關(guān)閉事件,當(dāng)窗口關(guān)閉時(shí),釋放系統(tǒng)資源。事件代碼如下:if (hRC wgIDeleteContext(hRC;if(hDCReleaseDC(Handle,hDC:FormKeyDown(響應(yīng)鍵盤輸入事件,提供一個(gè)鍵盤輸入響應(yīng)接口。事件代碼

21、如下:if(Key=VK_ ESCAPEClose(;if(Key=VK_F4fullsereen=lfullscreen;ChangeResolution(DisplayX,DisplayY,fullscreen;當(dāng)按下鍵盤的Esc鍵時(shí)程序結(jié)束,按F4鍵時(shí),在全屏模式和窗口模式之間切換。函數(shù)ChangeResolution(用Windows自帶的API函數(shù)來實(shí)現(xiàn),函數(shù)代碼如下:void _fastcall TForml: ChangeResolution (GLsizei x,GLsizei y,bool fullscreenflagif(fullscreenflagSetWindowLon

22、g(Handle,GWL_ STYLE,WS_P0PUP;SetWindowPos(Handle,HWND_TOPMOST,0,0,x,y,SWP_ SHOWWINDOW ;ShowCursor(false;else SetWindowLong(Handle,GWL_STYLE,WS_TILEDWINDOW:SetWindowPos (Handle,HWND_TOP,0,0,x,Y,SWP_ SHOWW-INDOW;ShowCursor(ture;定義接口和變量OpenGL的庫函數(shù)被封裝在Openg132刪動態(tài)鏈接庫中,要調(diào)用OpenGL只需要在C+ Builder程序的頭文件中聲明即可。在u

23、nit1h代碼中加入如下聲明:#include #include #include 這里主要設(shè)置在頭文件unit1h的類TForm1中聲明private變量:HGLRC hRC;HDC hDC;bool fullscreen;GLsizei DisplayX,DisplayY;設(shè)置好工程和OpenGL接口及聲明OpenGL所需的變量后,就可以進(jìn)行初始化OpenGL的工作了。OpenGL環(huán)境 在Windows XP操作系統(tǒng)中采用C+ Builder 60初始化OpenGL程序的步驟包括:創(chuàng)建設(shè)備描述表DC(Device Context、設(shè)置像素格式、創(chuàng)建著色描述表RC (Rendering Co

24、ntext、設(shè)置顯示模式和窗口位置大小等。以下代碼都在FormCreate(事件中實(shí)現(xiàn)。首先創(chuàng)建DC:任何一個(gè)Windows程序都必須處理設(shè)備描述表DC,DC告訴Windows怎樣在一個(gè)窗口中顯示圖形信息。和其它Windows程序一樣。OpenGL應(yīng)用程序也必須應(yīng)用DC。DC包含了與圖形設(shè)備接口GDI (Graphical Device Interface有關(guān)的內(nèi)容。在FormCmate( 中用語句hDC =GetDc(Handle:可以獲得設(shè)備描述表。其次設(shè)置像素格式:在FormCreate ( 中添加下面代碼。找到對應(yīng)與此前選定的像素格式。如果找不到對應(yīng)的像素格式,則關(guān)閉窗口,退出程序。i

25、f(lSetPixelFormatDescriptor(hDC Close(;函數(shù) SetPixelFormatDescriptor(hDC的作用就是設(shè)置OpenGL的像素格式,下面是該函數(shù)代碼:int pixelformat:PIXELFORMATDESCRIPTOR pfd=sized(PIXELFORMATDESCRIPTOR,1,PFD_DRAW_ TO_ WINDOWIPFD_SUPPORT_OPENGL IPFD_ DOUBLEBUFFER,PFD_TYPE_RGBA,32,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,PFD_MAIN_PLANE,0,0,0,

26、0,if(pixelformat= ChoosePixelFormat(hDC,pfd =0MessageBox (NULL,“ChoosePixelFormatfailed” ,“Error”,MB_OK;return false;if (SetPixdFonnat (hDC, pixelformat,pfd =falseMessageBox(NULL, “SetPixelFormat failed ”,"Error",MB_ OK;Return false;return true;再次創(chuàng)建RC:OpenGL應(yīng)用程序除了包含普通Windows程序所必須的DC外,還必須使用

27、著色描述表RC,RC包含了與OpenGL系統(tǒng)發(fā)生聯(lián)系的重要信息,應(yīng)用程序應(yīng)根據(jù)指定的DC創(chuàng)建一個(gè)RC,一個(gè)OpenGL應(yīng)用程序必須擁有一個(gè)RC。hRC =wglCreateContext(hDC;wglMakeCurrent(hDC,hRC;最后初始化操作:初始化代碼通過函數(shù)InitGL(實(shí)現(xiàn)。(1 設(shè)置初始OpenGL窗口大小,并確定是否使用全屏模式:DisplayX=640;DisplayY=480;fullscreen=false;ChangeResolution(DisphyX,DisplayY,fullsemen;(2圖形背景色在計(jì)算機(jī)上通常指窗體的背景顏色,這里將窗體背景設(shè)置為黑色

28、;glClearColor(00f,00f,00f,00f:glclear(GL_COLOR_BUFFER_BIT;(3設(shè)置深度緩存三維圖形繪制時(shí),一個(gè)物體的自身遮擋部分或被其他不透明物體的遮擋部分是隨著觀測角度、方位等參數(shù)的變化而變化的,這時(shí)候要進(jìn)行消隱處理。消隱需要啟動深度測試和設(shè)置深度緩存:glClearDepth(1.0f;glEnable(GL_DEFrH_TEST;glClear(GL_DEFTH_BUFFEB_BIT;(4透視投影使得遠(yuǎn)離視點(diǎn)(觀察點(diǎn)的物體看起來小,而離視點(diǎn)近的物體看起來大,其視景體為一個(gè)臺錐。在調(diào)用投影變換函數(shù)前,首先要選擇操作透視矩陣和初始化透視矩陣:glMa

29、trixMode(GL_PROJECTION;glLoadldentity(;然后設(shè)置透視模式并選擇模型觀察矩陣:gluPerspective (450, (GLfloatwidth ,height,30,70 ;glMstrixMode(GL_MODELVIEW;(5光照處理是OpenGL中繪制三維圖形的一個(gè)重要步驟。目的是實(shí)現(xiàn)富有真實(shí)感的圖形。光照處理主要步驟是;創(chuàng)建光源、選擇光照模型、定義物體材質(zhì)屬性、并創(chuàng)建和定位。最后激活光源。程序中光源設(shè)置由函數(shù):SetupLighting(實(shí)現(xiàn),代碼如下:GLfloat MaterialAmbient= 05,05,05,10;GLfloat Ma

30、terialDiffuse = 10,10,10,10;GLfloat MateriaISpecular = 10,10,1.0,10;GLfloat MaterialShininess = 500;GLfloat AmbientLightPosition = 05,10,10,00;GLfloat LightAmbient=05,05,05,10;glMaterialfv GL_FRONT, GL_AMBIENT,MaterialAmbient;glMaterialfvGL_ FRONT, GL_DIFFUSE,MaterialSpecular;glMaterlalfvGL_FRONT, G

31、L_SPECULAR,MaterialSpecalar;glMaterialfvGL_FRONT, GL_SHININESS,MatefialShininess;glLightfvGL_LIGHT0,GL_POSITION,AmbientLightPosition;glLightModelfvGL_ LIGHT_MODEIL_AMBIENT,LightAmbient;glEnableGL_LIGHTING;glEnableGLLIGHTO;glEnableGL_COLOR_MATERIAL;glColorMaterial GL_FRONT, GL_AMBIENT_AND_DIFFUSE;glS

32、hadeModelGL_ SMOOTH;第5章 機(jī)器人工作空間的仿真51 可視化仿真系統(tǒng)設(shè)計(jì)仿真是利用數(shù)學(xué)模型在計(jì)算機(jī)上對系統(tǒng)進(jìn)行實(shí)驗(yàn)研究的過程??梢暬抡鎰t是數(shù)學(xué)模擬和科學(xué)計(jì)算可視化或其它可視化技術(shù)相結(jié)合的產(chǎn)物,它包括兩方面內(nèi)容: 將傳統(tǒng)數(shù)字仿真計(jì)算的結(jié)果轉(zhuǎn)換為圖形和圖像形式;仿真交互界面可視化,即具有可視交互和動畫展示能力,要求能夠?qū)崟r(shí)跟蹤顯示仿真計(jì)算結(jié)果。因此,設(shè)計(jì)了一個(gè)可視化仿真系統(tǒng)結(jié)構(gòu),如圖5.1所示。圖5.1 可視化仿真系統(tǒng)結(jié)構(gòu)其中數(shù)學(xué)模型著重反映系統(tǒng)的特征規(guī)律,而形態(tài)模型著重反映系統(tǒng)的物理構(gòu)成,它們構(gòu)成可視化仿真的基礎(chǔ)??梢暬抡孳浖暮诵氖菙?shù)字模擬,同時(shí)要具備可視化交互和可視化

33、過程展現(xiàn)的特征,還必須有實(shí)時(shí)性的特點(diǎn)。據(jù)此,規(guī)劃如圖5.2 所示軟件功能結(jié)構(gòu)。各模塊有較強(qiáng)的獨(dú)立性,相互之間以數(shù)據(jù)信息進(jìn)行連接。對于一個(gè)確定的系統(tǒng)而言,形態(tài)模型中除屬性部分不確定外,其它部分相對穩(wěn)定;而數(shù)學(xué)模型的變化也僅僅是激勵(lì)參數(shù)的改變,因此在模型交互部分將支持參數(shù)的交互編輯;數(shù)字模擬是針對系統(tǒng)數(shù)學(xué)模型的數(shù)值求解過程,使用現(xiàn)有的成熟算法,保證結(jié)果的可靠性;圖形仿真部分一般包括,以三維圖形表現(xiàn)的系統(tǒng)過程和以二維曲線形式表現(xiàn)的系統(tǒng)性能,它們是可視化仿真的重要特征。圖5.2 可視化仿真軟件結(jié)構(gòu)框圖52 采用OpenGL建立機(jī)器人三維仿真在Windows下用GDI作圖通過設(shè)備上下文(DC調(diào)用相應(yīng)的函

34、數(shù) ;用OpenGL作圖是類似,OpenGL函數(shù)是通過渲染上下文(RC完成三維圖形的繪制。Windows下的窗口和設(shè)備上下文支持位圖格式屬性,與RC在位圖結(jié)構(gòu)上一致。只要在創(chuàng)建RC時(shí)與一個(gè)Dc建立聯(lián)系,OpenGL的函數(shù)就可通過RC對應(yīng)的DC畫到相應(yīng)的顯示設(shè)備上。經(jīng)過上面的分析,用VC+建立基于OpenGL的機(jī)器人仿真模型步驟如下:(1)首先把文件GL.H、GLAUX.H、GLU.H、GLEXT.H、GLUT.H、WGLEXT.H復(fù)制到VC+6.0的安裝目錄下的VC98>Include下,把GLAUX.LIB、GLU32。LIB、GLUT32。LIB、OPENGL32。LIB、glu.l

35、ib、glut.lib、opengl.lib復(fù)制到安裝目錄下的VC98>Lib下。(2)執(zhí)行“File” / “New”菜單命令,在彈出的“New”對話框中找到左側(cè)的項(xiàng)目類型列表,然后在列表中選擇“Win32 Application”列表項(xiàng),在右側(cè)的“ Location”和“Project Name” 編輯框中分別輸入路徑和項(xiàng)目名稱,單擊“OK”按鍵,進(jìn)入“Win32 Application-step 1 of 1”對話框,選擇“An empty project”項(xiàng)。(3)單擊“Finish”按鈕,然后單擊“OK”按鈕完成項(xiàng)目建立。(4(5)執(zhí)行“File” / “New”菜單命令,在彈

36、出的“New”對話框中找到左側(cè)的項(xiàng)目類型列表,然后在列表中選擇“C+ Source File” 列表項(xiàng),在右側(cè)的“File” 編輯框中輸入項(xiàng)目名稱, 單擊“OK”按鍵。即可開始編程。(6)初始化OpenGL編程環(huán)境,具體方法可參見第四章。設(shè)置整型變量,i,j,k,符點(diǎn)型變量px, py, pz.。宏定義PI,對圖像部分進(jìn)行編程。(7)完成程序后選擇Build>Rebuild All檢測程序,如果有錯(cuò)誤在下面的對話框有錯(cuò)誤提示,可按提示更正。然后選擇Build>Start Debug>Go執(zhí)行程序。5.3 仿真結(jié)果在本課題中,通過采用VC+6.0與OpenGL來建立整個(gè)仿真環(huán)境

37、的,建立三維模型來體現(xiàn)在實(shí)際仿真環(huán)境下三維模型的逼真性,在整個(gè)仿真過程中使用機(jī)器人各個(gè)關(guān)節(jié)的旋轉(zhuǎn)角度求出各手臂相對于基本坐標(biāo)系的空間位置,再根據(jù)這些位置信息對各手臂所處的位置進(jìn)行仿真,在仿真系統(tǒng)中可通過預(yù)先設(shè)定各關(guān)節(jié)的相關(guān)信息,如各手臂擺動角或旋轉(zhuǎn)角,來查看各機(jī)械臂的動作情況。顯示工作空間的仿真圖形。例如:二自由度機(jī)器人手臂(如圖5.3)的工作空間圖形為圖5.4所示: 圖 5。3 二自由度機(jī)器人手臂 圖 5.4 二自由度機(jī)器人手臂工作空間仿真球坐標(biāo)臂(如圖5.5)的工作空間仿真圖為圖5.6所示: 圖 5.5 球坐標(biāo)臂示意圖 圖 5.6 球坐標(biāo)臂工作空間仿真圖本設(shè)計(jì)的四自由度機(jī)器人手臂工作空間仿

38、真圖為圖5.7所示:圖 5.7 四自由度機(jī)器人手臂工作空間仿真5.4 程序相關(guān)代碼繪制坐標(biāo)軸,粉色為X軸,黃色為Y軸,藍(lán)色為Z軸。glBegin(GL_LINES;glColor3f(1.0,1.0,0.0; glVertex3f(0.0f,0.0f,0.0f; glVertex3f(0.0f,0.4f,0.0f;glColor3f(1.0,0.0,1.0; glVertex3f(0.0f,0.0f,0.0f; glVertex3f(0.4f,0.0f,0.0f;glColor3f(0.0,1.0,1.0; glVertex3f(0.0f,0.0f,0.0f; glVertex3f(0.0f,

39、0.0f,0.4f;glEnd(;繪制空間圖形,可根據(jù)四自由度機(jī)器人手臂的運(yùn)動學(xué)方程編制程序,實(shí)現(xiàn)機(jī)器人手臂的三維仿真圖形。angle1=(-90+k*PI;angle2=(-180.0+j+i*PI;angle3=(-180+j*PI;px=(600.0*cos(angle1*sin(angle2+42.0*cos(angle1*cos(angle2+402.0*cos(angle1*cos(angle2/1000;py=(600*sin(angle1*sin(angle2+42*sin(angle3*cos(angle2+402*sin(angle1*cos(angle3/1000;pz=

40、(-600*cos(angle2+402*sin(angle3+42*sin(angle2/1000;glVertex3f(px,py,pz; 定義繞某一軸的旋轉(zhuǎn)用函數(shù)glRotatef(,其中括號內(nèi)第一個(gè)逗號前表示繞軸旋轉(zhuǎn)角度,第二個(gè)逗號前把表示繞X軸轉(zhuǎn),第三個(gè)逗號前表示繞Y軸轉(zhuǎn),第三個(gè)逗號后表示繞Z軸轉(zhuǎn)。在那個(gè)軸的位子的數(shù)值如果為1.0則繞那個(gè)軸旋轉(zhuǎn)。如:glRotatef(90,0.0,1.0,0.0;則表示繞Y軸旋轉(zhuǎn)90度。定義函數(shù)ButtonDown()為按鍵,可分為左鍵為OnLButtonDown()函數(shù),中鍵為OnMButtonDown()函數(shù),右鍵為OnRButtonDown(

41、)函數(shù),設(shè)置點(diǎn)左鍵繞Z軸旋轉(zhuǎn)90度的程序:void COpenGL:OnLButtonDown(UINT nFlags, CPoint point / TODO: Add your message handler code here and/or call defaultCWnd:OnLButtonDown(nFlags, point;CPaintDC dc(this; / device context for painting/ TODO: Add your message handler code here/調(diào)用OpenGL繪圖函數(shù)進(jìn)行圖形繪制glClear(GL_COLOR_BUFFER

42、_BIT | GL_DEPTH_BUFFER_BIT; /清除顏色緩存和深度緩存s+=0.005;if(s>1.0s=0.1;step = step + 1.0;if (step > 360.0step = step - 360.0;glPushMatrix(;/ glScalef(s,s,s;/ glRotatef(step,0.0,1.0,0.0;glRotatef(90,0.0,0.0,1.0;/ glRotatef(step,1.0,0.0,0.0;DrawSpace(;/ DrawColorBox(;glPopMatrix(;glFlush(;SwapBuffers(hd

43、c;另外,中鍵和右鍵的程序只需修改glRotatef(函數(shù)值即可。第6章 設(shè)計(jì)結(jié)論本系統(tǒng)以VC+6.0作為開發(fā)平臺,使用OpenGL函數(shù)來編程。系統(tǒng)可實(shí)現(xiàn)四自由度機(jī)器人手臂的參數(shù)化設(shè)計(jì)與運(yùn)動仿真,可對機(jī)器人手臂末端點(diǎn)任意點(diǎn)進(jìn)行軌跡描述。可根據(jù)一個(gè)四自由度的機(jī)器人手臂的工作空間設(shè)計(jì)出與其工作空間相同的四自由度機(jī)器人,為同工作空間的設(shè)計(jì)提供依據(jù)和結(jié)果驗(yàn)證。在程序設(shè)計(jì)上,本系統(tǒng)采用開放式三維圖形庫函數(shù)是程序能簡單的實(shí)現(xiàn)三維仿真。由于時(shí)間和水平有限,本系統(tǒng)目前只限于工作空間的仿真,不包括3D動畫的模擬,如以后在這方面設(shè)計(jì)的人可用3DMax繪制出簡單的圖形,可更直觀的看到機(jī)器人手臂的運(yùn)動過程,這一部分有

44、待于進(jìn)一步實(shí)現(xiàn)。 致 謝在本設(shè)計(jì)即將完成之際,我對在設(shè)計(jì)中給予我極大幫助的老師和同學(xué)表示深深的感謝!本設(shè)計(jì)能夠得以順利完成,歸根于以下幾個(gè)方面的因素:首先,在題目選定后,從一開始的資料收集,到進(jìn)一步的構(gòu)思,開題報(bào)告的填寫、設(shè)計(jì)大綱的制定、以及設(shè)計(jì)中疑難問題的解決,劉鐵軍老師都給予了我極大的幫助和不厭其煩的指導(dǎo),他們嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度使我受益匪淺。其次,在整個(gè)設(shè)計(jì)中,和我一個(gè)小組的張偉峰、王光祥同學(xué)我們?nèi)瞬恍傅呐?。遇到問題,我們仔細(xì)討論,深入分析,查閱資料,或者請教老師。在此,再次對上述給予我?guī)椭睦蠋熀屯瑢W(xué)表示誠摯的謝意!由于本人水平有限,設(shè)計(jì)中難免有不足之處,希望大家能夠給我指正! 參考文獻(xiàn)

45、1 David Vandevoorde ,C+程序設(shè)計(jì)語言,機(jī)械工業(yè)出版社,20032 朱世強(qiáng)、王宣銀,機(jī)器人技術(shù)及其應(yīng)用,浙江大學(xué)出版社,20013 吳振彪、熊友倫,工業(yè)機(jī)器人,華中科技大學(xué)出版社,19974 向世民,OpenGL編程與實(shí)例,北京電子工業(yè)出版社,20005 徐運(yùn)武、李艷,淺談OpenGL在機(jī)器人三維仿真的應(yīng)用,機(jī)械研究與應(yīng)用,20066 廖朵朵、張華軍,OpenGI 三維圖形程序設(shè)計(jì),北京星球地圖出版社,20047 王蘭美、趙繼成,OpenGL及其在VC+下的開發(fā)應(yīng)用,武漢大學(xué)學(xué),2006附錄/ OpenGL.cpp : implementation file/#includ

46、e "stdafx.h"#include "degign.h"#include "OpenGL.h"#include "math.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ COpenGLCOpenGL:COpenGL(/給成員變量賦初值step=0.0;s=0.1;COpenGL:COpenGL(wglMakeCurrent(NULL, NULL ; wglDeleteCont

47、ext(hglrc; /刪除渲染描述表:ReleaseDC (m_hWnd, hdc ; /釋放設(shè)備描述表BEGIN_MESSAGE_MAP(COpenGL, CWnd/AFX_MSG_MAP(COpenGLON_WM_CREATE(ON_WM_PAINT(ON_WM_LBUTTONDOWN(ON_WM_MBUTTONDOWN(ON_WM_RBUTTONDOWN(/AFX_MSG_MAPEND_MESSAGE_MAP(/ 設(shè)置像素格式函數(shù)int COpenGL:MySetPixelFormat(HDC hdcPIXELFORMATDESCRIPTOR pfd = sizeof(PIXELFOR

48、MATDESCRIPTOR, / pfd結(jié)構(gòu)的大小 1, / 版本號 PFD_DRAW_TO_WINDOW | / 支持在窗口中繪圖 PFD_SUPPORT_OPENGL | / 支持 OpenGL PFD_DOUBLEBUFFER, / 雙緩存模式 PFD_TYPE_RGBA, / RGBA 顏色模式 24, / 24 位顏色深度 0, 0, 0, 0, 0, 0, / 忽略顏色位 0, / 沒有非透明度緩存 0, / 忽略移位位 0, / 無累加緩存 0, 0, 0, 0, / 忽略累加位 32, / 32 位深度緩存 0, / 無模板緩存 0, / 無輔助緩存 PFD_MAIN_PLAN

49、E, / 主層 0, / 保留 0, 0, 0 / 忽略層,可見性和損毀掩模 ; int iPixelFormat; / 為設(shè)備描述表得到最匹配的像素格式 if(iPixelFormat = ChoosePixelFormat(hdc, &pfd = 0MessageBox("ChoosePixelFormat Failed", NULL, MB_OK;return 0;/ 設(shè)置最匹配的像素格式為當(dāng)前的像素格式 if(SetPixelFormat(hdc, iPixelFormat, &pfd = FALSEMessageBox("SetPixel

50、Format Failed", NULL, MB_OK;return 0;return 1;/ COpenGL message handlersint COpenGL:OnCreate(LPCREATESTRUCT lpCreateStruct if (CWnd:OnCreate(lpCreateStruct = -1return -1;/ TODO: Add your specialized creation code here/ 設(shè)置當(dāng)前的繪圖像素格式MySetPixelFormat(:GetDC(m_hWnd;/ 創(chuàng)建繪圖描述表hdc = :GetDC(m_hWnd;/ 創(chuàng)建渲

51、染描述表hglrc = wglCreateContext(hdc;/ 使繪圖描述表為當(dāng)前調(diào)用現(xiàn)程的當(dāng)前繪圖描述表 wglMakeCurrent(hdc, hglrc; return 0;void COpenGL:OnPaint( / CPaintDC dc(this; / device context for painting/ TODO: Add your message handler code here/調(diào)用OpenGL繪圖函數(shù)進(jìn)行圖形繪制glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT; /清除顏色緩存和深度緩存s+=0.005;if(

52、s>1.0s=0.1;step = step + 1.0;if (step > 360.0step = step - 360.0;glPushMatrix(;/ glScalef(s,s,s;glRotatef(step,0.0,1.0,0.0;glRotatef(step,0.0,0.0,1.0;glRotatef(step,1.0,0.0,0.0;DrawSpace(;/ DrawColorBox(;glPopMatrix(;glFlush(;SwapBuffers(hdc;/ Do not call CWnd:OnPaint( for painting messagesvoi

53、d COpenGL:DrawColorBox(voidGLfloat p1=0.5,-0.5,-0.5, p2=0.5,0.5,-0.5,p3=0.5,0.5,0.5, p4=0.5,-0.5,0.5,p5=-0.5,-0.5,0.5, p6=-0.5,0.5,0.5,p7=-0.5,0.5,-0.5, p8=-0.5,-0.5,-0.5;GLfloat m1=1.0,0.0,0.0, m2=-1.0,0.0,0.0,m3=0.0,1.0,0.0, m4=0.0,-1.0,0.0,m5=0.0,0.0,1.0, m6=0.0,0.0,-1.0;GLfloat c1=0.0,0.0,1.0, c

54、2=0.0,1.0,1.0,c3=1.0,1.0,1.0, c4=1.0,0.0,1.0,c5=1.0,0.0,0.0, c6=1.0,1.0,0.0,c7=0.0,1.0,0.0, c8=1.0,1.0,1.0;glBegin (GL_QUADS; /繪制多個(gè)四邊形glColor3fv(c1;glNormal3fv(m1;glVertex3fv(p1;glColor3fv(c2;glVertex3fv(p2;glColor3fv(c3;glVertex3fv(p3;glColor3fv(c4;glVertex3fv(p4;glColor3fv(c5;glNormal3fv(m5;glVertex3fv(p5;glColor3fv(c6;glVertex3fv(p6;glColor3fv(c7;glVertex3fv(p7;glColor3fv(c8;glVertex3fv(p8;glColor3fv(c5;glNormal3fv(m3;glVertex3fv(p5;glColor3fv(c6;glVertex3fv(p6;glColor3fv(c3;glVertex3fv(p3;glColor3fv(c

溫馨提示

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

最新文檔

評論

0/150

提交評論