虚拟现实中的跟踪定位技术
2020-7-10
| 2026-4-26
Words Read Time  min
type
Post
status
Published
date
Jul 10, 2020
slug
summary
老师让我们在VR领域中选择一个知识点进行深入的学习,我选择的是跟踪定位。 本文着重记录光学方法、计算机视觉方法和基于IMU传感器的跟踪理论,并分别结合一些生活中的实例(如Hololens、无人机等)来进一步探索相关技术。最后,本文以较为易于获得的cardboard为例,提出了一种跟踪定位算法和...
tags
category
知行合一
icon
password
老师让我们在VR领域中选择一个知识点进行深入的学习,我选择的是跟踪定位。
本文着重记录光学方法、计算机视觉方法和基于IMU传感器的跟踪理论,并分别结合一些生活中的实例(如Hololens、无人机等)来进一步探索相关技术。最后,本文以较为易于获得的cardboard为例,提出了一种跟踪定位算法和实践方法。
随着深入探究,才发现各种方法往往是共同使用的,比如基于视觉的SLAM技术总会和IMU联系起来,而光学跟踪技术为视觉跟踪提供了基础,以及用于计算IMU的方位移动和旋转角的四元数,在视觉方法中也会用到。可见知识都是联系的,需要广泛地了解,并且深入地思考。

基于光学和计算机视觉的跟踪定位方法

光学跟踪技术
光学跟踪技术有很多种方法。比如可以在被追踪物体上装发射器(一般是红外),用传感器(相机或ccd)接受信号判断位置。又比如,可以采用模式识别的方法,把发光器件按某一阵列排列,并将其固定在被跟踪对象身上,由摄像机记录运动阵列模式的变化,通过与已知的样本模式进行比较从而确定物体的位置。还有一种方法是通过激光发射到物体又传回衍射信号来进行追踪。
两种定位方式
由外而内的跟踪:需要室内相关设备的定位和标定。有一些复杂虚拟现实设备使用的是这种方法,例如Lighthouse。
由内而外的跟踪(Inside-out tracking),比如hololens和HTC Vive虚拟现实头盔和手机的AR应用需要实现的就是由内而外的跟踪。
相比起来,后一种跟踪使用范围更广泛,在实际应用中较为方便。
视觉跟踪:多视点几何学和SLAM技术
首先,在三维重建的领域中,我们有多视点几何学的方法,通过多张照片得到某一个点的位置。
但多视点几何学一般用于离线跟踪,而SLAM技术可以实现在线跟踪。
SLAM技术(Simultaneous Localization and Mapping):即时定位与地图构建)。这个技术一开始是用于机器人,但在VR、AR领域中也非常常见。这种技术可以实现由内而外的跟踪。
视觉方法和上述光学方法有很多结合,比如SLAM会用单/双目摄像头、RGBD(深度)传感器,以及激光雷达等。SLAM输入传感器数据,结合点、边数据,以及结合机器学习的先验/语义信息,输出自身的实际位置和三维点云(环境地图)。
SLAM技术与深度传感器(比如LEAP MOTION的红外)、惯性传感器,以及光流计、GPS的数据融合,可以得到更为准确的结果。
虚拟现实中的具体实例
首先,Hololens和HTC Vive虚拟现实头盔实现了由内而外的跟踪。
Leap motion的手势识别中,判断深度信息,采用了光学跟踪的办法,通过红外线反射来获得深度信息。而Kinect也有深度传感成像的技术。

惯性传感器IMU的跟踪定位方法

IMU的物理原理
惯性传感器IMU主要由这两部分组成:陀螺仪+加速度计。
其中陀螺仪测量的是角速度,而加速度计测量的是加速度。
先谈一谈加速度计的原理,它有xyz三个轴。根据F=ma对三个方向的力,来倒推加速度的值。一般通过弹簧或者压电传感器来实现对力的测量。
加速度计可以通过重力加速度来判断方向。1比如,手机平放的时候,x、y方向加速度计的值就接近于0,而z方向接近9.8。(可以通过sensor_list.apk测量)
此处注意,重力传感器只是加速度传感器的其中一种。三个轴的加速度传感器不仅能测重力还可以测物体的运动状态——加速度。(虽然此处我有一个疑问没能解决,能反映物体运动状态的应该是速度不是加速度?但通过加速度可以间接计算出速度,可能速度不是很好测吧。)
再谈一下我对陀螺仪原理的理解,虽然感觉自己并不是特别明白:高中的时候我们学过地球旋转导致科里奥利力(一种非惯性力)会让北半球运动的物体向右偏转而南半球向左。而旋转的陀螺和旋转的地球同理。
而科里奥利力由叉乘计算,正比于输入角速率:
vec{F}=-2mvec{omega}times vec{v}
所以知道了科里奥利力就可以求出角速率。
还有一种陀螺仪是通过光纤高速旋转的萨氏效应来测量的。另外,位置变化的信号可以转化成电信号。
另外,网上查到的陀螺仪原理说的都是高速旋转的陀螺有定向作用,可以使得它的轴稳定不动,用于定向。由此发明的陀螺是定轴陀螺仪,而另一种偏轴陀螺仪则相反。暂时不是很清楚它和陀螺仪测量角速度的关系。感觉这种陀螺和手机里用的陀螺仪传感器应该不太一样。
IMU的相关计算
IMU的相关坐标系变换计算可以通过四元数、欧拉角或者矩阵实现。
其中矩阵实现涉及到旋转矩阵、矩阵表示平移等。
然后为了计算变换,我们要用到罗德里格公式。罗德里格公式是通过旋转轴和旋转角度来计算旋转矩阵的一种方法。
三维空间刚体运动中,由于转动矩阵的数值计算较为复杂,所以提出了转动向量的概念,即转动向量的方向空间刚体转动的转动轴,向量的模代表着转动的的角度,代表轴的方向的单位向量,所以旋转矩阵R所对应的转动向量为。两者之间的关系为:
然后经过一系列推导我们最终可以得到罗德里格公式:
R=I+sin (theta) K+(1-cos (theta)) K^{2}
这个公式可以转化为矩阵形式:
mathbf{R}=operatorname{Ecos} theta+(1-cos theta)left(begin{array}{c}
k_{x} \
k_{y} \
k_{z}
end{array}right)left(k_{x cdot} k_{y} k_{z}right)+sin thetaleft(begin{array}{ccc}
0 & -k_{z} & k_{y} \
k_{z} & 0 & -k_{x} \
-k_{y} & k_{x} & 0
end{array}right)
其中这个矩阵就叫做罗德里格旋转矩阵:
在使用google的Cardbroad VR sdk进行VR应用的开发的时候,会用到这个公式。不过官方已经把相关的方法封装好了。(详情见后面cardboard的例子)
IMU和其他工具结合的方法
IMU结合GPS可以更精准地定位,很多芯片会同时做这两种传感器。详细例子可以看后面的无人机。以及前面的IMU和SLAM的结合。
在VR中也常采用九轴传感器来进行跟踪定位(三轴加速度,三轴陀螺仪,三轴磁力计),其中磁力计是为了对前6轴的数据进行偏航校正。1 (虽然并不知道具体原理)
在这里顺便提一下磁力计的物理原理:
最常见的磁力计是使用了霍尔效应。由于洛伦兹力的作用,当在半导体上外加与电流方向垂直的磁场时,会产生与磁通密度成比例的电压:
Vh=BI/(nqd)
由此原理可以检测地磁场。
不考虑倾斜的时候,地磁传感器有XY两个方向检测磁场。考虑倾斜的时候还要加上Z轴方向。

