RGB-D SLAM——回环检测篇(四)

本文详细介绍了RGB-D SLAM中的回环检测流程,包括关键帧提取和回环检测策略。通过设定阈值避免频繁的地图更新,采用近距离回环与随机回环策略进行匹配,优化地图构建。
摘要由CSDN通过智能技术生成

一.回环检测的流程

1.关键帧提取:把每一帧都拼到地图中是不明智的选择。因为帧与帧之间距离很近,导致地图需要频繁更新,浪费时间,所以当机器人的运动超过一个”关键帧”,将关键帧拼到地图里就行了。

2.回环的检测。回环的本质是识别曾经到过的地方。最简单的回环策略,是将新来的关键帧与之前所有的关键帧进行比较,不过这样会导致越往后,需要比较的帧就越多。所以,稍微快点的方法就是在过去的帧里面随机挑选一些,与之进行比较。

伪代码如下:
1.初始化关键帧序列:F,并将第一帧 f0 f 0 放入F中。
2.对于新来的一帧I,计算F中最后一帧与I的运动,并估计该运动的大小e。有以下集中可能性:
a.若e>error,说明运动太大,可能计算错误,丢弃该帧。
b.若没有匹配上(match)太少,说明该帧图像质量不高,丢弃。
c. 若e < Ekey,说明离前一帧很近,舍弃。
3.近距离回环:匹配I与F末尾m个关键帧。匹配成功时,在图里增加一条边。
4.随机回环:随机在F里取n个帧,与I进行匹配。若匹配上,在图里增加一条边。
5.若有新的数据,则回2,没有则进行优化与地图拼接。

主要代码如下:

int main(int argc, char** argv)
{
    vector<FRAME> keyframe;
    vector<FRAME> frame;
    vector<int> keyframe_count;
    keyframe_count.push_back(0);
    int frameid=0;
    for(int i=1;i<600;i++) //将所有的帧导入进来,存储在一个容器中
    {
        FRAME frame_single;
        string path_rgb("/home/hansry/Pose_part/data/rgb_png/");
        string path_depth("/home/hansry/Pose_part/data/depth_png/");
        string suffix(".png");
        stringstream str_rgb,str_depth;
        str_rgb<<path_rgb<<i<<suffix;
        str_depth<<path_depth<<i<<suffix;
        frame_single.rgb=imread(str_rgb.str());
        frame_single.depth=imread(str_depth.str(),-1);
        frame_single.frameid=framei
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值