仿真柔性制造系统的研究与实现

时间:2022-05-11 01:07:27

仿真柔性制造系统的研究与实现

摘 要:项目采用计算机仿真技术开发了仿真柔性制造系统,本文给出了系统设计的总体方案,并对各模块功能架构进行了分析,重点介绍了仿真柔性系统中六自由度机械手仿真的设计与实现方法。项目解决了学校仿真柔性生产线教学实习实训设备短缺的问题,也为工业FMS系统的调试和维护提供了参考和依据。

关键词:柔性制造;机械手;仿真技术

中图分类号:TH165

柔性制造系统是由统一的信息控制系统、物料储运系统和一组数字控制加工设备组成,能适应加工对象变换的自动化机械制造系统(Flexible Manufacturing System,简称FMS)。

柔性制造系统,自1967年由英国莫林斯(molins)公司提出以后,至今已发展了40多年。柔性制造技术是以数控技术为核心,以信息技术、检测技术、质量控制技术与生产管理技术相结合的先进制造技术,被世界各国所重视,并在发达国家的制造业中得到了广泛的应用。目前我国汽车、柴油机、工程机械、冷冻机、兵器、航空、航天等制造业都已提出对FMS的需求。但是目前这方面的人才非常缺乏,这就对于我们学校传统的教学和实训提出了更高的要求,在目前的实训环节中还不能提供全面的包括加工中心、搬运机器人、数控机床、物料传送、仓储设备和信息控制系统等先进设备,而且一般生产型FMS系统难以作为实训设备使用,生产型FMS初始投资高,占地面积大,即便可以提供这些设备,往往因为系统已经定型,只能进行系统演示,而不能让学生直接参与系统的设计、构建、调试和维护,因此开发FMS仿真系统具有一定的现实意义,可以让学生学习机器人的基本编程、PLC的基本编程、数控加工的基本编程以及柔性制造系统的搭建、调试和维护等方面的知识,掌握车间自动化调试改造和应急处理等技能。本项目结合面向对象技术、OpenGL三维图形、计算机仿真、数控加工技术,在VC++开发环境下,实现了柔性制造系统调试仿真、运行仿真等功能,该系统能够针对不同的工艺模型、不同的设备布局获得不同的加工模拟效果,从而获得同一个零件不同的加工方案,以方便获得满意的加工方案和模型,有效解决了学校仿真柔性生产线教学实习实训设备短缺的问题。

1 仿真柔性制造系统总体设计

1.1 系统的总体架构

本项目的柔性制造仿真系统以生产中实际使用的柔性系统为原型进行开发,主要功能组成模块包括:信息控制系统、物料储运系统和数控加工系统。系统可以从立体仓库里取出毛坯,然后通过物料储运系统送到数控机床上,再启动对应的加工程序就可以加工出不同的零件,适合多种不同工件的批量加工。

图1 系统总体架构

该FMS系统各环节结构相对独立,易于实现模块化操作,使各站单独工作,完成各自的功能:

1.1.1 数控加工系统

加工系统是整个柔性制造系统的核心,该系统通常由若干对工件进行加工的数控机床和所使用的刀具构成。

1.1.2 物料储运系统

物流系统是整个柔性制造系统的连接纽带。该系统中的物流系统包括传输站、六轴工业搬运机器手和立体仓库,主要用于将毛坯、半成品零件从仓库站的毛坯库或各缓冲站传送到每个加工单元进行加工,把加工好的零件传送到安装站进行安装,再将安装好的成品传送到仓库站的成品库。

1.1.3 信息控制系统

包括两部分,即过程控制及过程监控两个部分。过程控制系统连接物料储运系统,对各物料储运过程进行编程,连接机械手和数控机床,按相应顺序启动机械手和机床中的数控程序。过程监控系统进行在线状态数据采集和处理。

1.2 系统各模块功能架构分析

本系统采用3D开发工具开发,具有良好的交互性能。软件采用模块化开发,各模块相对独立,可拆解。系统结构图如图2所示:

图2 系统功能框架图

1.2.1 用户层

共分9个子模块:

(1)PLC指令:用户从此处导入PLC指令,对PLC指令保存,删除等;

(2)毛坯参数:用户可在此模块中设置毛坯的参数,比如长宽高等;

(3)机械人指令(1):此为1自由度机械手,根据指令将设定的毛坯推入流水线中;

(4)机械人指令(6):此为6自由度的机械手,其作用是根据指令,取出流水线上中的毛坯,并送到加工中心,等加工中心处理完毕后,再将工件取回流水线上;

