【SLAM】滑动窗口法及其优化求解实践

1.大规模下的BA问题

我们知道,在一个完整而实际的slam系统中,BA的计算量规模会随着系统的运行,其规模越来越大,这在实际运行中是不能被允许的,因为这会严重影响SLAM系统的运行。试想一下,如果在例如一个西安市这种规模的建图问题上,把每一帧图像作为要BA优化的部分,这是难以想象的规模。

因此,在BA优化中,我们会严格控制其需要进行的优化量,这种办法有很多,比如提取关键帧,这样的的话,我们只需要优化关键帧即可,至于非关键帧,我们就不用管他,当然,对于非关键帧,也可以用于定位检测等,不再用于建图优化。

举一个简单的例子,就是在进行BA优化的时候,保留距离当前时刻最近的关键帧,对于更早的关键帧,就不做保留了。

当然,只考虑时间上的临近是一个好于理解,但不是很好的办法。这种办法也可以称之为滑动窗口法。但是对于这种窗口的选择,我们有很多办法,比如考虑的要素既有时间,也包括空间等等。

> 首先要明确的是,在窗口中删除关键帧的技术并不是字面上的直接删除,而是前面提到的边缘化,因为直接丢掉变量,就导致损失了信息,关键帧1可能能更多地约束相邻的关键帧,直接丢掉的方式就破坏了这些约束。但是边缘化也带来了一些问题:首先,边缘化会将被边缘化掉的变量所带有的信息转化为先验增加到H矩阵中(Fill-in),这样会破坏BA的稀疏结构;而且,在滑动窗口中使用标准的边缘化操作会导致在新窗口中,与被边缘化的变量相关的变量会在不同的线性化点计算雅可比(因为每次BA的线性化点不同),破坏了系统的一致性。

2.滑动窗口法

对于一个滑动窗口上所有的关键帧,我们需要对其进行BA求解,这和之前介绍的优化求解并没有什么区别。

在系统运行中,滑动窗口会随时增加核减少关键帧,这就是在一批关键帧中,每次增加一个,每次减少一个,这样的话,BA优化要如何实现呢?

根据之前所介绍的,这里的删除关键帧,是通过边缘化,就是消元所得到的,联系到之前的H矩阵,这是一个有着特殊结构的矩阵,在经过消元后明显会被破话掉H矩阵的结构。

也即是H矩阵的稀疏性被破坏了。

这样要怎么办呢?其实,我们只需要同时将要删除的关键帧和此关键帧观察到的三维点同时去掉就可以了,相当于BA优化只优化剩下的关键帧,当然,这是一个简化的办法,在实际系统中,有着非常复杂的判断和执行方式。

3.实践


#include <iostream>

using namespace std;

int maxSum(int arr[], int n, int k)
{
    if (n &lt; k)
    {
        cout &lt;&lt; "Invaild";
        return -1;
    }
    int max_sum = 0;
    for (int i=0; i<k; i++)="" {="" max_sum="" +="arr[i];" }="" int="" windows_sum="max_sum;" for="" (int="" i="k;" i<n;="" -="" arr[i="" k];="" windows_sum);="" return="" max_sum;="" main()="" arr[]="{1," 4,="" 2,="" 10,="" 3,="" 1,="" 0,="" 20};="" k="4;" n="sizeof(arr)" sizeof(arr[0]);="" cout="" <<="" maxsum(arr,="" n,="" k);="" 0;="" ```="" [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TNOGKyYW-1590475350724)(https:="" b03.ickimg.com="" 202005="" 32eb2ebbc08cb6733387254c4ded8c2e.png)]="" #="" 4.大神的看法="" 贺博如此说:="" b05.ickimg.com="" af0f5cb8813d2d38536f3bea514f9964.jpg)="" 5.小结="" d1e7d518366f166fd8f60c44ddd3daa1.png)=""
 这里,我们就介绍了ba优化的大规模应用遇到的问题与求解方法,其实,这个问题现在也依然是很多研究者需要研究的办法,如何你可以想出更好的办法,可以交流和表达意见与建议。=""
> 参考资料:
geeksforgeeks算法题目
DSO中的Windowed Optimization</k;></iostream>
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SLAM滑动窗口是一种用于同时定位与地图构建(SLAM)系统中处理关键帧的方。它通过选择一定数量的关键帧,形成一个滑动窗口,来限制计算量并保持系统的实时性。滑动窗口中的关键帧会随着时间的推移而不断增加和减少。 在系统运行中,滑动窗口会根据一定的策略增加或删除关键帧,以确保计算量的可控性。例如,每次增加一个新的关键帧时,就会删除滑动窗口中最老的关键帧。这样可以保持滑动窗口中关键帧的数量在一个可接受的范围内,从而使BA(Bundle Adjustment)优化更加高效地进行。 滑动窗口的使用有助于解决SLAM系统中的计算量增长问题。随着系统的运行,SLAM系统需要处理越来越多的数据,如果将每一帧图像都作为BA优化的部分,将会导致计算量巨大,影响系统的实时性。通过使用滑动窗口,我们可以限制参与BA优化的关键帧数量,从而控制计算量,提高系统的运行效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【SLAM滑动窗口及其优化求解实践](https://blog.csdn.net/heroybc/article/details/106355973)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值