首页 » 网站建设 » php129技巧_机械人标定相机9点标定的填补12点计算扭转中央

php129技巧_机械人标定相机9点标定的填补12点计算扭转中央

访客 2024-12-14 0

扫一扫用手机浏览

文章目录 [+]

2. 最常见的标定为9点标定,例如相机装在机器臂末端,机器人将法兰盘处于标准位置5处的x,y坐标及后续运动的x,y方向的间距发给相机,机器臂按照规则沿着机器臂base的x和y方向走如下轨迹,完成标定。
此机遇械臂走回标准拍照位置5,拍照得到的相机返回产品坐标所在的坐标系与机器人base坐标系平行。

3. 虽然机器臂在位置5处,将法兰盘的位置发给相机,但相机实际安装如下图(即相机安装不会在法兰盘位置5,相机与机器臂法兰盘有偏置)。
以是须要打算得到相机和法兰盘的关系,这样相机返回的产品坐标可以直接是机器人base坐标下的值。

php129技巧_机械人标定相机9点标定的填补12点计算扭转中央

4. 海康相机直接供应了12点标定,个中末了3点为机器人以法兰盘为中央绕着大地的z旋转(若法兰盘平行base,直接旋转6轴),如下图。
通过在相机中同一个mark点的不同位置,打算出3个mark位置对应的圆心(即法兰盘)。
后续输出结果只需加上该偏差即可。

php129技巧_机械人标定相机9点标定的填补12点计算扭转中央
(图片来自网络侵删)

5. 若相机标定功能不具备自动打算旋转中央功能,则在完成9点标定后,旋转中央的打算和偏差打算可以放在机器人侧完成。
详细代码如下:

PERS robtarget pNewActual:=[[0,0,0],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];PERS robtarget pStdActual:=[[0,0,0],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];! pStdActual是产品在标准位置时,打算得到的在机器人base下的实际位姿(包含了旋转中央偏差的补偿)PERS robtarget pStdFromCam:=[[0,0,0],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];! pStdFromCam是产品在标准位置时,相机返回的坐标值。
相机仅和机器人做了9点标定,没有做旋转中央处理PERS robtarget ptmp:=[[326.174,111.364,558],[5.75447E-8,-0.707136,-0.707078,-7.91093E-9],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];CONST robtarget pcam:=[[302,0,558],[5.505613E-08,-0.3187502,-0.9478387,1.851492E-08],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget pPickStd:=[[302,0,558],[5.505613E-08,-0.3187502,-0.9478387,1.851492E-08],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];PERS pos pos10{3}:=[[248.922,75.1801,0], [302,0,0], [299.772,-70.4799,0]];PERS pos camdata:=[0,0,-52.83];PERS pos camdata_ini:=[0,0,-52.83];PERS pos offset1:=[124.184,31.3486,0]; !
打算出来的旋转中央偏移PROC rInit() rRotCenterCalib pcam,10; ! 实行该程序前,已经完成相机9点标定,但未做相机到法兰盘的旋转中央补偿ENDPROCPROC rRotCenterCalib(robtarget pCam0,num angle) ! pCam0 is robot take photo position with tool0 ! angle will let robot rotate Rz, unit:deg VAR robtarget pCamCalib{3}; pCamCalib{1}:=pCam0; pCamCalib{2}:=pCam0; pCamCalib{3}:=pCam0; pCamCalib{1}.rot:=OrientZYX(-angle,0,0)pcamcalib{1}.rot; pCamCalib{3}.rot:=OrientZYX(angle,0,0)pcamcalib{3}.rot; MoveL pCamCalib{1},v1000,fine,tool0; !pos10{1}:=机器人法兰盘旋转-AAA°,相机返回值 MoveL pCamCalib{2},v1000,fine,tool0; !pos10{2}:=机器人法兰盘在标准位置,相机返回值 MoveL pCamCalib{3},v1000,fine,tool0; !pos10{3}:= 机器人法兰盘旋转AAA°,相机返回值 offset1:=calCamRotOffs(pos10); ! 打算得到相机与法兰盘在机器人base方向上的偏差 stop;ENDPROCFUNC pos calCamRotOffs(pos posC{}) !posC array are robot rotate Rz with flange(tool0) !posC{1} : robot rotate Rz -AAA degree, camera result !posC{2} : robot move to pCam0, camera result !posC{3} : robot rotate Rz BBB degree, camera result VAR pos pcenter; VAR num r; VAR pos n; VAR pos normal; fitcircle posC,pcenter,r,normal; ! fitcircle1 pos10{1},pos10{2},pos10{3},pcenter,r; ! 若现场机器人没有fitcircle内置函数,可以利用后续内容的fitcircle1函数打算圆心 RETURN [posC{2}.x-pcenter.x,posC{2}.y-pcenter.y,0];ENDFUNC!!!!! ! 以下为仿真测试PROC testProcess() MoveJ pcam,v1000,fine,tool0; ! take photo for new product ,移动到拍照位置 pStdActual:=pStdFromCam; pStdActual.trans.x:=camdata_ini.x; pStdActual.trans.y:=camdata_ini.y; pStdActual.trans:=pStdActual.trans+offset1; pNewActual:=pStdFromCam; pNewActual.trans.x:=camdata.x; pNewActual.trans.y:=camdata.y; pNewActual.trans:=pNewActual.trans+offset1; pNewActual.rot:=OrientZYX(camdata_ini.z-camdata.z,0,0)pNewActual.rot; ptmp:=calTarget(pStdActual,pNewActual,pPickStd); ! 通过标准产品位置,新产品位置和基于tool0的标准抓取位置,得到新的基于tool0抓取位置 MoveL ptmp,v1000,fine,tool0; Stop;ENDPROCFUNC robtarget calTarget(robtarget pold,robtarget pnew,robtarget pStdPick) VAR pose p1; VAR pose p2; VAR pose p3; VAR pose ppick; VAR pose ppicknew; VAR robtarget pout:=[[0,0,0],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]]; pout:=pStdPick; p1:=[pold.trans,pold.rot]; p2:=[pnew.trans,pnew.rot]; p3:=PoseMult(p2,PoseInv(p1)); ppick:=[pStdPick.trans,pStdPick.rot]; ppicknew:=PoseMult(p3,ppick); pout.trans:=ppicknew.trans; pout.rot:=ppicknew.rot; RETURN pout;ENDFUNC

