毕业设计基于OpenGL的机器人三维仿真环境设计.doc

上传人:文库蛋蛋多 文档编号:3974809 上传时间:2023-03-30 格式:DOC 页数:49 大小:1.08MB
返回 下载 相关 举报
毕业设计基于OpenGL的机器人三维仿真环境设计.doc_第1页
第1页 / 共49页
毕业设计基于OpenGL的机器人三维仿真环境设计.doc_第2页
第2页 / 共49页
毕业设计基于OpenGL的机器人三维仿真环境设计.doc_第3页
第3页 / 共49页
毕业设计基于OpenGL的机器人三维仿真环境设计.doc_第4页
第4页 / 共49页
毕业设计基于OpenGL的机器人三维仿真环境设计.doc_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《毕业设计基于OpenGL的机器人三维仿真环境设计.doc》由会员分享,可在线阅读,更多相关《毕业设计基于OpenGL的机器人三维仿真环境设计.doc(49页珍藏版)》请在三一办公上搜索。

1、 SHANGHAI UNIVERSITY 毕业设计(论文)UNDERGRADUATE PROJECT (THESIS)题 目: 基于OpenGL的机器人三维仿真环境设计学 院: 机电工程与自动化学院 专 业: 机械工程及自动化 目 录摘要:-1 ABSTRACT-11第一章 绪论-42第二章 基于OpenGL的三维仿真图形设计-83第三章 仿人机器人的三维建模-194第四章 仿人机器人运动学仿真-295第五章 总结-466 致谢-477 参考文献-48基于OpenGL的机器人三维仿真环境设计摘要仿真技术是机器人研究领域中的一个重要部分,随着机器人研究的不断深入,机器人仿真系统作为机器人设计和研

2、究过程中安全可靠灵活方便的工具,发挥着越来越重要的作用。本文对基于OpenGL的机器人三维仿真环境设计进行研究,学习了机器人运动学基础和OpenGL设计机器人仿真技术,并在Visual C+ 6.0编程环境中实现仿人机器人仿真。在论文安排上,先简要介绍了OpenGL,然后详细描述了本课题的难点仿人机器人的三维建模,阐述了程序流程和实现过程,然后根据机器人运动学对本课题设计的机器人模型进行了运动学分析,在根据分析结果对仿真系统开发和调试,最终实现仿人机器人的动作仿真。关键词:OpenGL;仿人机器人;三维仿真ABSTRACTRobot simulation is a hot topic in r

3、obotics research. With the growing development of various robotic systems, robot simulation plays a more and more important role as a safe, reliable, flexible and convenient tool in the robot designing and research process.In this thesis, we learn the basic robot kinematics and design on OpenGL-base

4、d robot simulation system. A three-dimensional humanoid robot has been developed using Visual C+ 6.0.The thesis is organized as follows. We firstly introduce OpenGL technology and describe the difficulty of this research in detail. Secondly, we present a three dimensional model for humanoid robots a

5、nd describe the implementation process. Then we conduct kinematics analysis of the robot. Finally, we implement the 3D humanoid robot simulation environment based on the proposed 3D model and associated kinematics analysis results.Keywords: OpenGL; Humanoid Robot; Three-dimensional simulation第一章 绪论第

6、一节 仿人机器人一、仿人机器人简介机器人作为机械制造业和信息产业结合的产物,正越来越广泛地应用于机械、汽车、军工、航空航天、造船、计算机、光学仪器、通信设备等行业,在很大程度上替代了人们的体力劳动,如制造、搬运、焊接以及其它各种危险、恶劣环境下的工作。其中仿人机器人是外观和功能与人一样的智能机器人,能像人一样活动,有人的行为,仿人机器人能运动、甚至自己去“想”,会思考。研制出外观和功能与人一样的仿人机器人是现代科技发展的结果。全新组装的仿人机器人全身布满了感应器,让它可以根据感应到的声音和动作做出适当反应,也让它对于光线和触觉的反应更加灵敏。 二 、仿人机器人的现状,发展及应用仿人机器人目前的

