四自由度机器人手臂工作空间分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

四自由度机器人手臂设计
---工作空间分析
050696135 张东红指导老师:刘铁军讲师
第1章绪论
1.1 机器人的概念
我们一直试图为自己的研究对象下一个明确的定义----就象其他所有的技术领域一样----始终未能如愿。

关于机器人的概念,真有点像盲人摸象,仁者见仁,智者见智。

在此,摘录一下有代表性的关于机器人的定义:
牛津字典:
Automation with human appearance or functioning like human
科幻作家阿西莫夫(Asimov)提出的机器人三原则:
第一,机器人不能伤害人类,也不能眼见人类受到伤害而袖手旁观;
第二,机器人必须绝对服从人类,除非人类的命令与第一条相违背;
第三,机器人必须保护自身不受伤害,除非这与上述两条违背;
日本著名学者加藤一郎提出的机器人三要件:
1.具有脑、手、脚等要素的个体;
2.具有非接触传感器(眼、耳等)和接触传感器;
3.具有用于平衡和定位的传感器;
世界标准化组织(ISO)
机器人是一种能够通过编程和自动控制来执行诸如作业或移动等任务的机器。

细细分析以上定义,可以看出,针对同一对象+所做的定义,其内涵有很大的区别,有的注重其功能,有的则偏重与结构。

这也就难怪对同一国家关于机器人数量的统计,不同资料的数据会很大差别。

虽然现在还没有一个严格而准确的普遍被接受的机器人定义,但我们还是希望能对机器人做某些本质性的把握。

首先,机器人是机器而不是人,它是人类制造的替代人类从事某种作业的工具,它只能是人的某些功能的延伸。

在某些方面,机器人可具有超越人类的能力,但从本质上说机器人永远不可能全面超越人类。

其次,机器人在结构上具有一定的仿生性。

很多工业机器人模仿人的手臂或躯体结构,以求动作灵活。

海洋机器人则在一定程度上模仿了鱼类结构,以期待得到最小的水流阻力。

第三,现代机器人是一种机电一体化的自动装置,其典型特征之一是机器人受微机控制,具有(重复)编程的功能。

1.2 机器人的基本组成和分类
机器人由机械部分、传感部分、控制部分三大部分组成。

这三大部分可分成驱动系统、机械结构系统、感受系统、机器人—环境交互系统、人机交互系统、控制系统六个子系统。

1.驱动系统
要使机器人运行起来,需给各个关节即每个运动自由度安置传动装置,这就是驱动系统。

2.机械机构系统
机器人的机械结构系统有机身﹑手臂﹑末端操作器三大件组成。

每一大件都有若干个自由度,构成一个多自由度的机械系统。

3.感受系统
它由内部传感器模块和外部传感器模块组成,获取内部和外部环境状态中有意义的信息。

智能传感器的使用提高了机器人的机动性﹑适应性和智能化的水准。

人类的感受系统对感知外部世界信息是极其灵巧的,然而,对于一些特殊的信息,传感器比人类的感受系统更有效。

4.机器人-环境交互系统
机器人-环境交互系统是实现机器人与外部环境中的设备相互联系和协调系统。

机器人与外部设备集成为一个功能单元。

如加工制造单元﹑焊接单元﹑装配单元等。

当然,也可以是多台机器人﹑多台机床或设备,多个零件存储装置等集成为一个去执行复杂任务的功能单元。

5.人--机交互系统
人—机交互系统是人与机器人进行联系和参与机器人控制的装置。

6.控制系统的任务是根据机器人的作业指令程序以及从传感器反馈回来的信号,支配机器人的执行机构去完成规定的运动
和功能。

如果机器人不具备信息反馈特征,则为开环控制系统;具备信息反馈特征,则为闭环控制系统。

根据控制原理可分为程序控制系统,适应性控制系统和人工智能控制系统。

根据控制运动的形式可分为点位控制和连续轨迹控制。

按不同的分类方式,机器人可以分为不同的类型。

下面给出几种常用的分类方法:
1.按技术特征来划分,机器人可以分为第一代机器人、第二代机器人和第三代机器人。

