OpenCV机器人手眼标定(九点标定法)

OpenCV机器⼈⼿眼标定(九点标定法)
  对于初学者⽽⾔,对相机的标定经常模糊不清。不知道机器坐标与相机坐标如何转换,两个坐标系⼜是如何建⽴?
  我们通常是利⽤张⽒标定法,针对于相机的畸变进⾏标定,利⽤校正得到的参数对图形进⾏处理后再呈现出来。这个⽅法⽹上⽤的⼈很多,资料也较为全⾯。这⾥就不做说明了。本⽂主要是针对机械⼿的⼿眼标定,⼀般⽽⾔⽬前相机的畸变较⼩,精度也较为准确,使⽤该⽅法进⾏标定也能得到较好的效果。
网眼通  ⾸先,对于九点标定⽽⾔。我们使⽤到的是OpenCv中的estimateRigidTransform 函数。
函数定义如下:
Mat estimateRigidTransform(InputArraysrc,InputArraydst,boolfullAffine)
前两个参数,可以是:src=srcImage (变换之前的图⽚Mat) dst=transImage(变换之后的图⽚Mat)
也可以: src=array(变换之前的关键点Array) dst=array(变换之后的关键点Array)
第三个参数: 1(全仿射变换,包括:rotation, translation, scaling,shearing,reflection)
高速公路收费系统
其主要原理为:如果我们有⼀个点变换之前是[x,y,1],变换后是[x’,y’,1] 则fullAffine表⽰如下:
TX=Y
展开后表⽰
如果我们想求这【a-f】 6个变量需要有6个⽅程,也就是3组点。但是⽐三个点多呢?
⽐如:20个点。那就是⽤最⼩⽅差。
标定步骤
1、⾸先我们需要准备⼀块,标定板。如果条件不⾜,可以使⽤⽩纸画上九个圆进⾏代替。
2、相机位置,机械⼿位置全部固定好,标定针固定在机械⼿上,固定好后不能够再移动。标定针的位置⼀定要与夹⼿或吸盘之内的⼯具同⼀位置⾼度。
3、将标定板放到相机下⽅,位置区域要与机械⼿⼯作的区域⼀样,包括⾼度必须尽量⼀致,这是标定准确度的关键。
4、调整好相机焦距,拍照,然后识别9个圆圆⼼的坐标并进⾏记录。关于如何圆,可以参考我的上⼀篇博⽂,对于圆形的查⼗分精准。
5、将机械⼿依次移动到9个圆的圆⼼位置,记下机械⼿坐标
做完以上五步,我们会得到两个点集。⼀个为9个圆圆⼼坐标(points_camera),⼀个为9个圆⼼对应的机械⼿坐标(points_robot)。一个圆柱形玻璃容器
1    Mat warpMat;
2    vector<Point2f>points_camera;
3    vector<Point2f>points_robot;`
4    vector<Point2f>points_camera;
5    vector<Point2f>points_robot;
6    warpMat =estimateRigidTransform(points_camera, points_robot, true);
7      A = warpMat.ptr<double>(0)[0];
8      B = warpMat.ptr<double>(0)[1];
自动滤水器9      C = warpMat.ptr<double>(0)[2];
10      D = warpMat.ptr<double>(1)[0];
11      E = warpMat.ptr<double>(1)[1];
12      F = warpMat.ptr<double>(1)[2];
得出来的6个double类型的参数,就是我们此次标定最终得到的标定参数了。
巡线机器人之后我们把检测得到的图像坐标(t_px,t_py)代⼊,就可以得到与之相对应的机械⼿坐标(t_rx,t_ry)
t_rx= (A * t_px) + B * t_py + C);
t_ry= (D * t_px) + E * t_py+ F);
水箅⾄此标定结束,我们可以控制相机拍照进⾏定位,然后转换成机械⼿坐标,指哪打哪了。

本文发布于:2024-09-21 05:34:39,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/147985.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:标定   坐标   机械
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议