眼在手上的手眼标定(matlab+python)实测精度±1mm

眼在手上的手眼标定(matlab+python)实测精度±1mm
一、准备工作
  • 材料准备:标定板、相机、机械臂;
  • 做相机标定,同时记录拍照位机械臂位姿(images/pos.txt),照片放在images下;(笔者提供了标定的图片及数据)
二、相机标定:
  • 使用matlab自带的相机标定工具箱进行标定,标定结果会输出到matlab工作区,需要将其保存至本地;
data = toStruct(cameraParams);
% 保存变量到.mat文件
save('cameraParams.mat', 'data');
三、手眼矩阵计算:
1. 运行hand_eye_calibrate.py;
  • 读取cameraParams.mat中的标定结果,并写入配置文件camera.ini;
  • 计算相机和机械臂末端变换矩阵至cam2end.txt;
2. 注意
  • 需要注意机械臂位姿输出的格式,我这里用的输出格式为:
[x, y, z, rx, ry, rz]
四、如何使用手眼矩阵
  1. 提供了一个基于AprilTag的定位方案,见get_target_pose.py;
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
手眼标定是一种机器人视觉引导控制的技术,其目的是通过计算机视觉技术将机器人工具(例如相机)与机器人末端执行器之间的转换矩阵进行计算,从而实现精准的机器人控制。在手眼标定中,相机和机械臂的位置都是已知的,因此可以通过采集相机和机械臂在不同位置下的图像来计算出相机和机械臂之间的变换矩阵。 在Python中,可以使用OpenCV库进行手眼标定。以下是一个简单的手眼标定Python代码示例: ```python import numpy as np import cv2 # 定义机器人末端执行器和相机之间的变换矩阵 Tc = np.array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) Te = np.array([[1, 0, 0, 0.1], [0, 1, 0, 0.2], [0, 0, 1, 0.3], [0, 0, 0, 1]]) # 定义相机内参矩阵和畸变系数 K = np.array([[100, 0, 320], [0, 100, 240], [0, 0, 1]]) distCoeffs = np.array([0, 0, 0, 0]) # 定义相机拍摄的机器人姿态和相机图像的点集 robot_poses = [] image_points = [] # 通过机器人移动获取机器人姿态和相机图像的点集 # 使用OpenCV进行手眼标定 retval, R, t = cv2.calibrateHandEye(robot_poses, image_points, Tc, Te, K, distCoeffs, cv2.CALIB_HAND_EYE_TSAI) # 输出机器人末端执行器和相机之间的转换矩阵 print("Transformation Matrix: ") print(np.vstack((np.hstack((R, t)), np.array([0, 0, 0, 1])))) ``` 需要注意的是,在进行手眼标定时,需要采集足够数量的机器人姿态和相机图像的点集,并且这些点集需要保证其空间位置和姿态关系已知。另外,在手眼标定时,需要确保相机和机械臂之间的坐标系定义一致,否则会影响标定的精度

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值