手眼标定calibrateHandEye()

手眼标定calibrateHandEye()

void cv::calibrateHandEye	(	InputArrayOfArrays 	R_gripper2base,
								InputArrayOfArrays 	t_gripper2base,
								InputArrayOfArrays 	R_target2cam,
								InputArrayOfArrays 	t_target2cam,
								OutputArray 	R_cam2gripper,
								OutputArray 	t_cam2gripper,
								HandEyeCalibrationMethod 	method = CALIB_HAND_EYE_TSAI 
)	

https://docs.opencv.org/4.5.3/d9/d0c/group__calib3d.html#gaebfc1c9f7434196a374c382abf43439b

参数描述
R_gripper2base:齐次矩阵中的旋转矩阵部分;齐次矩阵为将在末端执行器坐标系中描述的点转换到机器人基坐标系的描述。这是一个vector (vector) ,包含了从末端坐标系到机器人基坐标系的全部变换,包含了旋转、3x3的旋转矩阵 or 3x1的旋转向量。 同理 t_gripper2base

向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)
跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
二、容器特性
1.顺序序列
顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。
2.动态数组
支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。操供了在序列末尾相对快速地添加/删除元素的操作。
3.能够感知内存分配器的(Allocator-aware)
容器使用一个内存分配器对象来动态地处理它的存储需求。

R_target2cam:一个齐次矩阵的旋转部分;将标定板坐标系中的点转换到相机坐标系。t_target2cam同理。

函数的输出为 R_cam2grippert_cam2gripper :分别估计一个3x3的旋转矩阵和3x1的平移向量,描述相机坐标系中的一个点转换到机器人末端坐标系。

method:One of the implemented Hand-Eye calibration method, see cv::HandEyeCalibrationMethod.

enum cv::HandEyeCalibrationMethod 手眼标定方法的枚举类
R. Tsai, R. Lenz A New Technique for Fully Autonomous and Efficient 3D Robotics Hand/EyeCalibration [249]
F. Park, B. Martin Robot Sensor Calibration: Solving AX = XB on the Euclidean Group [190]
R. Horaud, F. Dornaika Hand-Eye Calibration [112]

The following picture describes the Hand-Eye calibration problem where the transformation between a camera (“eye”) mounted on a robot gripper (“hand”) has to be estimated. This configuration is called eye-in-hand.
在这里插入图片描述
标定步骤如下:
在这里插入图片描述
1.静态的校准模式被用于估计标定板坐标系与相机坐标系的变换。
2.机器人末端执行器移动来获得几个不同的位姿。
3.对于每一个位姿状态下,末端坐标系与机器人基坐标系之间的齐次变换被记录下来,例如用于机器人运动学。通常用机器人的示教器获得。
4.对于每一个位姿状态下,标定板坐标系与相机坐标系之间的齐次变换被记录下来,用于位姿估计方法(PnP)从 2D-3D point 。通过Opencv中PNP的求解函数。


bool cv::solvePnP	(	InputArray 	objectPoints,
						InputArray 	imagePoints,
						InputArray 	cameraMatrix,
						InputArray 	distCoeffs,
						OutputArray 	rvec,
						OutputArray 	tvec,
						bool 	useExtrinsicGuess = false,
						int 	flags = SOLVEPNP_ITERATIVE 
)

Parameters:
		objectPoints - 世界坐标系下的控制点的坐标,vector<Point3f>的数据类型在这里可以使用
		imagePoints - 在图像坐标系下对应的控制点的坐标。vector<Point2f>在这里可以使用
		cameraMatrix - 相机的内参矩阵
		distCoeffs - 相机的畸变系数
		rvec - 输出的旋转向量。使坐标点从世界坐标系旋转到相机坐标系
		tvec - 输出的平移向量。使坐标点从世界坐标系平移到相机坐标系
		flags - 默认使用CV_ITERATIV迭代法

The Hand-Eye calibration procedure returns the following homogeneous transformation
在这里插入图片描述
确定手眼变换至少需要2个非平行旋转轴的运动。因此,至少需要3种不同的位姿,强烈建议使用更多的位姿。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值