(5)加工参数:用户在此处设置加工中心一些参数,比如设定G54,对刀,刀具半径等;

(6)数控加工指令:根据参数及数控加工程序,将毛坯加工成工件,加工完毕,发送返回信号给机械人指令(6)模块,使其装工件取回流水线;

(7)机械人接口(3):此为3自由度机械手,根据机械手指令,将流水线上的工件取出并存储到立体仓库中;

(8)仓储控制:主要是用户对仓库工件的处理,如将仓库中的工件移除等;

(9)场景控制:用户可通过此处设定,从各个方位观察场景;

1.2.2 数据处理层

(1)送料处理:此处分析机械手(1)的指令及PLC指令,据仓储及检测测模块反馈的信号,做出送料动作;

(2)加工切削:包含机械手(6)的指令分析及数控加工指令的分析;根据机械手指令,发送信号至加工中心并将毛坯送入加工中心,加工中心接到毛坯后,分析数控加工指令,并将毛坯加工成工件,最后发送加工完毕的信号至机械手,让其取出工件送回流水线;

(3)仓储及检测:完成机械手(3)指令的分析,做出仓储动作;同时检测仓储情况,并将信号发至送料模块;

(4)OpenGL模型变换:根据用户选择,做出对应的矩阵运算;

1.2.3 显示层

OpenGL模型绘制:实行OpenGL的绘制,各部件实现模拟。

图3 仿真柔性制造系统

2 系统关键技术的实现

机械手及加工平台在柔性生产线中共同起着重要的作用。机械手能够模仿人手和肩膀的某些动作功能,用以按固定程序抓取、搬运物件或操作工具。机械手主要由手部和运动机构组成。手部是用来抓持工件的部件;运动机构使手部完成各种转动、移动或复合运动来实现规定的动作,运动机构的升降、伸缩和旋转等独立运动方式,称为机械手的自由度,是机械手设计的关键参数,自由度越多,机械手的灵活性越大,通用性越广。为了抓取空间中任意位置和方位的物体,需有6个自由度,本系统即设计实现了一个6自由度的机械手。

在Windows环境下配合Pro/E,使用VisualC++工具调用OpenGL图形库中的函数,实现机械手三维运动仿真。

OpenGL是SGI公司开发的,作为一种三维工具软件包在交互式三维图形建模能力和编程方面具有无可比拟的优越性,可以灵活方便地实现二维和三维的高级图形技术。由于其强大的图形功能和跨平台的能力,已经成为事实上的图形标准,广泛应用于可视化、实体造型、CAD/CAM、模拟仿真等诸多领域。目前,Microsoft、SGI、IBM等大公司都采用了OpenGL作为三维图形标准。特别是随着PC性能的不断提升和微软的加入,使得在微机上实现三维真实感图形的显示与交互成为可能。另外,由于系统中涉及较多的机械手正、逆运动学方程求解问题,因而采用VC作为编程语言,一方面可以方便地调用OpenGL图形库函数;另一方面有利于算法的实现。

2.1 机械手模型的建立

系统采用Pro/E构建机械手模型,该机械手属于垂直多关节型,共有六个自由度,主要包括转动基座S轴、下臂倾动L轴、上臂倾动U轴、手腕俯仰B轴、手腕旋转T轴、手抓开合Z轴六个转动轴,每个转动轴可在±90°的范围内运动,重复定位精度达±0.5mm,手臂的终端配置可灵活张合的机械钳,钳子在电机的驱动下,通过齿轮传动和平行双曲柄机构自由张合,使机械手可以模拟人手抓取物件。

图4 仿真机械手模型

(1)对于结构比较复杂而控制要求简单的工作对象或者其他附件,使用OpenGL直接绘制是一件十分烦琐的工作。而Pro/E是一个相当好的流行建模工具,通过对简单几何形体进行并、交、切等布尔运算和曲面编辑等功能就能构造出复杂的几何形体。再通过一些相关工具软件可以生成OpenGL格式的C++数据文件,直接导入到VC工程中,稍加修改就可完成复杂模型的绘制工作。

(2)对于结构简单而控制要求较复杂的机械手各轴,可直接使用OpenGL提供的三维建模函数完成绘制。在此过程中,对各轴的缩放、位置、角度的调整主要使用函数glScalef(),glTranslatef(),glRotatef()来完成,为使绘制出来的各轴形象逼真,可对各轴进行相应的材质、光照设置;在进行轴之间进行装配时,需要使用矩阵堆栈来保证预留对各轴控制接口的正确性,其函数原型是glPushMatrix(),glPopMatrix()。另外,本文所介绍的机械手属于双端协调工作方式,所以装配还受到工作模式的动态控制;为使仿真显示的图形变化连续,一般使用OpenGL提供的缓存交换函数auxSwapBuffers()来实现双缓存绘制。

