四自由度机器人手臂工作空间分析.docx
- 文档编号:10647882
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:36
- 大小:161.79KB
四自由度机器人手臂工作空间分析.docx
《四自由度机器人手臂工作空间分析.docx》由会员分享,可在线阅读,更多相关《四自由度机器人手臂工作空间分析.docx(36页珍藏版)》请在冰豆网上搜索。
四自由度机器人手臂工作空间分析
四自由度机器人手臂设计
---工作空间分析
050696135张东红指导老师:
刘铁军讲师
第1章绪论
1.1机器人的概念
我们一直试图为自己的研究对象下一个明确的定义----就象其他所有的技术领域一样----始终未能如愿。
关于机器人的概念,真有点像盲人摸象,仁者见仁,智者见智。
在此,摘录一下有代表性的关于机器人的定义:
牛津字典:
Automationwithhumanappearanceorfunctioninglikehuman
科幻作家阿西莫夫(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
αn
an
dn
θn
关节变量θn
1
90°
0
0
θ1
-90°~+90°
2
0°
a2
0
θ2
-180°~0
3
90°
a3
0
θ3
-0~180°
4
0°
0
d4
θ4
0~90°
图2.2中,a2=
=402mm;a3=42mm,d4的值为手爪末端夹钳中心到关节4坐标原点的长度,值为600mm。
0T4=A1A2A3A4
=
0T4=
得工作空间运动学方程:
第3章编程软件介绍
3.1程序语言介绍
VisualC++6.0是MicrosoftVisualStudio6.0家族成员之一,是一个功能极为强大的可视化软件开发工具。
与其他的可视化编程环境(如VisualBasic)一样,VisualC++6.0集程序的代码编辑、编译、连接、调试等功能于一体,给编程人员提供了一个完整、全面而又方便的开发环境,并提供了许多有效的辅助开发工具。
VisualC++基于C\C++,所以它拥有两种编程方式,一种是传统的基于WindowsAPI的C编程方式,虽然其代码效率较高,但开发难度与开发工作量也随着正增高,目前使用这种编程方式的用户已经很少;另一种是基于MFC的C++编程方式,虽然其代码运行效率相对很低,但开发难度小、开发工作量小、源代码效率高,已经成为VisualC++开发Windows应用程序的主流。
3.2基于VC++6.0的OpenGL简介
随着计算机多媒体技术、可视化技术及图形学技术的发展,我们可以使用计算机来精确地再现现实世界中的绚丽多彩的三维物体,并充分发挥自身的创造性思维,通过人机交互来模拟、改造现实世界,这就是目前最为时髦的虚拟现实技术。
通过这种技术,建筑工程师可以直接设计出美观的楼房模型;军事指挥员可以模拟战场进行军事推演,网民可以足不出户游览故宫博物馆等名胜古迹等。
而虚拟现实技术最重要的一部分内容就是三维图形编程。
当前,三维图形编程工具中最为突出的是SGI公司的OpenGL(OpenGraphicsLanguage,开放式的图形语言),它已经成为一个工业标准的计算机三维图形软件开发接口,并广泛应用于游戏开发、建筑、产品设计、医学、地球科学、流体力学等领域。
值得一提的是,虽然微软有自己的三维编程开发工具DirectX,但它也提供OpenGL图形标准,因此,OpenGL可以在微机中广泛应用。
OpenGL是用于开发简捷的交互式二维和三维图形应用程序的最佳环境,任何高性能的图形应用程序,从3D动画、CAD辅助设计到可视化访真,都可以利用OpenGL高质量、高性能的特点。
OpenGL自1992年出现以来,逐渐发展完善,已成为一个唯一开放的,独立于应用平台的图形标准,一个典型的OpenGL应用程序可以在任何平台上运行--只需要使用目标系统的OpenGL库重新编译一下。
OpenGL非常接近硬件,是一个图形与硬件的接口,包括了100多个图形函数用来建立三维模型和进行三维实时交互。
OpenGL强有力的图形函数不要求开发人员把三维物体模型的数据写成固定的数据格式,也不要求开发人员编写矩阵变换、外部设备访问等函数,大大地简化了编写三维图形的程序。
例如:
1OpenGL提供一系列的三维图形单元(图元)供开发者调用。
2OpenGL提供一系列的图形变换函数。
3OpenGL提供一系列的外部设备访问函数,使开发者可以方便地访问鼠标、键盘、空间球、数据手套等外部设备。
由于微软在Windows中包含了OpenGL,所以OpenGL可以与VisualC++紧密接合,简单快捷地实现有关计算和图形算法,并保证算法的正确性和可靠性。
简单地说,OpenGL具有建模、变换、色彩处理、光线处理、纹理影射、图像处理、动画及物体运动模糊等功能:
第4章OpenGL的编程环境
4.1OpenGL的工作流程
图4.1OpenGL的工作流程
如上图所示,几何顶点数据包括模型的顶点集、线集、多边形集,这些数据经过流程图的上部,包括运算器、逐个顶点操作等;图像数据包括象素集、影像集、位图集等,图像象素数据的处理方式与几何顶点数据的处理方式是不同的,但它们都经过光栅化、逐个片元(Fragment)处理直至把最后的光栅数据写入帧缓冲器。
在OpenGL中的所有数据包括几何顶点数据和象素数据都可以被存储在显示列表中或者立即可以得到处理。
OpenGL中,显示列表技术是一项重要的技术。
OpenGL要求把所有的几何图形单元都用顶点来描述,这样运算器和逐个顶点计算操作都可以针对每个顶点进行计算和操作,然后进行光栅化形成图形碎片;对于象素数据,象素操作结果被存储在纹理组装用的内存中,再象几何顶点操作一样光栅化形成图形片元。
整个流程操作的最后,图形片元都要进行一系列的逐个片元操作,这样最后的象素值送入帧缓冲器实现图形的显示。
根据这个流程,我们可以归纳出在OpenGL中进行主要的图形操作直至在计算机屏幕上渲染绘制出三维图形景观的基本步骤:
1)根据基本图形单元建立景物模型,并且对所建立的模型进行数学描述(OpenGL中把:
点、线、多边形、图像和位图都作为基本图形单元)。
2)把景物模型放在三维空间中的合适的位置,并且设置视点(viewpoint)以观察所感兴趣的景观。
3)计算模型中所有物体的色彩,其中的色彩根据应用要求来确定,同时确定光照条件、纹理粘贴方式等。
4)把景物模型的数学描述及其色彩信息转换至计算机屏幕上的象素,这个过程也就是光栅化(rasterization)。
在这些步骤的执行过程中,OpenGL可能执行其他的一些操作,例如自动消隐处理等。
另外,景物光栅化之后被送入帧缓冲器之前还可以根据需要对像素数据进行操作。
4.2OpenGL程序的框架设计
OpenGL程序框架的创建包括了四个部分:
创建C++Builder6.0工程;定义C++Builder6.0和OpenGL的接口和变量,通过设计C++Builder6.0和OpenGL的接口,将OpenGL指令嵌入到c++Builder6.0中,做到用户用C++Builder6.0发出指令,OpenGL响应绘图;初始化OpenGL环境;定义创建和绘制物体函数。
4.3.1设置C++Builder6.0环境
启动C++Builder6.0后,默认会生成一个名称为project1的工程,包含了一个名称为Form1的窗体,各文件都采用默认生成的文件名。
在生成默认工程和窗体后,在Form1的“ObjectInspector”中选择”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(hRCwgIDeleteContext(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__fastcallTForml:
:
ChangeResolution(GLsizeix,GLsizeiy,boolfullscreenflag
{
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变量:
HGLRChRC;
HDChDC;
boolfullscreen;
GLsizeiDisplayX,DisplayY;
设置好工程和OpenGL接口及声明OpenGL所需的变量后,就可以进行初始化OpenGL的工作了。
4.3.3初始化OpenGL环境
在WindowsXP操作系统中采用C++Builder6.0初始化OpenGL程序的步骤包括:
创建设备描述表DC(DeviceContext、设置像素格式、创建着色描述表RC(RenderingContext、设置显示模式和窗口位置大小等。
以下代码都在FormCreate(事件中实现。
首先创建DC:
任何一个Windows程序都必须处理设备描述表DC,DC告诉Windows
怎样在一个窗口中显示图形信息。
和其它Windows程序一样。
OpenGL应用程序也必须应用DC。
DC包含了与图形设备接口GDI(GraphicalDeviceInterface有关的内容。
在FormCmate(中用语句hDC=GetDc(Handle:
可以获得设备描述表。
其次设置像素格式:
在FormCreate(中添加下面代码。
找到对应与此前选定的像素格式。
如果找不到对应的像素格式,则关闭窗口,退出程序。
if(lSetPixelFormatDescriptor(hDCClose(;
函数SetPixelFormatDescriptor(hDC的作用就是设置OpenGL的像素格式,下面是该函数代码:
{
intpixelformat:
PIXELFORMATDESCRIPTORpfd={sized(PIXELFORMATDESCRIPTOR,1,
PFD_DRAW_TO_WINDOWIPFD_SUPPORT_OPENGLIPFD_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;
returnfalse;
}
if(SetPixdFonnat(hDC,pixelformat,&pfd==false
{
MessageBox(NULL,“SetPixelFormatfailed”,"Error",MB_OK;
Returnfalse;
}
returntrue;
}
再次创建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(实现,代码如下:
GLfloatMaterialAmbient[]={0.5,0.5,0.5,1.0};
GLfloatMaterialDiffuse[]={1.0,1.0,1.0,1.0};
GLfloatMateriaISpecular[]={1.0,1.0,1.0,1.0};
GLfloatMaterialShininess[]={50.0};
GLfloatAmbientLightPosition[]={0.5,1.0,1.0,0.0};
GLfloatLightAmbient[]={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_COLO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自由度 机器人 手臂 工作 空间 分析