首页 > 其他分享 >OpenCV 机器人手眼标定

OpenCV 机器人手眼标定

时间:2024-08-22 16:21:58浏览次数:8  
标签:标定 相机 OpenCV 机械手 坐标 warpMat ptr 手眼

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);
至此标定结束,我们可以控制相机拍照进行定位,然后转换成机械手坐标,指哪打哪了。

标签:标定,相机,OpenCV,机械手,坐标,warpMat,ptr,手眼
From: https://blog.csdn.net/m0_37302966/article/details/141431190

相关文章

  • java opencv 获取图中物品的倾斜角度(单个物品,如果存在多个物品,建议先将多个物品处理成
    //1、先连上opencv包System.setProperty("java.awt.headless","false");System.out.println(System.getProperty("java.library.path"));URLurl=ClassLoader.getSystemResource("lib/opencv/opencv_java4100.dll");System.load(url.g......
  • 【OpenCV教程】特征工程
    @目录1.模板匹配1.1原理1.2API1.3模板匹配计算方法1.4掩码的使用获得掩码1.5效果1.5模板匹配的缺陷无法应对旋转无法应对缩放2.cornerHarris(对灰度图)2.1角点的描述2.2原理(前置知识要求:线性代数)(以下为bolcksize=2的情况)2.3API2.4流程2.5优点与缺点测试代码图片旋转,角......
  • 【OpenCV教程】轮廓检测过程
    @目录1.查找轮廓1.1API1.2轮廓层级检测模式:索引号(层级)RETR_EXTERNAL(索引顺序:从右下到左上)RETR_LIST(recommended)(索引顺序:从右下到左上,由外到内)RETR_CCOMP(notrecommended)(索引顺序:由内到外,从右下到左上)RETR_TREE(recommended)1.3轮廓坐标点储存方式2.绘制轮廓2.1API3.轮廓面......
  • OpenCV(cv::SparseMat)
    目录1.主要特点和用途2.主要方法和成员函数3.示例代码4.优缺点cv::SparseMat是OpenCV中表示稀疏矩阵的类。稀疏矩阵用于存储大多数元素为零的矩阵,以节省内存和计算时间。与普通的密集矩阵不同,稀疏矩阵仅存储非零元素及其坐标。1.主要特点和用途稀疏数据存储:当......
  • ArchLinux配置OpenCV C++环境
    本文将简单介绍在ArchLinux中安装OpenCVC++库并运行一个简单的OpenCV程序的过程。参考:https://github.com/donaldssh/Install-OpenCV我的环境最新的ArchLinuxKDEPlasma6桌面环境OpenCV4.10.0clang18.1.8gcc14.2.1安装安装以下包:sudopacman-Shdf5vtk......
  • python opencv实时视频输入
    要在Python中使用OpenCV进行实时视频输入,可以按照以下步骤进行操作:首先,需要安装OpenCV库。可以使用pipinstallopencv-python命令来安装OpenCV。导入所需的库:importcv2创建一个VideoCapture对象来读取视频输入:cap=cv2.VideoCapture(0)这里的参数0表示使用计......
  • OpenCV-Python系列之对极几何
    点击查看代码importnumpyasnpimportcv2ascvimg1=cv.imread("data1/1.png",0)#queryimageleftimageimg2=cv.imread("data1/2.png",0)#trainimagerightimagesift=cv.SIFT_create()#sift1=cv.xfeatures2d.SIFT_create()kp1,des1=sift.dete......
  • 【OpenCV_python】凸包检测 轮廓特征 直方图均衡化 模板匹配 霍夫变换
    凸包特征检测凸包就是图像的最小外接多边形,通过图像的轮廓点,找到距离最远的两个点的直线,根据直线找到距离最远的下一个点,直到所有的点被包围在多边形内读取图像二值化找图像的轮廓获取凸包点的坐标绘制凸包点convexHull获得图像的凸包点cv2.convexHull(points,hu......
  • 【OpenCV教程】滤波和边缘检测的过程
    @目录1.均值滤波1.1卷积核形状1.2API1.3效果2.高斯滤波2.1卷积核形状2.2API2.3效果3.中值滤波3.1原理3.2API3.3效果4.高斯双边滤波4.1原理4.2API4.3效果5.获取用来形态学操作的滤波器6.腐蚀和膨胀(对二值图)6.1原理6.2腐蚀API6.3效果6.4膨胀API6.5效果7.形态学操作......
  • OpenCV(cv::NAryMatIterator)
    目录1.基本概念2.构造函数3.成员变量4.成员函数5.使用方法6.应用场景cv::NAryMatIterator是OpenCV中用于高效遍历多个多维矩阵(cv::Mat)元素的迭代器。它允许你在处理多个矩阵时,将它们看作是一个整体,并以统一的方式遍历它们的元素,特别适合需要对多个矩阵进行同步操作的......