自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李想的博客

公众号:从零开始搭SLAM

  • 博客(93)
  • 资源 (5)
  • 收藏
  • 关注

原创 从零开始学定位 --- 文章索引

从零开始学定位 — 序章https://blog.csdn.net/tiancailx/article/details/125785641?spm=1001.2014.3001.5502

2022-07-14 16:15:18 1145

原创 激光SLAM之Cartographer源码解析视频课程

你是否正在看Cartographer的代码?是否觉得用了很久Cartographer建图, 但是不清楚具体代码实现, 不清楚具体算法?看了代码是否觉得Cartographer的代码晦涩难懂?是否觉得Cartorgapher的代码里有太多的C++11的新标准语法从而感觉看不明白?是否觉得Cartographer的代码里继承与类之间的跳转太过复杂, 又不明白设计这么复杂的继承关系与跳转关系的原因到底是什么?那么, Cartographer逐行源码解析视频课程 -《Cartographer从入门到精通:

2021-07-17 20:39:33 3042 16

原创 从零开始搭二维激光SLAM --- 文章索引

本节为索引页,无算法内容。1 从零开始搭二维激光SLAM — 序章https://blog.csdn.net/tiancailx/article/details/1097772762 从零开始搭二维激光SLAM — 前言https://blog.csdn.net/tiancailx/article/details/1099876303 从零开始搭二维激光SLAM — 写作计划https://blog.csdn.net/tiancailx/article/details/1100962634 从

2020-12-07 17:06:24 8220 3

原创 LIO-SAM探秘之文章索引

本节为索引页,无算法内容。1 LIO-SAM探秘第一章之论文解析 https://blog.csdn.net/tiancailx/article/details/1094834502 LIO-SAM探秘第二章之安装编译与参数配置 https://blog.csdn.net/tiancailx/article/details/1094871733 LIO-SAM探秘第三章之代码解析(一) — utility.h + imageProjection.cpp https://blog.csdn.net/

2020-11-11 16:13:09 1365 6

原创 kaist数据集国内下载百度云下载链接

好多同学在文章里评论,说找不到kaist数据集的国内下载链接。所以我将我已知的几个kaist数据集下载下来,并上传到了百度云中,将链接分享了出来。已知的一些kaist数据集的链接我都放在一个共享表格中了,地址为其中包含了kaist数据集的google云盘地址和百度云盘地址。

2023-06-08 09:35:09 1763 1

原创 Eigen中用于特征值分解的几个类的介绍

官方文档里有这几个函数的对比第二列是这些方法对矩阵的要求,第三列是计算的速度,第四列是算法的可靠性与准确性。BDCSVD和JacobiSVD是计算奇异值的,如果维度小于16, 可以直接用JacobiSVD。SelfAdjointEigenSolver是计算实对称矩阵或者复数下的自伴矩阵的特征值与特征向量的。ComplexEigenSolver是计算复数矩阵的特征值与特征向量的。EigenSolver是一般矩阵(非对称矩阵,复数矩阵)的特征值与特征向量。

2023-06-08 09:24:34 3157 1

原创 我的2048天创作纪念日

距离发布第一篇博客竟然已经2048天了。。。不知不觉都已经这么长时间了啊,真是岁月不饶人啊。

2023-05-08 15:54:10 865 3

原创 从零开始学定位 --- 使用kaist数据集进行LIO-SAM建图

这篇文章的代码其实早都写完了,但是一直没写文章。一方面是工作事情很多,下班也晚,一方面也是自己懒了。接下来的计划是通过这个不太完美的地图跑一下定位。先从odom与imu的融合开始。

2022-09-19 23:12:37 4574 9

原创 从零开始学定位 --- kaist数据集体验

现在数据集选定了,数据也可以通过ROS发布出来了,接下来先是进行建图,然后再开始搞多传感器融合定位。

2022-07-21 22:54:38 6465 16

原创 从零开始学定位 --- 序章

