一种离线编程中的复杂曲面加工轨迹生成方法与流程

文档序号:20989755发布日期:2020-06-05 21:34阅读:来源:国知局

技术特征:

1.一种离线编程中的复杂曲面加工轨迹生成方法,其特征在于,包括如下步骤:

步骤1:利用复杂曲面轨迹生成算法初步生成机器人加工轨迹;

步骤2:对步骤1中生成的机器人加工轨迹进行检测,找出机器人运动学中的异常点;

步骤3:对步骤2中找出的异常点进行修正;

步骤4:利用多线程技术进行对异常点修正后的加工轨迹在离线编程软件中进行虚拟仿真;

步骤5:仿真成功后进行后置代码转换到真实环境中运行。

2.根据权利要求1所述离线编程中的复杂曲面加工轨迹生成方法,其特征在于,所述步骤1中,利用基于step标准的nurbs复杂曲面轨迹生成算法初步生成机器人加工轨迹,包括如下子步骤:

步骤1.1:获取待加工曲面,其属于基于step标准的nurbs曲面;

步骤1.2:提取所述待加工曲面的几何信息及拓扑信息;

步骤1.3:定义约束面、原点坐标、法向正方向、参数范围以及初始平移的间距,采用基于曲率的截面线法生成待加工曲面所有轨迹点的位置坐标;

步骤1.4:对轨迹点进行插补,得到轨迹的姿态信息,用欧拉角表示;

步骤1.5:按照加工次序连接所有生成的轨迹点,并设置轨迹点的运动模式,将第一个轨迹点的运动模式设计为关节空间运动“movj”,其余轨迹点的运动模式设置为笛卡尔空间直线运动“movl”。

3.根据权利要求2所述离线编程中的复杂曲面加工轨迹生成方法,其特征在于,所述步骤1.2中,先提取实体信息,然后再提取几何信息和拓扑信息,其中实体信息的提取步骤如下:

步骤1.2.1:读取step模型文件中一行的字符串;

步骤1.2.2:判断是否含有字符“#”,如有则至步骤1.2.3,否则执行步骤1.2.5;

步骤1.2.3:采用字符串分割算法分割当前字符串,每行的字符串均进行分割,分割的具体步骤如下:

步骤1.2.3.1:首先提取“#”和“=”之间的数字作为实体序号;