7、主要产品包括日本索尼公司的QRIO(图1.1)、富士通公司的HOAP2(图1.2)和本田公司的ASIMO图(1.3)。图1.1 日本索尼公司的QRIO机器人图1.2富士通公司的HOAP2机器人图1.3 本田公司的ASIMO机器人仿人机器人是开发难度最高的机器人之一,因为大家希望从它身上看到人的表情和反应。目前,仿人机器人可以用于娱乐和服务。科学家们正在开发更智能的软件,使机器人能和人交流并具备学习能力。从某种角度说,仿人机器人的研发是真正考验人类智慧的行为。第二节 机器人仿真系统的概况计算机仿真是伴随着计算机的发展而形成的一门学科。它的研究起源于20世纪70年代,但由于受计算机软硬件水平的影响

8、,很难得到广泛应用。它一般设计和构造一个客观世界某一系统的数理逻辑模型,并借助计算机对该模型进行实验的过程。对机器人进行计算机仿真是凭借计算机这一现代化工具研究机器人仿真的有效手段。在机器人的研制、设计和试验过程中,需要经常对机器人进行运动分析,而机器人是多自由度、多连杆的空间机构,其运动学十分复杂,用手工计算不仅十分困难,而且极易出错,通常只有通过这种复杂系统的仿真,才能解答机器人设计、制造、试验阶段及运行过程中出现的问题。随着机器人研究的不断深入和机器人领域的不断发展,机器人仿真系统作为机器人设计和研究的安全可靠灵活方便的工具,发挥着很重要的作用,它可以应用于机器人的许多方面。仿真技术是机

9、器人研究领域中的一个重要部分,随着机器人研究的不断深入和机器人领域的不断发展,机器人仿真系统作为机器人设计和研究过程中安全可靠灵活方便的工具,发挥着越来越重要的作用。要开发一个成功的机器人仿真系统,需要强而有力的开发工具。在当前众多的开发工具中,OpenGL是非常实用方便的一种。OpenGL是在SGI、Microsoft、DEC、IBM、Intel等多家世界著名计算机公司的倡导下,基于SGI的GL(Graphical Library)标准,制定的一个通用共享的开发三维图形标准。Microsoft公司首先将OpenGL图形库链接到Windows NT中和Windows95上,这使得广大PC机用户

10、可以使用OpenGL方便的开发功能和强大的图形程序。OpenGL是一个开放的三维图形软件包,独立于窗口系统和操作系统,能十分方便地在各平台间移植。它包含100多个库函数。Windows95中文版下的OpenGL还支持其它4类函数;43个OpenGL实用库函数;31个OpenGL辅助库函数;6个Windows专用库函数以及5个Win32API函数。OpenGL能提供以下一些基本功能:模型绘制;模型观察;颜色模式的指定;光照应用;图象效果增强;位图和图像处理;纹理映射;实时动画;交互技术等。由于OpenGL的作用机制是客户(client)/服务器(sever)机制,因此它是网络透明的,可以十分方便

11、地在网络环境下使用。此外,可以在Visual C+ 6.0下,利用MFC类库作为OpenGL与Windows95的接口,编译出动态链接库,以供用户的其他应用程序调用。在Microsoft公司在其Windows95/NT操作系统中支持OpenGL之前,只在昂贵的图形工作站上才能运行OpenGL应用程序。随着支持OpenGL的图形加速卡的出现和微机性能的提高,OpenGL在微机平台上也将广泛的应用。这将促进快速开发高效、低成本的机器人仿真系统2。第三节 本课题研究内容和目标本课题研究OpenGL在仿人机器人仿真中的应用及其实现方法,利用OpenGL卓越的渲染功能对场景和机器人进行绘制,形成具有高度

12、真实感的三维仿真环境。仿真环境可以实现机器人模型的创建、动画仿真,从而实现仿人机器人的离线编程与仿真。建立小型仿人机器人三维仿真模型,能实现机器人行走、弯腰等简单动作。实现机器人模型的创建、动画仿真,从而实现仿人机器人的离线编程与仿真。第二章 基于OpenGL的三维仿真图形设计第一节 OpenGL概述一 、OpenGL图形库OpenGL是SGI公司开发的一套高性能的图形处理系统,是图形硬件的软件界面,GL即代表图形库(Graphics Library)。通过OpenGL程序员可以创建交互式应用程序,实现具有逼真效果的三维图形图像,从而在要求高度模拟真实世界的诸多领域中都可以大显身手。现在Ope

