视觉 Vs. IMU
小白:师兄,好久没见到你了啊,我最近在看IMU(Inertial Measurement Unit,惯性导航单元)相关的东西,正好有问题求助啊
师兄:又遇到啥问题啦?
小白:是这样的,现在VIO(Visual-Inertial Odometry,视觉惯性里程计)很火,我就想试试把IMU测量的信息和图像进行简单的融合,这样利用IMU测量的先验信息,可以给图像一个比较好的初值。。。
师兄:嗯嗯,这个思路没问题的啊,图像信息和 IMU 确实存在一定互补性,两者各有所长,取长补短。
小白:是滴,我也是这样想的,不过我采集了图像和IMU的数据后,发现IMU输出频率好高啊,远远大于图像帧率!
师兄:没错,IMU本身就是惯性传感器,用来测量角速度和加速度,对短时快速运动很敏感,因此帧率很高才能测量到,所以一般是100Hz以上。而我们图像传感器输出帧率一般比较低,15 - 60Hz 居多~
小白:那就有问题了啊,我想要把IMU测量的值和图像估计的值进行对齐,这样我就能根据当前IMU输出的旋转量来作为图像预测的初值了,现在帧率差这么多,这个怎么对齐呢?
师兄:你是用什么来表达的旋转?
小白:四元数,我看网上都说用四元数好,不过不知道为啥(/尴尬)
四元数的优势
师兄:四元数确实在对姿态的描述具有独特的优势,非常适合用来表示空间中的旋转。这主要是因为几个原因:
1、四元数解决了其他3维空间旋转算法会遇到的恼人的问题,比如使用欧拉角来表示旋转操作时会遇到的万向节锁问题(Gimbal lock)。见下图
2、计算效率比旋转矩阵方法高,因为表达四元数只需要4个数,旋转矩阵需要9个。
3、其简单的数学表达方式可以被用来规划出高阶连续姿态运动以及在多姿态间插值。这里的插值就可以解决你说的对齐问题啦
小白:原来如此,看来我选择四元数表示是非常正确的!不过我有个疑问,师兄,什么是插值啊?
什么是插值?
师兄:插值对应的英文是interpolation ,是数学上的一个常用术语。下面是维基百科的专业解释
数学的数值分析领域中,插值是一种通过已知的、离散的数据点,在一定范围内推求新数据点的过程或方法。求解科学和工程的问题时,通常有许多数据点借由采样、实验等方法获得,这些数据可能代表了有限个数值函数,其中自变量的值。而根据这些数据,我们往往希望得到一个连续的函数(也就是曲线);或者更密集的离散方程与已知数据互相吻合,这个过程叫做拟合。插值是曲线必须通过已知点的拟合。
小白:师兄,你说的每个字我都认识,但是连在一起完全不知道啥意思啊!
师兄:没关系,为了严谨定义一般都比较晦涩难懂。插值,讲一个通俗但不严谨的例子,比如现在有10只大雁(对应已有的样本)排成一定的阵列在飞,让你在第5、6只大雁中间(原来没有样本的插值点)再插入一只大雁,但是要保证插队后的大雁在整体中不能太突兀,要显得比较“合群”(对应拟合曲线),如果其他大雁飞人字形,插入的大雁尽量要保持整体仍是人字形;如果其他大雁飞一字形,插入的大雁尽量要保持整体仍是一字形。
小白:师兄,你早这么说,我不就明白啦!那一般怎样插值呢?
师兄:嗯,以后多举例子。插值方法有很多种,比如最简单的最邻近插值(nearest interpolation)、线性插值(linear interpolation);常用的双线性插值(Bilinear interpolation),还有保护图像细节效果较好的双三次插值(bicubic interpolation)、三次样条插值(cubic Spline Interpolation)等。
千言万语汇成一个图,如下图是一维和二维插值的比较。黑色表示待计算的插值点,其他颜色的点表示样本点。
小白:看晕了都。那这么多插值方法,我们用哪种呢?
师兄:在图像处理和计算机视觉领域,应用比较多的双线性插值。双线性插值的效果不是最好的,但相较最邻近插值和线性插值的简单粗暴,其获得图像的效果还是更令人满意的,而且双线性插值的计算量和易于理解程度会优于双三次插值和三次样条插值等高阶插值方法。因此双线性插值还是最受广大图像研究者喜爱的。
小白:师兄&