1 Introduction

Carto的目的是为了用slam代替CAD,从而迅速,准确的描述出建筑物的二维或三维结构图。这篇文章的创新点在于提出了一种实时的根据雷达数据进行闭环检测的方法,从而能够进行数万平方米的SLAM。

2 Related Work

scan-to-scan累积误差太快。scan-to-map的扫描匹配(指的是Hector SLAM)的方式应用Gauss-Newton找到最优匹配,需要高频率的雷达。这种匹配挺准确,鲁棒。但是没有处理累积误差。Carto通过图优化的方式进行优化消除累积误差。

3 System Overview

通过背包装置能够实现实时地5cm分辨率的二维栅格地图。通过扫描匹配将scan插入到submap中,这个过程会累积误差。

当submap完成之后,就不在插入新的scan了,并将submap应用到闭环检测中。就是在submap中找当前scan的匹配程度,找到了就添加一个闭环约束到图结构中。闭环检测几秒进行一次,也算是实时了。在查找的过程中应用branch-and-bound(分支定界法)加速寻找。

4 Local 2D SLAM

这部分不细说了,就是Hector SLAM的处理过程。之后会写一个Hector SLAM的理论过程和代码分析,现在提供几个链接仅供参考。

https://blog.csdn.net/nksjc/article/details/72779564

https://blog.csdn.net/roadseek_zw/article/details/53379896

https://www.cnblogs.com/cyberniklee/p/8484104.html

大致说一下流程,首先介绍了scan与submap的概念。然后说hit 和 miss 进行栅格地图的构建。

这里提一下,Carto有个处理是将超过雷达最大值的点或者是Nan的这种点用了一个距离值代替,如10m ,这就保证了只有检测到东西的时候才会更新栅格地图,距离过大或者nan的情况都只更新10m的栅格地图,这就使得地图的边界非常整齐,不会有很多飞出去的白色块。

scan-submap的扫描匹配,通过将scan旋转平移,根据当前地图给scan的末端赋值,然后将这个值与地图做最小二乘,(也就是1-MT = 0,如果匹配的话二者应该重合,所以M值相减应该得0)通过ceres进行求解,应该是高斯牛顿(没看代码呢不太清楚)。在给scan赋值的过程中,Hector是使用双线性插值,这个过程可能会导致问题(啥问题忘了),所以Carto对这个过程进行改进,使用双三次插值进行赋值,避免了那个问题。

5 Closing Loops

扫描匹配会逐渐累积误差,但是对于一小段连续的扫描,累积的误差是很小的。使用Sparse Pose Adjustment进行所有scan和submap的优化。submap不再改变了就会参与闭环检测。闭环检测的scan match后台进行。

A 闭环检测的寻找类似于扫描匹配。之后介绍了目标函数。(谁的目标函数有点不清楚)

B 分支定界的扫描匹配

首先说了最初的搜索是在一个搜索空间中逐步搜索,介绍了一大堆Naive algorithm 1。然后说我们没用这个,用的是分支定界的方法,也就是Algorithm 2 。

主要思想是将所有的可行解作为叶子节点,也就是最底层的节点。根节点代表所有可行解的集合。然后对每个子节点(包括叶节点)进行打分,如果得分没有超过当前最高分,则这个子树不存在最优解,直接将这个节点及其子节点删除。只有在节点的分数超过当前最高分的情况下才继续向下搜索,对其每个子节点再进行打分。

1 节点选择

每个节点都是一个可行解,最上层集合的步长最大,最下层集合的步长最小。树结构的每层对应了一个分辨率的地图,树的最上层对应着size为64的地图,最下层对应这size为1的地图。在搜索时采用了深度优先搜索,并设置了一个阈值,低于这个阈值的匹配得分直接舍去。

2 分支规则

对所有可行解进行分支。第h层共有 2的h次幂 乘以 2的h次幂 这么多个 节点。也就是说,第0层为1,第1层有 2种x 与 2种y 的选择,一共4个。直到最下一层代表所有的可行解。(具体的可行解的结构要看代码)

3 定界

搜索的分数阈值的最大值,只有超过了这个值的节点才继续向下进行搜索,并将下一层的节点按分数进行排序,分数最高的在最左侧。

对得分最高的节点分支,对其的子节点进行搜索,直到找到叶节点为止,如果叶节点的分数高于阈值,则将阈值更新为叶节点的值,否则将搜索倒数第二层的下一个节点。深度优先。

为了更有效的计算分数,在之前已经生成了多分辨率地图,在计算得分时只要计算雷达数据与地图的匹配的得分即可。

6 Experimental Results

实验平台:

工作站:Intel Xeon E5-1650 3.2Ghz。服务器级别的cpu

内存:猜测是32G的内存。忘了从哪里看到,跑博物馆那个数据集用了25G的内存,因为所有的Submap都放在内存中了,所以Carto很耗内存,在我自己的实验中,室外环境下跑25Hz的倍加福雷达20分钟录的bag,需要6个G的内存。

测量依据:

用激光笔测量测量5条直线墙壁的距离,以及测量地图的像素距离进行换算,比对2者的距离偏差。

实验结果:

实验B:最小偏差1cm(4m的边),最大偏差11cm(15m的边),最大偏差百分之0.8。

实验C:跑数据集,每个数据集都配置了一份对应的配置文件。

表4提供了闭环检测的准确率(包括true and false positives)。准确率还是很高的,除了一个77的,剩下都是百分之98左右。之后提了为什么会有个77准确率的原因,是因为Huber loss 的尺度因子和分数没设置好。

