![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SLAM
爱学习的小土
本人热衷于机器人导航算法研究,希望与志同道合伙伴一起探讨有关技术。
展开
-
Cartographer代码阅读笔记:目录
目录:Cartographer代码阅读笔记:回环检测: link.原创 2020-10-07 17:10:02 · 717 阅读 · 0 评论 -
Cartographer代码阅读笔记:位姿推理器(PoseExtrapolator)
本人热衷于机器人导航算法研究,希望与志同道合伙伴一起探讨有关技术。文章目录前沿代码解析小结前沿Cartographer中位姿推理器(PoseExtrapolator)融合里程计数据和IMU数据,为Local SLAM提供初始位姿估计。Cartographer有关其他分析文章:回到目录本文的代码文件在:cartographer/mapping/internal/pose_extrapolator.cc接下来探讨一下该文件中关键函数的具体实现过程:代码解析PoseExtrapolator(.原创 2020-10-12 22:47:57 · 1484 阅读 · 0 评论 -
Cartographer代码阅读笔记:前后端的入口(GlobalTrajectoryBuilder)
本人热衷于机器人导航算法研究,希望与志同道合伙伴一起探讨有关技术。文章目录前沿代码解析小结前沿Local SLAM中的任务是接收激光雷达的扫描数据、进行扫描匹配、估计机器人位姿和将符合条件的扫描数据插入到子图中,而不具备任何闭环检测和全局优化的能力(这些是Global SLAM中的任务)。Local SLAM 和 Global SLAM之间一定存在某种通讯才使得后端(Global SLAM)能够看到前端(Local SLAM)构建的子图和位姿估计等信息,进而实现闭环检测和全局优化的目的。而这一工.原创 2020-10-12 17:57:09 · 418 阅读 · 0 评论 -
Cartographer代码阅读笔记:Local SLAM的实现
本文将研究一下Cartographer中前端实现的过程,其主要流程为:将激光雷达数据和位姿推理器(Pose Extrapolator)估计的位姿输入到扫描匹配器(Scan Matching),并使用Ceres库完成优化计算,得到机器人位姿的观测值。观测值一方面反馈给位姿推理器用于修正其估计值,另一方面提供给运动滤波器用于判断机器人是否运动了。如果运动了,就将此刻的点云数据插入到当前正在维护的子图中。同时输出插入的结果,包含了位姿、子图、激光扫描数据和时间信息。相关文件在:cartographer/ma..原创 2020-10-12 15:56:55 · 838 阅读 · 0 评论 -
Cartographer代码阅读笔记:后端优化器
###后端优化简介Cartographer的后端优化器是通过SPA(Sparse Pose Adjustment)的技术,根据路径节点和子图之间的约束关系,最终优化路径节点和子图的世界坐标。路径节点和子图之间的约束关系是由约束构建器通过回环检测方法得到的。而所谓的SPA技术,本质上还是通过LM(Levenberg-Marquardt)方法进行非线性寻优。并且由于不是所有的子图和路径节点之间都能成功构建约束,以至于LM的增量方程中的H矩阵是一个稀疏矩阵,这样就可以通过使用一些优化手段来降低对内存的需求,提高原创 2020-10-11 21:37:38 · 787 阅读 · 0 评论 -
Cartographer代码阅读笔记:位姿图的创建与更新
本文将深入研究一下Cartographer是如何创建和更新位姿图的,文件在:cartographer/mapping/internal/2d/pose_graph_2d.cc中。1.位姿图的构造和初始化PoseGraph2D()构造函数/** * @brief 位姿图构造函数,在构造列表中完成一些成员变量的构造 * @param options 是从配置文件中加载的关于位姿图的配置项 * @param optimization_problem 是一个智能指针指向后端优化问题求解器 * @pa原创 2020-10-11 15:24:37 · 980 阅读 · 0 评论 -
Cartographer代码阅读笔记:回环检测
1.fast_correlative_scan_matcher_2d.cppScoreCandidates函数分析// 计算当前层的候选解在对应分辨率地图中的匹配得分,并按照得分从大到小的顺序排序。void FastCorrelativeScanMatcher2D::ScoreCandidates( const PrecomputationGrid2D& precomputation_grid, const std::vector<DiscreteScan2D>&a原创 2020-10-07 17:10:39 · 2625 阅读 · 1 评论