
激光slam
和道一文字_
自动驾驶
展开
-
差速轮式里程计的内外参标定
运动模型如下图所示:内参标定原理:https://www.guyuehome.com/36440总结:(1)这里直接将激光雷达匹配得到的里程计信息作为底盘odom的观测量,忽略了两者之间的外参,当进行旋转时,可能会出现误差...在录制数据时旋转运动尽量一次做一整圈,可能会好些;(2)对于激光帧间位置变换和odom对齐,做的有些粗糙,应该在端点处对微小差异做一个插补.外参标定:https://www.guyuehome.com/36165这篇文章方法直接默认了odom和激光原创 2022-04-14 17:01:58 · 1627 阅读 · 0 评论 -
slam优化eigen,ceres,g2o,gtsam,pcl
eigen:SLAM本质剖析-Eigen - 古月居ceres:https://guyuehome.com/34633g2o:SLAM本质剖析-G2O - 古月居gtsam:SLAM本质剖析-GTSAM - 古月居pcl:https://www.guyuehome.com/35383原创 2022-04-12 11:35:39 · 834 阅读 · 0 评论 -
使用g2o进行图优化
G2O(General Graphic Optimization)是一个用来优化非线性误差函数的c++开源库.安装过程参考官网即可.1 g2o框架由以下5个部分构成:(1)SparseOptimizer是整个图的核心,找到它向上走,它是一个Optimizable Graph 也就是一个超图HyperGraph,所以在使用时需要添加顶点和边.(2)顶点(HyperGraph::Vertex)和边(HyperGraph::Edge),顶点继承自 Base Vertex,边可以继承自B.原创 2022-04-12 09:33:40 · 1348 阅读 · 0 评论 -
nlopt优化库,使用汇总
介绍:https://www.guyuehome.com/35109c++库使用规范:https://www.guyuehome.com/35169官网:https://nlopt.readthedocs.io/en/latest/NLopt_Algorithms/lidar_align--校准激光雷达和imu校准程序中使用nlopt:https://blog.csdn.net/qq_32761549/article/details/120044319?spm=1001.2014原创 2022-03-22 16:14:20 · 783 阅读 · 0 评论 -
点云匹配算法NDT公式推导过程说明,总结
NDT的具体原理和步骤:https://blog.csdn.net/qq_35102059/article/details/121694705?spm=1001.2014.3001.5501误差函数的构建:将点云Y投影到点云X坐标系下,迭代计算最大重合概论。优化过程及注意事项:1.计算点云x的均值和方差,根据预测(可以使imu给的等)的位姿将Y投影到X,再对数化,将问题转化为求目标函数的最小值。2.下图为借助泰勒展开,化简最小化问题,需要注意的是R,t和p均表示位姿转换。3.原创 2022-03-08 22:18:39 · 1902 阅读 · 1 评论 -
激光slam框架:S-LOAM
摘要:本文描述了一种基于语义分割和激光雷达里程计和映射的树直径估计的端到端管道。 由于地面和树木被树叶、荆棘和藤蔓包围,因此对此类环境进行精确映射具有挑战性,而且传感器通常会经历极端运动。 我们提出了一种基于语义特征的姿态优化,在估计机器人姿态的同时优化树模型。 该管道利用自定义虚拟现实工具来标记用于训练语义分割网络的 3D 扫描。 掩蔽点云用于计算网格图,该网格图识别单个实例并提取 SLAM 模块使用的相关特征。 我们表明,传统的基于激光雷达和图像的方法在无人驾驶飞行器 (UAV) 和手持系统的森林环原创 2022-02-11 15:21:36 · 731 阅读 · 0 评论 -
slam回环检测方法总结:词袋模型BoW
介绍:Bag-of-words model (BoW model) 最早出现在自然语言处理(Natural Language Processing)和信息检索(Information Retrieval)领域.。该模型忽略掉文本的语法和语序等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立的。BoW使用一组无序的单词(words)来表达一段文字或一个文档.。近年来,BoW模型被广泛应用于计算机视觉中。步骤:1.特征提取;2.构建字典(所有单词的集合);3.确定一.原创 2022-02-10 16:13:09 · 1573 阅读 · 0 评论 -
Eigen实现四元数、欧拉角、旋转矩阵、旋转向量之间的相互转换
https://mp.weixin.qq.com/s/rLvCs0ou47-nU-FGew6Kww调库实现.原创 2022-02-10 09:22:33 · 441 阅读 · 0 评论 -
lego-loam加入imu数据建图,使用自己的数据集建图
配置lego-loam教程:激光雷达与imu的外参标定教程:lego-loam默认可以没有imu信息,但有imu建图效果会更好配置跑通lego-loam后,进行外参标定,得到标定结果.开始修改程序参数:确认utility.h文件中imu的话题名称是否正确:extern const string imuTopic = "/imu/data";[点击并拖拽以移动]featureAssociation.cpp中修改外参(大约193行):...原创 2022-01-24 17:59:26 · 6579 阅读 · 8 评论 -
使用自己的激光雷达/数据集运行lego_loam,修改代码教程
1 安装gtsam1.1 安装环境sudo apt-get install libboost-all-devsudo apt-get install cmake1.2 下载gtsamcd ~git clone https://bitbucket.org/gtborg/gtsam.git1.3 编译cd ~/gtsammkdir buildcd buildcmake ..make check #可选的,运行单元测试sudo make install2 下载原创 2022-01-24 17:36:08 · 4729 阅读 · 5 评论 -
lego-loam建图时保存pcd点云地图,并查看
在lego-loam执行的过程中,建立的点云地图以topic的形式发布出来.原创 2022-01-24 17:12:02 · 8512 阅读 · 22 评论 -
标定激光雷达与IMU的外参,使用lidar_align,报错记录
苏黎世联邦理工大学开源标定工具1 安装非线性优化库nloptsudo apt-get install libnlopt-dev2 编译打开终端mkdir -p calibration_ws/srccd calibration_ws/src/git clone https://github.com/ethz-asl/lidar_align.gitcd ..catkin_makecatkin_make后报错...原创 2022-01-19 17:58:05 · 4738 阅读 · 13 评论 -
解决lego-loam运行bag包时无数据的问题
问题:下载编译lego-loam代码。运行run.launch后,再播放自己的bag包,发现无输出数据原因:录制bag包时的topic时间与系统时间(如tf)有差别,播放时,系统找不到对应时间的topic,缓冲队列一满,就默认把topic全都丢弃了,导致了lego-loam无输入topic,也就无输出数据。解决办法:改将run.launch文件中的/use_sim_time为true,这代表指定让程序使用模拟时间,而不是实际的 wall-clock time。<param n原创 2022-01-12 22:34:15 · 1933 阅读 · 0 评论 -
slam中线和面特征的参数化表示方法
1 线特征的参数化表示:1.1 Plucker坐标系表示法普吕克坐标系使用两个向量表示直线为:其中:n为直线的方向向量,模长为1。d为线与原点组成的平面的法线。可以用原点到线上一点的向量与n叉乘得出。d与n的模的比值为原点到直线的距离。1.2 正交表示法使用Plucker坐标系表示在优化时不方便进行数据处理,所以要将其形式转化一下。Plucker坐标系表示:可以写成一个3×2的矩阵,对矩阵做QR分解得到:分解得到的第一项是正交矩阵U ,是一个旋转矩原创 2022-01-11 22:07:05 · 2193 阅读 · 0 评论 -
tagslam框架:LiDARTag和AprilTags,只使用特定标签的雷达/相机
1 雷达通过设置特定的反光板,识别反光强度,相机通过识别二维码也可以结合起来(如下图)。确定每一个标签的世界坐标,可以建立一个特征地图。2 通过检测出来的标签,解算其在雷达/相机坐标系下的位姿。3 通过预先设置好的标签信息,读取标签的世界坐标系以及一些其它信息(例如执行任务所需的信息)4 通过2和3的计算,即世界坐标到局部坐标的转换,就能得出机器人的当前位姿,甚至 还可以对里程计进行修正。原创 2021-12-08 11:51:38 · 1381 阅读 · 0 评论 -
经典激光slam配准及回环检测框架:ScanContext
总结:这篇文章介绍的是如何用激光点云做场景识别、定位或回环检测。步骤:(1)对一帧点云数据,以雷达坐标系为原点,划分20个环,每个环分为60等份。即1200个格子。将其再展开为一个矩形图像,20行60列。(2)遍历点云的每个点,对坐标进行计算,投影到其所在的栅格坐标(即栅格的行列),并记录下这个栅格中点云的高度(z值)最大值。形成一个带高度的俯视图,或者地形图,记为scan context。(3)对每一行和每一列分别求平均数,得到两个向量。一个20*1的,记录的是每一行的平均值,记为rin原创 2021-12-05 00:33:42 · 2693 阅读 · 1 评论 -
经典点云配准算法:正态分布变换算法NDT(Normal Distributions Transform)
简介:正态分布变换算法,又名为 NDT(Normal Distributions Transform)算法。该算法是一个一次性初始化的工作。和 ICP 算法相比,NDT 算法的配准效果同 ICP算法相似,其改进实质等同于将 ICP 算法栅格化,是另一种传统的点云配准算法。该算法实质是通过计算点云与点云之间的姿态转换,来确定最优匹配。而判断点云与点云之间是否为最优匹配的方法是基于标准最优化技术。NDT 算法一般过程如下: 已知有两幅点云,分别为源点云 P 和目标点云 Q。 (1)将源点云原创 2021-12-03 11:24:04 · 4391 阅读 · 0 评论 -
直线特征提取算法:IEPF(iterative end point fit)
一种用于直线特征提取的递归算法 。IEPF效率高,被广泛应用于图像处理算法中。但在处理点云数据时,由于噪声点的存在,阀值的确定是一件比较困难的事情。原创 2021-12-01 11:37:54 · 2830 阅读 · 0 评论 -
经典点云配准算法:迭代最近点算法ICP(Iterative Closest Point)
迭代最近点算法,又名为 ICP(Iterative Closest Point)算法。(1)ICP算法对初始值的依赖比较大,具体的配准过程中,如何选择初始值是一个问题,可以使用轮式里程计、imu预积分或其它先验的配准结果。(2)ICP迭代次数过多,实际工程中需要考虑到其实时性的优化问题。(3)迭代终止的阀值的设置也是需要考虑的点,可以考虑自适应阀值的方法。(4)关于寻找最近点可以使用kdtree进行临近搜索。原创 2021-12-03 11:17:14 · 10609 阅读 · 3 评论 -
SLAM框架:MULLS中主成分分析文件pca.hpp代码原理解析
核心功能就是针对每一个点,使用kdtree找临近点,对该点进行pca(主成分分析),最后根据pca结果判断点的所属特征。原创 2021-11-27 15:06:44 · 1964 阅读 · 0 评论 -
SLAM框架:MULLS中cfilter.hpp文件的分类部分代码原理解析
将下采样的非地面点分为几种类型(柱、梁、立面、屋顶、顶点)原创 2021-11-24 16:46:00 · 1068 阅读 · 0 评论 -
SLAM框架:MULLS中的预处理文件cprocessing.hpp代码原理解析
对SLAM框架MULLS的预处理文件cprocessing.hpp的注释解析,包含了:投影滤除地面,随机采样平面分割,凸包顶点检测,利用kdtree临近搜索提取角点原创 2021-11-24 16:18:14 · 1958 阅读 · 0 评论 -
pcl欧式聚类原理,源码解析pcl::EuclideanClusterExtraction
欧式聚类的代码如下:// 创建用于提取搜索方法的kdtree树对象pcl::search::Search<PointT>::Ptr tree = boost::shared_ptr<pcl::search::Search<PointT> > (new pcl::search::KdTree<PointT>);//创建一个指向kd树搜索对象的共享指针//被分割出来的点云团(标号队列)std::vector<pcl::PointIndices&原创 2021-11-05 16:52:41 · 3211 阅读 · 0 评论