第三章
图4-17 PART6_MARKER_6的速度和加速度图像
PART6_MARKER_6的角速度和角加速度曲线如图4-18所示:
图4-18 PART6_MARKER_6的角速度和角加速度图像
从上面的图像中我们可以看到,PART6_MARKER_6的速度先增后减,加速度变化也一样。速度从开始时刻的0mm/s增大到中间时刻的370.1791mm/s再减小到终点时刻的0mm/s,加速度变化较三次多项式规划时平缓,不存在突变点。在0s时最小,为0mm/ ,中间时刻达到最大值396.2381mm/ ,然后逐渐下降到终点时的0mm/ 。角速度和角加速度的变化情况如下:最大角速度为62.8912d/s,最大角加速度为32.826d/ ,角加速度不存在明显突变。 (3)轨迹规划比较分析
从上面的两种轨迹仿真结果中可以看出,三次多项式轨迹规划和五次多项式轨迹规划最大的区别就在前者的加速度和角加速度在中间点存在跳变,而后者的加速度和角加速度的变化则趋于平缓。我们对两种情况下PART6_MARKER_6点的运动参数变化情况进行比较,如下表所示:
表4-3 PART3_MARKER_12点的运动参数比较 比较项目 三次多项式 五次多项式 最大速度mm/s 297.6708 370.1791 最大加速度mm/ 253.6641 396.2381 加速度突变 有 无 最大角速度d/s 最大角加速度d/
50.3512 62.8912
33.4069 32.826 角加速度突变 有 无
之所以有这种区别,原因在于三次多项式轨迹规划中,我们的边界条件只有四个,初始位移和速度,终点的位移和速度;而在五
次多项式轨迹规划中,我们的初始条件中包含了加速度,分别为初始位移、速度和加速度,终点位移、速度和加速度。因此在一般的三次多项式轨迹规划中,我们应该加入最大速度变化的限制条件,从而保证机器人的运动更平稳。
18
第四章
第四章 基于模型的视景仿真系统的设计与实现
随着机器人研究的不断深入,机器人三维可视化技术作为机器人设计和研究中安全可靠、灵活方便的工具,越来越受到重视。机器人的三维图形仿真,就是要建立一个精确、逼真的机器人模型以及机器人工作环境。
三维可视化是数学模拟和科学计算可视化技术相结合的产物,它一般包括两方面内容:一是将传统数字仿真计算的结果转换为图形和图像形式;二是仿真交互界面可视化,即具有可视化交互和动画展示能力,要求能够实时跟踪显示仿真计算结果。可视化技术的
出现,使得人们能够在三维图形世界中观察机器人,并通过计算机交互式对机器人进行示教仿真。
一般来说,机器人可视化仿真系统主要由三个模块组成:工业机器人的三维模型模块(实现仿真系统的基础)、示教和再现模块(实现示教和再现的功能)、离线编程模块,见图4-1。但是由于时间和知识限制,本文只研究了后两个模块的实现,对离线编程并没有采取通常的做法,根据老师的建议想将Matlab软件和VC++结合起来,用在Matlab里建立的控制模型来控制OpenGL里机械手的运动,本章按照这个思路实现了利用Matlab里建立的控制模型导出的数据来控制机械手的运动。
图4-1 通用机器人可视化仿真系统模块
本章将通过VC++6.0和OpenGL来完成机械手的三维可视化仿真系统的设计与实现,它提供一个真实的实验平台,在不接触实际机器人及其工作环境的情况下,通过图形技术,提供一个和机械手进行交互的虚拟环境。本章主要内容为: (1)建立程序框架;
(2)建立机械手三维模型; (3)建立仿真场景;
(4)实现基于模型的视景仿真。
4.1 OpenGL概述
OpenGL即开放性图形库(open graphic libary)是美国高级图形和高性能计算机系统公司SGI所开发的三维图形标准库,具有绘制三维图形的各项功能,它是处理专用图形硬件的软件接口,支持可视化的实现,它是三维计算机图形和模型库,独立于窗口系统和操作系统。
从开发人员角度看,OpenGL是一些绘图指令或函数的集合。这些指令允许用户
对二维几何对象或三维几何对象进行说明,允许用户对对象实施操作以便把这些对象着色到帧存上。OpenGL可以方便地实现三
维图形的交互操作。
对于OpenGL的实现者而言,OpenGL是影响硬件操作的指令集合。如果硬件仅仅包括一个可以寻址的帧存,那么OpenGL就不得不在CPU上实现对象的描绘,OPenGL可以保存数量较大的状态信息,这些状态信息可以用来指示OpenGL如何往帧存中画物
体。有一些状态,用户可以直接使用,通过调用就可得到状态值;而另一些状态只有作用在所画物体上,才能使其产生的影响可见。
19
第四章
4.1.1 OpenGL工作方式
OpenGL在Windows环境下的工作过程如图4-2所示。OpenGL的库函数被封装在OPengl犯.dll动态链接库中,从客户应用程序发布的对openGL函数的调用首先被Opengl32处理,在传给服务器后,被 winsry.dll进一步进行处理,然后传给DDx(nivieeDriverInterface),最后传递给视屏驱动程序。【18】
图4-2 OpenGL在Windows环境下的工作过程
4.1.2 OpenGL绘制过程
OpenGL具有较强的图形绘制能力,包括绘制物体、启动光照、管理位图、纹理映射、动画、图形增强及交互技术等功能。综合以上功能,作为图形硬件的软件接口,OpenGL主要是将三维的物体投影到一个二维平面上,之后处理得到像素,进行显示。OpenGL首先将物体转化为可以描述物体几何性质的顶点(Vertex)与描述图像的像素(Pixel),在执行一系列操作后,最终将这些数据转化成像素数据。也就是说,OpenGL是基于点的。有一组顶点定义的图元(Pirmitive)执行完绘制操作后,后继图元才能作用。简单的图形生成过程如图4-3所示。
图4-3 OpenGL中简单图形的绘制过程
对图元的定义:图元由一组顶点定义,这一组顶点可以是一个或是多个顶点。每个顶点信息可以是二维的也可以是三维的。顶点线段、多边形等通过在函数glBegin()和glEnd()之间一系列顶点的数据绘制出图形。
对图元的操作:OpenGL用交换矩阵、光照、反走样、像素操作等方法控制图元的绘制。图元的操作处理过程结束后,只留下图
信息可以由位置坐标、颜色值、法向量、纹理坐标组成。法线、纹理、颜色值会在处理每个顶点的过程中被使用。OpenGL将点、
元可见部分,准备进行光栅化(投影)处理。像素处理比较特殊:对像素、位图、影像直接进行像素操作,然后进行光栅化,后者是有些数据被存储在纹理中供顶点使用。
光栅化过程:将图元转化为二维图像,完成每个图像点的颜色与深度的计算,生成结果为基片,即各图元的二维结果。 基片操作:处理过程包括基片是否遮挡、测试、融合等,最后得到像素,存入显示帧缓冲中,完成整个绘制过程。
4.2 机器人三维可视化框架建立
4.2.1 利用MFC建立单文档应用程序框架
VC++6.0能够创建多种类型的MFC应用程序,不同的应用程序具有不同的应用程序框架,VC++6.0系统的设计者创建了程序框架生成工具Appwizard,用它来建立开发各种MFC应用程序所需要的程序框架,通过APpwizard就可移动生成包含基本程序框架
20
第四章
的应用程序包,这样就可以在此基础上进行程序设计。在参考许多数字处理、图像处理软件的基础上,决定采用单文档的应用程序框架。【16】 ? 创建工程:启动VC++6.0进入VC++的集成开发环境,新建一个工程,选择 MFC Appwizard选项,在应用程序类型中选择 singledocument(单文档)类型。
? 设置编译环境:设置编译环境主要包括设置包含文件和设置库文件路径。 ? 加入OpenGL库:选择菜单Project Setting,将弹出 ProjectSettings对话框,在该对话框选择Link标签页,如图4-4所示。在该对话框中的Object/Library Module文本框中加入opengl32.lib、glu32.lib、glaux.lib三个函数库文件。在头文件中加入 gl/glu.h(OpenGL核心函数的头文件)和 gl/glut.h(使用函数的头文件),这样就可以调用openGL软件包了。
图4-4 加入OpenGL库函数
这样,我们就很容易的建立了一个在Windows环境下进行OpenGL编程开发的框架,按快捷键F7进行编译,按快捷键F5执行就会弹出一个窗口,包含一个主菜单、一个工具条和一个状态条等部件。如下图4-5所示:
图4-5 程序框架
4.2.2 设置OpenGL绘图环境
1)创建RC
在windows环境下建立OpenGL绘制窗口是通过建立设备描述表(DC)和绘制描述表(RC)来实现的,而RC和DC是连接在一块的。
因此,为了建立RC,先要建立DC。用ChoosePixelFormat()选择系统中与pfd描述的像素格式最为匹配的返回;本文现在消息响应函数OnCreate里调用InitializeOpenGL(m_pDC)函数,然后又通过后者调用SetupPixelFormat()函数来设置DC像素格式完成绘图环境的设置工作;
int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct) { ... } {
return 0;
if (CView::OnCreate(lpCreateStruct) == -1) return -1; m_pDC = new CClientDC(this);
InitializeOpenGL(m_pDC); //调用函数
BOOL CMyView::InitializeOpenGL(CDC* pDC)
m_pDC = pDC;
21
第四章
SetupPixelFormat();//设置像素格式
m_hRC = ::wglCreateContext(m_pDC->GetSafeHdc());
::wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC);//选择像素格式 return TRUE;
}
2)设置坐标变化方式
每次窗口创建或改变大小的时候,都要重新设置视口大小,因此我们在OnsizeO中进行视口设置。而投影变换和视点一模型变换的初始设置也可以放在里面进行。
void CMyView::OnSize(UINT nType, int cx, int cy) {
CView::OnSize(nType, cx, cy); if (cy==0) //
防止被零除
{cy=1; } glViewport(0,0,cx,cy);// 重置当前视口
glMatrixMode(GL_PROJECTION);// 选择投影矩阵
glLoadIdentity(); // 重置投影矩阵
gluPerspective(45.0f,(float)cx/(float)cy,0.1f,2000.0f);//设置透视投影矩阵 glMatrixMode(GL_MODELVIEW);// 选择模型观察矩阵 glLoadIdentity(); // 重置观察模型矩阵
}
3)绘图显示
完成上面的设置以后我们就可以利用OpenGL进行绘图了。本文为了程序的简约,先在OnDraw()里调用RenderScene()函数,然后在RenderScene()里调用所有绘图显示函数。代码如下: void CMyView::OnDraw(CDC* pDC) { CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
RenderScene(); //调用绘图函数
}
4)程序结束,释放资源。
调用消息响应函数OnDestroy(),在函数里完成相关资源的释放。 void CMyView::OnDestroy() {
CView::OnDestroy(); ::wglMakeCurrent(0,0);
22
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库大学电脑作业:大学论文(50页)(6)在线全文阅读。
相关推荐: