1. 焊接等工艺中,希望在原有轨迹上,进行偏移(注:是沿着轨迹前进方向偏移),即为多层多道工艺。 2. 使用多层多道时,通常会配合电弧跟踪,即第一道焊缝由于变形等问题,轨迹会偏差。实际走轨迹时,通过电弧跟踪,修正轨迹到工件实际。在第一道焊缝执行时,可以将实际纠偏后的轨迹记录下来。 由于第一层已经填平角焊缝,第二层不方便再进行电弧跟踪。第二层的偏移可以基于第一层实际记录的轨迹进行偏移。
3. 轨迹偏移有以下几个方面需要注意: 1)轨迹需要基于路径坐标系。路径坐标系定义如下:
根据以上定义,基于第一道轨迹记录的若干点(例如采用0.2s等定时中断记录),可以创建每一个点的路径坐标系(假设点与点之间比较接近): 假设记录的点是上图的p10,p11和p12。则p10的路径坐标系如图上的path,若沿着y修正,是沿着path.y进行修正。对于p11同理。 FUNC pose calPathFrame(robtarget P,robtarget NextP)
VAR pose pe; VAR robtarget ptmp; ptmp:=reltool(p,0,0,100); pe:=defframe(p,nextP,ptmp); ptmp.trans:=pe.trans; ptmp.rot:=pe.rot; ptmp:=reltool(ptmp,0,0,0\Rx:=90); RETURN [ptmp.trans,ptmp.rot]; ENDFUNC
2) 对于拐角轨迹,尤其拐弯角度大于90°,需要抛弃拐角点,否则会出现下图情况: 即点3,4,5出现大幅拐弯情况,若4点在路径坐标系(该点路径坐标系的x为4指向5,y方向为垂直x)的y方向进行偏移,会出现偏移后的点出现异常情况。 对于此类情况,可以计算3-4之间向量和4-5之间的向量夹角并进行判断和去除点。Frame:=calPathFrame(storeTarget{i},storeTarget{i+1}); ! 获取当前点的路径坐标系 p0:=targetInFrame(storeTarget{i},Frame);
p1:=targetInFrame(storeTarget{i+1},Frame); p2:=targetInFrame(storeTarget{i+2},Frame); vec1:=p1.trans-p0.trans; vec2:=p2.trans-p1.trans; IF calangle(vec1,vec2)>80 THEN
ENDWHILE
PERSmpData mdata1:=[2,0]; !y和z的偏移 PROC main() MoveL Target_10,v100,fine,MyTool\WObj:=wobj0; MpIni;
MoveC Target_20,Target_30,v20,z1,MyTool\WObj:=wobj0; MoveL Target_40,v20,z1,MyTool\WObj:=wobj0; MoveC Target_50,Target_60,v20,z1,MyTool\WObj:=wobj0; MoveL Target_70,v20,fine,MyTool\WObj:=wobj0; MpEnd;
MoveL Target_10,v100,fine,MyTool\WObj:=wobj0; MPMove mdata1,v20,MyTool; ENDPROC
MODULE mpModule RECORD mpData num y; num z; ENDRECORD
VAR intnum intmp; PERS robtarget storeTarget{1000}; PERS num mpStoreCount:=98;
TRAP trMp storeTarget{mpStoreCount}:=CRobT(); Incr mpStoreCount; ENDTRAP
PROC MpIni()
mpStoreCount:=1; IDelete intMp; CONNECT intMp WITH trMp; ITimer 0.2,intMp; ENDPROC
PROC MpEnd() IDelete intMp; storeTarget{mpStoreCount}:=CRobT(); ENDPROC
PROC MPMove(mpdata mdata,speeddata v,inout tooldata t\inout wobjdata wobj) VAR robtarget p0; VAR robtarget p1; VAR robtarget p2; VAR robtarget p; VAR pose Frame; VAR pos vec1; VAR pos vec2; VAR num i:=1; WHILE i<mpStoreCount-1 DO Frame:=calPathFrame(storeTarget{i},storeTarget{i+1}); p0:=targetInFrame(storeTarget{i},Frame); p:=calNewTarget(p0,Frame,mdata); MoveL p,v,z1,t\WObj?wobj;
p1:=targetInFrame(storeTarget{i+1},Frame); p2:=targetInFrame(storeTarget{i+2},Frame); vec1:=p1.trans-p0.trans; vec2:=p2.trans-p1.trans; IF calangle(vec1,vec2)>80 THEN
i:=i+2; ELSE i:=i+1; ENDIF ENDWHILE p:=calNewTarget(p1,Frame,mdata1); MoveL p,v,z1,t\WObj?wobj; p:=calNewTarget(p2,Frame,mdata1); MoveL p,v,fine,t\WObj?wobj; close iodev2; ENDPROC
FUNC pos vectNorm(pos p) VAR num mag; VAR pos p1; mag:=vectmagn(p); p1.x:=p.x/mag; p1.y:=p.y/mag; p1.z:=p.z/mag; RETURN p1; ENDFUNC
FUNC num calAngle(pos p1,pos p2)
VAR num angle; p1:=vectNorm(p1); p2:=vectNorm(p2); angle:=acos(dotprod(p1,p2)); RETURN angle; ENDFUNC
FUNC robtarget targetInFrame(robtarget p,pose Frame)
VAR pose p1; VAR pose p2; VAR robtarget pOut; pOut:=p; p1:=[p.trans,p.rot]; p2:=posemult(poseinv(frame),p1); pOut.trans:=p2.trans; pOut.rot:=p2.rot; RETURN pOut; ENDFUNC
FUNC robtarget calNewTarget(robtarget p,pose Frame,mpdata m)
VAR pose p1; VAR robtarget pOut; pOut:=p; p1:=[p.trans,p.rot]; p1.trans.y:=p1.trans.y+m.y; p1.trans.z:=p1.trans.y+m.z; p1:=posemult(frame,p1); pOut.trans:=p1.trans; pOut.rot:=p1.rot; RETURN pOut; ENDFUNC
FUNC pose calPathFrame(robtarget P,robtarget NextP) VAR pose pe; VAR robtarget ptmp; ptmp:=reltool(p,0,0,100); pe:=defframe(p,nextP,ptmp); ptmp.trans:=pe.trans; ptmp.rot:=pe.rot; ptmp:=reltool(ptmp,0,0,0\Rx:=90); RETURN [ptmp.trans,ptmp.rot]; ENDFUNC ENDMODULE
******************************** 如何获取更多经典文章? 关注公众号 ABB机器人实战技巧,点击页面底部的往期经典和配置,查看更多经典内容
点击阅读原文,学习robotstudio仿真,获取完整教学视频 更多内容 ★ 如何搜索历史文章
★基于pcsdk传输文件到HOME及加载 通过总线发送实数及负整数 ★使用定时中断向PLC发送机器人位置
★信号的准确提早触发
★变位机校准
★ABB机器人零位校准的那些秘密
★创建UDP通讯
★旋转姿态的左乘与右乘 ★通过socket控制机器人启停 上位机仪表盘实时显示机器人速度
★机器人画哆啦A梦 上位机实时控制机器人运动之EGM Python控制ABB机器人运动 通过Excel批量修改EIO文件 带连杆的机器人正运动学计算 制作四连杆机构 机器人PROFINET同时做CONTROLLER和DEVICE ★语音控制ABB机器人
★手机访问web控制机器人 ★自定义伺服焊枪
★制作输送链抓取搬运码垛工作站 ★随机物料产生与抓取
★四轴机器人定义TCP ★自定义外部轴-变位机
★示教四点完成码垛 ★multimove之双机器人与变位机
Robotware6.08碰撞预测启用与关闭
SMB板针脚解释
四六关节耦合限制
求两点间距离 新I/O DSQC1030配置 ABB机器人配置伺服焊枪 转角路径故障不提示设置 外部PLC选择机器人程序 一键回HOME程序 机器人各轴上下限位修改
Wobjdata数据解释
输送链跟踪与视觉的联系
急停与自动停止接线
|