实现步骤包括:

(1)在CArmView类中添加WM_CREATE消息,然后编写OnCreate事件处理程序来设置像素格式并创建OpenGL绘制描述表。

(2)在类CArmView的成员函数OnDraw中,添加6自由度机械手绘制程序。包括机械手的建模、材质、光源位置、背景色,视角程序等。

(3)在CArmView类中添加键盘WM_KEYDOWN消息,然后编写OnKeyDown事件处理程序。通过键盘来控制视角,比例等设置。

(4)在CArmView类中添加定时器WM_TIMER消息,然后编写OnTimer事件处理程序。使用SetTimer()函数设置定时器的序号和记时周期:一个周期执行OnTimer()函数一次,各关节变量的变化实时反馈到视窗中,视窗通过函数Invalitate(FALSE)不断重绘,为了避免显示动画时闪动,采用双缓存技术,通过SwapBuffers0函数来实现。下面是设置像素格式的核心代码:

Int CArmView::OnCreat(LPCREATESTRUCT lpCreatStruct)

{

PIXEL FORMATDE SCRIPTOR pdf={

Sizect(PIXELFORMATDESCRIPTOR),1,

PFD_DRAW_TO_WINDOWlPFD_SUPPORT_OPENGLlPFD_DOUBLEBUFFER,

PFD_TYPE_RGBA,24,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,PFD_MAIN_PLANE,0,0,0,0

};

CClientDC clientdc(this);

Int pf=ChoosePixelFormat(clientdc.m_hDC,&pfd);

BOOL rt=SetPixelFormt(clientdc.m_hDC,pf,&pfd);

Hglrc=wglCreatContect(clientdc.m_hDC);

Return 0;

}

下面是机械手建模的核心代码:

Void CArmView::OnDraw(CDC*pDC)

{

CArmDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

wglMakeCurrent(Pdc->m_hDC,hglrc);

display();

wglMakeCurrent(Pdc->m_hDC,NULL);

SwapBuffers(Pdc->m_hDC);

}

2.2 机械手运动轨迹运算

机器手运动学可分为正运动学及逆运动学。对机器手的各个关节坐标控制,即操作人员直接指定各关节的移动长度或转动角度,从而带动末端执行器的运动,这称为机器手的正运动学。对机器手进行直角坐标控制的方式,即操作人员指定末端执行器所期望的位置和姿态,然后求解出各关节需要的移动长度或转动角度,从而带动末端执行器运动,这称为机器手的逆运动学。

机械手的轨迹运算亦即是对机器手的运动学求解。主要运算包括机器人在运动过程中的位移、速度和加速度。而轨迹规划是根据作业任务的要求,计算出预期的运动轨迹。首先对机器手的任务、运动路径和轨迹进行描述,然后在机器手运动学和动力学的基础上,研究在关节空间和笛卡尔空间中机器手运动的轨迹规划和轨迹生成方法。通常将机器手的运动看作是工具坐标系{T}相对于工作坐标系{S}的运动,对机械手的安装任务,需描述它的起始状态和目标状态,即工具坐标系的起始值{T0}和目标值{Tg},其运动为点对点的运动;而对另一些任务,如扫描任务等,则不仅要规定机器手的起始点和终止点,而且要指明两点之间的若干路径点,必须沿特定的路径约束,其运动为轮廓运动,按照不同的任务类型,完成任务中路径点的确定,是路径规划的主要任务。根据指定的末端执行器所期望的位置和姿态,求解各个关节的旋转角度

机械手运动轨迹计算的核心代码如下:

//计算雅克比矩阵的 时间微分

// double *len--连杆长度; double *the--关节角度;

//double *dThe--关节角速度;MAT *dJaco--雅克比矩阵的时间微分