思考:无人机的跟踪定位

由于自己对航模和无人机感兴趣,在航拍的时候经常会想一些相关原理,学习了虚拟现实课之后,我猜测无人机的跟踪定位和智能跟随的实现采用了上述说的各种方法的综合,不仅用到了计算机视觉方法,还有IMU,地磁计,以及GPS定位。虽然无人机和虚拟现实无关,但其中很多技术还是共通的。
我原先以为无人机是主要采用视觉跟踪定位,但后来有一次GPS信号不好的山里飞行的时候自己差点炸了无人机,才发现无人机对GPS依赖很大。
但是自己一直有一个疑惑:GPS定位应该不会如此精准,而且无法得到准确的高度,且不能判断无人机是否倾斜。那大疆无人机是如何实现在空中平稳而精准的悬停的呢?
查阅资料发现,无人机除了GPS和视觉模块以外,还会采用超声波和内部IMU(重力和陀螺仪传感器)跟踪定位,以及依靠气压计进行高度定位。大疆的无人机在失去GPS信号的时候会自动转到姿态模式,此时无人机不依靠GPS、超声波或者视觉模块进行定位,而仅仅依靠IMU和气压计来保持平衡,所以当飞机进入姿态模式的时候虽然不会翻倒,但是会因为惯性往某个方向漂移。
另外,无人机还通过超声波定位。
无人机内部芯片获取目标信息,将其通过某种无线电波传给遥控器,接收机接收到信号——无人机的位置坐标和状态。航模制作的时候也是相同的原理,不知道能不能迁移到DIY虚拟现实设备上。
另外,对于无人机视觉定位的算法,有些会采用一种叫做光流的算法来实现跟踪定位,通过无人机底部摄像头得到图像的两帧之间的位移来推算无人机位移3,以实现对于无人机的高精度定位。所以当无人机飞过纹理重复地面或者有反光的地面和水面时,光流算法会出错,有可能会导致无人机的跟踪定位出现偏差。此外,无人机还会使用SIFT等特征点匹配的计算机视觉方法来实现跟踪定位。这些方法在虚拟现实中也可以做。

思考:Cardboard如何实现跟踪定位

在DIY cardboard的时候,我尝试在自己做的眼镜上运行VRapp,有一些app随着我头部的转动画面也会随之变化,所以自然而然地产生了一个问题:cardboard开发应用是如何实现跟踪定位的呢?
一开始我猜测是使用指南针(地磁感应计)来判断转向,但是随后发现用于交互的磁铁会在很大程度上影响地磁场,所以地磁计测出来是不准的。而且每次站立的方向不一样,用地磁计编程计算会增大很多难度。于是我猜测是使用了IMU——陀螺仪和重力感应器。
在网上查阅资料并没有找到很多的解答,但零星能搜到一些cardboard头部跟踪开发的教程和代码。他们主要利用了手机中的IMU惯性传感器,是使用四元数计算罗德里格旋转矩阵,再与卡尔曼滤波——一种对系统状态进行最优估计的方法结合,因为最优估计的过程包含去噪声,所以可以看作滤波。最终可以得到头部(也就是手机本身)的位移和旋转角,从而达到头部跟踪定位的效果。
当时制作cardboard的时候,考虑过如果给cardboard做一点改进,给摄像头留出空,就可以做出基于视觉跟踪定位的应用,进一步可以做出MR的应用。
另外,硅谷的新媒体工作室曾经发明过MR版本的Cardboard产品Holokit,戴上之后,可以直接看到现实之上叠加的动画(是基于一些光学原理实现的,使用了菲涅尔透镜和单面镜),而转动头部以及在空间中移动的时候,虚拟的内容能够固定在现实环境的一个位置,可以实时跟踪。
Loading...
Catalog