@iStarLee
2019-07-12T13:41:04.000000Z
字数 4542
阅读 564
VIO-shenlan
关于优化函数的构建,可以在像素平面上构建重投影误差,也可以在归一化平面上构建重投影误差。发现在归一化平面上构建优化问题在写代码和推公式的时候少了一个内参矩阵K,大大简单了很多。
这个地方要了解BA的求解细节,
Gaussian-Newton算法
阻尼因子 µ 的更新策略有很多种,不同的人设计的算法细节上有区别,同一个算法也不可能在所有的数据上都表现很好。其中g2o中的LM阻尼因子更新策略通过比例因子来确定的
注意这个和分母上的会消除掉,就得到了上面g2o算法流程里面的的更新。
最小二乘中遇到 outlier 怎么处理?核函数如何在代码中实现?有多种方法,这里主要介绍 g2o 和 ceres 中使用的Triggs Correction
其中的计算如下
对该公式求和后,对变量求导,令其等于 0 ,得到
系统需要优化的状态量
一个特征点在归一化相机坐标系下的估计值与观测值的差。
值得注意的是这里的加号,我们认为重力加速度是一个标量。实际上当加速度计静止的时候,IMU的实际读数就是接近于9.8的,这和我们的公式也是一致的,便于我们编程。
从第 时刻的 PVQ 对 IMU 的测量值进行积分得到第 时刻的 PVQ:
注意这个是相对世界坐标系的。
下面的这个是精髓
然后我们就得到IMU预积分形式
预积分量仅仅跟 IMU 测量值有关,它将一段时间内的 IMU 数据直接积分起来就得到了预积分量
重新整理下 PVQ 的积分公式,有:
这个也是VINS程序中使用到的形式,只不过需要转换为离散形式,这个要注意的是编程的时候算式的更新顺序!!
IMU预积分误差关联的状态量如下:
有了IMU预积分就可以计算两个图像帧之间的IMU积分量得到五个状态量的值。虽然得到了时刻的IMU的状态量,为了构建IMU的误差项,还需要针对我们这五个状态量的协方差。有了协方差才能很好的确定我当前的状态量的估计好坏程度。
实际上这两种推导方式是可以相互转换的,第一种方式比较直观,那为什么还要有第二种方式呢?因为在很多系统中,比如我们的VIO系统,我们已经知道了状态的导数和状态之间的转移矩阵。第二种才是本质!!
确定误差传递的状态量,噪声量,然后开始构建传递方程。
视觉重投影残差的 Jacobian
IMU 预积分残差的雅克比