200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 相机机械臂手眼标定

相机机械臂手眼标定

时间:2019-01-29 23:51:04

相关推荐

相机机械臂手眼标定

机械臂手眼标定-眼在手上

机械臂标定原理眼在手上使用opencv进行手眼标定

机械臂标定原理

**

眼在手上

推导过程如下

可推出如下公式:camtoolH=basetoolH∗calbaseH∗camcalH^{tool}_{cam}H = ^{tool}_{base}H * ^{base}_{cal}H * ^{cal}_{cam}Hcamtool​H=basetool​H∗calbase​H∗camcal​H

其中:

camtoolH^{tool}_{cam}Hcamtool​H为从机械臂末端到相机坐标系的变换矩阵(个人习惯这么说),实际代表相机坐标系在机械臂末端坐标系下的位姿。

basetoolH^{tool}_{base}Hbasetool​H为从机械臂末端到机械臂基坐标系的变换矩阵。

calbaseH^{base}_{cal}Hcalbase​H为从机械臂基坐标系到标定板坐标系的变换矩阵。

camcalH^{cal}_{cam}Hcamcal​H为从标定板坐标系到相机坐标系的变换矩阵。

在进行眼在手上的标定过程中,需要保持calbaseH^{base}_{cal}Hcalbase​H的变换相对不变,也就是说机械臂的基坐标系和标定板保持不变,当然这是因为该值我们无法直接准确的测量,因此保持其每次相机采集时相对不变,用于方程式求解过程中将其消除。

该部分推导如下:

calbaseH=toolbaseH∗camtoolH∗calcamH^{base}_{cal}H = _{tool}^{base}H * ^{tool}_{cam}H * ^{cam}_{cal}Hcalbase​H=toolbase​H∗camtool​H∗calcam​H

此时根据采集的多次机械臂位姿进行求解,其中 toolbaseH_{tool}^{base}Htoolbase​H通过直接读取机械臂相对于基坐标系位姿得到,camtoolH^{tool}_{cam}Hcamtool​H为手眼标定的待求解, calcamH^{cam}_{cal}Hcalcam​H为标定板坐标系相对于相机坐标系的位姿。

采用相邻的两次数据采集的结果进行求解, calbaseH^{base}_{cal}Hcalbase​H不变:

toolbaseH0∗camtoolH0∗calcamH0=toolbaseH1∗camtoolH1∗calcamH1_{tool}^{base}H^0 * ^{tool}_{cam}H^0 * ^{cam}_{cal}H^0=_{tool}^{base}H^1 * ^{tool}_{cam}H^1 * ^{cam}_{cal}H^1toolbase​H0∗camtool​H0∗calcam​H0=toolbase​H1∗camtool​H1∗calcam​H1

由于camtoolH^{tool}_{cam}Hcamtool​H保持不变,因此

toolbaseH0∗camtoolH∗calcamH0=toolbaseH1∗camtoolH∗calcamH1_{tool}^{base}H^0 * ^{tool}_{cam}H * ^{cam}_{cal}H^0=_{tool}^{base}H^1 * ^{tool}_{cam}H * ^{cam}_{cal}H^1toolbase​H0∗camtool​H∗calcam​H0=toolbase​H1∗camtool​H∗calcam​H1

进行化简:

(toolbaseH1)−1∗toolbaseH0∗camtoolH=camtoolH∗calcamH1∗(calcamH0)−1(^{base}_{tool}H^1)^{-1}*_{tool}^{base}H^0 * ^{tool}_{cam}H = ^{tool}_{cam}H *_{cal}^{cam}H^1 *(^{cam}_{cal}H^0)^{-1}(toolbase​H1)−1∗toolbase​H0∗camtool​H=camtool​H∗calcam​H1∗(calcam​H0)−1

转换为AX = XB的形式,求解出X即可

使用opencv进行手眼标定

在计算calcamH_{cal}^{cam}Hcalcam​H时,使用api

void solvePnP(InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, OutputArray rvec, OutputArray tvec, bool useExtrinsicGuess=false, int flags = CV_ITERATIVE)

objectPoints - 世界坐标系下的棋盘点的坐标(这里世界坐标系与棋盘坐标系的原点重合)

imagePoints - 在图像坐标系下对应的像素点的坐标

cameraMatrix - 相机的内参矩阵

distCoeffs - 相机的畸变系数

以上两个参数通过相机标定可以得到。相机的内参数的标定参见:

rvec - 输出的旋转向量。从相机坐标系到棋盘坐标系的旋转矩阵

tvec - 输出的平移向量。从相机坐标系到棋盘坐标系的平移向量

flags - 默认使用CV_ITERATIV迭代法

通过将rvec和tvec转换为变换矩阵,便可以算出calcamH_{cal}^{cam}Hcalcam​H

求解最终的X,也就是camtoolH^{tool}_{cam}Hcamtool​H时使用api

voidcv::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)

其中:

R_gripper2base:从机械臂基坐标系到末端坐标系的旋转矩阵

t_gripper2base:从机械臂基坐标系到末端坐标系的平移向量

R_target2cam: 从相机坐标系到标定板棋盘格坐标系的旋转矩阵

t_target2cam: 从相机坐标系到标定板棋盘格坐标系的平移向量

R_cam2gripper:从末端坐标系到相机坐标系的旋转矩阵

t_cam2gripper:从末端坐标系到相机坐标系的平移向量

注意:本文中的坐标系描述语言和其他描述存在出入,具体参照上述内容进行理解,如本人描述有误请提醒改正,共勉。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。