步骤1.2.3.2:提取“=”和“(”间的字符串作为实体的类型;

步骤1.2.3.3:提取“(”和第一个“,”之间的字符串作为实体名称;

步骤1.2.3.4:提取“(”和“)”中第一个“,”之后的通过”,”分的字符串,依次作为实体的参数属性;

步骤1.2.4:保存实体信息到结构体;

步骤1.2.5:判断下一行字符串是否为空,如果为空,读取文件结束,反之回到步骤1.2.1,直至提取完成step模型文件中的数据;

几何信息的提取步骤如下:

步骤1.2.6:首先定位到step模型文件中用来表示带节点的b样条曲面的实体b_spline_surface_with_knots;

步骤1.2.7:根据nurbs曲面数学模型依次提取参数;

步骤1.2.8:依次定位到控制点列表中每个实体cartesian_point;

步骤1.2.9:提取控制点实体中的三维坐标信息,即几何信息;

拓扑信息的提取步骤:

步骤1.2.10:首先定位到step模型文件壳实体,提取壳参数;

步骤1.2.11:定位到组成壳的高级面,提取曲面参数;

步骤1.2.12:定位到组成高级面的面边界和几何曲面,提取面边界参数;

步骤1.2.13:定位到组成面的边界环,提取环参数;

步骤1.2.14:定位到组成环的边,提取边参数;

步骤1.2.15:定位到边的首尾端点,提取端点参数;

由此得到拓扑信息;

之后,根据step模型文件中的拓扑信息初始化opencascade中对应的拓扑对象,结合几何信息提取过程中生成的opencascade几何对象,将曲面信息全部转化为opencascade的实体对象。

4.根据权利要求2所述离线编程中的复杂曲面加工轨迹生成方法,其特征在于,所述步骤1.3中,基于曲率的截面线法是用一组互相平行的约束面与待加工曲面相交,然后对相交线进行离散化,具体步骤如下:

步骤1.3.1:首先定义一个初始化的约束面,约束面的法向方向即为进给方向;

步骤1.3.2:沿进给方向平移约束面,直到约束面与待加工曲面相交;

步骤1.3.3:对相交线进行离散,并与曲面内外环求交得到有效曲线段;

步骤1.3.4:对有效曲线采用自由曲线插补算法,针对插补点采用行距计算模型计算在允许残余高度范围下最大约束面间距;

步骤1.3.5:选择插补点中最小约束面间距,平移约束面得到第二条与待加工曲面相交的相交线,即沿法向平移约束面行距的距离,若与待加工曲面相交,返回步骤1.3.3,不相交,至步骤1.3.6;

步骤1.3.6:结束。

5.根据权利要求4所述离线编程中的复杂曲面加工轨迹生成方法,其特征在于,所述步骤1.3.4对有效曲线采用自由曲线插补算法,具体包括如下步骤:

步骤1.3.4.1:首先设定允许的最大弦高误差δ允;

步骤1.3.4.2:连接当前参数区间左右边界对应的曲线段的首尾端点pfirst和plast做一条直线,并且计算该直线段与曲线段的误差,判断是否小于δ允,若不满足转至步骤1.3.4.3,否则执行步骤1.3.4.4;

步骤1.3.4.3:缩短曲线的参数区间,范围由[umin,umax]变为返回步骤1.3.4.2;umin,umax对应参数区间内曲线首尾端的参数值;

步骤1.3.4.4:通过曲线参数方程计算参数区间右边界utemp相应的点ptemp,判断是否是曲线终止点,若不是终止点,则执行步骤1.3.4.5,否则插补结束;

步骤1.3.4.5:将当前参数区间右边界的参数utemp作为曲线参数空间的左边界,umax作为参数空间的右边界,即参数空间更新为[utemp,umax],继续执行步骤步骤1.3.4.2;

所述行距计算模型包括平面加工行距计算模型、凸曲面加工行距计算模型和凹曲面加工行距计算模型;

在加工平面时,行距l计算公式为:

其中:rtool为工具半径,即机器人法兰盘末端执行工具的半径;h为允许的最大残余高度;

在实际应用中,rtool远大于h,因此上式简化为:

在加工凸曲面时,行距l计算公式为:

其中:rsurface是凸曲面沿约束面平移方向的局部近似曲率半径,q是工具半径与所述局部近似曲率半径之和,即q=rtool+rsurface;

在实际应用中,rtool远大于h,因此上式简化为:

在加工凹曲面时,行距l计算公式简化为:

所述步骤1.3.5中,首先定义c1和c2是两个相邻的约束面,p1和p2是两个相邻轨迹点,θ是约束平面法向量与向量p1p2的夹角,由几何关系计算得到空间上约束面的平移距离d为:d=l·cosθ。

6.根据权利要求1所述离线编程中的复杂曲面加工轨迹生成方法,其特征在于,所述步骤1.4中,采用欧拉角来描述轨迹点的姿态信息,机器人的运动轨迹参数有六个,前三个是轨迹点的x、y、z坐标值,用来描述末端位置,后三个是欧拉角α、β、γ,用来描述末端姿态,在轨迹生成中,利用右手笛卡尔坐标系定义轨迹点的姿态,定义坐标系的原点为当前轨迹点,坐标系的x轴dirx为轨迹点所在曲线的切向量,坐标系的z轴dirz为轨迹点在待加工曲面上的法向量,默认法向量朝向曲面外部,最后通过x轴和z轴叉乘得到y轴diry=dirz×dirx,机器人在加工时,工具末端坐标系的x轴方向与轨迹点x轴方向保持一致,工具末端保证在工件外部,因此工具末端坐标系的z轴方向与轨迹点z轴方向相反,工具末端坐标系的x、z、y轴正方向分别为:dirx、-dirz、diry=(-dirz)×dirx。

7.根据权利要求1所述离线编程中的复杂曲面加工轨迹生成方法,其特征在于,所述步骤2中,所述异常点包括奇异点、轴超限点、不可达点以及跳变点,将所生成的轨迹点按照位姿和机器人机械臂的运动范围进行运动学分析,找出奇异点、不可达点、轴超限点及跳变点,具体步骤如下:

步骤2.1:选取需要进行检测的曲面轨迹,提取轨迹信息,并按轨迹加工顺序将轨迹点按顺序存储,获取轨迹点的总个数,设置运动指令计数标志,初始化为0;

步骤2.2:如果计数标志小于轨迹点总个数,获取当前轨迹点,提取轨迹点信息,反之,进入步骤2.6;

步骤2.3:解析运动指令,通过步骤2.2得到轨迹点信息,通过机器人逆解算法得到在该轨迹点下的运动关节角,如果逆解无解或jacobian矩阵无反函数,则该点不可达,或该点为奇异点,将轨迹点设为不可达点或奇异点,运动指令计数标志加一,返回步骤2.2;如果逆解有解,解出六个关节角并保存,到步骤2.4;

步骤2.4:由步骤2.3得知当前轨迹点不是不可达点,将逆解求出的六个关节角进行轴超限检测,如果有任意一轴的关节角超出范围,将该轨迹点的轴超限状态设置为激活状态,如果该点是正常点,到步骤2.5;

步骤2.5:根据运动方式,对该点进行插补,在插补过程中,得到一个插补点,如果该点不是最后一个插补点,返回步骤2.2;如果该点是最后一个插补点,将计数标志加1,返回步骤2.2;

步骤2.6:结束,此时检测出该复杂曲面轨迹加工过程中,所有遇到的不可达点及轴超限点,并保存了所有轨迹点及其插补点的关节角;

步骤2.7:进行跳变点检测,具体步骤如下:

步骤2.7.1:首先设置六个关节角的变化量分别为a1,a2,a3,a4,a5,a6;初始化为0,得到包括轨迹点和插补点在内的所有点的个数,设置计数器,初始化为0,设置前一步的六个关节角的值pre1~pre6,初始化为第一个点六个关节角的值;

步骤2.7.2:通过计数器从所有点中按顺序得到一个轨迹点,得到这个点的六个关节角cur1~cur6;

步骤2.7.3:通过公式:得到当前轨迹点关节角的变化量,如果关节角变化量大于50度则将该轨迹点中的跳变标志位激活,表面该轨迹点是一个跳变点;

步骤2.7.4:判断计数器是否小于点的总数,是则返回步骤2.7.2,反之,结束;

通过以上方法将曲面每个轨迹点的状态数据检测更新,将轨迹点分为四类:正常点、不可达点、奇异点、轴超限点、跳变点。

8.根据权利要求1所述离线编程中的复杂曲面加工轨迹生成方法,其特征在于,所述步骤3中,对检测出来的异常点进行位姿调整,实现对于单轨迹点、轨迹段、多轨迹点的多种编辑的功能。主要编辑操作包括旋转、复制、删除、平移和轴反向,用来对异常轨迹点进行操作,以求变为正常可以加工的轨迹点,其中:

平移操作是针对单独轨迹点沿着自己的姿态坐标系x、y、z轴进行平移,平移变换视为平移算子左乘原坐标系得到平移后新坐标系,矩阵平移算子定义如下:

其中:px、py、pz分别是x、y、z轴方向的平移分量;p为平移向量,且有

旋转操作是对于轨迹点姿态的改变,而不改变轨迹点的位置信息,以三个姿态坐标系x、y、z为准进行相应的旋转操作,绕某一个轴进行旋转,或按顺序依次绕x、y、z轴旋转,相应的旋转矩阵rx(θx)、ry(θy)、rz(θz)分别为:

式中:θx、θy、θz分别是绕x、y、z轴旋转的角度;

轨迹点复制是创建一个和该轨迹点位姿完全一样的新的轨迹点对象,默认将新生成的轨迹点加到原有轨迹点之前的位置;

轨迹点删除是根据需求将轨迹点列表中不需要的轨迹点删掉并更新轨迹;

x/z轴反向是针对单轨迹点的姿态坐标x轴正方向和z轴正方向反向,在x轴反向时,保持z轴方向不变,y轴的方向由新得到的x轴和z轴做向量的叉乘得到;同理,在改变z轴方向时,保证x轴的方向不改变,y轴的方向由新得到的z轴的方向和x叉乘得到;

对于一段轨迹,除了对单轨迹点的操作外,还包括位姿的统一、隐藏、显示、仿真、轨迹反向、关联零件、上下移动;

在具体实现中,利用计算机中基本的数据结构链表来存储轨迹点,轨迹的复制、平移、反向、上下移动等功能利用链表的特性来实现;隐藏、显示是可视化的需求,利用occ封装的函数来实现,以方便用户操作。

9.根据权利要求1所述离线编程中的复杂曲面加工轨迹生成方法,其特征在于,所述步骤4中,将生成的轨迹通过关联零件操作与加工零件相互关联,借助occ中gp_trsf描述模型对象位姿变换,具体的步骤如下:

步骤1.4.1:首先获取当前轨迹所在工件模型的变化gp_trsf;

步骤1.4.2:获取轨迹中所有点的位置坐标,构造对应的gp_pnt,并且得到读取所有点的姿态信息,即三个欧拉角,根据欧拉角构造对应的三个方向gp_dir;

步骤1.4.3:根据步骤1.4.1得到的工件的变换矩阵gp_trsf,将该轨迹中所有点的gp_pnt和三个方向gp_dir变换到相应的位置;

步骤1.4.4:根据每个点的gp_dir,计算该轨迹中所有点变换后的欧拉角;

步骤1.4.5:更新轨迹数据,并同时更新交互界面中的显示模型。

10.根据权利要求1所述离线编程中的复杂曲面加工轨迹生成方法,其特征在于,所述步骤4中,对于两机器人异步协同加工的仿真,单独设置一类通信轨迹点来通过多线程并发的方式来完成,并通过线程之间的通信来完成机器人之间的通信以完成相互协作的任务,具体步骤如下:

步骤1.4.6:读取两台机器人所有的轨迹信息,分别存储在相应的轨迹列表中;

步骤1.4.7:分别对两个机器人的轨迹点列表根据位姿信息,运动模式进行运动学解析,得到每个轨迹点与插补点的关节角和变换矩阵;

步骤1.4.8:根据步骤1.4.7得到的变换矩阵和关节角,通过_beginthread函数并发两个线程,并保存两个线程的句柄;同时对两台机器人的显示模型进行更新;

步骤1.4.9:对于一个线程执行如下操作:遍历轨迹点,读取一个轨迹点,判断该轨迹点是否为通信轨迹点,如果是,唤起兄弟线程即另一个机器人仿真线程,然后挂起自己,当整个轨迹遍历完后,唤醒一次兄弟线程,防止发生锁死。


技术总结
一种离线编程中的复杂曲面加工轨迹生成方法,利用基于STEP标准的NURBS复杂曲面轨迹生成算法生成轨迹,并进行轨迹的可视化;动画仿真前,利用机器人运动学算法预先对生成的轨迹点检测,检测出不可达、轴超限、跳变点等异常点;再利用轨迹姿态修正模块修正异常点,直到所有轨迹点正常,最后利用计算机图形学进行动画仿真,后置代码转换到真机运行。本方法可以用于离线编程中的复杂曲面加工轨迹生成及规划问题,针对机器人加工复杂曲面问题,人工示教工作量大,难度高,效率低等问题给出了一个系统解决方法,具有精度高,速度快,通用性强,仿真可视化效果好的特点,可以广泛适用于复杂曲面加工环境,同时提出的复杂曲面轨迹生成算法精度高,鲁棒性强。

技术研发人员:吕红强;舒驰;刘俊;韩九强;郑辑光
受保护的技术使用者:西安交通大学
技术研发日:2020.02.24
技术公布日:2020.06.05
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1