13、nGL已被认为是高性能图形和交互式视景处理的标准。在三维仿真建模、虚拟现实技术等领域,OpenGL发挥着重要的作用1。OpenGL事实上是一个3D图形开发包,是图形硬件的软件接口,由几百个指令或函数组成。对程序员而言,OpenGL是一些指令或函数的集合,这些指令允许对二维对象或三维几何对象进行说明,允许用户对对象实施操作以便把这些对象着色到帧存上。对于OpenGL的实现者而言,OpenGL是影响图形硬件操作的指令集合。如果硬件仅仅包括一个可以寻址的帧存,那么OpenGL就不得不几乎完全在CPU上实现对象的描绘。二、OpenGL的工作结构OpenGL的指令解释模型是客户/服务器模式,即客户(试图

14、用OpenGL进行绘制工作的应用程序)向服务器(OpenGL内核)发布命令,这些OpenGL命令则是由服务器来解释的。一般来说,客户和服务器是运行于同一台计算机上的。这种基于客户机/服务器的模式,在网络环境下很容易使用OpenGL,且在不同计算机上的客户可以得到其他计算机上服务器的服务。这样OpenGL具有网络透明性。OpenGL的库函数被封装在OpenGL32.dll动态链接库中。从客户应用程序发布的对OpenGL函数的调用首先被OpenGL32.dll处理,在传给服务器后,被Winsry.dll进一步进行处理,然后传递给DDI(DeviceDriveInterfaee),最后传递给视频显示

15、驱动程序。图2.1显示了这一过程客户应用程序OpenGL Dll服务器 DllWin32 Dll视频驱动程序OpenGL 指令客户服务器图2.1 Windows环境下OpenGL的工作结构三、OpenGL的工作过程作为图形硬件的软件接口,OpenGL的最主要的工作就是将二维或三维物体描绘至帧缓存。这些物体由一系列的描述物体几何性质的顶点(Vertex)或描述图像的像素组成。OpenGL执行一系列的操作把这些数据最终转化成像素数据并在帧存中形成最后的结果。下面概要性介绍OpenGL工作:1、 图元操作与指令OpenGL由一组顶点定义。该组顶点既可以只包括一个顶点,也可以包括多个顶点。顶点的说明由

16、位置坐标、颜色值、法向量和纹理坐标组成。每个顶点可以被顺序或以相同的方式独立地处理。每个顶点根据其为二维或三维顶点可以分别使用二个坐标、三个坐标或四个坐标。此外当前法线、当前纹理坐标以及当前颜色值可以在处理每个顶点的过程中被使用或改变。当前法线是一个三维向量,被用于光照计算。纹理坐标决定如何把纹理图像映射到图元。颜色与每个顶点有关,相关的颜色或是当前的颜色或是由光照产生的颜色,这取决于是否有光照。同样,纹理坐标也与每个顶点坐标有关。在OpenGL中,几何对象是根据glBegin()/glEndO函数对之间所包含的一系列指定顶点的位置坐标、颜色值、法向量和纹理坐标画出的。这样的几何对象有点线段、

17、循环线段、分离线段、多边形、三角形、三角形扇、分离的三角形、四边形及分离的四边形。2、图形绘制OpenGL提供了距阵变换、光照、反走样方法、像素操作等参数来控制二维和三维图形的绘制。但是OpenGL并不描述或提供一个建立复杂物体的几何手段。OpenGL提供的是怎样画复杂物体的机制而非描绘复杂物体本身的面面俱到的工具。3、 OpenGL的基本操作OpeGL可以在具有不同图形能力和性能的图形工作站平台及微机上运行,图2.2为OpenGL的绘制原理图。点数据评价器逐点操作基元配置显示列表像素数据像素操作基本操作帧缓存器纹理存储器 图2.2 OpenGL的绘制原理图用户指令从上图左侧进入OpenGL。

18、指令分为两部分,一部分画指定的几何物体,另一部分则指示在不同的阶段如何处理几何物体。许多指令很可能被排列在显示列表(DisplayList)中,在后续的时间里对其进行处理。通过评价器计算输入值的多项式函数来为近似曲线和曲面等几何物体提供有效手段,然后由顶点描述的几何图元进行操作。在此阶段,对顶点进行转换、光照,并把图元剪切到观察体中,为下一步光栅化做准备。光栅化产生一系列图像的帧缓存地址和图元的二维描述值,其生成结果称为基片,每个基片在最后改变帧存之前对单个基片进行操作。这些基片包括根据先前存储的程度值进行由条件地更新帧缓存,进行各种测试以及即将处理的基片颜色与己经存储的颜色,进行屏蔽,对基片

