(四)3D视觉机器人的手眼标定(眼在手外)
内容
- 1.背景介绍
- 1.1 思路
- T_target_to_cam求解
- 公式求解
- 2.操作流程
1.背景介绍
3D视觉机器人指的是机器人通过3D相机提供的3D点云视觉信息,完成某些实际的功能。
目标是将场景信息从相机坐标系变换至机械臂坐标系中,最终是获得相机到机械臂基座的空间变换矩阵。
下面以眼在手外标定为例:
上图中,相机④固定在工作空间中,标定板③被固定在机械臂末端②上,为了做手眼标定在末端上固定一个标定板。
标定过程中标定板③和机械臂末端②固定位姿不变,由上图可知,相机④和机械臂基座①的相对位置不变,然后通过示教器控制机械臂带着标定板③在不同的位姿下进行拍照,拍照的过程中保存当前拍到的标定板图片以及记录图片对应示教器上的世界坐标。
眼在手外标定的目的是求出相机④坐标系到机械臂基座标系①的变换矩阵。
1.1 思路
眼在手外标定可以理解为上述坐标系转换的关系,其中③可由机械臂示教器上的数值直接获取,④由于是固定不变的,后面可通过计算进行消除。目标是求出相机相对于机械臂基座坐标系的位姿。
T_target_to_cam求解
T_target_to_cam可以理解是齐次矩阵,是由R_target_to_cam(旋转矩阵)和平移向量t_target_to_cam组成。
其中R_target_to_cam(旋转矩阵)可以由三个单位向量来表示,下面需要建立这个单位向量。
这里使用的标定板是棋盘格标定板,可以通过OpenCV中的函数寻找到棋盘格上的每个角点像素坐标系,以左上角第一个角点作为原点,和右上角的角点相连作为X轴正方向,和左下角的角点相连作为Y轴正方向,计算它们的单位向量Vx和Vy,Vz可由Vx和Vy叉乘得到。
PS:这里选择右上角的角点和左下角的角点,和原点相连是为了提高精度。
因为使用的是3D相机,可以知道左上角角点的像素坐标和深度信息,通过相机内参将像素坐标转换为实际物理坐标(相机坐标系下),则t_target_to_cam平移向量可以得到。
公式求解
上面的公式中,①可以通过上面的方法求解,③是已知值,将等式两边左乘T_base_to_cam逆矩阵和T_end_to_base逆矩阵,可以将T_target_to_end单独放在等式右边,输入两组值,由于目标(标定板相对于机械臂末端的位姿关系固定)T_target_to_end相等,可以将两组值直接相等,去除T_target_to_end。
剩下的就是AX = XB
求解,输入多组值即可求出相机相对于机械臂基座坐标系的位姿,即T_cam_to_base
。
2.操作流程
操作流程基本和眼在手外标定流程相同,只是这里相机是不变的,需要将标定板固定到机械臂的末端,参考:https://blog.csdn.net/qq_45445740/article/details/123947559
上面提到的计算
T_target_to_cam
通过建立坐标系的方法进行求解,作为一个求解思路,OpenCV中有现成的函数直接进行求解,calibrateCamera
,可以计算眼在手上和眼在手外,只是输入的参数不同。
感谢视频讲解:https://www.bilibili.com/video/BV1Rw411d7ch/?spm_id_from=333.880.my_history.page.click