2.按控制类型来划分,可分为以下几种:
(1)伺服控制机器人(2)非伺服控制机器人(3)PTP控制机器人(4)CP控制机器人
3.按机械结构来划分,可以分为直角坐标型机器人、极坐标型机器人、关节型机器人、SCARA型机器人以及移动机器人。

4.按用途来划分,可分为工业机器人、工业机器人、医疗机器人、海洋机器人、军用机器人、太空机器人、管道机器人、娱乐机器人等等。

1.3 机器人技术的应用
研究机器人的最初目的是为了帮助人们摆脱繁重劳动和简单的重复劳动,以及替代人到有辐射等危险环境中进行作业。

因此机器人最早在汽车制造业和核工业领域得以应用机器人技术的不断发展,工业领域的焊接、喷漆、搬运、装配等场合,已经开始大量使用机器人。

第2章工作空间的分析
2.1 引言
机器人的工作空间就是机器人末端构件上的参考点所能达到的点的集合。

机器人工作空间的大小代表了机器人的活动范围,它是衡量机器人工作能力的一个重要运动学指标。

在机器人的设计、控制及应用过程中,工作空间都是一个需要考虑的重要问题。

例如根据工作空间的要求来确定机器人的结构尺寸,冗余度机器人回避障碍物的动作规划等等,都要考虑机器人的可达空间。

此外也可用工作空间来衡量一个设计中的机器人机构的合理性。

求解机器人的工作空间可以使用解析法,图解法或者数值法,解析法是通过多次包络来确定工作空间边界,虽然可以把工作空间的边界用方程表示出来,但从工程角度上来说,其直观性不强,十分烦琐,一般只适用于关节数少与3的。

图解法也可以用来求解机器人的工作空间边界,得到的往往是工作空间的各类剖截面或剖解线。

这种方法直观性强,但是也受到自由度数目的限制,当关节数较多时必须进行分组处理。

机器人工作空间计算的数值方法是以极值理论和优化方法为基础的首先计算机器人工作空间边界曲面上的特征点,用这些点构成的线表示机器人的边界曲线,用这些边界曲线构成的面表示机器人的边界曲面。

随着计算机的广泛应用,对机械手工作空间的分析越来越倾向与数值方法。

这是因为数值方法可以利用计算机的高速数值运算能力和图形显示功能,方便快捷的得到机器人工作空间的形状。

本文采用数值法,通过对运动学方程来求解机器人工作空间。

2.2 工作空间的参数方程
机器人的运动学方程为:
(1)
由它的运动学方程可以得到工作空间的参数方程。

式中前三列是末端坐标轴相对基坐标的方向余弦,第四列表示末端坐标系的原点相
对于基坐标系的位置向量。

当给定了机器人的结构参数,工作空间就由广义坐标确定。

由于实际结构和驱动装置的限制,广义坐标不能任意取值,有一定的范围,
即:(2)
如果选末端点P为参考点,设他在末端坐标系中的齐次坐标为,则:
(3)
将它展开,即:
(4)
可以把P点的集合定义为机器人的工作空间,即:
(5)
2.3 利用运动学方程求解
利用运动学方程求解其末端参考点相对于基坐标的坐标系,下面为一个典型的运动学方程求解——圆柱坐标臂。

圆柱坐标臂的结构如图2.1,该机械臂有移动—转动—移动三个连杆,它的工作范围是一个空心圆柱建立D—H坐标系,如图2—1所示,关节变量为,连杆的坐标变换矩阵为:
(6)
(7)
(8)
(9)
(10)
运动学方程为:
(11)
图2.1 圆柱坐标系结构示意图
本文设计的是四自由度的机器人手臂,根据以上简单的实例可以求出运动学方程:
图2.2 四自由度机器人手臂
αn a n d nθn关节变量θn 关节
n
1 90°0 0 θ1-90°~+90°
2 0°a2 0 θ2-180°~0
3 90°a30 θ3-0~180°
4 0°0 d4θ40~90°
图2.2中,a 2==402mm;a3=42mm,d4的值为手爪末端夹钳中心到关节4坐标原点的长度,值为600mm。

