欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

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

    • 资源ID:3974809       资源大小:1.08MB        全文页数:49页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    SHANGHAI UNIVERSITY 毕业设计(论文)UNDERGRADUATE PROJECT (THESIS)题 目: 基于OpenGL的机器人三维仿真环境设计学 院: 机电工程与自动化学院 专 业: 机械工程及自动化 目 录摘要:-1 ABSTRACT-11第一章 绪论-42第二章 基于OpenGL的三维仿真图形设计-83第三章 仿人机器人的三维建模-194第四章 仿人机器人运动学仿真-295第五章 总结-466 致谢-477 参考文献-48基于OpenGL的机器人三维仿真环境设计摘要仿真技术是机器人研究领域中的一个重要部分,随着机器人研究的不断深入,机器人仿真系统作为机器人设计和研究过程中安全可靠灵活方便的工具,发挥着越来越重要的作用。本文对基于OpenGL的机器人三维仿真环境设计进行研究,学习了机器人运动学基础和OpenGL设计机器人仿真技术,并在Visual C+ 6.0编程环境中实现仿人机器人仿真。在论文安排上,先简要介绍了OpenGL,然后详细描述了本课题的难点仿人机器人的三维建模,阐述了程序流程和实现过程,然后根据机器人运动学对本课题设计的机器人模型进行了运动学分析,在根据分析结果对仿真系统开发和调试,最终实现仿人机器人的动作仿真。关键词:OpenGL;仿人机器人;三维仿真ABSTRACTRobot simulation is a hot topic in robotics 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-based 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 and 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第一章 绪论第一节 仿人机器人一、仿人机器人简介机器人作为机械制造业和信息产业结合的产物,正越来越广泛地应用于机械、汽车、军工、航空航天、造船、计算机、光学仪器、通信设备等行业,在很大程度上替代了人们的体力劳动,如制造、搬运、焊接以及其它各种危险、恶劣环境下的工作。其中仿人机器人是外观和功能与人一样的智能机器人,能像人一样活动,有人的行为,仿人机器人能运动、甚至自己去“想”,会思考。研制出外观和功能与人一样的仿人机器人是现代科技发展的结果。全新组装的仿人机器人全身布满了感应器,让它可以根据感应到的声音和动作做出适当反应,也让它对于光线和触觉的反应更加灵敏。 二 、仿人机器人的现状,发展及应用仿人机器人目前的主要产品包括日本索尼公司的QRIO(图1.1)、富士通公司的HOAP2(图1.2)和本田公司的ASIMO图(1.3)。图1.1 日本索尼公司的QRIO机器人图1.2富士通公司的HOAP2机器人图1.3 本田公司的ASIMO机器人仿人机器人是开发难度最高的机器人之一,因为大家希望从它身上看到人的表情和反应。目前,仿人机器人可以用于娱乐和服务。科学家们正在开发更智能的软件,使机器人能和人交流并具备学习能力。从某种角度说,仿人机器人的研发是真正考验人类智慧的行为。第二节 机器人仿真系统的概况计算机仿真是伴随着计算机的发展而形成的一门学科。它的研究起源于20世纪70年代,但由于受计算机软硬件水平的影响,很难得到广泛应用。它一般设计和构造一个客观世界某一系统的数理逻辑模型,并借助计算机对该模型进行实验的过程。对机器人进行计算机仿真是凭借计算机这一现代化工具研究机器人仿真的有效手段。在机器人的研制、设计和试验过程中,需要经常对机器人进行运动分析,而机器人是多自由度、多连杆的空间机构,其运动学十分复杂,用手工计算不仅十分困难,而且极易出错,通常只有通过这种复杂系统的仿真,才能解答机器人设计、制造、试验阶段及运行过程中出现的问题。随着机器人研究的不断深入和机器人领域的不断发展,机器人仿真系统作为机器人设计和研究的安全可靠灵活方便的工具,发挥着很重要的作用,它可以应用于机器人的许多方面。仿真技术是机器人研究领域中的一个重要部分,随着机器人研究的不断深入和机器人领域的不断发展,机器人仿真系统作为机器人设计和研究过程中安全可靠灵活方便的工具,发挥着越来越重要的作用。要开发一个成功的机器人仿真系统,需要强而有力的开发工具。在当前众多的开发工具中,OpenGL是非常实用方便的一种。OpenGL是在SGI、Microsoft、DEC、IBM、Intel等多家世界著名计算机公司的倡导下,基于SGI的GL(Graphical Library)标准,制定的一个通用共享的开发三维图形标准。Microsoft公司首先将OpenGL图形库链接到Windows NT中和Windows95上,这使得广大PC机用户可以使用OpenGL方便的开发功能和强大的图形程序。OpenGL是一个开放的三维图形软件包,独立于窗口系统和操作系统,能十分方便地在各平台间移植。它包含100多个库函数。Windows95中文版下的OpenGL还支持其它4类函数;43个OpenGL实用库函数;31个OpenGL辅助库函数;6个Windows专用库函数以及5个Win32API函数。OpenGL能提供以下一些基本功能:模型绘制;模型观察;颜色模式的指定;光照应用;图象效果增强;位图和图像处理;纹理映射;实时动画;交互技术等。由于OpenGL的作用机制是客户(client)/服务器(sever)机制,因此它是网络透明的,可以十分方便地在网络环境下使用。此外,可以在Visual C+ 6.0下,利用MFC类库作为OpenGL与Windows95的接口,编译出动态链接库,以供用户的其他应用程序调用。在Microsoft公司在其Windows95/NT操作系统中支持OpenGL之前,只在昂贵的图形工作站上才能运行OpenGL应用程序。随着支持OpenGL的图形加速卡的出现和微机性能的提高,OpenGL在微机平台上也将广泛的应用。这将促进快速开发高效、低成本的机器人仿真系统2。第三节 本课题研究内容和目标本课题研究OpenGL在仿人机器人仿真中的应用及其实现方法,利用OpenGL卓越的渲染功能对场景和机器人进行绘制,形成具有高度真实感的三维仿真环境。仿真环境可以实现机器人模型的创建、动画仿真,从而实现仿人机器人的离线编程与仿真。建立小型仿人机器人三维仿真模型,能实现机器人行走、弯腰等简单动作。实现机器人模型的创建、动画仿真,从而实现仿人机器人的离线编程与仿真。第二章 基于OpenGL的三维仿真图形设计第一节 OpenGL概述一 、OpenGL图形库OpenGL是SGI公司开发的一套高性能的图形处理系统,是图形硬件的软件界面,GL即代表图形库(Graphics Library)。通过OpenGL程序员可以创建交互式应用程序,实现具有逼真效果的三维图形图像,从而在要求高度模拟真实世界的诸多领域中都可以大显身手。现在OpenGL已被认为是高性能图形和交互式视景处理的标准。在三维仿真建模、虚拟现实技术等领域,OpenGL发挥着重要的作用1。OpenGL事实上是一个3D图形开发包,是图形硬件的软件接口,由几百个指令或函数组成。对程序员而言,OpenGL是一些指令或函数的集合,这些指令允许对二维对象或三维几何对象进行说明,允许用户对对象实施操作以便把这些对象着色到帧存上。对于OpenGL的实现者而言,OpenGL是影响图形硬件操作的指令集合。如果硬件仅仅包括一个可以寻址的帧存,那么OpenGL就不得不几乎完全在CPU上实现对象的描绘。二、OpenGL的工作结构OpenGL的指令解释模型是客户/服务器模式,即客户(试图用OpenGL进行绘制工作的应用程序)向服务器(OpenGL内核)发布命令,这些OpenGL命令则是由服务器来解释的。一般来说,客户和服务器是运行于同一台计算机上的。这种基于客户机/服务器的模式,在网络环境下很容易使用OpenGL,且在不同计算机上的客户可以得到其他计算机上服务器的服务。这样OpenGL具有网络透明性。OpenGL的库函数被封装在OpenGL32.dll动态链接库中。从客户应用程序发布的对OpenGL函数的调用首先被OpenGL32.dll处理,在传给服务器后,被Winsry.dll进一步进行处理,然后传递给DDI(DeviceDriveInterfaee),最后传递给视频显示驱动程序。图2.1显示了这一过程客户应用程序OpenGL Dll服务器 DllWin32 Dll视频驱动程序OpenGL 指令客户服务器图2.1 Windows环境下OpenGL的工作结构三、OpenGL的工作过程作为图形硬件的软件接口,OpenGL的最主要的工作就是将二维或三维物体描绘至帧缓存。这些物体由一系列的描述物体几何性质的顶点(Vertex)或描述图像的像素组成。OpenGL执行一系列的操作把这些数据最终转化成像素数据并在帧存中形成最后的结果。下面概要性介绍OpenGL工作:1、 图元操作与指令OpenGL由一组顶点定义。该组顶点既可以只包括一个顶点,也可以包括多个顶点。顶点的说明由位置坐标、颜色值、法向量和纹理坐标组成。每个顶点可以被顺序或以相同的方式独立地处理。每个顶点根据其为二维或三维顶点可以分别使用二个坐标、三个坐标或四个坐标。此外当前法线、当前纹理坐标以及当前颜色值可以在处理每个顶点的过程中被使用或改变。当前法线是一个三维向量,被用于光照计算。纹理坐标决定如何把纹理图像映射到图元。颜色与每个顶点有关,相关的颜色或是当前的颜色或是由光照产生的颜色,这取决于是否有光照。同样,纹理坐标也与每个顶点坐标有关。在OpenGL中,几何对象是根据glBegin()/glEndO函数对之间所包含的一系列指定顶点的位置坐标、颜色值、法向量和纹理坐标画出的。这样的几何对象有点线段、循环线段、分离线段、多边形、三角形、三角形扇、分离的三角形、四边形及分离的四边形。2、图形绘制OpenGL提供了距阵变换、光照、反走样方法、像素操作等参数来控制二维和三维图形的绘制。但是OpenGL并不描述或提供一个建立复杂物体的几何手段。OpenGL提供的是怎样画复杂物体的机制而非描绘复杂物体本身的面面俱到的工具。3、 OpenGL的基本操作OpeGL可以在具有不同图形能力和性能的图形工作站平台及微机上运行,图2.2为OpenGL的绘制原理图。点数据评价器逐点操作基元配置显示列表像素数据像素操作基本操作帧缓存器纹理存储器 图2.2 OpenGL的绘制原理图用户指令从上图左侧进入OpenGL。指令分为两部分,一部分画指定的几何物体,另一部分则指示在不同的阶段如何处理几何物体。许多指令很可能被排列在显示列表(DisplayList)中,在后续的时间里对其进行处理。通过评价器计算输入值的多项式函数来为近似曲线和曲面等几何物体提供有效手段,然后由顶点描述的几何图元进行操作。在此阶段,对顶点进行转换、光照,并把图元剪切到观察体中,为下一步光栅化做准备。光栅化产生一系列图像的帧缓存地址和图元的二维描述值,其生成结果称为基片,每个基片在最后改变帧存之前对单个基片进行操作。这些基片包括根据先前存储的程度值进行由条件地更新帧缓存,进行各种测试以及即将处理的基片颜色与己经存储的颜色,进行屏蔽,对基片进行逻辑操作和淡化。四 、OpenGL的基本建模技术利用OpenGL进行仿真时,首先须根据机器人的实际形态及预期的运动建立起机器人的数学模型、几何模型及参数接口,以便将来实现实时计算和运动模拟。接下来将介绍OpenGL的实体建模基础。OpenGL提供了如下绘制图形的函数。l.、绘制点如何指定一个点呢?OpenGL提供了一系列函数。它们都以 glVertex开头,后面跟一个数字和 12 个字母例如: glVertex2d glVertex2f glVertex3f glVertex3fv 等等6。 数字表示参数的个数,2表示有两个参数,3表示三个,4表示四个。 字母表示参数的类型,s 表示 16 位整数(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)glVertex3f(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_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(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, GL_LINE); / 设置反面为边缘绘制方式 glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); / 设置两面均为顶点绘制方式。由上可见OpenGL提供了一些画点、线、面的功能,如何由它们构成三维形体呢?对于具体的情况要具体分析,这里涉及到数学模型构造的问题,任何一个物体都可以看成无数个点、线、面组成,我们将这些点、线、面组合在一起,就构成了三维模型。五 OpenGL动画技术正如电影和动画的工作原理:快速的把看似连续的画面一幅幅的呈现在人们面前。一旦每秒钟呈现的画面超过 24 幅,人们就会感觉它是连续的。 我们通常观看的电视,每秒播放 25或 30 幅画面。但对于计算机来说,它可以播放更多的画面,以达到更平滑的效果12。如果速度过慢,画面不够平滑。如果速度过快,则人眼未必就能反应得过来。对于一个正常人来说,每秒 60到120 幅图画是比较合适的。假设某动画一共有 n幅画面,则它的工作步骤就是: 显示第 1幅画面,然后等待一小段时间,直到下一个 1/24 秒 显示第 2幅画面,然后等待一小段时间,直到下一个 1/24 秒 显示第 n幅画面,然后等待一小段时间,直到下一个 1/24 秒 结束 如果用 C语言伪代码来描述这一过程,就是: for(i=0; i<n; +i) DrawScene( i); Wait(); 1、 双缓冲技术在计算机上的动画与实际的动画有些不同:实际的动画都是先画好了,播放的时候直接拿出来显示就行。计算机动画则是画一张,就拿出来一张,再画下一张,再拿出来。如果所需要绘制的图形很简单,那么这样也没什么问题。但一旦图形比较复杂,绘制需要的时间较长,问题就会变得突出。 如果把计算机想象成一个画图比较快的人,假如他直接在屏幕上画图,而图形比较复杂,则有可能在他只画了某幅图的一半的时候就被观众看到。而后面虽然他把画补全了,但观众的眼睛却又没有反应过来,还停留在原来那个残缺的画面上。也就是说,有时候观众看到完整的图象,有时却又只看到残缺的图象,这样就造成了屏幕的闪烁18。 如何解决这一问题呢?我们设想有两块画板,画图的人在旁边画,画好以后把他手里的画板与挂在屏幕上的画板相交换。这样以来,观众就不会看到残缺的画了。这一技术被应用到计算机图形中,称为双缓冲技术。即:在存储器(很有可能是显存)中开辟两块区域,一块作为发送到显示器的数据,一块作为绘画的区域,在适当的时候交换它们。由于交换两块内存区域实际上只需要交换两个指针,这一方法效率非常高,所以被广泛的采用。要启动双缓冲功能,最简单的办法就是使用 GLUT 工具包。我们以前在 main 函数里面写: glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); 就是双缓冲8。2、 实现连续动画在Visual C+ 6.0环境下实现OpenGL动画,主要是通过调用OpenGL API函数库来实现,以下便是具体的实现代码框架。/#include调用,及变量声明,相关函数声明和函数定义。/ 主函数入口void main(void)glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);/指定一个双缓冲窗口,这使得所有绘图代码都在画面外缓冲区进行渲染。glutCreateWindow("NAME");glutDisplayFunc(RenderScene);/调用RenderScene函数绘制当前窗口glutTimerFunc(33, TimerFunction, 1);/登记一个回调函数,经过设定的时间值后由GLUT调用该函数。glutMainLoop();/这个函数开始主GLUT事件处理循环。第二节 Glut库简介GLUT是用 ANSI C和 FORTRAN语言实现的一个编程接口, 其 API 是独立于窗口系统的, 所以它不返回任何活动的窗口句柄、指针及其他数据结构。GLUT 简化了应用OpenGL渲染的过程, 通过 GLUT的 API 只需简单的几步就能为 OpenGL 创建一个可供渲染的窗口。它的设计和OpenGL一样也是基于状态机的,当前窗口和当前菜单是GLUT两个最重要的状态,OpenGL中的函数一般只作用于这些状态绑定的窗口。根据简单应用程序的一般要求,GLUT合理地预定义了大部分的初始状态,从而简化了状态设置过程。基于 GLUT构建 OpenGL的应用程序框架可以按照以下几个步骤进行:(1)初始化和创建窗口。在任何 GLUT子程序之前, 应首先调用能够处理命令行选项的 glutInit () 函数对 GLUT库进行初始化,然后,再调用 glutInitDisplayMode()、glutInitWindowSize()、glutInitWindowPosition()对窗口的显示模式、大小以及窗口在屏幕中的位置进行设置,最后,调用glutCreateWindow( )函数创建新窗口; (2)设置 OpenGL初始状态。一般在窗口创建成功后,我们将要对 OpenGL初始状态进行设置。如使用 glColor ()函数设置当前颜色,使用 glLinght ()函数设置光源属性,使用 glBlendFunc()函数设置混合操作,使用 glEnable()和 glDisable()函数激活和关闭各种状态开关等; (3)注册回调函数。在程序进入主循环之前、应对回调函数进行注册。常用的注册回调函数有: glutDisplayFunc()函数、glutReshapeFunc()函数、glutKeyboardFunc()函数、 glutSpecialFunc()函数、glutInit()函数。 (4)进入 GLUT事件处理循环。在完成前面所有设置后,就可以通过 glutMainLoop( )函数进入 GLUT 事件5。处理循环。当某事件被激活,应用程序将调用相应的已注册回调函数实现特定的功能,如窗口重绘、键盘交互、鼠标交互等。第三节 基于VC+6.0的环境仿真环境配置在Visual C+ 6.0环境中编程之前,要先完成如下工作1、将下载的压缩包解开,将得到 5 个文件 2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是 VisualStudio2005,则应该是其安装目录下面的“VCPlatformSDKincludegl文件夹”)。把解压得到的 glut.h 放到这个文件夹。 3、把解压得到的 glut.lib 和 glut32.lib 放到静态函数库所在文件夹(如果是 Visual C+ 6.0,则应该是其安装目录下面的“VClib”文件夹)。4、把解压得到的 glut.dll 和 glut32.dll 放到C:WindowsSystem325、在Visual C+ 6.0调用OpenGL的接口设置进入“工程”菜单,选中“设置”选项,进入工程环境设置,如图所示3.1弹出Project settings对话框。在对话框中,激活Link标签,在该标签的对象/库板块域中键入opengl32.lib,glu32.lib,glaux.lib,这三个OpenGL的链接库,这样就可以调用OpenGL软件包了(图2.3)。图2.3 visual c+ 6.0接口设置6、 做好连接工作做好连接工作,接下来就要将绘图环境初始化、及程序中编写的InitializeOpenGL()。 首先,必须重新设置画图窗口的象素格式,使其符合OpenGL对象素格式的需要。为此需声明一个PIXELFORMATDESCRIPTOR结构的变量,并适当地设置某些结构成员的值,使其支持OpenGL及其颜色模式,此变量的声明在View类的SetupPixelFormat()函数中。再以此变量为参数调用ChoosePixelFormat()函数分配一个象素格式号,然后调用SetPixelFormat()将其设置为当前象素格式9。其次,需要为OpenGL建立着色上下文(Render Context)。只有建立了着色上下文RC后,OpenGL才能调用绘图原语在窗口中做出图形。调用wglCreateContext()建立着色上下文,它以一个设备上下文句柄为参数,返回一个与此设备上下文相联的着色上下文句柄。再以此句柄为参数调用wglMakeCurrent()使着色上下文成为线程当前使用的着色上下文,完成Windows下OpenGL绘图环境的初始化过程。第四节 本章小结本章简要介绍了OpenGL的工作过程和工作结构,用具体的例子描述了OpenGL的基本建模技术和动画技术,除此之外还详细介绍了基于VC+6.0的环境仿真环境配置。第三章 仿人机器人的三维建模用OpenGL进行三维建模主要有两种方法:一个是用3DMax绘制出仿人机器人并将其转换成3DS格式文件,然后导入到程序中;另一个是直接用OpenGL的函数绘制出仿人机器人17。第一种方法是利用辅助库提供了一些基本的窗口管理函数,能够完成OpenGL与窗口系统的集成。用辅助库来进行开发,用户在编程时不必关心窗口系统的具体细节,就能够轻松开发出具有良好跨平台移植能力的OpenGL程序。利用OpenGL所提供的窗口系统的功能,采用这种方法能够充分利用窗口系统的功能,加入各种控件,如对话框、按钮、图标等,开发出用户界面友好的程序10。本课题设计采用的是第二种方法,在Visual C+环境下利用OpenGL实现对仿人机器人的三维建模和运动仿真,只需调用OpenGL的辅助函数库Glut,图形界面由Visual C+完成。在辅助函数库GLut中提供了一些三维形体绘制函数,能够完成对如球、立方体、多面体等简单形体的绘制,利用简单形体组成机器人的三维模型。第一节 机器人三维模型的实现一 、建立OpenGL应用程序框架选择 文件->新建->工程,然后选择 Win32 Console Application,输入工程名称,然后点击“确定”(图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为其结构示意图。此机器人的绘制步骤如下: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); if (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_iRenderMode); 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 HumanModel: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,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);

    注意事项

    本文(毕业设计基于OpenGL的机器人三维仿真环境设计.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开