Cartographer入门
文章平均质量分 77
羊狗狗一只2022年
这个作者很懒,什么都没留下…
展开
-
单线激光雷达检测玻璃并把玻璃内的点插值替换为墙体
rt原创 2023-02-15 16:55:57 · 599 阅读 · 2 评论 -
Cartograoher后端之PoseGraph2D中的线程池与工作队列
到了这里要开始讲Cartographer各部分与线程池和工作队列相关的地方了,这部分分为添加线程池的构造、添加工作队列、处理工作队列等。这里没讲全,重要一点的部分后面会单独开个专栏去讲,后面的专栏主要偏向实际应用时补充的功能,会比较贵,不喜勿喷,都是花时间弄的,熟人直接找我就行了不收费的。PoseGraph2D中线程池的构造thread_pool_由 MapBuilder构造时传入, thread_pool_的构造时传入最大线程个数的参数。一、添加工作队列AddWorkItemcon.原创 2022-04-09 11:26:00 · 425 阅读 · 1 评论 -
Cartographer后端之Ceres优化
看这篇之前,要是一点都没看过 Ceres ,看一下这里 ,都写在注释里,直接看注释Ceres优化库_羊狗狗一只2022年的博客-CSDN博客cartographer后端的优化由两部分组成一、Ceres_scan_matcher_2d.cc中的Match方法这里主要对激光算出来的概率、平移、旋转做优化,优化的部分主要为推测出来的,其中针对激光数据同时优化,第二部分对计算的x,y和预估的x,y进行优化,第三部分对计算的和预估的进行优化。1.通过激光数据对优化部分 problem.Ad原创 2022-04-09 11:15:09 · 2409 阅读 · 1 评论 -
Cartographer后端之PoseGraph2D二
这部分主要开始讲代码了,以下接口可根据需要自行修改,由于公司原因,只讲官方源码,自己做的地方等哪天想不起来自己看把,写的这些基本都是怕之后很久不做忘了。一、参数部分类型PoseGraph2D是从类PoseGraph派生而来的,而PoseGraph又继承了接口类PoseGraphInterface。类PoseGraph和类PoseGraphInterface都是抽象类,定义了很多纯虚函数,并没有定义任何成员变量。而PoseGraph2D则是用于2D建图的实现,下表列举了它的成员变量。 我们所关心的原创 2022-04-09 10:32:31 · 667 阅读 · 0 评论 -
Cartographer后端之PoseGraph2D一
这部分比较多,后面会分两块单独来说明,我们先简单的说明算法原理和各个类中变量的意义,再在之后的文档中解释各个方法的意义。这块很多都抄了这里无处不在的小土(因为他写的太好了)。对象map_builder在它的构造函数中就用类型PoseGraph2D例化了对象pose_graph, 它是后端完成闭环检测以及全局优化的关键对象。在研究该对象之前, 我们还是先回到Cartographer的总体框架上来,总体了解一下Global SLAM的任务。 下图是从总体框图中抠下来的关于Global SLAM的框图。原图中转载 2022-04-09 10:15:14 · 804 阅读 · 0 评论 -
Cartographer之前后端入口GlobalTrajectoryBuilder
这部分的功能是将前端的子图、位姿信息给后端进行闭环检测和全局优化。下面解析代码,只分析2D情况下的LocalTrajectory2D和PoseGraph2D类。1.构造函数 GlobalTrajectoryBuilder/** * @brief GlobalTrajectoryBuilder的构造 * @param local_trajectory_builder 记录了轨迹跟踪器,是前端的核心类型 * @param trajectory_id 轨迹索引 * @param pose_原创 2022-04-09 10:07:26 · 474 阅读 · 0 评论 -
Cartographer前端之local_trajectory_builder_2d.cc
其中红色框圈起来的则是local_trajectory_builder_2d所处理的所有内容和流程,其输入仅为激光数据(点云)、odometry,Imu DATA。而经过一系列处理后输出结果为cartographer定义的InsertionResult结果类,包含了时间戳、当前机器人位置、submap及在世界坐标的位置、激光点云结合等。即经过前端处理可以得到一系列的submap,如此后续其他模块可将submap进行后端处理拼接形成整个地图。整体处理流程如下:1.激光原始数据预处理融合转换成...原创 2022-04-08 17:34:09 · 1703 阅读 · 0 评论 -
Cartographer前端之real_time_correlative_scan_matcher_2d
cartographer的几个scanmatcher这里说的蛮好的,但是real_time_correlative_scan_matcher这是没有用到高/低分辨率地图以及分支定界算法的。(也可能是我没看明白)先看一下这个文档!!!!!!!!Real-Time Correlative Scan Matching完全解析(CSM帧匹配算法)总的来说real_time_correlative_scan_matcher就是给定先验位置、点云、概率地图、搜索边界然后打散点通过概率地图的得分和再获取最..转载 2022-04-08 17:18:36 · 1280 阅读 · 2 评论 -
Cartographer前端之位姿推测器pose_extrapolator.cc
pose_extrapolator 主要用于融合里程、IMU和历史位置的输出,目前我用的版本是 2021.05.07 master branch,在旧的tag 0.2.0上是有ukf的,后来的版本没有ufk了。cartographer 算法中提供了一个位置和姿态估计器,其主要作用是在前端匹配时作为预测位置的输入,即可认为是匹配的初始位置和姿态。在前面已经详细讲解了前端scan math的三种方法,其中前端的优化匹配和相关匹配一定程度上依赖于初始位姿,因此获取预测位置十分重要。获取预测的位置方式有许多原创 2022-04-08 16:50:00 · 1390 阅读 · 0 评论 -
Cartographer基础之Scan、Node、Submap、Trajectory
一、Cartographer 中 scan、node 、submap、trajectory之间的关系每条trajectory由多个submap组成,每个submap由多个node组成,每个node由一帧或多帧scan得到。二、SCANScan 通过LocalTrajectoryBuilder2D::AddRangeData( const std::string& sensor_id, const sensor::TimedPointCloudData& unsync原创 2022-04-08 16:26:11 · 1790 阅读 · 1 评论 -
Cartographer总览
本文目的大概的讲一下整个代码框架,本来是想尽量这一篇写详细一点,后来时间不够了,而且一篇太长了阅读太难受,后面拆成了好多章去讲,这篇主要是拆官方文档,之后的篇章东西我也没有很透彻,有错误的地方欢迎指正。从这章开始,借鉴了很多大佬的精华:1.无处不在的小土2.南北粉面馆3.火种源码的机器人4._Leveon下面开始解读代码一、算法概述官方文档(这里要翻墙,基本下面也就是照着官方文档说的,可以把下面当成官方文档的翻译)Cartographer 可以被视为两个独立但相关原创 2022-04-08 15:07:45 · 4537 阅读 · 2 评论 -
Cartographer环境配置
以下除日志部分和我自己有关外,其他都是开源的一、配置依赖环境sudo apt-get install -y google-mock libboost-all-dev libeigen3-dev libgflags-dev libgoogle-glog-dev liblua5.2-dev libprotobuf-dev libsuitesparse-dev libwebp-dev ninja-build protobuf-compiler python-sphinx ros-kinetic-tf2-e原创 2022-04-08 13:59:54 · 532 阅读 · 0 评论