7 Conclusions

我们的闭环检测能够实时进行,SLAM的效果很好,确实也很好。

cartographer探秘第二章之论文解析相关推荐

  1. 微型计算机原理第二章作图题,工程制图第二章习题答案解析.doc

    WORD文档可编辑 技术资料 专业分享 第二章 点.直线.平面的投影----点的投影 班级 学号 姓名 2-1.求各点的第三投影,并填上各点到投影面的距离. A点距V面( 5 ).距H面( 6 ).距 ...

  2. Spring MVC框架:第二章:视图解析器和@RequestMapping注解使用在类级别及获取原生Servlet API对象

    SpringMVC使用细节 第一节 视图解析器 通过HelloWorld程序我们看到了handler方法的返回值表示: 请求处理完成后,请SpringMVC执行一个请求转发.转发的地址就是handle ...

  3. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第二章——自编解析与答案

    2.1 在80x86微机的输入/输出指令中,I/O端口号通常是由DX寄存器提供的,但有时也可以在指令中直接指定00~FFH的端口号.试问可直接由指令指定的I/O端口数. 解析: P31-2.5 外部设 ...

  4. 华文慕课计算机组成结构第二章课后习题解析

    1.(5分) 下列哪些定律属于计算机行业的著名"定律"? A. 摩尔定律 B. 反摩尔定律 C. 墨菲定律 D. 马太效应 E. 木桶定律 答案: A,B 2.(5分) 当前摩尔定 ...

  5. R语言分析(二)——薛毅R语言第二章后面习题解析

    包括2.2-2.6中间的习题,2.2的习题中第三问和第四问,应该有其他的解答方法,但我看他的题目,似乎是在A和B的基础上进行,所以就选择了使用for循环的方法 做着习题,又不断查着书,这样,书籍也熟悉 ...

  6. 华文慕课北大操作系统陈向群第二章课后题解析

    1.(5分) 控制和状态寄存器用于控制处理器的操作,在某种特权级别下可以访问.修改.下列哪一个不是控制和状态寄存器 A. 程序计数器(PC) B. 指令寄存器(IR) C. 程序状态字(PSW) D. ...

  7. 第二章 PX4-Pixhawk-RCS启动文件解析

    第二章 PX4-RCS启动文件解析 RCS的启动类似于linux的shell文件,如果不知道shell文件是什么东西可以理解成是为程序的流程框,它是告诉处理器应该怎么样去运行,前一章介绍的是编译成固件 ...

  8. 第二章 PX4-RCS启动文件解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. 第二章 PX4-RCS启动文件解析 RCS的启动类似于linux的shell文件,如果不知道shell文件是什么东西可以理解成是为程序的流程框,它 ...

  9. 叉积 微分 恒等式_考研真题分章解析 | 第二章 导数与微分

    高数思维 导读:本系列专辑为考研真题分章解析,主要包括:函数.极限与连续.一元函数微分学.一元函数积分学.多元函数微分学.多元函数积分学.空间解析几何.级数.微分方程等内容,共计12章,整理了近32年 ...

  10. 集装箱计算机跟踪管理方式,集装箱运输第二章集装箱及其箱务管理(图文)解析.ppt...

    集装箱运输第二章集装箱及其箱务管理(图文)解析 第2章 集装箱及其箱务管理 2.1 集装箱及其标准化 2.2 集装箱箱务管理业务 2.3 集装箱跟踪管理及箱务管理现代化 2.1 集装箱及其标准化 2. ...

最新文章

  1. 湖南人文科技学院没有计算机一级能毕业吗,在湖南人文科技学院读书真的是生不如死...
  2. unable to read askpass response from '/usr/libexec/openssh/gnome-ssh-askpass
  3. python之shutil模块
  4. Java持久性锁定初学者指南
  5. DataUml Design 介绍8-DataUML 1.2版本正式发布
  6. 剑指_4二维数组的查找(Python)
  7. c++ ege 坦克大战
  8. python内置函数dict()
  9. ALFA缺陷检测软件外观检测自学习人工智能软件
  10. 数据猿专访诸葛io孔淼:数据与业务“动态”结合才能发挥最大威力
  11. [今日阅读] [TSE 2019] - Mining Fix Patterns for FindBugs Violations
  12. 塔多漫画一直维护服务器,塔多漫画
  13. 还在用excel做应收应付管理吗?你的痛苦我都知道
  14. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-人机界面快速入门 TC3
  15. 电脑端之破解教学详情
  16. 解决Win10安装Ubuntu20.04双系统出现的win10引导失败方案
  17. 【全志R329-NPU助力】Maix-Speech为嵌入式环境设计的离线语音库
  18. delphi 裁剪mp3_如何编辑mp3文件详细信息(Delphi)
  19. [数字逻辑] 全加器的多种电路设计方案
  20. Vault部署及创建密钥管理服务

热门文章

  1. linux shell中$0,$?,$!等的特殊用法
  2. spring 13-Spring框架基于Annotation的AOP配置
  3. 利用cloudera manager搭建Hadoop集群
  4. 使用jQuery+huandlebars遍历中if判断
  5. Python fullstack系列【2】Python数据类型
  6. xp共享文件win7访问时不能保存密码
  7. node 版本管理器 之 nvm 安装与使用
  8. IE浏览器无法通过ftp:\\192.168.xxx.xxx连接ftp服务器
  9. CSS侦测方法(侦测是否支持某个CSS属性)
  10. 排序算法之九 基数排序(C++版本)