首页  技术文章  基于Opencv开发的手眼标定工具

基于Opencv开发的手眼标定工具

发布时间:2021-05-25 17:35:49 浏览量:4896 作者:Cricket

摘要

3D视觉引导机器人的重要前提条件是建立起相机与机器人之间的坐标关系,即手眼标定。为便于将市面上任意3d结构光相机与国内外

工业机器人结合做手眼标定,基于Opencv开发了此脚本工具,用于离线手眼标定,代码开源,操作简单,适用性广泛。

正文


器材准备 

1. 3D结构光相机一个 

2. Opencv专用的棋盘格标定板,规格为 9*6 ,10mm使用教程 

3. 工业机器人一台 

4. PC一台(带usb3.0接口) 

5. 手眼标定工具软件包解压至本地  


数据准备 

1. 离线标定 

2. 手眼标定,分眼在手上eih和眼在手外eth。基础知识请自行了解 

https://zivid.atlassian.net/wiki/spaces/ZividKB/pages/72450049/Hand-eye+calibration 

3. 旋转类型一般分2种,常见进口机器人都为abg,例如abb,ur,fanuc,kuka等;国产机器人大部分为gba

4. 其他文件路径默认在当前目录下 

5. 在当前目录下新建robotpose.txt 和caldata文件夹 

(一)标定板采样至少10组RGB数据,格式为png即可

(二)机器人pose也相应采样同等组数,打开robotpose.txt -> 每行记录一组笛卡尔(x,y,z,rx,ry,rz)-> 每个浮点数之间用半角逗号

间隔


执行标定 

1. 下载到本地后,打开手眼标定工具 

2. 标定工具选择Opencv,标定类型视情况选,旋转类型视情况选(大多情况是abg) 

3. 点击标定按钮,标定结果和残差的.yaml文件都生成在当前目录下


Opencv手眼标定求解原理概述:

1. 坐标系之间的关系可以用齐次矩阵表示H = [R t],其中H为4*4方阵,R为3*3旋转方阵,t代表3*1平移向量,任意坐标系之间位置的转换,都可以用齐次矩阵(旋转和平移)来描述,下面将简述手眼标定中各坐标系之间的关系,以及如何通过Opencv算子解出目标手眼矩阵。先交代一个前提(齐次矩阵的文字表达)。例 A_H_B = [R t] , 把A坐标系先经过R旋转,再经过t平移,可到达B坐标系,也可以理解成B坐标系下的某个点在A坐标系下的位姿.


2. 手眼标定涉及以下几个坐标系

    Pixel_H_Image 图像平面坐标系在像素平面坐标系下的位姿

    Image_H_Camera 相机光心坐标系在图像坐标系下的投影位姿

    Camera_H_World 世界坐标系(人为定) 在相机坐标系下的位姿

    Base_H_Tool 机器人末端工具坐标系在机器人基坐标系下的位姿,机器人正运动学计算得到,即可在示教器上直接查看

    Tool_H_Camera | | Base_H_Camera  手眼矩阵二选一,根据相机固定方式来定,即相机坐标系在工具坐标系下的位姿 或 相机坐标

系在机器人基坐标系下的位姿

    Base_H_Obj 物体在基坐标系下的位姿

    World_H_Obj 物体在世界坐标系下的位姿

    Pixel_H_Obj 物体在像素平面坐标系下的位姿


3. 通过cv::calibrateCamera()求内参

输入参数:Pixel_H_Obj (从多副含有标定板的图像中通过cv::findChessboardCornersSB()得到),World_H_Obj (通过vector容

器和棋盘格规格得到)

输出参数:Pixel_H_Camera = Pixel_H_Image*Image_H_Camera


4. 通过cv::solvePnP()计算得到相机外参,并得到最终要的标定板在相机下的位姿

输入参数:Pixel_H_Camera,Pixel_H_Obj ,World_H_Obj(均通过上述过程得到)

输出参数:Camera_H_Obj (每张图片一个位姿,放入vector容器)


5. 通过cv::calibrateHandeye()求出手眼矩阵

眼在手上时:

输入参数:Base_H_Tool(多组位姿,放入vector容器),Camera_H_World

输出参数:Tool_H_Camera


眼在手外时:

输入参数:Tool_H_Base(多组位姿,放入vector容器),Camera_H_World

输出参数:Base_H_Camera


6. 验算手眼标定精度

眼在手上时,理论上每组的Base_H_Obj相同,因此:

Base_H_Obj(待求) = Base_H_Tool(已知) * Tool_H_Camera(手眼矩阵) * Camera_H_Obj(已知),求多组Base_H_Obj,估算误差


眼在手外时,理论上每组的Tool_H_Obj相同,因此:

Tool_H_Obj (待求)= Tool_H_Base(已知) * Base_H_Camera(手眼矩阵),求多组Tool_H_Obj,估算误差


您可以通过我们的官方网站了解更多的产品信息,或直接来电咨询4006-888-532