九点标定的理论基础是坐标系转换,九点标定的目的也是为了得到图像坐标系和机械臂坐标系的转换关系。
九点标定的前提,假设两个坐标系的z轴相同,也就是绕着z轴进行旋转的坐标系。
设机械臂坐标为 (x',y'),图像坐标系下对应的点为(x,y),则有
其中,为坐标系之间的旋转角度,x0,y0 为机械臂坐标系相对原坐标系的平移点。
由式1可知,有三个未知数。需要三组点才能求出来。
#利用像素坐标和机械手坐标(至少三个点)得到仿射矩阵,完成像素坐标到机械手坐标的转换
#origin_points_set 标定板像素坐标点集
#target_points_set 机械手抓取坐标点集
import cv2
cv2.estimateAffine2D(origin_points_set, target_points_set)
标定流程:
Eye in hand方案 、九点标定法
首先,将机械手移到标定板正上方
然后,通过相机得到九个检测点在相机坐标系下的坐标p_camera
最后,让机械手末端依次触碰九个检测点,得到检测点在机械手坐标系下的坐标p_base
将得到的九组点分别做成A, B列表,传入函数就可以得到R,T矩阵啦