19、进行逻辑操作和淡化。四 、OpenGL的基本建模技术利用OpenGL进行仿真时,首先须根据机器人的实际形态及预期的运动建立起机器人的数学模型、几何模型及参数接口,以便将来实现实时计算和运动模拟。接下来将介绍OpenGL的实体建模基础。OpenGL提供了如下绘制图形的函数。l.、绘制点如何指定一个点呢?OpenGL提供了一系列函数。它们都以 glVertex开头,后面跟一个数字和 12 个字母例如: glVertex2d glVertex2f glVertex3f glVertex3fv 等等6。 数字表示参数的个数,2表示有两个参数,3表示三个,4表示四个。 字母表示参数的类型,s 表示 16

20、 位整数(OpenGL中将这个类型定义为 GLshort), i表示 32位整数(OpenGL中将这个类型定义为 GLint 和 GLsizei), f 表示 32位浮点数(OpenGL中将这个类型定义为 GLfloat 和 GLclampf),d表示 64位浮点数(OpenGL中将这个类型定义为 GLdouble和GLclampd)。v表示传递的几个参数将使用指针的方式,见下面的例子。 这些函数除了参数的类型和个数不同以外,功能是相同的。例如,以下五个代码段的功能是等效的: (1)glVertex2i(1, 3); (2)glVertex2f(1.0f, 3.0f); (3)glVertex

21、3f(1.0f, 3.0f, 0.0f); (4)glVertex4f(1.0f, 3.0f, 0.0f, 1.0f); (5)GLfloat VertexArr3 = 1.0f, 3.0f, 0.0f; glVertex3fv(VertexArr3); 2、绘制直线。绘制直线时,OpenGL提供了线型选择功能,并可以绘制连续直线及闭合直线。(1)直线可以指定宽度: void glLineWidth(GLfloat width); 其用法跟 glPointSize类似。 (2)画虚线。 首先,使用glEnable(GL_LINE_STIPPLE);来启动虚线模式(使用 glDisable(GL

22、_LINE_STIPPLE)可以关闭之)。然后,使用 glLineStipple来设置虚线的样式。 void glLineStipple(GLint factor, GLushort pattern); pattern 是由 1和 0组成的长度为 16 的序列,从最低位开始看,如果为 1,则直线上接下来应该画的 factor个点将被画为实的;如果为 0,则直线上接下来应该画的 factor 个点将被画为虚的。示例代码void myDisplay(void) glClear(GL_COLOR_BUFFER_BIT glEnable(GL_LINE_STIPPLE); glLineStipple(

23、2, 0x0F0F); glLineWidth(10.0f); glBegin(GL_LINES); glVertex2f(0.0f, 0.0f); glVertex2f(0.5f, 0.5f); glEnd(); glFlush(); 3、绘制多边形在绘制多边形时,可以对多边形进行填充。从三维的角度来看,一个多边形具有两个面。每一个面都可以设置不同的绘制方式:填充、只绘制边缘轮廓线、只绘制顶点,其中“填充”是默认的方式。可以为两个面分别设置不同的方式。 glPolygonMode(GL_FRONT, GL_FILL); / 设置正面为填充方式 glPolygonMode(GL_BACK, G

24、L_LINE); / 设置反面为边缘绘制方式 glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); / 设置两面均为顶点绘制方式。由上可见OpenGL提供了一些画点、线、面的功能,如何由它们构成三维形体呢?对于具体的情况要具体分析,这里涉及到数学模型构造的问题,任何一个物体都可以看成无数个点、线、面组成,我们将这些点、线、面组合在一起,就构成了三维模型。五 OpenGL动画技术正如电影和动画的工作原理:快速的把看似连续的画面一幅幅的呈现在人们面前。一旦每秒钟呈现的画面超过 24 幅,人们就会感觉它是连续的。 我们通常观看的电视,每秒播放 25或 30 幅画面。

