自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

one_skr的博客

slam C++

  • 博客(18)
  • 资源 (2)
  • 收藏
  • 关注

原创 从零开始做自动驾驶1 GNSS模块

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、自动驾驶开源代码二、GNSS模块1.GNSS 数据结构2.GNSS的订阅模块总结前言提示:跟随大神手敲一遍自动驾驶代码。一、自动驾驶开源代码来源:https://zhuanlan.zhihu.com/p/105512661记录出现的问题和进度二、GNSS模块1.GNSS 数据结构头文件: 类中为什么设置static 成员函数、成员变量的?static成员变量为啥类外初始化? Geographic

2021-10-07 15:30:07 824

原创 C++ primer第三章 (字符串、向量、数组) 笔记

3.1命名空间的using声明1.::域操作符,编辑器应从操作符左侧的作用域里寻找右侧的名字2.头文件里不使用using 声明,避免出现名字冲突;3.2标准库类型string3.2.1定义和初始化string对象string s1;//默认初始化,s1是一个空字符串string s2 = s1;//s2是s1的副本...

2020-09-22 16:41:31 231

原创 数据结构-树-存储方法

1.树的存储结构1.1双亲表示法除了根节点外,其余每个节点不一定有孩子,但一定有双亲;以一组连续的数据存储空间来存储树的节点,同时在每个节点里,附带一个指示器来指向其双亲结点:data+parentdata是数据域,存储结点的数据;parent为指针域,指向该结点双亲在数组中的下标;const MAX_TREE_SIZE = 100;using TElemType = int ; //结点的数据类型//节点结构struct PTnode{TELemTpye data; //结点数据in

2020-09-21 14:16:31 3646

原创 leetcode-350 哈希表以及双指针