0T4= A1 A2 A3 A4
=
0T4=
得工作空间运动学方程:
第3章编程软件介绍
3.1 程序语言介绍
Visual C++6.0是Microsoft Visual Studio 6.0家族成员之一,是一个功能极为强大的可视化软件开发工具。

与其他的可视化编程环境(如Visual Basic)一样,Visual C++6.0集程序的代码编辑、编译、连接、调试等功能于一体,给编程人员提供了一个完整、全面而又方便的开发环境,并提供了许多有效的辅助开发工具。

Visual C++基于
C\C++,所以它拥有两种编程方式,一种是传统的基于Windows API的C编程方式,虽然其代码效率较高,但开发难度与开发工作量也随着正增高,目前使用这种编程方式的用户已经很少;另一种是基于MFC的C++编程方式,虽然其代码运行效率相对很低,但开发难度小、开发工作量小、源代码效率高,已经成为Visual C++开发Windows应用程序的主流。

3.2 基于VC++ 6.0的OpenGL简介
随着计算机多媒体技术、可视化技术及图形学技术的发展,我们可以使用计算机来精确地再现现实世界中的绚丽多彩的三维物体,并充分发挥自身的创造性思维,通过人机交互来模拟、改造现实世界,这就是目前最为时髦的虚拟现实技术。

通过这种技术,建筑工程师可以直接设计出美观的楼房模型;军事指挥员可以模拟战场进行军事推演,网民可以足不出户游览故宫博物馆等名胜古迹等。

而虚拟现实技术最重要的一部分内容就是三维图形编程。

当前,三维图形编程工具中最为突出的是SGI公司的OpenGL(Open Graphics Language,开放式的图形语言),它已经成为一个工业标准的计算机三维图形软件开发接口,并广泛应用于游戏开发、建筑、产品设计、医学、地球科学、流体力学等领域。

值得一提的是,虽然微软有自己的三维编程开发工具DirectX,但它也提供OpenGL图形标准,因此,OpenGL可以在微机中广泛应用。

OpenGL是用于开发简捷的交互式二维和三维图形应用程序的最佳环境,任何高性能的图形应用程序,从3D动画、CAD辅助设计到可视化访真,都可以利用OpenGL高质量、高性能的特点。

OpenGL自1992年出现以来,逐渐发展完善,已成为一个唯一开放的,独立于应用平台的图形标准,一个典型的OpenGL应用程序可以在任何平台上运行--只需要使用目标系统的OpenGL库重新编译一下。

OpenGL非常接近硬件,是一个图形与硬件的接口,包括了100多个图形函数用来建立三维模型和进行三维实时交互。

OpenGL强有力的图形函数不要求开发人员把三维物体模型的数据写成固定的数据格式,也不要求开发人员编写矩阵变换、外部设备访问等函数,大大地简化了编写三维图形的程序。

例如:
1 OpenGL提供一系列的三维图形单元(图元)供开发者调用。

2 OpenGL提供一系列的图形变换函数。

3 OpenGL提供一系列的外部设备访问函数,使开发者可以方便地访问鼠标、键盘、空间球、数据手套等外部设备。

由于微软在Windows中包含了OpenGL,所以OpenGL可以与Visual
C++紧密接合,简单快捷地实现有关计算和图形算法,并保证算法的正确性和可靠性。

简单地说,OpenGL具有建模、变换、色彩处理、光线处理、纹理影射、图像处理、动画及物体运动模糊等功能:第4章 OpenGL的编程环境
4.1 OpenGL的工作流程
图4.1 OpenGL的工作流程
如上图所示,几何顶点数据包括模型的顶点集、线集、多边形集,这些数据经过流程图的上部,包括运算器、逐个顶点操作等;图像数据包括象素集、影像集、位图集等,图像象素数据的处理方式与几何顶点数据的处理方式是不同的,但它们都经过光栅化、逐个片元(Fragment)处理直至把最后的光栅数据写入帧缓冲器。

在OpenGL中的所有数据包括几何顶点数据和象素数据都可以被存储在显示列表中或者立即可以得到处理。

OpenGL中,显示列表技术是一项重要的技术。

OpenGL要求把所有的几何图形单元都用顶点来描述,这样运算器和逐个顶点计算操作都可以针对每个顶点进行计算和操作,然后进行光栅化形成图形碎片;对于象素数据,象素操作结果被存储在纹理组装用的内存中,再象几何顶点操作一样光栅化形成图形片元。