25、但对于计算机来说,它可以播放更多的画面,以达到更平滑的效果12。如果速度过慢,画面不够平滑。如果速度过快,则人眼未必就能反应得过来。对于一个正常人来说,每秒 60到120 幅图画是比较合适的。假设某动画一共有 n幅画面,则它的工作步骤就是: 显示第 1幅画面,然后等待一小段时间,直到下一个 1/24 秒 显示第 2幅画面,然后等待一小段时间,直到下一个 1/24 秒 显示第 n幅画面,然后等待一小段时间,直到下一个 1/24 秒 结束 如果用 C语言伪代码来描述这一过程,就是: for(i=0; i新建-工程,然后选择 Win32 Console Application,输入工程名称,然后点击

26、“确定”(图3.1(a)), 在谈出的对话框左边找到 一个空工程 并勾上,点击 完成,在谈出的新建“新建工程信息”对话框点击“确定”(图3.1(b)。再选择文件-新建-文件,选择C+ Source File,输入文件名,点击“确定”即完成所有前期工作,然后就可以进行机器人的建模和仿真。具体操作过程截图如下:(a) (b)(c)图3.1建立OpenGL应用程序框架经过以上的工作之后就可以进行OpenGL编程,对机器人进行三维建模11。二、 在Visual C+ 6.0中完成机器人的三维建模腿部身体手臂肩部头部图3.2机器人结构示意图机器人的整体形状较为复杂,可以分块绘制7,图3.2为其结构示意图

27、。此机器人的绘制步骤如下:1、 绘制机器人的头部如图3.2所示,机器人的头部为一个圆球。用OpenGL函数glutSolidSphere()绘制。其程序如下:void HumanModel:DrawSkull() / A big sphere for the skull. glColor3f(1.0f,0.8f,0.0f); if (m_iRenderMode = GL_QUADS) gluQuadricDrawStyle(this-m_quadricObj, GLU_FILL); else gluQuadricDrawStyle(this-m_quadricObj, GLU_LINE); i

28、f (m_iShadeMode = GL_SMOOTH) gluQuadricNormals(this-m_quadricObj, GLU_FLAT); else gluQuadricNormals(this-m_quadricObj, GLU_SMOOTH);2、绘制机器人身体如图3.2所示,机器人的身体有两个长方体组成。其中上半身和下半身分别绘制如下:上半身:void HumanModel:DrawUpperBodySegment() / Upper body segment - a little larger as it includes the chest glBegin(m_iRen

29、derMode); glColor3f(0.2f,0.2f,0.7f); DrawBox(0.7f, 0.45f, 0.45f);glColor3f(1.0f,1.0f,1.0f);glEnd();下半身:void HumanModel:DrawBodySegment() / Lower body segment glBegin(m_iRenderMode); glColor3f(0.2f,0.2f,0.7f); DrawBox(0.7f, 0.3f, 0.3f);glColor3f(1.0f,1.0f,1.0f);glEnd();身体关节:身体关节由一个小矩形框构成:void HumanMo

30、del:DrawBodyJoint() / A small body joint is basically a small rectangular box. glBegin(m_iRenderMode); glColor3f(0.5f,0.0f,0.2f); DrawBox(0.2f, 0.1f, 0.1f);glColor3f(1.0f,1.0f,1.0f);glEnd();3、绘制机器人的腿部如图3.2所示,机器人的腿部由两节长方体组成。void HumanModel:DrawLegSegment() glBegin(m_iRenderMode); glColor3f(0.2f,0.2f,

31、0.7f); DrawBox(0.25f, 0.4f, 0.4f); glColor3f(1.0f,1.0f,1.0f);glEnd();腿关节:void HumanModel:DrawLegJoint() glBegin(m_iRenderMode); glColor3f(0.5f,0.0f,0.2f); DrawBox(0.1f, 0.2f, 0.2f);glColor3f(1.0f,1.0f,1.0f);glEnd();4、绘制机器人的左右臂与腿部的构造方式相同,手臂也是由长方体构成的void HumanModel:DrawArmSegment() glBegin(m_iRenderMode); glColor3f(0.2f,0.2f,0.7f); DrawBox(0.2f, 0.4f, 0.2f); glColor3f(1.0f,1.0f,1.0f);glEnd();5、绘制机器人的颈部如图3.2所示,机器人的颈部有两个长方体构。void HumanModel:DrawNeckJoint() glBegin(m_iRenderMode); glColor3f(0.5f,0.5f,0.5f); DrawBox(0.2f, 0.1f, 0.1f);glColor3f(1.0f,1.0f,1.0f);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号