前言


学习SLAM最大的一个问题就是知识点太多,学完前面又忘记后面,而且脑子总是很混乱,还经常看不懂。今天刚搞懂了Bundle Adjustment的原理,马上过来记录一下,以后忘记还可以回来看看。

本文没有公式的证明,只是通俗的理解Bundle Adjustment到底是什么,这需要读者了解一定的slam基础。
下面就让我们一步步地理解BA吧。

Bundle Adjustment译为光束法平差,或者束调整、捆集调整。我们知道,SLAM大致可以分为前端、后端、回环检测、建图这几个步骤,那BA属于这里面的哪个步骤呢?

BA的作用


让我们先来看看Bundle Adjustment的作用,BA不仅可以优化位姿(R和t),还可以优化特征点的空间位置。而我们又可以把BA看成是最小化重投影误差(Reprojection error)问题,同时这也是一个非线性最小二乘问题。说到这里,各位同学都猜到BA属于哪个步骤了吧?没错,就是属于SLAM中的后端,说白了,BA就是一个优化模型,其本质就是最小化重投影误差。

投影


首先了解一下,投影是什么意思。这里所说的投影是指空间中的某个点映射到图像中的某个像素的过程。
在这里插入图片描述

特征匹配


学过SLAM的童鞋应该知道,SLAM的关键问题就是求解出机器人的运动估计,也就是位姿(可用旋转矩阵+位移,或者是变换矩阵,或者是李代数的方式表示)。在视觉SLAM中,我们要从两张图中恢复机器人的运动。在恢复运动位姿之前,我们需要对某一时刻的连续两帧进行提取特征点,特征点匹配。 特征点匹配的意思就是说 :a图像中的ua像素对应b图像中的ub像素,他们都表示空间点中的P点。
在这里插入图片描述

注意,这里的图像b是由机器人所携带的摄像头传感器所得到的真实数据,是观测出来的。表示空间点P在b图像的实际投影。

我们这里把ub的坐标设置为(ubx,uby)。

重投影


以单目摄像头为例子,结合多个特征匹配点,使用对极几何(E或F)或者是单应性矩阵H可以求得机器人的运动位姿。我们知道针孔相机模型如下:
在这里插入图片描述

利用针孔相机模型(观测模型),可以通过空间点P的坐标,获得空间点P投影在图像b中的像素坐标,我们称为ub`。

这个ub`像素点坐标是先通过位姿估计,再通过观测模型计算出来的,相当于这个像素坐标是估算出来的。

这个过程也称为重投影。

重投影误差


如果完全没有误差,那么两者的坐标是一样的,但这是不可能的,不管是实际测量出来的ub还是通过位姿估算+重投影的出来的ub`,都是有误差的,将实际值和估算值一减,就得到了重投影误差。
在这里插入图片描述

最小化重投影误差

由于两张图片有很多对特征匹配点,将所有特征点误差求和,取平方,再乘上1/2,这就构建了一个非线性最小二乘问题了,将里面的位姿、空间点作为优化的对象,最小化重投影误差,即可得到一个优化后的结果,这就是所谓的BA。

在这里插入图片描述

参考文献

《视觉SLAM十四讲》——高翔
https://www.sohu.com/a/195484669_715754
https://www.cnblogs.com/Jessica-jie/p/7739775.html