读书笔记:非线性优化
在前面几章,我们介绍了经典SLAM 模型的运动方程和观测方程。现在我们已经知
道,方程中的位姿可以由变换矩阵来描述,然后用李代数进行优化。观测方程由相机成像模型给出,其中内参是随相机固定的,而外参则是相机的位姿。于是,我们已经弄清了经典SLAM 模型在视觉情况下的具体表达。
然而,由于噪声的存在,运动方程和观测方程的等式必定不是精确成立的。尽管相机可以非常好地符合针孔模型,但遗憾的是,我们得到的数据通常是受各种未知噪声影响的。即使我们有着高精度的相机,运动方程和观测方程也只能近似的成立。所以,与其假设数据必须符合方程,不如来讨论,如何在有噪声的数据中进行准确的状态估计。
大多现代视觉SLAM 算法都不需要那么高成本的传感器,甚至也不需要那么昂贵的
处理器来计算这些数据,这全是算法的功劳。由于在SLAM 问题中,同一个点往往会被一个相机在不同的时间内多次观测,同一个相机在每个时刻观测到的点也不止一个。这些因素交织在一起,使我们拥有了更多的约束,最终能够较好地从噪声数据中恢复出我们需要的东西。本节就将介绍如何通过优化处理噪声数据,并且由这些表层逐渐深入到图优化本质,提供图优化的解决算法初步介绍并且提供训练实例。
批量状态估计问题
非线性最小二乘
改进版的G-N:
小结:
- 非线性优化是个很大的主题,研究者们为之奋斗多年
- 主要方法:最速下降、牛顿、G-N、L-M、DogLeg等
- 与线性规划不同,非线性需要针对具体问题具体分析
- 问题非凸时,对初值敏感,会陷入局部最优(目前没有非凸问题的通用最优值的寻找办法;问题凸时,二阶方法通常一两步就能收敛)
实践部分
需要安装Ceres
库和g2o
库,在3rdparty文件夹中都有,都是cmake的工程,安装之前一样的安装方式安装即可。
gaussNewton
代码运行没有问题,结果如下:
/home/wh/shenlan/slambook2/ch6/cmake-build-debug/gaussNewton
total cost: 3.19575e+06, update: 0.0455771 0.078164 -0.985329 estimated params: 2.04558,-0.921836,4.01467
total cost: 376785, update: 0.065762 0.224972 -0.962521 estimated params: 2.11134,-0.696864,3.05215
total cost: 35673.6, update: -0.0670241 0.617616 -0.907497 estimated params: 2.04432