手眼标定过程记录

本文记录了机械臂手眼标定的详细过程,包括排查末端到底座变换、解决Eigen报错、修复tool0_controller问题、理解TransformBroadcast和TransformListener的用法、解决实时点云显示问题,以及每次标定的流程。在解决过程中,作者遇到了容器中Eigen错误、控制器报错、坐标变换理解不清和点云固定帧不存在等挑战,通过查阅资料和实践找到了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

手眼标定过程记录

============================================================================================

以下四个变量是最重要的数据

rvecs_rb2gripper, tvecs_rb2gripper
rvecs_cam, tvecs_cam

1. 首先排查机械臂末端到底座的旋转平移是否正确

通过查看clopema_certh_ros
1.首先末端到底座的变换,listen的结果居然求逆了。

gripper_to_base.push_back(tr.inverse()) ;

2.然后标定板到相机的变换
最重要的rvecs和tvecs是通过下面的函数得到的,收集好所有帧的imagepoints一次性运算出所有外参

cv::calibrateCamera

而glawgow是通过对每一帧的imagepoints采用下面的函数获得每一次的外参矩阵的

solvePnPRansac

具体函数如下:

cv::calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, flags|CV_CALIB_FIX_K4|CV_CALIB_FIX_K5);
solvePnPRansac(objectPoints, imagePoints, cameraMatrix, distCoeffs, rvecEx, tvecEx, false, 100, 1.0, 0.99, inliers);

2. 关于容器中使用Eigen的报错:

### 关于机械臂手眼标定实验的方法与资料 #### 什么是手眼标定手眼标定是指通过相机和机械臂的协作,建立两者之间的几何关系。这种标定通常用于机器人视觉系统中,目的是使机械臂能够根据相机获取的信息执行精确的操作[^1]。 #### 手眼标定的核心方法 手眼标定主要涉及两种模型:“Eye-in-hand”(眼在手上)和“Eye-to-hand”(眼在外)。 - **Eye-in-hand**:相机安装在机械臂末端执行器上,随着机械臂移动而变化位置。 - **Eye-to-hand**:相机固定在外部环境中,观察机械臂的动作范围。 对于UR3机械臂的手眼标定,“Eye-in-hand”的方式更为常见。该过程需要采集多个位姿下的图像数据,并计算相机相对于机械臂基座或工具中心点(TCP)的姿态矩阵。 #### 数据采集注意事项 在实际操作过程中,需要注意以下几点: - 并非所有规划的位姿都能够成功拍摄到标定板。如果某些位姿无法捕捉清晰图像,则应排除这些无效样本。 - 实验表明,在多次尝试中,最多可以有效利用约15个位姿进行标定。 - 使用高质量的标定图案(如棋盘格),并确保其在整个视野范围内均匀分布。 #### 常见算法和技术 目前常用的手眼标定算法包括但不限于: - Tsai-Lenz 方法:基于单目摄像机的经典解法之一。 - Park-Burghardt 方法:适用于多视角情况下的优化方案。 - Zhang’s Method:由张正友提出的平面模板标定技术,广泛应用于工业领域。 以下是实现基本手眼标定的一个Python代码示例: ```python import cv2 import numpy as np def calibrate_hand_eye(camera_poses, robot_poses): """ Perform hand-eye calibration using the Tsai method. :param camera_poses: List of N homogeneous transformation matrices (4x4) from world to camera frame. :param robot_poses: List of N homogeneous transformation matrices (4x4) from base to end-effector frame. :return: Homogeneous matrix representing the relationship between camera and gripper frames. """ R_cam, t_cam = [], [] R_robot, t_robot = [], [] for pose in camera_poses: R_cam.append(pose[:3, :3]) t_cam.append(pose[:3, 3]) for pose in robot_poses: R_robot.append(pose[:3, :3]) t_robot.append(pose[:3, 3]) R_x, t_x = cv2.calibrateHandEye(RobotPoses=R_robot, CameraPoses=R_cam)[0] result = np.eye(4) result[:3, :3] = R_x result[:3, 3] = t_x.flatten() return result ``` 此函数实现了Tsai方法来求解相机坐标系相对机械臂末端执行器的关系矩阵 `R_x` 和平移向量 `t_x`。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值