今天这篇文章会写得深入一些,主要知识来自于业内多位大佬的实际落地与自身的思考。
主要涉及机器人状态估计与机器视觉,多传感器结合时,BA优化与卡尔曼滤波的差异及如何选择。
机器人状态估计中,大家应该总体会对这一块兴趣较大,就是在自己的系统中到底是使用BA(光束平差法)做联合优化,还是使用卡尔曼滤波做优化呢?个人认为系统如果不依赖强力前端传感器(如激光雷达,光纤陀螺仪)的情况下,后端优化是可以将状态估计做到更好的主要路径。
经过这么多年的发展,经典卡尔曼滤波KF已经衍申出了很多种形态,常用的有EKF(扩展卡尔曼),ESKF(基于误差的卡尔曼滤波),IEKF(带迭代的扩展卡尔曼)与MSCKF(这个通常是一个具体VIO系统的名称,也代表多状态约束卡尔曼滤波)等。
BA相对就清晰一些,通常就是通过紧耦合为系统构建一系列的约束,常见约束就是(1)先验约束(2)视觉重投影误差(3)IMU预积分约束,还可以加入一些类似轮速计,RTK之类的约束。万变不离其宗。
优化与滤波有如下一些基础差异:
1.滤波是建立在一阶马尔科夫性上的单次优化,但同时受限于一阶马尔科夫性
2.滤波比单次优化精度高,直接使用了协方差来传递状态,优化需要使用LM之类进行求解
3.多次优化比滤波精度高,多次迭代不断收敛误差,但是缺点是开销比较高
4.滤波比较适用于松耦合,即不同传感器通过前端直接输入位置姿态(预测+更新),再输出新的状态估计;优化使用多种状态做紧耦合,再输出新的状态估计。
5.个人认为VR/XR这类相对本地位置进行坐标系变换的应用更适合滤波,机器人行业优化更合适。
而实际上这些年随着整个VSLAM的发展,事情正在起变化。
滤波和优化的边界越来越不明显,甚至开始各种交叉和混合使用。
以先验约束迭代的卡尔曼滤波器IEKF,多状态约束的卡尔曼滤波器MSCKF,再加上更多工程手段。越来越强的前端传感器,越来越便宜的前端算力,也使得滤波的手段应用得越来越广泛。优化的优势也开始不再那么明显。
说一下现今差异上的一些理解(部分来自吴克艰博士2022SLAM论坛):
1.优化与滤波数学本质一样,只是形式不同,最终都是非线性最小二乘问题。(矩阵的形式和矩阵的分块,分解有较大区别)
2.使用哪种手段取决于需要应用和落地的场景是长还是短,这块很玄学,没有明确定义,参见3
3.精度与开销的平衡,取决于你使用的系统传感器能力与前端算力平台的能力,传感端越强,系统可以更依靠前端,偏向滤波;反之如果算力平台能力尚可,传感端较弱,偏向优化。
4.优化实际主要手段是重线性化/边缘化,选择需要固定住的部分形成先验(未必一定是路标),未边缘化的部分使用重线性化。滤波主要利用协方差进行状态估计。
5.使用常规还是平方根进行处理,最终都是精度与开销的平衡。大规模的数据多用BA,对效率高的场景使用KF。未来大多数机器人实际场景个人判断是BA+SFW或MSCKF为主类,辅助以各自系统的工程手段实现。