Windows环境下机器人图形仿真的实现(正式本)

Windows环境下机器图形仿真的实现(正式本)
Windows环境下机器⼈图形仿真的实现
丁卫华华中科技⼤学机械学院998班99100414
指导教师叶伯⽣华中科技⼤学国家数控⼯程系统研究中⼼tronatic motion
⼀、选题背景
本次毕业设计课题为“Windows环境下机器⼈图形仿真的实现”,要求编写⼀个Windows环境下的机器⼈三维图形仿真软件。该图形仿真软件是针对HNC-1R(由指导教师给定的⼀种5⾃由度机器⼈)⽽⾔。⽬前,实验室已有⼀个仿真软件,在DOS环境下运⾏,只能进⾏⼆维仿真,仿真效果不够理想。本次毕业设计就是要在Windows环境下,实现机器⼈的动态图形仿真功能,要求接受解释器提供的数据进⾏实体仿真显⽰。该仿真软件能形象、直观地反映机器⼈在给定指令下的运动状况,为离线编程提供⼀种极为有效的验证⼿段,还可⽤于分析检验轨迹规划和作业规划的正确性和合理性。
本次编写的软件应具备如下功能:机器⼈三维图形显⽰;户⾃定义机器⼈技术参数;收解释器提供的数据进⾏运动仿真(分为⾃动和单段两种⽅式);其他⼀些辅助图形处理功能:缩放、平移、旋转等。
1.机器⼈发展概况
⼯业机器⼈与计算机辅助设计系统(CAD)、计算机辅助制造系统(CAM)⼀起标志着制造制动化的⼀个崭新的阶段[1]。机器⼈是最近数⼗年才发展起来的。第⼀台机器⼈问世于50年代。直到60年代,机器⼈才开始向实⽤化发展,⽤于焊接和喷漆。70年代,随着计算机和⼈⼯智能的发展,机器⼈进⼊实⽤化时代。到了80年代,机器⼈开始普及。90年代,出现了智能机器或机器⼈化机器。⽬前,机器⼈向仿⼈机器⼈、军⽤机器⼈、医服机器⼈、机器⼈⾜球、智能机器⼈发展。机器⼈在国民经济建设中发挥着巨⼤的作⽤。
机器⼈的发展经历了三个阶段[1]:1.视教再现机器⼈,其各运动轴可⾃由编程。
2.基于感觉控制的机器⼈,能利⽤外部传感器探测外部环境和操作对象的有关信息,来改变⾏动,进⾏规划,适应外界的变化和⼲扰。
3.基于知识控制的智能机器⼈,其本⾝能认识⼯作环境、⼯作对象及其状态,能根据⼈给予的指令和⾃⾝认识外界的结果来独⽴地解决⼯作⽅法,利⽤机构来实现任务⽬标,适应⼯作环境的变化。⽬前,机器⼈技术的研究处于第三阶段。
机器⼈编程有⽰教编程和离线编程两种⽅式[2]。随着⼯业⽣产对⾃动化⽔平要求的提⾼,需要不断增强机器⼈的功能。离线编程能增加安全性,减⼩机器⼈不⼯作时间,降低成本,是机器⼈研究领域的重要课题。机器⼈仿真系统能在不接触实际机器⼈及其⼯作环境的情况下,通过图形技术,提供⼀个
和机器⼈进⾏交互作⽤的虚拟环境[1]。机器⼈图形仿真是机器⼈离线编程系统的重要组成部分[3]。机器⼈图形仿真能将机器⼈仿真的结果以图形的⽅式显⽰出来,直观的显⽰机器⼈的运动情况。研究⼈员可以在屏幕上看到机器⼈的运动情况,以及交互地对机器⼈进⾏⽰教仿真。图形仿
真为机器⼈仿真提供了良好的⼈机界⾯[4]。以往由于机器⼈图形和动画仿真的计算量很⼤,在微机上效果不佳或根本⽆法实现,因此⼤多数⽅针是基于图形⼯作站的[5]。由于造价昂贵,从⽽限制了这项技术的发展。随着计算机硬件及CAD、CAM技术的飞速发展,加上性能卓越的开放式三维图形标准OpenGL的出现,使得在PC机上实现⾼品质的机器⼈图形仿真成为现实[6]。
2.强⼤的三维图形标准OpenGL
OpenGL是在SGI,Microsoft,DEC,IBM,Intel等多家著名计算机公司的倡导下,基于SGI的GL(Graphical Library)标准制定的⼀个通⽤共享的开放三维图形标准。OpenGL 技术是美国⾼级图形和⾼性能计算机系统公司SGI所开发的三维图形库,⽬前已经成为事实上的⾼性能图形和交互式视景处理的标准。⽤户可以利⽤OpenGL图形库,创建出接近光线跟踪的⾼质量静⽌或活动的三维彩⾊图像,著名的3DS软件就是建⽴在其基础上。可直接在windows NT 3.0或windows 95以上版本上运⾏。
与其他三维图形开发⼯具相⽐,OpenGL具有鲜明的特点[7]:
●与3DS相⽐,OpenGL没有现成的对象模型可⽤,必须从⼏何图元的点、线
和多边形来构造你希望的对象。但其具有3DS不可⽐拟的灵活性、可控性,
与其他编程⼯具结合,如visual C++,能产⽣3DS⽆法获得的动态效果。
●OpenGL直接受Windows⽀持,在windows下有⼀动态连接库opengl32.dll。
直接提供应⽤程序与OpenGL成员函数的连接,不需要其他的运⾏环境(⽽不
象其他⼀些⼯具如ARX等,需基于AutoCAD环境才⾏)。
●OpenGL独⽴于硬件与操作系统,流⽔线⼯作⽅式,可以在许多平台上实现,
并可以⼯作于⽹络环境下,采⽤客户端(Client)和服务端(Server)模式,可在不
同类型的机器上运⾏。
OpenGL最初是SGI公司为其图形⼯作站开发的可独⽴于窗⼝系统、操作系统和硬件系统环境的图形开发环境。⽤户可以完全不去理会具体的硬件系统、窗⼝和操作系统的结构和指令形式,只要按照OpenGL规定的格式书写应⽤程序,就可在任何⽀持该语⾔的硬件平台上执⾏。⽬前,已有超过30家⼤公司和研究机构加盟或表⽰接受OpenGL作为标准图形软件接⼝,许多软件和硬件的制造商与SGI公司以及成⽴了OpenGL体系结构审查委员会(OpenGL ARB),从⽽使OpenGL成为⼀个开放的标准。
作为开放三位图形标准,OpenGL具有优良的性质[8]:
吴迪 网球
●⼯业标准OpenGL的规范有独⽴的国际协会——OpenGL体系结构审查委员
会(OpenGL ARB)进⾏指导,因此,OpenGL是唯⼀开放的、中⽴于制造商的、
能运⾏在多个平台上的图形标准。
●稳定性OpenGL在各种平台上的实现时间已超过⼋年,除OpenGL规范得到
良好的控制外,建议的更新也及时地通知给开发商,OpenGL向后兼容,确保
已有的程序在版本更新后不过时。
●可靠性不管在什么样的操作系统或窗⼝系统上运⾏,任何OpenGL应⽤程
序在任何兼容OpenGL API的硬件上都会得到⼀致的视觉效果。
●可扩展性OpenGL兼顾了以后的升级。开发者和硬件⼚商能利⽤OpenGL
染料激光API的扩充机制⽀持硬件的各种新特征。
●可扩充性OpenGL程序可以扩充到开发者选择的任何机器类型上运⾏。
●易⽤性OpenGL 命令(函数)具有很强的逻辑性,开发者可凭直觉开发三
维场景。OpenGL 驱动程序封装了硬件的底层信息,从⽽使开发⼈员⽆需考
虑特定硬件的特点。
⽬前,应⽤OpenGL的⼯具主要是C++语⾔,特别是Visual C++,其2.0以上版本均可直接⽀持OpenGL。再加上其强⼤的功能、丰富的资源,已成为OpenGL的⾸选开发⼯具。
OpenGL的基本元素是称之为Vertex的点,以真实世界的三维坐标表⽰,由夹在glBegin和glEnd之间⼀系列vertex *的点构成线和多边形,再由多边形去模拟物体表⾯、构造物体对象,最终显⽰对象的三维图形。在这过程中,现实世界中的对象经过取景变换、投影变换、视区变换,在屏幕上形成了三维图形。如果对象⽐较规则,表⾯⽐较平滑,则其表⾯很容易被绘制出,如⽴⽅体,只要绘制6个⾯即可;如果对象表⾯⽐较复杂,如球体,则需⽤若⼲⼩多边形去逼近对象表⾯,⼯作量较⼤,这就需要采⽤⼀些优化⽅法(参数法、递归细分法等)来减⼩编程强度、提⾼显⽰效率。
为了产⽣最逼真的画⾯,OpenGL提供了光照效果。在OpenGL中,⽤户总共可以打开8个光源,从不同⾓度照射对象,产⽣接近于现实的效果。但光源打开得越多,光照处理越复杂,耗⽤的时间越长。
光照效果由glEnable(GL_LIGHTING)函数设定,接着打开光源,再确定光源位置,光线⽅向、夹⾓、强度等参数值,就可以在视区中产⽣绚丽的光照效果。
没有打开光源时,物体表⾯的颜⾊可以直接设定,可采⽤RGBA模式或颜⾊索引模式[8];如打开光源后,物体表⾯的⾊彩由光源和物体表⾯材质属性共同确定。通过设定光源和物体表⾯材质的环境光、直射光、散射光属性的值,可以取得相应的表⾯颜⾊,这与现实情况极其相似。
OpenGL能提供以下⼀些基本功能:1)模型绘制 2)模型观察 3)颜⾊模型的指定 4)光照应⽤ 5)图像效果增强 6)位图和图像处理7)纹理映射 8)实时动画 9)交互技术等。由于OpenGL的作⽤机制是客户/服务器机制,因⽽是⽹络透明的。此外,在VC 下,可以利⽤MFC类库作⽤OpenGL与Windows的接⼝,编译动态链接库,以供⽤户的其他程序调⽤。使⽤OpenGL开发模块时,能直接调⽤其提供的函数,只需提供三维多⾯体在实际三维空间的坐标参数,就可画出带光照的、有表⾯材质的三维多⾯体来,达到形象、逼真的效果,不需⽤户⾃⾏设计投影算法。OpenGL还设置了旋转、平移函数,可以⽅便的从不同⾓度、不同视距对机器⼈进⾏观测[9]。
3.本⽂的研究内容和主要⼯作
⼯业机器⼈与计算机辅助设计系统(CAD),计算机辅助制造系统(CAM)⼀起标志着制造制动化的⼀个崭新的阶段。⼯业机器⼈
是典型的机电⼀体化⾼技术产品,在许多领域对提⾼⽣产⾃动化⽔平,提⾼劳动⽣产率、产品质量、经济效益、改善⼯⼈作业条件等⽅⾯起着不可替代的作⽤。机器⼈编程有⽰教编程和离线编程两种⽅式。离线编程能增加安全性,减⼩机器⼈不⼯作时间,降低成本,是机器⼈研究领域的重要课
题。机器⼈图形仿真是机器⼈离线编程系统的重要组成部分。本⽂所做的⼯作为开发HNC-1R型机器⼈图形⽅针软件,主要做了以下⼏⽅⾯的⼯作:
1)windows下利⽤OpenGL建⽴出了⽐较接近实体,并加⼊了光照及材质的具有⼀定美感的机器⼈三维模型。
2)实现了机器⼈系统参数的设置,并加⼊了⾝份验证及密码修改。机器⼈各参数、运动状态及⽤户信息均可⾃动保存在⽂件中,下次使⽤时,可得到上次数据。系统能适应不同型号机器⼈,通⽤性较强。
3)在前⼈给出机器⼈反解算法的⼯作基础上,实现了机器⼈单段、⾃动、点动、回零、步进等⼯作⽅式的三维动画仿真。
4)实现了机器⼈的轨迹显⽰控制,可根据需要选择是否显⽰机器⼈的运动轨迹。
5)编写了基本的图形处理功能,在仿真的同时,⽤户能⽅便地平移、缩放、旋转图像,从各个⾓度、
不同视距观察仿真过程。并能使机器⼈回预定位置。
⼆、⽅案论证
1. OpenGL与VC编程
作为⾼效的三维图形标准,OpenGL具有强⼤的图形处理功能。开发者不必考虑三维图形在⼆维屏幕上的显⽰问题,OpenGL ⾃带了投影函数,⽤户只需设置相应的投影⽅式,OpenGL即可将⽤户绘制的三维图形投影到计算机屏幕上。开发者可以直接按三维⽅式进⾏思维、绘图。
OpenGL强⼤的三维图形功能为⽤户开发图形仿真系统提供了有利的⼯具。在虚拟仿真系统中。软件往往仿真某⼀个过程,这就需要产⽣动画。⽣成三维动画是OpenGL 的⼀个重要功能。它是由⼀帧帧静⽌的画⾯组成,这些画⾯以极快的速度播放,利⽤⼈们的视觉暂停,得到流畅的动态效果。产⽣⾼质量动画的关键是画⾯的显⽰速度,如果速度慢,显⽰的画⾯就会迟钝、抖动,屏幕产⽣闪烁。对此,0penGL提供了双缓存和显⽰表技术:双缓存技术就是提供两个完整的颜⾊缓存区,在显⽰画⾯的同时,可以在另⼀缓存区绘制下⼀幅画⾯,如此反复,可提⾼显⽰速度,由于⽤户看不到绘制过程,双缓存技术克服屏幕闪烁;显⽰列表技术则是将⼀组绘图命令编译、执⾏,将显⽰结果存储在缓存中,在需要显⽰时执⾏调⽤指令即可在屏幕上迅速刷新画⾯。为了三维仿真机器⼈的运动,可以在程序中打开⼀定时器Timer(),每隔⼀个⼩的时间⽚就发出消息,调⽤显⽰模块。在这个⼩的时间⽚中,
改变机器⼈的姿态,刷新屏幕。机器⼈姿态可⽤直⾓坐标和参数坐标表⽰。
在OpenGL中,⾃带有图形平移及旋转函数,开发者不必进⾏复杂的矩阵运算。这对于开发机器⼈仿真系统来说,⾮常⽅便,因为机器⼈各连杆之间的变换均可转化为单⼀的平移或旋转的合成。OpenGL还运⽤了局部坐标及世界坐标,开发者可⽤PushMatrix( )保存当前位置,执⾏完绘制⼯作后,⽤PopMatrix( )恢复当前坐标系。此外,OpenGL还有各种投影⽅式供选择,并能⾃由的加⼊光照和材质,构造出绚丽的模型。OpenGL的双缓存技术⼜保证了仿真动画的⾼质量。
OpenGL强⼤的图形功能使其已成为开发仿真系统的⾸选⼯具。OpenGL直接受Windows⽀持,在Windows98(Windows2000)系统system(system32)⽬录下有⼀动态连
接库opengl32.dll。直接提供应⽤程序与OpenGL成员函数的连接,不需要其他的运⾏环境。另外,VC的INCLUDE⽬录下有⼀GL⽂件夹,提供OpenGL的头⽂件,LIB ⽬录下有OpenGL的库函数。在可视化的编程⼯具VC下,需将
opengl.lib,glut32.lib,glaux.lib加⼊到当前⼯程中。初始⼯作完成后,可直接调⽤OpenGL 函数,进⾏图形绘制。
在VC中,编制OpenGL程序的⼤致步骤如下:设置像素格式,创建绘制描述表;响应WM_SIZE消息,
使窗⼝改变时,绘制的场景不发⽣扭曲。OpenGL初始化,设置投影⽅式、光照、材质等;在OnDraw函数中绘制OpenGL场景;设置时钟,定时刷新屏幕,形成动画。窗⼝关闭时,删除绘制描述表。
2.机器⼈建模及软件编写整体思路
本次编写的软件,应⾸先⽣成⼀个机器⼈静态仿真实体。仿真实体由⽤户⾃定义机器⼈技术参数或直接调⼊机器⼈描述⽂件产⽣。接收解释器的数据后,实现机器⼈的运动仿真。同时,⽤户可以对图形进⾏缩放、平移、旋转等操作,以便从不同⾓度观察机器⼈的运动状况。
软件的输⼊数据有:⽤户⾃定义的机器⼈技术参数(或已有的机器⼈数据描述⽂件),解释器的运动参数(亦可由⽤户输⼊)。输出数据有:机器⼈三维图形仿真,机器⼈系统参数⽂件的⽣成及存储。
图1 机器⼈模型层次结构图
经过分析,该软件可按如下步骤编写:
1)⾸先利⽤OpenGL⽣成机器⼈三维仿真实体。
根据机器⼈的技术参数,利⽤OpenGL强⼤的三维图形功能, ⽣成机器⼈三维仿真实体。机器⼈的部件⽤简单⼏何形体表⽰。OpenGL绘制机器⼈模型时,开发者不必⾃⼰进⾏复杂的矩阵运算,这些坐标
变换在OpenGL中⽤简单的函数即可完成。变换矩阵可分解为单步的旋转和平移变换,因此,在OpenGL中可以⽅便的绘制出机器⼈模型。
2)接收来⾃解释器的数据,进⾏机器⼈运动仿真
根据坐标变换原理[1],可求得各坐标变换矩阵,利⽤坐标变换矩阵即可计算出机器⼈的各部件的姿态,从⽽进⾏运动仿真。机器⼈姿态可⽤直⾓坐标和关节坐标表⽰。机器⼈个连杆之间的变换均可转化为单⼀的平移或旋转的合成,在OpenGL中,⾃带
有图形平移及旋转函数,因此开发者不必进⾏复杂的矩阵运算,直接按三维⽅式进⾏思维、绘图。采⽤双缓存、定时刷新屏幕的⽅式来实现动画,当机器⼈的坐标发⽣改变时,机器⼈模型的位姿便发⽣变化。于是便可形成仿真动画。
3)完善软件,编写基本的图形处理功能及存储功能
完成主要功能后,还需其它⼀些辅助功能,如缩放、平移、旋转,⽂件存储等功能。
由以上分析,可建⽴机器⼈层次模型如图1所⽰:
本软件拟⽤VC++6.0编写,利⽤MFC库直接调⽤OpenGL库函数,绘制机器⼈模型。运⾏环境为Windows95以上版本或WindowsNT V3.0以上版本系统,VC++6.0,普通中等微机。allhd
三、过程论述
1.整体框架的实现:仿真界⾯与编程界⾯的切换
根据软件设计要求,本次开发的图形仿真软件需接受解释器数据。因此,图形仿真与解释器应在同⼀框架上实现。应⽤程序应有编程及仿真两个界⾯,通过菜单实现两种界⾯的切换。程序应采⽤多视图结构。编程界⾯采⽤CEditView的派⽣类。CEditView类利⽤Edit接受⽤户输⼊,具有输⼊框的⼀切功能[10],可作为程序编写界⾯。仿真界⾯为CView的派⽣类,⽤于机器⼈模型的绘制及运动仿真。实现过程如下:利⽤AppWizard创建⼀个⼯程,取名RobotSimulation。在Step4中选择Contex Help 项,⽤于产⽣帮助⽂件,显⽰机器⼈指令代码的使⽤⽅法。在Step6中选择CEditView 作为视图基类,⽤于在此视类窗⼝上进⾏代码编辑。基于CView新建⼀个视类CRobotShow,作为仿真界⾯。为了实现两种界⾯的切换,在菜单中加⼊“选择视图”下拉菜单,在此菜单下添加两个菜单项:“编程界⾯”及“仿真界⾯”。设置其ID分别
为“ID_PROGRAM”,“ID_SIMULATION”。为了实现视图的激活,在CMainFrame类中加⼊两个成员函数[11]:
CreateActivateView(CruntimeClass*pNewViewClass,UINT nID)
CreateActivateView2(CRuntimeClass*pNewViewClass, UINT nID)
甘氨酸乙酯
各参数意义为:pNewViewClass是指向激活视图类的指针,nID为视图类标志。CreateActivateView⽤于激活仿真界
⾯,CreateActivateView2⽤于激活编程界⾯。
由于编程界⾯需要显⽰程序编译信息,因此需要两个视图,CreateActivateView2利⽤拆分条(CSplitterWnd)对象将编程界⾯分为上下两个窗⼝,上窗⼝⽤于编程,下窗⼝⽤于显⽰编译信息。
在CMainFrame类中响应两个菜单项ID_PROGRAM,ID_SIMULATION的COMMAND消息,在消息函数中加⼊代码,激活相应界⾯。如响应ID_SIMULATION 的COMMAND消息函数激活仿真界⾯,代码如下:
void CMainFrame::OnSimulation() //激活仿真界⾯
{
CreateActivateView(RUNTIME_CLASS(CRobotShow),2);
m_nViewType = 1;
ShowControlBar(&m_wndToolBar1,TRUE,FALSE);//显⽰⼯具栏撞月
ShowControlBar(&m_DlgShowBar,TRUE,FALSE);//显⽰对话框⼯具栏
ShowControlBar(&m_DlgShowBarCom,TRUE,FALSE);//显⽰对话框⼯具栏
}
后⾯三条指令:⽤来显⽰⼯具栏和对话框⼯具栏。对话框⼯具栏⽤于显⽰机器⼈的运动信息,如:⼯作⽅式、运⾏指令、坐标、进给速度倍率等。由于此对话框只在仿真界⾯中显⽰,因此,激活编程界⾯时应将其隐藏。激活仿真界⾯时,需将此对话框⼯具栏显⽰出来。m_nViewType⽤于判断当前界⾯的类型,以控制相应菜单项可⽤状态。激活仿真界⾯时,将其置为1,激活编程界⾯时将其置为0。
为了使界⾯更加友好,应在界⾯激活时,将其激活菜单置为禁⽤状态,⽤户只可选择另⼀激活菜单项。在CMainFrame类中响应两个菜单项ID_PROGRAM,ID_SIMULATION的UPDATE_COMMAND_UI消息,⽤于控制菜单项的可⽤状态。
m_nViewType为1时,当前界⾯为仿真界⾯,应将菜单项“仿真界⾯”置为禁⽤状态。m_nViewType为0时,当前界⾯为编程界⾯,应将菜单项“编程界⾯”置为禁⽤状态。如响应ID_SIMULATION的UPDATE_COMMAND_UI消息函数,代码如下:
void CMainFrame::OnUpdateSimulation(CCmdUI* pCmdUI)
{
if(m_nViewType == 0)
pCmdUI->Enable(TRUE); //若为编程界⾯,则使本菜单项可⽤
else
pCmdUI->Enable(FALSE); //若已为仿真界⾯,则使本菜单项⽆效}
所有上述⼯作完成后,还应在MainFrame.cpp⽂件的顶部将包含头⽂件RobotShow.h。为了将包含的各个头⽂件排序,还要在RobotSimulation.h⽂件的类定义之前增加⼀个⽤于该⽂档类的转发类说明,代码如下:
class CRobotSimulationDoc;
完成了上述⼯作后,就可利⽤两个菜单项实现界⾯的转换本⽂的⼯作为机器⼈仿真,以后的⼯作⼤部分将在CrobotShow中进⾏。
2.VC下OpenGL建模,动画实现
1) CRobotShow类OpenGL编程初始化
在VC集成环境下编制OpenGL程序有⼀定的步骤[8]。⾸先应设置像素格式,创建绘制描述表,设置投影⽅式、光源、材质、显⽰列表等。否则,若不进⾏上述初始化⼯作,将不能调⽤OpenGL函数进⾏编程。仿真界⾯在CRobotShow类中完
成,CRobotShow类初始化步骤及各步意义如下:
(1)重载基类PreCreatWindow函数
在CRobotShow类中添加响应PreCreatWindow的消息函数,修改PreCreatWindow 函数,加⼊如下代码:
BOOL CRobotShow::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style=cs.style|WS_CLIPSIBLINGS|WS_CLIPCHILDREN;
return CView::PreCreateWindow(cs);
}
窗⼝必须设置以上属性,否则不能设置像素格式。
(2)设置像素格式,创建绘制描述表

本文发布于:2024-09-22 07:27:20,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/486129.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:机器   图形   编程   实现   系统
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议