年初的时候写了今年的写作计划,但是一直没有写新文章。。。事情太多,然后自己也变懒了。这一段时间先后经历了找工作面试,去新公司,适应公司,回了一趟老家,搬家等等事情。生活中的事情不是所有的都会尽如人意,会让人烦恼,伤神。然后刚入职新公司也适应了一段时间,新工作事情非常多,干不完的活。年初的时候定了今年写作的3个方向,分别是以我目前的进度只能先搞一个方向了,其他2个方向之后再弄吧。选定的方向就是 从零开始做多传感器融合定位,名字很唬人,不知道实际的项目会做成什么样。新工作的方向就是定位,做这个开源项目可以让我对

2022-07-14 16:08:22 1230 6

原创 从零开始搭二维激光SLAM --- 总结

第一篇文章是2020年11月20号开始写的, 今天是2021年11月22号.正好一年的时间, 写完了这一个系列的文章和代码.本来是用不了这么久的, 今年4月底弄了讲cartographer代码的课, 由于cartographer的代码太多, 太复杂, 所以我只能将这系列文章的开源项目先放下. 就导致了系列文章一直拖到现在.截止21年11月22号, 从零开始搭二维激光SLAM系列一共更文25篇, github获星116个, 公众号粉丝2286人. 不算多丰富的成果.在写文章的过程中成长了很多, 也和很

2021-11-22 15:44:38 2195 4

原创 从零开始搭二维激光SLAM --- 基于gtsam的后端优化的代码实现

上一篇文章我们分析了如何使用ceres进行位姿图的优化.1 gtsam简介2 基于gtsam的后端优化的代码讲解3 运行3.1 依赖这篇文章的代码是需要依赖 4.0.2 版本的gtsam库, 如果没装gtsam的需要先安装一下.我将gtsam库的安装包放在了 工程Creating-2D-laser-slam-from-scratch/TrirdParty文件加内, 可以直接解压安装.安装的方法可以看一下 install_dependence.sh 脚本中的安装指令, 也可以直接执行这个脚本进行

2021-11-22 15:03:31 3575 2

原创 从零开始搭二维激光SLAM --- 基于ceres的后端优化的代码实现

1 ceres简介2 基于ceres的后端优化的代码讲解3 运行3.1 依赖这篇文章的代码是需要依赖3.2 运行本篇文章对应的数据包, 请在我的公众号中回复 lesson6 获得,并将launch中的bag_filename更改成您实际的目录名。我将之前使用过的数据包的链接都放在腾讯文档里了, 腾讯文档的地址如下:https://docs.qq.com/sheet/DVElRQVNlY0tHU01I?tab=BB08J2通过如下命令运行本篇文章对应的程序roslaunch lesson6

2021-11-16 15:54:18 2226

原创 从零开始搭二维激光SLAM --- 基于g2o的后端优化的代码实现

https://mp.weixin.qq.com/s?__biz=MzIxOTczOTM4NA==&mid=2247486858&idx=1&sn=ce458d5eb6b1ad11b065d71899e31a04&chksm=97d7e81da0a0610b1e3e12415b6de1501329920c3074ab5b48e759edbb33d264a73f1a9f9faf&scene=21#wechat_redirect

2021-11-15 13:44:28 2994 1

原创 从零开始搭二维激光SLAM --- Karto后端的位姿图相关的数据结构分析

