OKVIS是早期(2015年)开源的基于关键帧的视觉-惯导SLAM方案,是众多SLAM研究者入门必须了解的VIO方案之一,放在今天OKVIS的数据集测试结果仍然非常优秀。这篇博文主要针对OKVIS论文[1]整理其中的理论推导。
定义
定义需要估计的机器人状态:
其中是机器人在世界坐标系下的三维位置;单位四元数是机器人在世界坐标系下的朝向,对应的旋转矩阵为。进一步将上述状态分为两个部分,位姿部分和速度/零偏部分。
考虑相机外参的话,将其定义为,其可以是通过事先校正得到的固定值,也可以当做一个一阶高斯变量来估计,因为外参只受到温度影响。
非线性优化
考虑代价函数,是待估计的状态,的最优值可通过最小化代价函数求得:
由于代价函数一般是一个复杂的非线性函数,一般从一个初始值出发,不断地更新当前的状态估计值,使得状态估计值收敛。具体为:
- 将在状态估计值近似为一个容易处理的解析形式;
- 求解增量;
- 更新当前状态估计值;
- 迭代,直至状态估计量收敛。
在高斯分布的假设下,代价函数通过最大似然估计可以得到,是一个最小二乘问题。OKVIS中代价函数将视觉+惯导的定位和建图问题建模到一个函数中:
其中为重投影误差,为IMU误差项。为系统中的相机下标,为相机采集图像的下标,为路标点的下标,为相机在第帧图像观测到的路标点,为信息矩阵。谷歌提供了ceres库可以用来求解非线性优化问题。
在流形上进行优化
在求解优化问题时,一些状态量往往不在欧式空间中。比如单位四元数不在欧式空间中,其不满足加法交换律,单位四元数加法定义为:
是不可交换的。表达旋转只需要三个自由度,但是四元数有4个自由度,因此需要对四元数增加一个限制。当状态量不在欧式空间时,最小化代价函数求得的增量无法用加法去更新状态估计量[2]。
流形,是局部具有欧式空间性质的空间。在这种情况下,通常是在original space的限制下导出的流形上进行优化。也叫作”optimization in the error-space”, “optimization in the tangent space”, “optimization through local parametrization”。主旨是在minimal tangent space(Euclidean or error space)上进行更新状态量的步骤,从而保证在对应的original space状态量的更新是封闭的。
机器人对应的最小位姿误差状态量为,路标点误差,考虑相机外参的话,最小误差状态量为.
重投影误差
重投影误差公式为:
其中, 是第个路标点在世界坐标系下的齐次坐标表示,第四维值为1。下标表示时刻。表示路标点在时刻图像上的观测值,也是齐次坐标。为变换矩阵,将世界坐标系中的点变换到第次测量时的sensor坐标系中。将第次测量时sensor坐标系中的点变换到相机坐标系中。为相机投影模型。以下在公式中省略时刻。
为了进行非线性优化过程以及之后的边缘化步骤,需要求出重投影误差对最小机器人状态误差向量的雅克比矩阵。
变换矩阵的线性化
由[3]有旋转矩阵线性化表达为:
其中,扰动是的最小表示。
变换矩阵
其逆代表了逆向变换,
定义变量:
对在进行扰动,
扰动量为:
那么有:
其中,
令:
对列向量和定义运算符:
我们有:
类似的,有
即:
设点的齐次坐标为为:
对变换矩阵进行扰动后,有:
定义齐次坐标上的运算符为:
那么有
同样的,有:
雅克比矩阵
在这里需要注意的是,机器人位姿状态量为 ,对应的变换矩阵为
其中是四元数对应的旋转矩阵。有,因此重投影误差公式为:
对其线性化,,设是在值的扰动,是在值的扰动,是在值的扰动值。对重投影误差进行扰动得到:
展开,去除扰动项的积,得到:
由之前推导有:
最后令
得到:
所以有:
将上式展开得到:
同理,有
显然,
参考
[1] Leutenegger, Stefan, et al. “Keyframe-based visual–inertial odometry using nonlinear optimization.” The International Journal of Robotics Research 34.3 (2015): 314-334.
[2]Course on SLAM Institut de Robòtica i Informàtica industrial [PDF]
[3] Furgale, Paul Timothy. Extensions to the visual odometry pipeline for the exploration of planetary surfaces. Diss. University of Toronto, 2011.