PROC fitCircle1(pos p1,pos p2,pos p3,inout pos pcenter,inout num radius) !
三点打算圆心 VAR num x1; VAR num y1; VAR num z1; VAR num x2; VAR num y2; VAR num z2; VAR num x3; VAR num y3; VAR num z3; VAR num a1; VAR num b1; VAR num c1; VAR num d1; VAR num a2; VAR num b2; VAR num c2; VAR num d2; VAR num a3; VAR num b3; VAR num c3; VAR num d3; VAR num x; VAR num y; VAR num z; x1:=p1.x; y1:=p1.y; z1:=p1.z; x2:=p2.x; y2:=p2.y; z2:=p2.z; x3:=p3.x; y3:=p3.y; z3:=p3.z; a1:=(y1z2-y2z1-y1z3+y3z1+y2z3-y3z2); b1:=-(x1z2-x2z1-x1z3+x3z1+x2z3-x3z2); c1:=(x1y2-x2y1-x1y3+x3y1+x2y3-x3y2); d1:=-(x1y2z3-x1y3z2-x2y1z3+x2y3z1+x3y1z2-x3y2z1); a2:=2(x2-x1); b2:=2(y2-y1); c2:=2(z2-z1); d2:=x1x1+y1y1+z1z1-x2x2-y2y2-z2z2; a3:=2(x3-x1); b3:=2(y3-y1); c3:=2(z3-z1); d3:=x1x1+y1y1+z1z1-x3x3-y3y3-z3z3; x:=-(b1c2d3-b1c3d2-b2c1d3+b2c3d1+b3c1d2-b3c2d1)/ (a1b2c3-a1b3c2-a2b1c3+a2b3c1+a3b1c2-a3b2c1); y:=(a1c2d3-a1c3d2-a2c1d3+a2c3d1+a3c1d2-a3c2d1)/ (a1b2c3-a1b3c2-a2b1c3+a2b3c1+a3b1c2-a3b2c1); z:=-(a1b2d3-a1b3d2-a2b1d3+a2b3d1+a3b1d2-a3b2d1)/ (a1b2c3-a1b3c2-a2b1c3+a2b3c1+a3b1c2-a3b2c1); pcenter:=[x,y,z]; radius:=sqrt((x1-x)(x1-x)+(y1-y)(y1-y)+(z1-z)(z1-z));ENDPROC

相机9点标定的补充--12点打算旋转中央

http://bbs.plcjs.com/forum.php?mod=viewthread&tid=500885&fromuid=1

(出处: PLC论坛-全力打造可编程掌握器专业技能论坛)

#非标自动化#

相关文章

大数据时代下的美股市场,机遇与挑战并存

随着信息技术的飞速发展,大数据已经成为各个行业的重要资源。在美国,大数据对美股市场的影响日益显著,既带来了前所未有的机遇,也带来了...

网站建设 2024-12-16 阅读0 评论0