从这篇文章开始, 学习如何使用g2o, ceres, gtsam三个优化库进行后端优化.在开始使用g2o进行优化的代码讲解之前, 先分析一下karto的后端的位姿图相关的数据结构.karto 在 Mapper.h 中定义了后端优化的接口 ScanSolver, 在实现自己的优化的代码时只有对这个接口进行继承并重写就可以了.ScanSolver的定义如下/** * Graph optimization algorithm */class ScanSolver{public:

2021-11-14 14:33:45 1603 2

原创 cartographer实时显示三维点云地图

cartographer不能实时显示三维点云地图, 这是大家公认的cartographer 3d建图的弊端.这篇文章就带着大家将cartographer三维地图显示出来.这部分的代码已经开源在https://github.com/xiangli0608/cartographer_detailed_comments_ws1 需要的数据既然想要显示三维点云地图, 就必须要有每帧数据的点云, 以及这帧点云经过后端优化后的坐标, 这2个数据.通过阅读代码可知, cartographer中前端是不保存点云

2021-09-14 10:57:23 2929 3

原创 carto笔记--- 传感器数据走向

node.cc 的数据走向有两个成员变量 const NodeOptions node_options_; tf2_ros::TransformBroadcaster tf_broadcaster_; absl::Mutex mutex_; std::unique_ptr<cartographer_ros::metrics::FamilyFactory> metrics_registry_; MapBuilderBridge map_builder_bridge_ GUA

2021-06-30 20:47:07 565 1

原创 ceres笔记

使用ceres的要点CostFunctionAutoDiffCostFunctiontemplate <typename CostFunctor, int kNumResiduals, // Number of residuals, or ceres::DYNAMIC. int... Ns> // Size of each parameter blockclass AutoDiffCostFunction : publicSizedCos

2021-06-06 18:07:31 3654

原创 从零开始搭二维激光SLAM --- Karto的后端优化与回环检测的实现解读

上篇通过实验对比分析了是否启用后端优化与是否启用回环检测时的建图效果,并对后端优化与回环检测的作用进行了理论分析.这篇文章将为大家解读一下后端优化以及回环检测是如何实现的.由于我之前已经写过一篇讲解karto后端优化代码的文章了,所以这篇文章只是简要说明一下后端优化的实现过程.更详细的代码解析可以去看我的这篇文章:karto探秘之open_karto 第四章 — 回环检测与后端优化:https://blog.csdn.net/tiancailx/article/details/105386965

2021-05-21 15:19:15 1555

原创 karto探秘之open_karto 第四章 --- 回环检测与后端优化

1 Mapper::Process() kt_bool Mapper::Process(LocalizedRangeScan* pScan) { // 省略... if (m_pUseScanMatching->GetValue()) { // add to graph m_pGraph->AddVertex(pScan); //边是具有约束关系的两个顶点,在 AddEdges中的操作有: 寻找可以

2021-05-21 10:23:31 2025

原创 从零开始搭二维激光SLAM --- Karto的后端优化与回环检测功能对比测试与分析

首先看一下只用前端时的室外建图效果,分辨率为0.05再看一下启用后端,但是不启用回环的结果放大一下看看约束的效果再看看启用后端优化与回环检测的结果放大一下看看约束的效果多了一条约束有没有,这就是回环约束,优化之后的图很整齐.最终的建图效果是这样的...

2021-04-26 16:10:26 2414 10

原创 从零开始搭二维激光SLAM --- Karto的前端实现与解读

原来的计划是从这篇文章开始自己搭一个新的SLAM框架的,结果由于水平不够,代码不知道从哪下手,不知道如何设计代码结构.后来就想着先把Karto拆解成比较独立的几个模块,像Cartographer那样,分别实现扫描匹配部分,建图部分.并新增使用imu与里程计的估计值,作为激光雷达扫描匹配的先验.但是由于Karto的代码耦合度实在是太高,拆解的工作量太大了,弄了一周也没啥进展,无奈只能放弃.所以学习SLAM还是得一步一步学习,不能好高骛远.搭一套SLAM不光要对算法实现,数学模型有深入理解,同时也要对代码

2021-04-15 15:04:52 3571

原创 数据集链接

群里有同学问雷达的数据集,正好我写文章公开了几个。之前都是在公众号后台回复关键字获取百度云链接,导致很多人不知道。同时,群里有同学说想要做个数据集分享平台,借着这个思路,我就将我的数据集放在腾讯文档里了.腾讯文档的地址如下:https://docs.qq.com/sheet/DVElRQVNlY0tHU01I?tab=BB08J2如果哪位同学想要公开自己的数据集,可以联系我,我加到腾讯文档中。文章将在 公众号: 从零开始搭SLAM 进行同步更新,欢迎大家关注,可以在公众号中添加我的微信,进激光

2021-03-23 14:25:07 2193

原创 从零开始搭二维激光SLAM ---使用IMU与轮速计进行单线激光雷达的运动畸变校正

之前的文章都是只使用二维激光雷达,本篇文章将介绍两种新的传感器,IMU以及轮速计.首先对这两种传感器进行简要介绍,之后对这两种传感器数据进行简单处理,最后实现 使用这两个传感器进行单线激光雷达的运动畸变校正 的功能.本文的代码的实现借鉴于LIO-SAM中的运动畸变校正部分.1 IMU与轮速计的简介1.1 IMU1.1.1 简介IMU全称Inertial Measurement Unit,惯性测量单元,主要用来检测和测量加速度与旋转运动的传感器。IMU一般包括3个功能,3轴加速度计:测量 x

2021-03-18 13:35:12 6584 21

原创 从零开始搭二维激光SLAM --- Hector论文公式推导与相关代码解析

2.7.1 getCompleteHessianDerivs()这个函数也位于 Creating-2D-laser-slam-from-scratch/lesson4/include/lesson4/hector_mapping/map/OccGridMapUtil.h 内. /** * 使用当前pose投影dataPoints到地图,计算出 H 矩阵 b列向量, 理论部分详见Hector论文: 《A Flexible and Scalable SLAM System with Full

2021-02-04 15:01:43 2650 6

原创 从零开始搭二维激光SLAM --- 简单重写 Hector SLAM

上篇文章讲解了如何在固定位置使用Hector构建单帧的栅格地图,以及知道了SLAM的本质就是将不同时刻的scan在正确的位置上写成栅格地图.本篇文章将对 Hector 进行简单的重写,使得其代码更简单,更清晰.这也是本系列教程第一次成功建出一张比较好的地图.先放图,虽然有些瑕疵,但是整体还是不错的.话不多说,先将代码做了那些改变,然后在着重讲解一下 Hector是如何用 高斯牛顿 就进行scan match的.1 代码实现1.1 获取代码代码已经提交在github上了,如果不知道github

2021-02-02 10:06:45 3056

原创 cartographer代码流程分析

之前做的一次分享,没啥用了,放出来看看能不能帮到谁。

2021-01-26 10:30:54 1205

原创 Hector代码笔记

1 入口hector_mapping/src/HectorMappingRos.cpp1.1 scanCallback()/** * 激光数据处理回调函数,将ros数据格式转换为算法中的格式,并转换成地图尺度,交由slamProcessor处理。 * 算法中所有的计算都是在地图尺度下进行。 ROS部分的内容根据实际需求添加删减 * @param scan 激光的数据ROS消息包 */void HectorMappingRos::scanCallback(const sensor_msgs

2021-01-22 17:59:25 1035 1

原创 从零开始搭二维激光SLAM --- 基于Hector的栅格地图的构建

上篇文章讲解了如何使用GMapping的建图方式进行单帧的地图构建.这篇文章依然进行单帧的地图构建,只不过这篇文章将使用 Hector 这个算法的建图的部分.1 Hector简介Hector是2011年开源的二维激光SLAM的项目,非常创新地使用scan-to-map的匹配方式.首先其论文提出了如何对离散的栅格地图求导,然后说明了如何使用 高斯牛顿法 进行 scan-to-map 的计算.并且使用了多分辨率地图使计算结果更加准确.hector的wiki主页为 http://wiki.ros.org/

2021-01-22 16:03:30 3505 2

原创 从零开始搭二维激光SLAM --- 基于GMapping的栅格地图的构建

上篇文章讲解了如何在ROS中发布栅格地图,以及如何向栅格地图赋值.这篇文章来讲讲如何将激光雷达的数据构建成栅格地图.雷达的数据点所在位置表示为占用,从雷达开始到这点之间的区域表示为空闲.本篇文章的代码实现是参考于 csdn博主白茶-清欢 注释简化之后的GMapping.其地址为 csdn 白茶-清欢: https://blog.csdn.net/zhao_ke_xue/article/details/1107023221 GMapping简介2 代码2.1 获取代码代码已经提交在github上

2021-01-05 21:26:49 6247 5

原创 从零开始搭二维激光SLAM --- 栅格地图的构建

上周搬家, 导致这篇文章更新的慢了点.之前的文章我们都是通过scan-to-scan的方式进行位姿变换的计算. 接下来的文章将带领大家体验scan-to-map的计算位姿变换的方式.首先, 来简要介绍一下什么是map.1 地图与占用栅格地图1.1 人眼中的地图地图对于大部分人来说, 第一时间想到的应该是高德地图中的地图, 是一副平面的或者立体的, 能够标识出从一个地点到另一个地点的可通行路径.地图对于人来说其实提供了2个方面的功能, 第一个就是提供一个可通行路径, 还有一个其实是定位.当你下了

2021-01-03 16:38:25 6824 5

原创 从零开始搭二维激光SLAM --- 基于PL-ICP的激光雷达里程计

:err: : before trimming, only 0 correspondences.:err: icp: ICP failed for some reason. [ WARN] [1608712072.514938783, 1606455702.002871441]: not Converged:err: : before trimming, only 0 correspondences.:err: icp: ICP failed for some reason. [ WA...

2020-12-24 12:53:18 5504 49

原创 零基础如何入门激光SLAM

杂谈最近有几个人加我,都说是刚开始学激光slam,基本都是研一,情况也都差不多,有的是课题组里只有自己做slam,有的是完全没人带,自己也没有基础.仔细想一想,其实入门slam真是个不容易的事.首先,编程语言,大多数使用c++,少数用python,c++你得至少能写个小demo吧.知道了如何写c++,还要准备编译环境吧,由于编译以及依赖等问题,做slam基本都用linux,还得知道如何使用ubuntu的命令行,知道怎么编译代码.关于机器人相关的大部分代码都使用ros做接口,因为接口统一,使用方式统

2020-12-21 13:58:54 17364 30

原创 从零开始搭二维激光SLAM --- 基于PL-ICP的帧间匹配

上一篇文章将了如何使用PCL中的ICP算法进行相邻帧间的坐标变换,ICP的计算时间以及精度都不太好.这篇文章我使用一种ICP的改进算法PL-ICP算法来计算相邻帧间的坐标变换.1 PL-ICPPL-ICP(Point to Line ICP) 使用点到线距离最小的方式进行ICP的计算,收敛速度快很多,同时精度也更高一些.具体的pl-icp的介绍请看其论文,作者也开源了pl-icp的代码,作者将实现pl-icp的代码命名为csm( Canonical Scan Matcher).论文与代码的详情请看

2020-12-18 16:31:41 4790 50

原创 tf2常用数据类型与常用函数汇总

本篇文章将对tf2的一些常用函数及类进行记录,以方便以后使用.tf2的wiki教程为 http://wiki.ros.org/tf2/Tutorialstf2的源码地址为 https://github.com/ros/geometry2geometry2包里有几个文件夹,分别为 tf2 | tf2_bullet | tf2_eigen | tf2_geometry_msgs | tf2_kdl | tf2_msgs | tf2_py | tf2_ros | tf2_sensor_msgs | tf2_

2020-12-17 15:17:58 5772 2

原创 从零开始搭二维激光SLAM --- 基于ICP的帧间匹配

上一篇文章讲解了如何将激光雷达的sensor_msgs/LaserScan格式转换成pcl::PointCloud< pcl::PointXYZ>格式, 本篇文章将要讲解如何使用这个格式调用ICP算法进行相邻2帧雷达数据间坐标变换的计算.1 ICP算法迭代最近点(Iterative Closest Point, 下简称ICP)算法是一种点云匹配算法。其求解思路为:首先对于一幅点云中的每个点,在另一幅点云中计算匹配点(最近点)极小化匹配点间的匹配误差,计算位姿然后将计算的位姿作用于点

2020-12-11 13:56:08 4821 16

原创 从零开始搭二维激光SLAM --- 使用PCL进行雷达的消息类型转换

接下来的几篇文章,我将带大家使用PCL的ICP算法搭建出一个最简单的激光里程计.介绍如何在ROS中使用PCL.#ifndef LESSON2_SCAN_TO_POINTCLOUD2_CONVERTER_H#define LESSON2_SCAN_TO_POINTCLOUD2_CONVERTER_H// ros#include <ros/ros.h>#include <sensor_msgs/LaserScan.h>// pcl_ros#include <

2020-12-08 10:57:28 4049 18

原创 perception_pcl理解 --- pcl_conversions 与 pcl_ros

本篇文章记录了下 pcl_conversions 包中 include/pcl_conversions/pcl_conversions.h 文件里常用的一下数据类型转换的函数。其wiki上的链接为:http://wiki.ros.org/pcl_conversions?distro=noetic将其下载下来,看代码,发现,这个文件里有3个命名空间,分别是 pcl_conversions, pcl, 与ros。其中常用的数据类型转换的函数在前两个命名空间中。1 PCL的时间戳 与 ros的时间戳 间的

2020-12-07 13:37:47 5689

原创 从零开始搭二维激光SLAM --- 使用单线雷达实现LIO-SAM中的特征点提取

我们这篇文章将对LIO-SAM中特征点提取的部分进行二维激光雷达下的实现.LIO-SAM的项目地址为: https://github.com/TixiaoShan/LIO-SAMLIO-SAM的特征点提取部分与LOAM基本相同,只不过在算曲率值时的具体计算方式稍有不同.1 特征点提取后的效果我们首先看一下激光原始数据的样子,如下图所示:接下来,再看一下经过我们进行特征点提取之后的数据点的样子,如下图所示:可以看到,经过特征点提取之后的数据点呈现出不太直观的样子,但是分布还是停均匀的.接下来

2020-12-03 10:20:37 6239 27

原创 从零开始搭二维激光SLAM --- 了解雷达数据

终于到了写代码的阶段了,哈哈。上一篇文章我们通过实验知道了雷达数据的各种性质,但是雷达数据在代码里是如何体现的呢?本篇文章将通过新建一个ros的包来学习一下如何遍历雷达数据,以及如何对雷达数据进行处理。首先说明一下我使用的代码环境:Ubuntu版本: 16.04.01ROS: kinetic 版本编程语言: C++IDE推荐: 目前我使用的是 VS code,其如何配置会在之后的文章中讲解1 ros中激光雷达数据的消息格式通过在终端中输入如下命令可以打印处ros中激光雷达数据的消息格式r

2020-11-28 15:51:31 6233 25

cartographer_install_2021-04-20.zip

2021年04月20日在github上下载的最新的代码,包含了相应版本的abseil-cpp,protobuf,ceres-solver,cartographer,以及cartographer_ros,以及一个自动安装脚本,可以通过脚本实现一键编译安装到系统中.

2021-04-23

LIO-SAM代码阅读详细注释版

LIO-SAM代码阅读详细注释版,2020年11月1日下载版本。目前还有部分没懂,以后再更新,博客里有相应的文章,文章里的注释和这里是一样的,不能保证能够运行,有可能写注释的时候不小心改了代码。

2020-11-16

cartographer_ws.tar.gz

cartographer的2019年5月28日的安装代码,包含了proto,cartographer,cartographer_ros以及ceres1.13.0版本,要从proto编译那步进行编译。具体的步骤请参照官方文档。

2019-06-03

基于move_base的循环导航程序

基于move_base的能够循环导航的完成程序包。已经配置好Cmakelists.txt等文件。用法见我的博客。

2019-01-23

基于粒子滤波的相关论文

在内的7本GMAPPING相关的论文

2017-11-21

空空如也

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

TA关注的人

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