Unity3d中使用Apriltag单目测距

Unity3d中使用Apriltag单目测距

Hr为Apriltag码高度,单位CM
Lr为Apriltag码到相机焦点的距离,单位CM
Hv为Apriltag码在照片的高度,单位可为像素,在Unity中transform中的localScale值
Lv为相机的焦距

Unity3d中使用Apriltag单目测距

Unity3d中使用Apriltag单目测距

Unity3d中使用Apriltag单目测距

注意为了减小误差,Apriltag码应尽量位于相机的中轴线上,Apriltag码应与相机中轴线垂直。

第一步,求相机焦距

已知:
Hr为4.65cm(用卷尺直接测量)
Lr为40cm(用卷尺直接测量,起点为摄像头的透镜中心处,差不多就行)
Hv为2.276(transform中的localScale值)

Lv=Lr*Hv/Hr=(Apriltag码到透镜中心距离)*(localScale值)/(Apriltag码宽度)=19.578494623655

第二步,求相机到Apriltag码的实际距离。
经过第一步已经求出焦距Lv,真实距离Lr = Lv*Hr/Hv=(相机焦距)*(Apriltag码宽度)/(localScale值)
如Hv=3.025(transform中的localScale值)
Lr=19.578494623655*4.65/3.025=30.095,即在30cm附近,考虑到各种误差,精度还是很不错的。

第三步,求Apriltag码在相机中轴线垂直平台的移动距离。

Unity3d中使用Apriltag单目测距

原理:Apriltag真实尺寸与照片尺寸之间的比值,乘以二维码在照片上的移动距离,即Mr=Mv * Hr/Hv。实际应用时需要设置某个点为原点,先把移动距离归0。