void dJacobianMatrix(double *len,double *the,double *dThe,MAT *dJaco){

double l3s23, l3c23;

double aa, bb;

double cc, dd;

l3s23 = len[3]*sin(the[1]+the[2]);

l3c23 = len[3]*cos(the[1]+the[2]);

aa = len[2]*cos(the[1]) + l3c23;

bb = len[2]*sin(the[1]) + l3s23;

cc = len[2]*cos(the[1])*dThe[1] + l3c23*(dThe[1]+dThe[2]);

dd = len[2]*sin(the[1])*dThe[1] + l3s23*(dThe[1]+dThe[2]);

MATelem(*dJaco,1,1)= -aa*cos(the[0])*dThe[0] + dd*sin(the[0]);

MATelem(*dJaco,1,2)= bb*sin(the[0])*dThe[0] - cc*cos(the[0]);

MATelem(*dJaco,1,3)= l3s23*sin(the[0])*dThe[0]-l3c23*cos(the[0])*(dThe[1]+dThe[2]);

MATelem(*dJaco,2,1)= -aa*sin(the[0])*dThe[0] - dd*cos(the[0]);

MATelem(*dJaco,2,2)= -bb*cos(the[0])*dThe[0] - cc*sin(the[0]);

MATelem(*dJaco,2,3)= -l3s23*cos(the[0])*dThe[0]-l3c23*sin(the[0])*(dThe[1]+dThe[2]);

MATelem(*dJaco,3,1)= 0;

MATelem(*dJaco,3,2)= -dd;

MATelem(*dJaco,3,3)= -l3s23*(dThe[1]+dThe[2]);

}

//计算末端执行器的速度

//MAT*Jaco--雅克比矩阵;double*dThe--各关节角速度;

//double*dPos--末端执行器的速度

void endVelocity(MAT*Jaco,double*dThe,double*dPos)

{

register int i,j;

int mm,nn;

mm=MATheight(*Jaco);

nn=MATwidth(*Jaco);

for(i= 0;i

{

dPos[i]=0.0;

for(j=0;j

dPos[i]+=(MATelem(*Jaco,i+1,j+1)*dThe[j]);

}

}

2.3 加工平台模型的建立

此模块同样采用Pro/E构建加工平台模型,因涉及到工件切削等布尔运算,故该模型的数据文件统一采用STL格式的后缀文件。建好相关模型,导出STL文件,通过代码载入系统中,并进行绘制。绘制的关键代码如下:

//车床绘制

void CPCVMLatheView::ShowNormal()

{

//不移动 导轨 刀具柜 车门2 刀具柜中的刀具 床身1 地板

//尾架 床身2 床身底部 床身后挡板 车门移动

CPCVMLatheDoc*pDoc=GetDocument();

//导轨

if(pDoc->m_bPart[FRONT_DAOGUI])

{

glColor3f(pDoc->m_part[FRONT_DAOGUI].m_fColor[0],_

pDoc->m_part[FRONT_DAOGUI].m_fColor[1],_

pDoc->m_part[FRONT_DAOGUI].m_fColor[2]);

pDoc->DrawPart(FRONT_DAOGUI);

}

if(pDoc->m_bPart[BACK_DAOGUI])

{

glColor3f(pDoc->m_part[BACK_DAOGUI].m_fColor[0],_

pDoc->m_part[BACK_DAOGUI].m_fColor[1],_

pDoc->m_part[BACK_DAOGUI].m_fColor[2]);

}

//刀具柜,不移动

if(pDoc->m_bPart[DAOJUGUI])

{

pDoc->DrawPart(DAOJUGUI); //隐藏刀具柜

}

//床身

if(pDoc->m_bPart[CHUANGSHEN])

{

pDoc->DrawPart(CHUANGSHEN);

}

//尾架

if(pDoc->m_bPart[WEIJIA])

{

//double dx=m_fAngleX =0.0f;

//double dy =m_fAngleY=180.0f;

if(pDoc->m_bHaveWeijia&&(m_fAngleX!=0||m_fAngleY!=180.0))

}

}

…………

绘制的加工平台效果如图5所示:

图5 仿真数控加工平台

3 结束语

本仿真柔性制造系统解决了学校柔性制造系统教学培训缺乏设备的问题,对生产实践也具有指导意义,为FMS的设计人员提供了参考模型,在仿真环境中对FMS进行研究,即经济又灵活。

参考文献:

[1]邓子琼,刘小宁,何沛仁.柔性制造系统建模及仿真[M].北京:国防工业出版社,1993.

[2]陆宁,等.贝氏规则位置序权法[J].长安大学学报,2004(04).

[3]丁国富.虚拟柔性制造系统仿真研究[J].学术动态,2006(01).

[4]陈萧枫.柔性制造系统三维动画仿真的研究[D].广东:华南理工大学,2002.

[5]李刚俊,陈永.机器人的三维运动仿真[J].西南交通大学学报,2002(03):273-276.

作者简介:周文(1968-),女,四川人,信息中心主任,高级讲师,高级工程师,计算机应用技术专业工学硕士,研究方向:教学多媒体制作。

作者单位:沈阳市装备制造工程学校,沈阳 110027

上一篇:某飞机维修机库网架设计研究 下一篇:智能手机GPS功能开发与研究