cartographer理解与代码框架
由于cartographer最近进行了一次改动,对之前的cartographer的代码进行了调整,特此记录
一、按着框架来看程序的话,首先是传感器数据,这些统一在源码的sensor包里,包括imu,odometry,激光,fixed frame

  1. 首先是激光数据,cartographer对他进行了体素滤波,更确切点是自适应体素滤波,体素滤波是为了后面的自适应体素滤波提供了一个接口,体素滤波在sensor/internal里面(具体就是给定一定值的激光范围,然后给定这个范围内的激光点云数据的最小值,通过不断缩小体素范围长度,达到这个要求,从而得到滤波的效果,具体数值在配置文件里面)。
    滤波之后的激光数据一是被送入了局部slam里面进行扫描匹配,具体文件在mapping/internal/2d/scan_matching/real time CSM,
    二是被送入了位姿插值器里面,用来进行推测位姿
  2. 里程计数据,并没有进行特别的处理,直接就被位姿插值器调用了,它的定义再sensor包里面,被调用是在mapping/pose_extrapolator里面。
  3. Imu数据,同样定义是在sensor包里面,后面经过mapping/imutracker调用,在imutracker里面通过计算重力在各个方向上的分量,计算出各轴的加速度。然后把数据给到mapping/pose_extrapolator。
  4. Fixed frame是为了在计算姿态图时,给定一个标准,使姿态图可以固定下来。
    通过对传感器数据的调用,通过位姿插值器mapping/pose_extrapolator,来融合imu,里程计和激光数据,因为imu和里程计的频率会比激光数据高,所以在一段时间内只用imu和里程计数据来估算位姿,当有激光数据传进来时,在对位姿进行估计。
    二、然后就是local slam部分,在mapping/internal/2d/local_trajectory builder里面,首先就是调用激光数据,进行scan match,策略就是real time CSM 和 ceres scan match在mapping/internal/2d/scan_matching里面,通过扫描匹配构建子地图。
    三、接着就是后端优化的过程,这部分内容在mapping/internal/global_trajectory builder里面,首先是将local slam所生成的子地图添加进来,通过扫描匹配策略fast CSM,fast CSM就是分支定界算法,在mapping/internal/2d/scan_matching里,scan match完成之后,通过make constrain文件创建约束,在pose graph 2d里与imu数据,里程计数据一起构建约束形成稀疏姿态图,进行求解,从而得到地图。
    上面图片里的几个函数,都是在cartographer_ros包里面的,按顺序排列的,通过一步步调用,把程序从cartographer_ros手里转到cartographer手里。Map_builder_bridge,转到cartographer里面的mapping/map_builder里面,从这个函数正式转入到local_trajectory_builder和global_trajectory_builder里面,也就是上面描述的cartographer结构,可以从global_trajectory_builder开始看起。

cartographer整体理解
一、cartographer主要包括两个部分,一个是前端匹配,另一个就是后端优化工作,首先前端匹配的过程就是创建submap的过程,通过添加一系列的经过体素滤波的scan,和imu(2D可以没有,3D必须要有)、里程计数据信息进行位姿融合,通过scan match策略添加到submap当中去,这里的scan match策略就是CSM(但是在程序当中用到了两个,real time CSM和ceres scan match。real time CSM为ceres scan match提供一个很好的初值,之后用ceres scan match 进行优化)。在submap被创建的时间内,cartographer认为误差是很小的,但是当大量的submap被创建完成时,就会有误差积累,这时引入后端回环检测,进行优化。
二、后端检测,这个过程是一直在运行的,也即是当一旦有laser scan加入进来时,就会进行回环检测。前端得到的submap会不断加入到后端中,当一个scan加入进来时,cartographer就会考虑回环检测,进行scan match,这里的scan match策略就是FAST CSM,也就是分枝定界算法,这个算法通过将栅格分为几层深度(通俗来讲就是分了好几层分辨率),通过先匹配低分辨率再匹配高分辨率,大大的缩短了回环检测的时间。一旦建立了回环,就会进行优化,优化的方式,就是构建位姿图,通过将imu数据、里程计数据、激光数据、submap数据形成各自的约束,建立一个多边形回环,建立环上的节点,通过稀疏位姿图进行优化,优化的方式是建立一个非线性最小二乘方程进行优化(这些优化的结果全部在ceres库里解决),最终得到全局地图。

以上全属个人理解,有不正确之处,还请指正