本题来自链接: https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/.题解参考官方解答。1.哈希表unordered_map是c++ 哈希表的实现模板哈希表的性质:一个key值对应一个value,不允许key有重复;最适合的求解问题是查找与定值相等的记录;可在常数时间通过key值,找到value1.1判断某个键值是否存在find函数,iterator find(const key_type&amp

2020-09-09 17:11:17 158

原创 leetcode-69-x的平方根 牛顿迭代法

1.牛顿迭代法的原理:1.一元方程的牛顿迭代法:可参考力扣官方解链接: https://leetcode-cn.com/problems/sqrtx/solution/x-de-ping-fang-gen-by-leetcode-solution/.迭代公式为:使用场景:函数可导,求函数零点2.重根时的牛顿迭代改善使用场景:有重根时3.离散牛顿使用割线法:使用场景:函数不可导2.使用牛顿迭代法求解此题迭代公式即代码为:class Solution {public: in

2020-09-09 10:48:09 250 2

原创 SLAM 前端匹配 NDT算法

NDT(Normal Distance Transform)是基于优化的算法,用高斯分布代替势场。1.基本思想把空间用cell划分,这里的cell不同于栅格地图的栅格(一般为0.05cm),这里的cell是较大范围的格子。用高斯分布代替势场,在每个cell里形成天然连续分布(不需要插值)的势场,每个cell之间是间断的,这个势场也是隐式的,只需要知道均值和方差在得到连续的势场之后,直接用牛顿法迭代即可,无需高斯-牛顿法,因为其H简单易求势场连续,不受离散化的影响(离散化的激光点多次扫描一个墙壁,

2020-07-30 11:18:24 1271

原创 SLAM 前端匹配算法 IMLS-ICP

实际点云中隐藏着真实的曲面,如果能把这个曲面重构出来,然后选用代表性高的激光点(曲率、法向量过滤)与曲面进行匹配,则匹配精度会非常好,这就是IMLS ICP。1.基本思想IMLS(implict )可以分为两步,一是选取激光点,二是重构曲面。选取激光点:选取具有代表性的激光点进行匹配,与NICP类似,采用曲率、法向量来对激光点进行过滤,最好的激光点是结构化的点,也就是曲率最小的点。既能减少计算量,又能避免激光点云数据分布不均匀导致计算结果出现偏移曲面:隐藏在点云中的曲面,不需要用表达式来求解曲面

2020-07-29 18:25:20 1588

原创 SLAM 前端匹配算法 NICP

ICP算法利用点云之间距离构建误差函数,PL-ICP利用点到线的距离构建误差函数,可以总结为都是利用欧式距离来进行匹配,而获得的数据中还包括法向量及曲率数据。实际上,以在点云匹配前,可以使用法向量和曲率数预先淘汰一部分质量不高的畸点,达到提高精确度和匹配速度的目的,NICP就是这个原理。标题...

2020-07-29 16:18:12 1211 2

原创 Cartographer源码阅读09-fast CSM 分支定界法 扫描匹配

这部分代码就是实现的就是分支定界的扫描匹配算法,也就是回环检测最终调用的代码。对应谷歌的三篇论文之一:代码位于Cartographermapping\internal\2d\scan_matching\fast_correlative_scan_matcher_2d.h1.生成多分辨率地图PrecomputationGrid2DPrecomputationGrid2D::PrecomputationGrid2D( const Grid2D& grid, const CellLimits

2020-07-28 17:33:41 1564 1

原创 Cartographer源码阅读08 回环检测 计算约束

本篇文章,将就如何实现回环检测和计算约束来进行深一步的讨论。代码位于cartographer\mapping\internal\2d\pose_graph_2d.cc

2020-07-26 23:17:06 2842

原创 Cartographer源码阅读07-pose_graph 后端优化

前端优化告一段落,接下来我们对回环检测和后端优化的代码进行阅读。pose_graph实际是SPA的一个实现,拓展成了submaping版本,每一个节点都会和一个或者多个子图进行匹配.每一个匹配都会形成一个约束,进行优化的时候节点的位姿和子图的位姿会一起进行优化. 所有的约束都是子图和节点之间的约束.cartographer\mapping\internal\2d\pose_graph_2d.cc

2020-07-25 11:55:42 1270 1

原创 SLAM 前端匹配算法 PL-ICP

PL-ICP 实际就是point-to-line ICP,是点到线的ICP方法.相比于传统的ICP方法,即点到点的匹配方法,PL-ICP在算法方面实际上是对误差形式进行了改进,其他方面基本相同,但迭代速度以及匹配精度得到了很大的提升

2020-07-24 11:55:52 2525

原创 Cartographer源码阅读06-CSM-前端匹配 TSDF 似然域

CSM(相关性扫描匹配)是Cartographer实现帧间匹配的两个算法之一,简单来说是暴力搜索3层for(θ,x,y)循环,并且先搜索角度,来降低计算量。还介绍了似然域打分+TSDF打分方式

2020-07-23 17:57:15 2138 3

原创 Cartographer源码阅读05-imu_tracker - 前端匹配 一阶低通融合

imu_tracker想当于位姿解算器PoseExtrapolator 调用 imu_trakcer 来利用imu数据对角速度进行计算估计,并通过求解加速度来估计重力向量。

2020-07-23 12:46:54 1634 1

原创 Cartorgrapher源码阅读04- PoseExtrapolator-前端匹配-位姿外插器

接下来对前端匹配中的位姿外插器PoseExtrapolator进行解读,位姿外插器的主要作用是利用保存了一段时间的位姿计算角速度和线速度,并利用线速度和角速度进行位姿插值。也是前端匹配这一部分非常重要的一部分代码。代码位于Cartographer/mapping/ pose_extrapolator.cpp1.pose_extrapolator.h从该类开头的注释我们可以知道,利用ScanMatch持续一段时间输出的PoseObservation,来估计角速度和线速度,并利用求得的速度来求解机器人的位

2020-07-22 18:00:34 936

原创 Cartographer源码阅读03-local_trajectory_builder.cc(2)-前端匹配

在上一篇文章对local_trajectory_builder的部分代码进行了阅读,接下来,将对ScanMatch及InserttoSubmap进行代码的阅读。代码位于Cartographer/mapping/internal/2d/scan_matching/local_trajectory_builder_2d.cc在扫描匹配方面,Cartographer采用的是...

2020-07-22 14:11:48 635 1

原创 Cartographer源码阅读02-local_trajectory_builder.cc(1)-前端匹配

承接上文,本文我们进行local_trajectory_builder2d.cc的阅读,这部分代码主要是激光数据,IMU,里程计等数据加入函数的实现,这部分的功能是实现前端匹配.

2020-07-21 23:08:28 929 1

原创 Catorgrapher源码阅读01-global_trajectory_bulider.cc

代码从数据(传感器)的输入开始阅读,直到结果的输出,因此本系列从global_trajectory_builder,cc开始阅读,包括激光数据,IMU、里程计数据的输入。

2020-07-21 11:35:22 1590 3

cartographer slam- 三篇论文.zip

cartographer核心算法实现的三篇论文,在阅读代码的时侯作为参考:1.Real-Time Correlative Scan Matching 2.Real-Time Loop Closure in 2D LIDAR SLAM 3.Efficient Sparse Pose Adjustment for 2D mapping

2020-07-23

cartographer-master-19.zip

cartographer源码详细注释,19年源码,对代码均有详细的注释,方便阅读理解,cartographer是目前SLAM开源代码里最具有学习价值的

2020-07-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除