听技术大拿说说双目定位技术 (上)

🤖 由 文心大模型 生成的文章摘要
清明小长假我看到HYPEREAL的laohyx在知乎上发表了这篇短文,感觉这位同学的分享通俗易通,于是拿出来与大家分享一下。这里我也非常欢迎VR行业的众多程序猿和攻城狮可以多多交流和分享,让我们共同推进VR技术的进步与发展。
(题图是目前三大头显中销量最好的PSVR的定位摄像头,也是三家中惟一使用双目技术的厂商)
VR定位技术有千万种,就目前三大头显厂商而言,可以分为:
HTC 的 Lighthouse 激光定位系统,是一种长距离的使用PnP解算的定位技术(由Valve公司研发授权)
Oculus 的 Constellation 系统红外摄像头定位,也是使用 PnP解算的定位
PSVR 的 可见光摄像头定位,使用双目定位
从技术发展时间来看,双目定位是在三家技术中,出现最早、最成熟的技术了。先在这里简单说说它的原理。
定位原理
双目定位,一定要有两个摄像头/定位器,且两者在同一刚体/模具上,这样保证了两摄像头工作时,它们之间的相对位置是已知的。
双目定位貌似还有一定的仿生概念,毕竟人眼的立体视觉,也是靠双眼的,有了两只眼睛,才可以受到到某一物体的距离远近,否则只知道“物体在看过去的视线方向,而无法判断距离”(显然生活经验可以弥补一些啦,比如近大远小)
下图是一篇学术论文的附图,再参考人双眼的构造,就很容易理解双目定位了。O1, O2分别是两摄像头的位置,且它们摆放角度已知。P1,P2是物体P在相机成像平面上的投影点,也就是照片上拍摄到P的点啦。根据两相机的摆放位置,以及P1, P2点的位置,很容易计算出点P在空间中的三维位置。
双目定位成功之处就在于,它只靠一个特征点就可以定位!比如PSVR的手柄,只靠一条光带,就可以通过双摄像头,得到它的空间位置!(很多年前的PS move也是这个原理,要不然说PSVR的技术老呢)
单单一个特征点,可以求得一个物体在三维空间中的 x, y, z 位置(3 自由度, DOF),但 VR 定位还需要它的旋转信息——另外三个自由度(旋转信息)——就无法靠一个特征点得到啦。
那么,想要做 6自由度求解,想要需要多少个特征点呢?试想一下:
如果只有一个特征点,那么物体可以把模型的特征点放在定位出来的一个三维空间的点P1上,然而它可以绕这个P1点任何旋转,都符合解。因此它只有 3 DOF。
如果有两个特征点,双目定位可求解出 P1, P2,那么物体的姿态在定程度地确定了,但它仍然可以绕P1, P2连线构成的轴,旋转,因此它有 5 DOF。
如果有三个特征点,且它们不共线(否则会退化的),那么三个特征点的求解出的姿态,就可以惟一地确定物体的位置和姿态,达到 6 DOF 求解。
因此PSVR的头显上有好多标记点,而手柄上也是一个具有特点的倒三角光条(见上图),至少可提取出3个特征点(三角的顶点)。这些特征点,可将姿态解算从 3DOF 升级成 6DOF。
看到这里,你一定会想,wow,原来空间定位就这么简单,果然双目大法好,学会初中立体几何就可以明白原理啦。
但显然事情没有那么简单。欢迎来到工程领域的噩梦——测量误差。
定位误差
双目定位的理想很美好,但测量误差对其带来的影响却是残酷的。
如下图,在O1, O2相机观察物体 P 时,由于种种原因,测量所得到的射线发生了微妙的角度偏移,误差角度分别为∠P O1 P' 和 ∠P O2 P'. 那么从观测值,求解出 P' 位置,就与真实位置有了一定的偏移。
这偏移的位置随着双目射线变平行,而增大。就是说,当物体离你越远时,你越难确定它与你的距离,而物体很近时,双目定位会很精确。
那么误差都是哪里来的呢?要知道,工程就不是数学上的理想假设了,误差的来源千千万,比如:
O1, O2点的安装误差,也就是制造公差,不过这一步往往会在出厂时进行标定。
相机的标定误差。相机是存在畸变的,如果反畸变算法不好 ,那么始终会带着角度测量误差。
特征点误差,就拿PS手柄来说,它那个三角光条是圆角,特征点很难取得很准确
像素误差,要知道摄像头的像素数是有限的,它所代表的角度值也会是离散的,无法准确地表示物体的投影射线
以上各种因素都会影响到单点求解的精度。如果再想求 6DOF,物体上三个特征点求解都有误差,那么它的旋转求解就差得更远啦(还不一定对得上)。因此双目摄像头方案只能在近距离使用(2m以内),靠增多特征点数量来平均化测量误差,才可以达到可以接受的效果。
因此双目定位,简单是简单,但坑,真是多啊~
未完待续
关于双目定位的基础,在这里就讲得差不多啦,本系列的下篇,将会分析大朋E3提出的创新性的双目激光定位技术,敬请期待~