整个流程操作的最后,图形片元都要进行一系列的逐个片元操作,这样最后的象素值送入帧缓冲器实现图形的显示。

根据这个流程,我们可以归纳出在OpenGL中进行主要的图形操作直至在计算机屏幕上渲染绘制出三维图形景观的基本步骤:
1)根据基本图形单元建立景物模型,并且对所建立的模型进行数学描述(OpenGL中把:点、线、多边形、图像和位图都作为基本图形单元)。

2)把景物模型放在三维空间中的合适的位置,并且设置视点(viewpoint)以观察所感兴趣的景观。

3)计算模型中所有物体的色彩,其中的色彩根据应用要求来确定,同时确定光照条件、纹理粘贴方式等。

4)把景物模型的数学描述及其色彩信息转换至计算机屏幕上的象素,这个过程也就是光栅化(rasterization)。

在这些步骤的执行过程中,OpenGL可能执行其他的一些操作,例如自动消隐处理等。

另外,景物光栅化之后被送入帧缓冲器之前还可以根据需要对像素数据进行操作。

4.2 OpenGL程序的框架设计
OpenGL程序框架的创建包括了四个部分:创建C++ Builder
6.0工程;定义C++ Builder 6.0和OpenGL的接口和变
量,通过设计C++ Builder 6.0和OpenGL的接口,将
OpenGL指令嵌入到c++ Builder 6.0中,做到用户用C++
Builder 6.0发出指令,OpenGL响应绘图;初始化OpenGL
环境;定义创建和绘制物体函数。

4.3.1 设置C++ Builder 6.0环境
启动C++ Builder 6.0后,默认会生成一个名称为project1的工程,包含了一个名称为Form1的窗体,各文件都采用默认生成的文件名。