cartographer代码框架(谷歌最近修改之后的)相关推荐

  1. ICRA2022 | OPV2V: 首个大型自动驾驶协同感知数据集+代码框架已开源

    作者丨叶小飞 编辑丨极市平台 导读 本篇文章提出了首个大型自动驾驶协同感知数据集, 并提供了多达16个模型的综合Benchmark以及一套完整的代码框架,为协同感知这个新领域提供了基准. OPV2V: ...

  2. 白色flash模块代码_适用于MCU项目的代码框架BabyOS,工程师的好助手!

    来源:码云+嵌入式云IOT技术圈 一个好的代码架构直接影响项目的质量,今天为大家分享的是一个管理功能模块和外设驱动的框架:BabyOS. BabyOS是什么? BabyOS适用于MCU项目,它是一套管 ...

  3. c++ ea 代码 生成_看EA如何生成代码框架

    EA的使用给我们带来了极大的方便,同时,在对EA不断的深入使用过程中,我们也一步步的对其功能有了深层次的了解,这次我学到的新功能,就是通过EA,将类图转换成代码框架,这是如何做到的呢? 代码工程设置 ...

  4. Onvif开发之代码框架生成篇

    [http://blog.csdn.net/max_min_go/article/details/17562045] 看了前一篇的ONVIF的简单介绍应该对它的基本使用都有了一些基本的了解了吧! 下面 ...

  5. starUML建立模型及生成代码框架

    最近用了starUML画图,对其中遇到的问题及解决方法进行一个小的总结. 首先下载安装starUML,下载之后就是建立一个项目可以在其中进行画图了. 建立project,选择default,如图 st ...

  6. 爬取京东网页的通用代码框架及其问题(MOOC)

    在MOOC学习了用python爬取网页的方法.因为和上一次看视频相隔时间太久,有一些知识点遗忘了,查了一些资料整理下来. 首先,爬取网页的通用代码框架如下: >>> import r ...

  7. 德州CC2640R2f蓝牙芯片学习笔记(二)代码框架

    目录 前言: 资料: 一.main函数: 二.app任务初始化: 三.app 任务中的事件处理: 3.1.事件 3.2.任务处理 3.3.任务间的消息 3.4.发送到消息队列 3.5.任务内部事件 3 ...

  8. idea 代码格式化 谷歌_Google Docsmaklet格式化代码

    idea 代码格式化 谷歌 Something has been annoying me for some time as I write this book in Google Docs: I wa ...

  9. GAMES101作业7-路径追踪实现过程代码框架超全解读

    目录 Path Tracing算法过程讨论 蒙特卡洛积分 直接光照 direct illumination 间接光照 indirect illumination ​编辑 合成全局光照 解决一些存在的问 ...

最新文章

  1. P1096 $Hanoi$双塔问题
  2. python list同步删除
  3. 地图自定义编码CSV转换成ini文件
  4. Unite 2018 | 浅谈伽玛和线性颜色空间
  5. 编写自己的Matcher与如何让编译器识别被mock的重载函数
  6. 操作系统【四】分页存储管理
  7. [LeetCode] Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树...
  8. javascript:document.all document.getElementsByName
  9. 8个成语接龙首尾相连_小学经典成语200个,已按场景分类好,孩子写作不再词穷...
  10. [Pku 2777] 线段树(六) {总结}
  11. Atitit atttilax创造的新概念与模式 xaas xaaK
  12. 数据库MySQL详解(入门学习)
  13. 计算机操作技能竞赛系列方案,2019 年上学期计算机文字录入操作技能竞赛
  14. 二值化网络:BNN 论文阅读笔记
  15. Latex语法学习02:文本悬挂缩进
  16. Excel 撤消工作表保护密码
  17. javascript教程完整版,JavaScript视频教程
  18. GNN:A Gentle Introduction to Graph Neural Networks
  19. 小程序springboot食堂预约订餐系统毕业设计-附源码221554
  20. 《百度apollo》规划一

热门文章

  1. html5前端工程师简历,前端工程师简历自我评价填写样本
  2. 微信禁止微信自带浏览器变化字体
  3. Unity实现的汽车方向盘转动效果[完整案例]
  4. 200826-C语言打印文件中的文本内容
  5. Build:Download maven-metadata.xml...打包一直卡在这里
  6. 投骰子游戏(C++)
  7. FOC无感驱动算法—BEMF磁链模型讨论
  8. BLE4.0低功耗蓝牙学习1. 蓝牙4.0ble协议栈的构成
  9. 曙光W580-G20来电自启
  10. 例举电脑一键重装系统win10简单的步骤操作