# cartographer基本原理与代码解析 **Repository Path**: huijundi/cartographer_theory_code ## Basic Information - **Project Name**: cartographer基本原理与代码解析 - **Description**: No description available - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-08-02 - **Last Updated**: 2024-08-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # cartographer基本原理与代码解析 ## cartographer简介 cartographer是google推出的一套2D/3D激光雷达SLAM框架,采用栅格化的地图表示(概率栅格或TSDF),cartographer的一大亮点是具有栅格地图表示下的闭环优化功能。我们知道闭环优化完 闭环优化是要改变历史时刻的位姿的。 而位姿一旦改变,地图也需要 栅格地图 对于栅格地图, 相关参考资料: 论文: W. Hess, D. Kohler, H. Rapp, and D. Andor, Real-Time Loop Closure in 2D LIDAR SLAM, in Robotics and Automation (ICRA), 2016 IEEE International Conference on. IEEE, 2016. pp. 1271–1278. 官方文档:[Cartographer ROS Integration](https://google-cartographer-ros.readthedocs.io/en/latest/) 一套基于图优化的SLAM算法 该算法主要分为两个部分,第一个部分称为Local SLAM, 该部分通过一帧帧的Laser Scan建立并维护一系列的Submap,而所谓的submap就是一系列的Grid Map。 当再有新的Laser Scan中会通过Ceres Scan Matching的方法将其插入到子图中的最佳位置。但是submap会产生误差累积的问题, 因此,算法的第二个部分,称为Global SLAM的部分,就是通过Loop Closure来进行闭环检测,来消除累积误差:当一个submap构建完成, 也就是不会再有新的laser scan插入到该submap时,算法会将该submap加入到闭环检测中。闭环检测的本质也是一个优化问题, 该优化问题被表达成了一个pixel-accurate match的形式,解决优化问题的方法是Branch-and-Bound Approach. 算法原理不再详细展开,有时间我们再专门开一个帖子来说。这部分我没有参见其他人的解读,既然有论文,学习的最佳方式当然是自己去读原文啊。论文原文可参见: W. Hess, D. Kohler, H. Rapp, and D. Andor, Real-Time Loop Closure in 2D LIDAR SLAM, in Robotics and Automation (ICRA), 2016 IEEE International Conference on. IEEE, 2016. pp. 1271–1278. 本文参考的主要博文有如下链接: https://google-cartographer-ros.readthedocs.io/en/latest/ 官方文档:Cartographer ROS Integration 最权威的还是官网,但不够详细,需要配合其他博主的解读来学习。 CSDN博客:泡泡机器人原创专栏-Cartographer理论及实现浅析 - 北漠苍狼的专栏 这篇文章可以从整体上对cartographer源码的框架有些了解。 这片博客简要介绍了cartographer程序的先后跳转关系,本文也是以该博客为提纲来进行代码阅读的,但还是太粗框架了,所以我希望能写一个详细版的解读,这样也有助于自己coding水平的提升:Cartographer 代码阅读分析 和 Cartographer 代码阅读分析-2 分块对各个部分的源码分析:【slamcode的博客 】cartographer源码分析 - CSDN博客。这篇博客已经介绍的非常详细了。有兴趣的同学可以去看看。基本上这是我看到的对源码分析最详细的了,其他的都只是一些对安装和测试或运行自己实例的demo。但为什么我还要写本文呢?因为上面这个博客是从各个模块分块来写的,详细地讲述了每个文件的函数作用,但是却没有梳理清楚程序的跳转关系。因此,本文希望从程序的跳转关系为逻辑线来梳理一下程序。也有助于我们了解这个程序运行起来以后都做了什么。建议读者可将本文和该博客搭配观看。阅读本文时可将上述博客看做一个手册,来查询每个函数或代码块做了什么。 对其中一个关键函数RealTimeCorrelativeScanMatcher2D的解读:cartographer RealTimeCorrelativeScanMatcher2D整理 从node_main入口函数开始:cartographer源码浅析(一)-新鲜出炉 - liuxiaofei823的博客 - CSDN博客 ## cartographer基本原理 ## cartographer代码整体架构 ## cartographer数据处理流程 ## 总结