在生成默认工程和窗体后,在Form1的“Object Inspector”中选择”Events “添加FormCreate(、FormResize(、FormC1ose(和FormKeyDown(四个事件函数。

FormCreate(事件函数是窗口建立事件的处理函数,在事件函数中主要实现OpenGL的初始化工作。

FormResize(事件函数重新定位窗口,当窗口发生变化时处理此事件函数。

函数完整代码如下:
{
glViewport(0,0,width,height;
glMatrixMode(GL_ PROJECTION;
glLosdentity(;
gluPerspective (45.0, (GLfloatwidth /height,3.0,7.0 ; glMatrixMode(GL_MODELVIEW;
}
FormClose(响应窗口关闭事件,当窗口关闭时,释放系统资源。

事件代码如下:
if (hRC wgIDeleteContext(hRC;
if(hDCReleaseDC(Handle,hDC:
FormKeyDown(响应键盘输入事件,提供一个键盘输入响应接口。

事件代码如下:
if(Key==VK_ ESCAPEClose(;
if(Key==VK_F4
{
fullsereen=lfullscreen;
ChangeResolution(DisplayX,DisplayY,fullscreen;
}
当按下键盘的Esc键时程序结束,按F4键时,在全屏模式和窗口模式之间切换。

函数ChangeResolution(用Windows自带的API函数来实现,函数代码如下:
void __fastcall TForml:: ChangeResolution (GLsizei x,GLsizei y,bool fullscreenflag
{
if(fullscreenflag
{
SetWindowLong(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;
}
}
4.3.2 定义接口和变量
OpenGL的库函数被封装在Openg132删动态链接库中,要调用OpenGL只需要在C++ Builder程序的头文件中声明即可。


unit1.h代码中加入如下声明:
#include
#include
#include
这里主要设置在头文件unit1.h的类TForm1中声明private变量:
HGLRC hRC;
HDC hDC;
bool fullscreen;
GLsizei DisplayX,DisplayY;
设置好工程和OpenGL接口及声明OpenGL所需的变量后,就可以进行初始化OpenGL的工作了。

4.3.3 初始化OpenGL环境
在Windows XP操作系统中采用C++ Builder 6.0初始化OpenGL程序的步骤包括:创建设备描述表DC(Device Context、设置像素格式、创建着色描述表RC (Rendering Context、设置显示模式和窗口位置大小等。

以下代码都在FormCreate(事件中实现。

首先创建DC:
任何一个Windows程序都必须处理设备描述表DC,DC告诉
Windows
怎样在一个窗口中显示图形信息。

和其它Windows程序一样。

OpenGL 应用程序也必须应用DC。

DC包含了与图形设备接口GDI (Graphical Device Interface有关的内容。

在FormCmate( 中用语句hDC
=GetDc(Handle:可以获得设备描述表。

其次设置像素格式:
在FormCreate ( 中添加下面代码。

找到对应与此前选定的像素格式。

如果找不到对应的像素格式,则关闭窗口,退出程序。

if(lSetPixelFormatDescriptor(hDC Close(;
函数 SetPixelFormatDescriptor(hDC的作用就是设置OpenGL的像素格式,下面是该函数代码:
{
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,0,
}
if((pixelformat= ChoosePixelFormat(hDC,&pfd ==0
{
MessageBox (NULL,“ChoosePixelFormatfailed” ,“Error”,MB_OK;
return false;
}
if (SetPixdFonnat (hDC, pixelformat,&pfd ==false
{
MessageBox(NULL,“SetPixelFormat failed ”,"Error",MB_ OK; Return false;
}
return true;
}
再次创建RC:
OpenGL应用程序除了包含普通Windows程序所必须的DC外,还必须使用着色描述表RC,RC包含了与OpenGL系统发生联系的重要信息,应用程序应根据指定的DC创建一个RC,一个OpenGL应用程序必须拥有
一个RC。

hRC =wglCreateContext(hDC;
wglMakeCurrent(hDC,hRC;
最后初始化操作:
初始化代码通过函数InitGL(实现。

(1 设置初始OpenGL窗口大小,并确定是否使用全屏模式:DisplayX=640;
DisplayY=480;
fullscreen=false;
ChangeResolution(DisphyX,DisplayY,fullse—men;
(2图形背景色在计算机上通常指窗体的背景颜色,这里将窗体背景设置为黑色;
glClearColor(0.0f,0.0f,0.0f,0.0f:
glclear(GL_COLOR_BUFFER_BIT;
(3设置深度缓存三维图形绘制时,一个物体的自身遮挡部分或被其他不透明物体的遮挡部分是随着观测角度、方位等参数的变化而变化的,这时候要进行消隐处理。

消隐需要启动深度测试和设置深度缓存:
glClearDepth(1.0f;
glEnable(GL_DEFrH_TEST;
glClear(GL_DEFTH_BUFFEB_BIT;
(4透视投影使得远离视点(观察点的物体看起来小,而离视点近的物体看起来大,其视景体为一个台锥。

在调用投影变换函数前,首先要选择操作透视矩阵和初始化透视矩阵:
glMatrixMode(GL_PROJECTION;
glLoadldentity(;
然后设置透视模式并选择模型观察矩阵:
gluPerspective (45.0, (GLfloatwidth ,height,3.0,7.0 ;
glMstrixMode(GL_MODELVIEW;
(5光照处理是OpenGL中绘制三维图形的一个重要步骤。

目的是实现富有真实感的图形。

光照处理主要步骤是;创建光源、选择光照模型、定义物体材质属性、并创建和定位。

最后激活光源。

程序中光源设置由函数:SetupLighting(实现,代码如下:
GLfloat MaterialAmbient[]= {0.5,0.5,0.5,1.0};
GLfloat MaterialDiffuse[] = {1.0,1.0,1.0,1.0};
GLfloat MateriaISpecular[] = {1.0,1.0,1.0,1.0};
GLfloat MaterialShininess[] = {50.0};
GLfloat AmbientLightPosition[] = {0.5,1.0,1.0,0.0};
GLfloat LightAmbient[]={0.5,0.5,0.5,1.0};
glMaterialfv {GL_FRONT, GL_AMBIENT,MaterialAmbient};
glMaterialfv{GL_ FRONT, GL_DIFFUSE,MaterialSpecular};
glMaterlalfv{GL_FRONT, GL_SPECULAR,MaterialSpecalar};
glMaterialfv{GL_FRONT, GL_SHININESS,MatefialShininess};
glLightfv{GL_LIGHT0,GL_POSITION,AmbientLightPosition};
glLightModelfv{GL_ LIGHT_MODEIL_AMBIENT,LightAmbient};
glEnable{GL_LIGHTING};
glEnable{GL—LIGHTO};
glEnable{GL_COLOR_MATERIAL};
glColorMaterial {GL_FRONT, GL_AMBIENT_AND_DIFFUSE};
glShadeModel{GL_ SMOOTH};
}
第5章机器人工作空间的仿真
5.1 可视化仿真系统设计
仿真是利用数学模型在计算机上对系统进行实验研究的过程。

可视化仿真则是数学模拟和科学计算可视化或其它可视化技术相结合的产物,它包括两方面内容:① 将传统数字仿真计算的结果转换为图形和图像形式;②仿真交互界面可视化,即具有可视交互和动画展示能力,要求能够实时跟踪显示仿真计算结果。

因此,设计了一个可视化仿真系统结构,如图5.1所示。

图5.1 可视化仿真系统结构
其中数学模型着重反映系统的特征规律,而形态模型着重反映系统的物理构成,它们构成可视化仿真的基础。

可视化仿真软件的核心是数字模拟,同时要具备可视化交互和可视化过程展现的特征,还必须有实时性的特点。

据此,规划如图5.2 所示软件功能结构。

各模块有较强的独立性,相互之间以数据信息进行连接。

对于一个确定的系统而言,形态模型中除属性部分不确定外,其它部分相对稳定;而数学模型的变化也仅仅是激励参数的改变,因此在模型交互部分将支持参数的交互编辑;数字模拟是针对系统数学模型的数值求解过程,使用现有的成熟算法,保证结果的可靠性;图形仿真部分一般包括,以三维图形表现的系统过程和以二维曲线形式表现的系统性能,它们是可视化仿真的重要特征。

图5.2 可视化仿真软件结构框图
5.2 采用OpenGL建立机器人三维仿真
在Windows下用GDI作图通过设备上下文(DC调用相应的函数;用OpenGL作图是类似,OpenGL函数是通过渲染上下文(RC完成三维图形的绘制。

Windows下的窗口和设备上下文支持位图格式属性,与RC在位图结构上一致。

只要在创建RC时与一个Dc建立联系,OpenGL的函数就可通过RC对应的DC画到相应的显示设备上。

经过上面的分析,用VC++建立基于OpenG L的机器人仿真模型步骤如下:
(1)首先把文件GL.H、GLAUX.H、GLU.H、GLEXT.H、GLUT.H、WGLEXT.H 复制到VC++6.0的安装目录下的VC98>Include下,把GLAUX.LIB、GLU32。

LIB、GLUT32。

LIB、OPENGL32。

LIB、glu.lib、glut.lib、opengl.lib复制到安装目录下的VC98>Lib下。

(2)执行“File” / “New”菜单命令,在弹出的“New”对话框中找到左侧的项目类型列表,然后在列表中选择“Win32 Application”
列表项,在右侧的“ Location”和“Project Name”编辑框中分别输入路径和项目名称,单击“OK”按键,进入“Win32 Application-step 1 of 1”对话框,选择“An empty project”项。

(3)单击“Finish”按钮,然后单击“OK”按钮完成项目建立。

(4)执行“Project”下的“ Settings”,然后单击LINK标签。

在“Object/Library Modules”选项中的开始处(在kernel32.lib 前)增加OpenGL32.lib、GLu32.lib及GLaux.lib后单击“OK”按钮即可开始OpenGL 编程。

(5)执行“File” / “New”菜单命令,在弹出的“New”对话框中找到左侧的项目类型列表,然后在列表中选择“C++ Source File”列表项,在右侧的“File” 编辑框中输入项目名称, 单击“OK”按键。

即可开始编程。

(6)初始化OpenGL编程环境,具体方法可参见第四章。

设置整型变量,i,j,k,符点型变量px, py, pz.。

宏定义PI,对图像部分进行编程。

(7)完成程序后选择Build>Rebuild All检测程序,如果有错误在下面的对话框有错误提示,可按提示更正。

然后选择Build>Start Debug>Go执行程序。

5.3 仿真结果
在本课题中,通过采用VC++6.0与OpenGL来建立整个仿真环境的,建立三维模型来体现在实际仿真环境下三维模型的逼真性,在整个仿真过程中使用机器人各个关节的旋转角度求出各手臂相对于基本坐标系的空间位置,再根据这些位置信息对各手臂所处的位置进行仿真,在仿真系统中可通过预先设定各关节的相关信息,如各手臂摆动角或旋转角,来查看各机械臂的动作情况。

显示工作空间的仿真图形。

例如:二自由度机器人手臂(如图5.3)的工作空间图形为图5.4所示:
图 5。

3 二自由度机器人手臂图 5.4 二自由度机器人手臂工作空间仿真
球坐标臂(如图5.5)的工作空间仿真图为图5.6所示:
图 5.5 球坐标臂示意图图 5.6 球坐标臂工作空间仿真图
本设计的四自由度机器人手臂工作空间仿真图为图5.7所示:
图 5.7 四自由度机器人手臂工作空间仿真
5.4 程序相关代码
绘制坐标轴,粉色为X轴,黄色为Y轴,蓝色为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,0.0f,0.4f;
glEnd(;
绘制空间图形,可根据四自由度机器人手臂的运动学方程编制程序,实现机器人手臂的三维仿真图形。

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=(-600*cos(angle2+402*sin(angle3+42*sin(angle2/1000;
glVertex3f(px,py,pz;
定义绕某一轴的旋转用函数glRotatef(,其中括号内第一个逗号前表示绕轴旋转角度,第二个逗号前把表示绕X轴转,第三个逗号前表示绕Y 轴转,第三个逗号后表示绕Z轴转。

在那个轴的位子的数值如果为1.0则绕那个轴旋转。

如:glRotatef(90,0.0,1.0,0.0;则表示绕Y轴旋转90度。

定义函数ButtonDown()为按键,可分为左键为OnLButtonDown()函数,中键为OnMButtonDown()函数,右键为OnRButtonDown()函数,设置点左键绕Z轴旋转90度的程序:
void COpenGL::OnLButtonDown(UINT nFlags, CPoint point
{
// TODO: Add your message handler code here and/or call default
CWnd::OnLButtonDown(nFlags, point;
CPaintDC dc(this; // device context for painting
// TODO: Add your message handler code here
//调用OpenGL绘图函数进行图形绘制
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT; //清除颜色缓存和深度缓存
s+=0.005;
if(s>1.0
s=0.1;
step = step + 1.0;
if (step > 360.0
step = 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(hdc;
}
另外,中键和右键的程序只需修改glRotatef(函数值即可。

第6章设计结论
本系统以VC++6.0作为开发平台,使用OpenGL函数来编程。

系统可实现四自由度机器人手臂的参数化设计与运动仿真,可对机器人手臂末端点任意点进行轨迹描述。

可根据一个四自由度的机器人手臂的工作空间设计出与其工作空间相同的四自由度机器人,为同工作空间的设计提供依据和结果验证。

在程序设计上,本系统采用开放式三维图形库函数是程序能简单的实现三维仿真。

由于时间和水平有限,本系统目前只限于工作空间的仿真,不包括3D动画的模拟,如以后在这方面设计的人可用3DMax绘制出简单的图形,可更直观的看到机器人手臂的运动过程,这一部分有待于进一步实现。

※※※※※
致谢
在本设计即将完成之际,我对在设计中给予我极大帮助的老师和同学表示深深的感谢!
本设计能够得以顺利完成,归根于以下几个方面的因素:
首先,在题目选定后,从一开始的资料收集,到进一步的构思,开题报告的填写、设计大纲的制定、以及设计中疑难问题的解决,刘铁军老师都给予了我极大的帮助和不厌其烦的指导,他们严谨的治学态度使我受益匪浅。

其次,在整个设计中,和我一个小组的张伟峰、王光祥同学我们三人不懈的努力。

遇到问题,我们仔细讨论,深入分析,查阅资料,或者请教老师。

在此,再次对上述给予我帮助的老师和同学表示诚挚的谢意!。

相关文档
最新文档