BA(Bundle Adjustment,光束法平差)是计算机视觉和机器人领域(尤其是 SLAM,即同步定位与建图)中最核心的优化问题。
用一句话概括:BA 是一个超大规模的“非线性最小二乘问题”,它的目标是同时优化相机参数(位姿)和三维空间点坐标,使得“三维点投影到相机图像上的预测位置”与“实际观测到的像素位置”之间的误差最小。
这个问题的核心在于,通过若干个相机发出的经过各自光心的光束交于图像中的同一特征点,然后根据相机间内外参等,结合观测点和预测点的残差,去估计实际相机位姿和特征点三维坐标。对于一个常见的BA问题来说,假设相机有m个,有n个特征点,对于每个相机存在一个六维位姿需要估计,对于每个特称点也有个三维坐标需要估计。残差数量可以看作是观测数的两倍(每个观测存在xy两个分量),这里的观测数得算上每个相机中的每一个特征点,需要对每一个观测计算一次残差。在实际 SLAM 中,m可能是几百到几千,n 可能是几万到几百万。所以优化变量总数可以达到百万级别。
这个BA问题就是VIO算法中需要核心解决的问题。由于在单目VIO中,并不存在单帧多机特征点配对的过程,导致一定程度上的退化,所以需要在一定时间内提供额外信息进行约束,比如说IMU信息,这也是VIO的核心原理,通过惯性计实现预积分辅助定位。这也是大多数VIO算法要求上电后优先进行摇动来确定初始光流和特征点移动的原理。
