手眼标定 其实就是对机械手和相机的位置关系进行计算,依据计算所得的结果,
就可以将图像处理后的像素位置转换为机械手的坐标,进而让机械手执行动作。
举个例子
例如人眼睛看到一个东西的时候要让手去抓取,就需要大脑知道眼睛和手的坐标关系。
如果把大脑比作B,把眼睛比作A,把手比作C,
如果A和B的关系知道,B和C的关系知道,那么C和A的关系就间接也知道了,也就是手和眼的坐标关系也就知道了。
手眼关系一般分为固定相机和移动 相机两种模式。
下面介绍中同样会涉及前面帖子介绍的标定知识,标定 的流程一般如下:
1.读图
2.找标定板
3.提取标定点
一般会读取9到16张标定板图片,所以会多次循环执行1到3步。
执行标定,得到相机内参,外参。
在工业应用中,手和眼(摄像机)有两种位置关系,
第一种是将摄像机(眼)固定在机械手(手)上面,眼随手移动;
第一种情况中我们要求的是相机坐标系和机械手坐标系的转化关系;
第二种是摄像机(眼)和机械手(手)分离,眼的位置相对于手是固定的。
第二种情况中要求的是相机坐标系和基础坐标系的关系;
第一种情况是相机固定在机械臂上
如下图,在推导过程中,我们会用到四个坐标系,分别是基础坐标系,机械手坐标系,相机坐标系,以及标定物坐标系。
手眼标定介绍
其中baseHcal表示基础坐标系到标定物坐标系的转化关系,包括旋转矩阵和平移向量;
camHtool表示相机坐标系到机械手坐标系的转化关系;
前两两个转化关系(baseHcal和camHtool)在机械手移动过程中是不变的;
camHcal可以由前面帖子介绍的相机标定求出,也就是为已知数;
baseHtool可以由机器人系统中得出,也就是为已知数。
接下来控制机器手从其当前位置 1 移动到随意位置 2:
base = baseHtool (1)* tool(1)
tool(1) = inv(camHtool)*cam(1)
cam(1) = camHcal(1)*obj
综合上面三个公式:
base = baseHtool (1)* inv(camHtool)* camHcal(1)*obj
移动到机械手臂到位置2后:
base = baseHtool (2)* inv(camHtool)* camHcal(2)*obj
因为base和obj是固定的所以:
baseHtool (1)* inv(camHtool)* camHcal(1)=baseHtool (2)* inv(camHtool)* camHcal(2)
其中只有camHtool是未知量,其他为已知变量,所以可以求得camHtool。
另一种情况是相机和机械臂分离,如下图
我们还是控制机械手从位置1移动到位置2:
obj(1) = inv(camHcal(1)) *cam
cam = camHbase *base
base = baseHtool(1) * tool(1)
合并上面三个公式:
obj(1) = inv(camHcal(1)) * camHbase* baseHtool(1) *tool(1)
移动到位置2后:
obj(2) = inv(camHcal(2)) * camHbase* baseHtool(2) *tool(2)
因为obj和tool的相对位置是不变的,所以不管如何移动:
inv(camHcal(1)) * camHbase* baseHtool(1)= inv(camHcal(2)) * camHbase* baseHtool(2)
其中变量只有camHbase,也就是我们要求的。
求得变量后可保存到磁盘,后续手眼协调工作时可加载使用
|