前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >7_手眼标定_1_一个失败的流程记录

7_手眼标定_1_一个失败的流程记录

作者头像
用户5908113
发布2024-04-12 14:03:14
630
发布2024-04-12 14:03:14
举报
文章被收录于专栏:Pou光明Pou光明

1.Opencv3手眼标定接口介绍

一些基础知识:

手眼标定分为两种:眼在手上和眼在手外。文章数据采集的是眼在手上。

坐标系:

base:机械臂基坐标系,一般在机械臂底座,一般是机械臂的默认坐标系。

gripper:机械臂工具坐标系(实际中机械臂都需要携带工具),例子中使用机械臂法兰中心的数据,未使用工具。

cam:相机坐标系

target:标定板坐标系

对于眼在手上,标定求解的是相机坐标系相对于机械臂末端坐标系的变换矩阵(旋转和平移)。

官方接口说明链接:https://docs.opencv.org/3.4.18/d9/d0c/group__calib3d.html#gad10a5ef12ee3499a0774c7904a801b99

#include <opencv2/calib3d.hpp>

代码语言:javascript
复制
void 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 );  

矩阵输入参数类型都为std::vector

输入:

R_gripper2base:机械臂末端坐标系相对于机械臂基坐标系的旋转矩阵

t_gripper2base:机械臂末端坐标系相对于机械臂基坐标系的平移矩阵

R_target2cam:世界坐标系相对于相机坐标系的旋转矩阵

t_target2cam: 世界坐标系相对于相机坐标系的平移矩阵

method:使用默认的CALIB_HAND_EYE_TSAI.

输出:

R_cam2gripper:相机坐标系 相对于机械臂末端坐标系的旋转矩阵

t_cam2gripper:相机坐标系 相对于机械臂末端坐标系的平移矩阵

R_gripper2base和t_gripper2base可直接从机械臂获取(可使用机械臂sdk),一般是位置和姿态。姿态需要知道转轴顺序,然后转成3*3旋转矩阵,这块比较好搞。

R_target2cam和t_target2cam,我给的参数是从calibrateCamera()获取的,很不幸,调用calibrateHandEye()接口得出的结果不对。这两个参数是标定板相对于相机的姿态和平移矩阵,这块是没啥疑问的。

2.一些注意点

手眼标定过程让标定板不动,改变机械手位置采集图片。Opencv官方提示:至少需要两个具有非平行旋转轴的运动。因此,至少需要 3 个不同的姿势,但强烈建议使用更多的姿势。

我的标定结果:

R_cam2gripper -->>

[1, 2.837564140486833e-18, -1.667254890538158e-17;

-2.837564140486834e-18, 1, -1.09711802430982e-16;

1.667254890538158e-17, 1.09711802430982e-16, 1]

t_cam2gripper mm -->>

[14.78953261453616;

76.66217762784608;

35.42786758861097]

剩余的验证排查工作:

①图像上的像素点转为机械臂坐标系下的点

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Pou光明 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档