四轴平面机器人的手眼标定

2022-08-28 12:42:45 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

四轴平面机器人的手眼标定

介绍

在实际的机器人应用中,通常会给机器人配备视觉传感器,视觉传感器用于感知周围环境。但是,通过视觉传感器获取的场景坐标是基于视觉坐标系下的,机器人并不能直接使用,要获取机器人可以直接使用的坐标信息,必须将坐标转换到机器人坐标系下。因此,机器人手眼标定的目的是为了获取从视觉坐标系转换到机器人坐标系的转换矩阵。 机器人手眼标定问题可以分为两类:

1)eye-in-hand,视觉传感器安装在机器人末端执行器上,随着机器人的移动而移动;

2)eye-to-hand,视觉传感器固定安装,与机器人基座坐标系相对固定。

那么如何进行手眼标定呢? 本篇文章仅仅研究四轴平面机器人的手眼标定。

四轴机器人的手眼标定

在四轴机器人的应用场景中,通常都是用于抓取平面上的物体,实际配置如下图所示。

在作业过程中,主要存在以下几个步骤:

1)相机拍摄平面上的物体;

2)在拍摄的图像中定位物体的位置(像素坐标);

3)将像素坐标转换到机械手基座坐标系下;

4)机械手抓取零件。

四轴平面机器人手眼标定的任务就是计算出像素坐标系到机械手基座坐标系下的转换矩阵。由于相机拍摄的是一个平面,而机械手作业的区域也是一个平面,因此,平面机器人手眼标定的任务可以转换成计算两个平面之间的映射关系的过程,也就是计算两个平面之间的仿射变换。 点(x,y,w)‘为图像点的齐次坐标,而点(x’,y’,w’)’为机械手每组场景的控制器读数(仅读取x,y参数)的齐次坐标,经过如下转换。

式中,$a_{11},a_{12},a_{21},a_{22}$不是旋转矩阵的元素,因为该变换矩阵是齐次坐标(在许多的博客中直接说是旋转矩阵是不对的。 方程中,存在6个未知数,理论上使用3组对应点就可以计算出所有参数,但是实际读取的数据都存在噪声,因此,需要采集>3组的数据(通常是9组,所以称该方法是9点法)使用最小二乘就行求解。

halcon中计算方法

  • 首先进行手眼标定
代码语言:javascript复制
%计算图像坐标
area_center(SortedRegions,Area,Row,Column)
%输入机械手示教的9点坐标
Column_robot := [275,225,170,280,230,180,295,240,190]
Row_robot := [55,50,45,5,0,-5,-50,-50,-50]
%求解放射变换矩阵,HomMat2D是图像坐标和机械手坐标之间的变换矩阵
vector_to_hom_mat2d(Row,Column,Row_robot,Column_robot,HomMat2D)
  • 在标定结束后,使用标定的数据计算机械手抓取位置
代码语言:javascript复制
%由像素坐标和标定矩阵求出机器人基础坐标系中的坐标
affine_trans_point_2d(HomMat2D,Row2,Column2,Qx,Qy)

opencv中的计算方法

  • 手眼标定
代码语言:javascript复制
//计算图像坐标
std::vector<cv::Point2f> img_corners;
//输入机械手示教的9点坐标
std::vector<cv::Point2f> robot_corners;
cv::Mat transform;
//计算手眼标定矩阵transform
cv::estimateAffine2D(img_corners, robot_corners,transform);

大家好,我主要的研究方向有: 1)主流的结构光三维测量方法,包括:线扫,格雷码,相移,散斑等; 2)摄像机标定和投影仪标定; 3)点云处理; 4)图像处理; 5)Halcon应用; 6)机器视觉相机选型。


发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146228.html原文链接:https://javaforall.cn

0 人点赞