![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
激光SLAM
文章平均质量分 81
晓晨的博客
这个作者很懒,什么都没留下…
展开
-
FAST-LIO2论文阅读
之前写的一个关于FAST-LIO论文阅读的总结,可以参考FAST-LIO2是港大MaRS实验室在FAST-LIO框架的基础上进行了修改而成,集成了他们课题组的几个工作,形成了一个非常优秀且极具代表性的框架。系统的整体框架如下,与FAST-LIO相同仍然使用了一个紧耦合迭代扩展卡尔曼滤波(红色框内)。不同的地方主要在于1)直接使用输入的激光雷达原始点进行配准,去除了特征提取模块;2)增加一个ikd-tree的数据结构,能够快速的查询、增删,提高效率。原创 2023-06-04 15:40:53 · 1491 阅读 · 0 评论 -
Hesai激光雷达使用PTP时间同步
PTP是一个网络同步时钟的协议,全称是Precise Time Protocol,也称为IEEE 1588,其有IEEE1588v1和IEEE1588v2两个版本(其中v1版本是为工业自动化测量和控制系统开发的,适用于工业局域网应用。v2版本是在v1版本的基础上,专门针对通信网改进的,我们使用的是IEEE1588v2版本)。当硬件支持时,PTP 精度能达到亚微秒,在外界第三方PTP Master接入时连接方式如图 2中所示。原创 2023-06-03 15:22:09 · 2629 阅读 · 0 评论 -
FAST-LIO论文阅读
FAST-LIO是港大MaRS实验室在2021年提出的一个紧耦合迭代扩展卡尔曼滤波高计算效率、高鲁棒性的雷达里程计。影响深远,后续又陆续提出了FAST-LIO2以及Faster-LIO等框架。下面,我们简单了解一些论文中的各个模块及其处理流程。原创 2023-05-28 15:48:40 · 3217 阅读 · 2 评论 -
多激光雷达手眼标定
如上图中所示,存在一个世界坐标系G,点PPP在世界坐标系中的坐标为PGP_GPG。在t1t_1t1时刻,激光雷达A与激光雷达B分别观测到点PPPPA1P_{A1}PA1PB1P_{B1}PB1。在t2t_2t2时刻,激光雷达A与激光雷达B分别观测到点PPPPA2P_{A2}PA2PB2P_{B2}PB2。在t1t_1t1时刻,激光雷达A与激光雷达B分别到全局坐标系GGG。原创 2023-05-20 11:08:35 · 890 阅读 · 0 评论 -
Ouster激光雷达使用PTP时间同步
IEEE1588(the Precision Time Protocol 简称为 PTP )全称是“网络测量和控制系统的精密时钟同步协议标准”,可以使用ubuntu中的网卡作为时间的master也可以外接一个精准的时钟,来实现传感器的时间同步。本篇博客主要介绍单独使用一个NUC连接Ouster OS1-128激光雷达来实现PTP时间同步。原创 2023-05-12 21:29:08 · 1391 阅读 · 0 评论 -
LIO-SAM-自采数据运行踩坑
Ouster-128激光雷达数据Ouster内部IMU(六轴100Hz)/ Xsens MTi 3(九轴100Hz)/ Xsens MTi-G-700(九轴400Hz)手持平台,正常行走速度,相对于无人车来说晃动较大室内、室外均进行了测试LIO-SAM预积分部分还是比较敏感的,针对无人车平台,行驶速度较慢,平台稳定,晃动幅度小,IMU频率可以设置的较低一些。原创 2023-05-09 23:42:04 · 2074 阅读 · 1 评论 -
点云配准方法原理(NDT、ICP)
配准是点云处理中的一个基础问题,众多学者此问题进行了广泛而深入的研究,也出现了一系列优秀成熟的算法,在三维建模、自动驾驶等领域发挥着重要的作用。本文主要介绍粗配准NDT (Normal Distribution Transform) 与 精配准ICP (Iterative Closest Point)两种经典算法。原创 2023-02-19 17:48:11 · 2550 阅读 · 0 评论 -
自定义Ouster(OS1-128)点云类型
我们在使用ROS接收Ouster点云数据的对应topic,处理其点云数据时,如果仅使用PCL库中定义的PointXYZ或者PointXYZI等类型,会导致丢失一些非常有用的信息。如每个点的线号(ring),在当前帧中的对应时间等。中的xyz,intensity,t,reflectivity,ring,ambient,range等一系列属性信息了。因此有必要根据驱动自定义对应的点类型,方便我们使用更全的点云信息。PCL中自定义点云类型。之后,我们就可以使用。原创 2023-02-05 15:29:54 · 506 阅读 · 0 评论 -
LIO-SAM代码逐行解读(5)-点云匹配及后端优化模块
我们在前述的博客中介绍了LIO-SAM的一些准备工作、点云预处理、特征点提取、IMU预积分等内容。之后,我们来到了最核心也是最重要的一部分工作,把(3)中提取的特征点进行匹配,获取激光里程计,并添加回环检测因子、GPS因子等进行后端优化。详细参考:LIO-SAM代码逐行解读(1)-准备工作LIO-SAM代码逐行解读(2)-点云预处理LIO-SAM代码逐行解读(3)-特征点提取LIO-SAM代码逐行解读(4)-IMU预积分LIO-SAM回环检测模块代码解析自定义数据结构,存储激光雷达位姿6D p原创 2022-12-31 11:27:38 · 2260 阅读 · 7 评论 -
LIO-SAM代码逐行解读(4)-IMU预积分
我们在前述的博客中介绍了LIO-SAM的一些准备工作、点云预处理、特征点提取等内容。之后,整理为cloud_info消息类型进行发布,包括其中的面片点、角点两种类型的特征点。接着,本篇博客中将重点介绍IMU预积分的相关处理,与前部分的内容相对独立一些。其发布的IMU里程计数据主要用于后续匹配的初值、点云去除运动畸变(实际未使用)等方面。原创 2022-12-30 23:46:46 · 1369 阅读 · 0 评论 -
LIO-SAM代码逐行解读(3)-特征点提取
我们在前述的博客中介绍了LIO-SAM的一些准备工作、点云预处理等内容。之后,整理为cloud_info消息类型进行发布,以供后续特征点提取进行使用。接下来,我们进行后续的工作,根据点的平滑度来进行特征点提取,包括面片点与角点。这一部分还是比较简单明了的,总体来说就是先计算平滑度,接着根据平滑度的值排序,选取其中的面片点与角点。原创 2022-12-30 22:28:21 · 1323 阅读 · 0 评论 -
LIO-SAM代码逐行解读(2)-点云预处理
我们在上一篇博客中介绍了LIO-SAM的一些准备工作,包括用于读取各种参数的ParamServer类,以及自定义的ROS消息类型cloud_info。本篇博客中,我们主要讨论接收点云后投影到一个平面上,为后续的特征提取做准备的相关内容,称之为“点云预处理”部分。原创 2022-12-30 15:11:01 · 985 阅读 · 0 评论 -
LIO-SAM代码逐行解读(1)-准备工作
针对Shan Tixiao开源的经典LIO框架LIO-SAM源代码进行逐行解读,总结。记录在这里希望能够给大家提供一些参考。这里是第一部分,主要是开始的一些准备工作,包括 utility.h文件,cloud_info.msg文件等。原创 2022-12-30 14:16:19 · 918 阅读 · 0 评论 -
G2O (General Graph Optimization)入门及简单使用
g2o全称是General Graph Optimization,也就是图优化,我们在做SLAM后端或者更加常见的任何优化问题(曲线拟合)都可以使用G2O进行处理。原创 2022-10-30 11:10:42 · 7048 阅读 · 0 评论 -
KD-Tree的构建及检索
我们在点云处理中经常使用构建KD-Tree数据结构,接着用于高效查询近邻点。经常直接调用PCL函数过于简单,在这里我们对KD-Tree的构建及检索原理进行讨论。最后,介绍一下在PCL中KD-Tree的基本使用方法。原创 2022-10-17 22:25:43 · 1677 阅读 · 0 评论 -
LIO-SAM回环检测模块代码解析
前端里程计是一个不断递推相邻帧位姿的过程,其必定存在累计漂移。为了解决这一问题,回环检测并进行后端优化是一个重要的环节。下面以典型激光SLAM框架LIO-SAM为例进行解析,学习其进行回环检测的策略。原创 2022-10-17 11:59:24 · 1573 阅读 · 0 评论 -
Cartographer配置与安装
cartographer_ros实战安装原创 2022-02-06 22:55:27 · 6453 阅读 · 0 评论 -
Cartographer 3D 建图实战-(基于禾赛32线雷达和Xsens MTi-G-710 组合导航模块,松灵Scout mini 底盘实际进行实验)
组内大佬师兄今天抽出时间总结了一篇博客,主要内容是:把“Cartographer 3D 建图”调整为适合自己设备需要修改哪些文件,并进行实验。博客内容全是干货,手把手教学修改URDF文件中的TF树、lua文件参数、以及Launch文件,可以帮助大家少踩很多坑。在这里推荐给大家:基于禾赛32线雷达和Xsens MTi-G-710 组合导航模块,松灵Scout mini 底盘实现 Cartographer 3D 建图过程欢迎大家点赞、关注。...原创 2022-01-22 22:34:10 · 1893 阅读 · 0 评论 -
Anaconda 与 ROS 冲突解决
Anaconda默认使用Python 3 而 ROS默认使用Python2,若同时使用二者则会在调用一些ros包时出现冲突。目前解决方案是先在.bashrc文件中注释掉Anaconda:# export PATH=/usr/bin/anaconda/bin:$PATHTypically I have found that ROS will interfere with an installation of anaconda on Ubuntu (or vice versa).The way to r原创 2021-11-20 11:47:29 · 2289 阅读 · 0 评论 -
最优化方法(最速下降、牛顿法、高斯牛顿法、LM算法)
前言最优化方法应用广泛,但在实现原理上大同小异。作者在学习高翔博士的视觉SLAM十四讲的过程中对其第六章非线性最小二乘求解所涉及到的最优化方法(梯度下降、牛顿法、高斯牛顿法、LM算法)进行了简要总结如下:梯度下降(最速下降法/一阶导数法)...原创 2021-11-02 16:01:18 · 4973 阅读 · 2 评论 -
Kitti360数据下载(无需科学上网)
Kitti数据集比较全面,包含了各种类型数据,为我们提供了较好的公开数据源。但是由于一些网络的限制,我们有时候在下载过程中会出现一些错误,作者在下载Kitti 360数据时一直提示是链接失败,参考知乎一个回答给出的建议是:(Ubuntu 18.04系统环境下)1.打开终端,输入下述命令,对hosts进行编辑(如果没有安装vscode这个软件,可以在根目录/etc文件夹路径下找到本机的host文件,然后使用gedit等编辑器进行编辑)code -n /etc/hosts2.接着,在host文件中添加原创 2021-10-30 15:45:16 · 2647 阅读 · 3 评论 -
RANSAC算法理解
RANSAC(RAndom SAmple Consensus,随机采样一致)算法在很多方面如图像匹配、曲线/平面拟合取得了良好的应用。这里以笔记的形式对其进行一个简要的介绍总结。RANSAC算法的一个基本的假设是:一组数据由“内点”(inliers)和“外点”(outliers)组成,其中“内点”就是组成模型参数的数据,而“外点”就是不适合模型的数据。RANSAC算法的目标就是在一组含有少量“内点”,大量“外点”的数据中,估计出一个符合“内点”数据的模型。RANSAC算法基本思想假设存在一原创 2021-10-29 10:58:08 · 1171 阅读 · 0 评论 -
扩展卡尔曼滤波理解
目录前言线性化存在问题其他改进方法前言我们在博客卡尔曼滤波详细推导中以匀速行驶的小车以及引入加速度之后的非匀速行驶小车为例,介绍了卡尔曼滤波的推导过程,总结了五条公式用于卡尔曼滤波过程中的预测和更新,并讨论了卡尔曼增益KKK在其中的作用。但是,我们实际生活中所遇到的问题并不一定都能够通过一个简单的线性模型进行描述,而更多的是非线性模型。那么此时如果我们还是想通过卡尔曼滤波算法来优化估算状态量该怎么做呢?这就引入了扩展卡尔曼滤波。扩展卡尔曼滤波能够应用于非线性高斯系统线性化现在我们考虑另外一个原创 2021-10-27 21:59:40 · 2397 阅读 · 0 评论 -
卡尔曼滤波详细推导
虽然卡尔曼滤波作为一种经典的算法在多源数据融合、slam后端优化等很多方面都取得了较好的应用,但是我们经常都会有一个疑问,卡尔曼滤波到底是什么呢?简要的说:“卡尔曼滤波是一种优化估算算法”其可以适用于线性高斯系统,如果我们考虑非线性系统则可以考虑扩展卡尔曼滤波其可以解决两个问题:状态如何在无法被直接测量的情况下,进行估算系统的状态。如何在数据源存在噪声的情况下,通过卡尔曼滤波估计系统的状态。(比如说惯导、轮式里程计、GNSS三种传感器数据均存在误差,且频率不一,如何融合三种数据源进行精确的估原创 2021-10-26 23:11:13 · 523 阅读 · 0 评论 -
LeGO-LOAM算法详解
LeGO-LOAM算法详解整体框架LeGO-LOAM算法的总体框架如下图所示:图中新增加了绿框中的Segmentation环节,同时对后续的特征提取、Odometry以及Mapping部分均有一定的修改,主要包括:增加Segmentation操作,把点云投影为距离图像,分离出地面点与非地面点(分割点,segmented point)。平滑度计算公式不同,原始LOAM中为使用点集中的坐标相减,而LeGO-LOAM中为使用点集中的欧式距离作差。特征点选取中原始LOAM为按照平滑度的值及已有特征点原创 2021-08-16 11:56:01 · 15245 阅读 · 0 评论 -
Loam算法详解(配合开源代码aloam)
参考论文:LOAM: Lidar Odometry and Mapping in Real-time代码:A-LOAMUbuntu 18.04 + ROS Melodic + eigen 3.3.4 + PCL 1.8.1 + ceres 2.0 + A-LOAM 配置LOAM算法是激光slam中一个经典的开源框架,结合qin tong 博士的开源代码a-loam,对其原理及代码实现简要介绍如下:LOAM算法的总体框架如下图所示:除了左侧的硬件采集数据之外,LOAM算法本身主要包括图中标记的-原创 2021-08-07 21:14:49 · 11190 阅读 · 2 评论 -
四元数与三维旋转
四元数与三维旋转V⊥的旋转V||的旋转V的旋转旋转四元数的分解在之前学习了:复数与二维旋转三维旋转四元数的定义与性质之后,我们再继续探究一下“四元数与三维旋转”之间的联系。我们之前说过“轴角式”三维旋转方式为:将一个向量V 沿着一个用单位向量所定义的旋转轴u 旋转θ 度,那么我们可以通过把向量V分为V⊥与V||的两个分量,然后可以通过对这两个分量分别进行旋转,获得旋转之后的V’⊥与V’||,将它们相加就是旋转后的向量V’。我们把之前所涉及到的向量定义为下述所示的纯四元数:那么我们就能够得原创 2021-07-23 23:00:44 · 769 阅读 · 0 评论 -
四元数的定义与性质
四元数定义及性质模长(范数)四元数加减法四元数标量乘法四元数乘法Graßmann 积四元数的定义和复数非常类似,唯一的区别就是四元数一共有三个虚部,而复数只有一个。所有的四元数q∈H(H代表四元数的发现者William Rowan Hamilton)都可以写成下面这种形式:上面这个看似简单的公式就决定了四元数的一切性质。与复数类似,四元数其实就是对于基{1,i,j,k}的线性组合,四元数也可以写成向量的形式。此外,我们在表示四元数时,还经常把实部与虚部分开,用一个实数s表示实部,用一个三维向量来原创 2021-07-23 17:05:18 · 5338 阅读 · 1 评论 -
三维旋转详细解读(Rodrigues‘ Roatation Formula 罗德里格旋转公式)
三维旋转引言三维旋转1)欧拉角2)轴角式旋转分解1)V||的旋转2)V⊥的旋转3)V的整体旋转引言前面我们了解了 复数在二维旋转中的作用与联系而四元数与三维旋转之间的关系与复数对二维旋转有很多类似的地方,下面我们就先来详细了解一下三维旋转的过程。三维旋转首先讨论一下三维旋转,我们了解到常用的三维旋转有两种方式:1)欧拉角即按照一定的顺序,分别对X, Y, Z三个轴进行旋转 θ 角。绕各旋转轴的旋转矩阵为:然后任意的三维旋转可以分解成上述三种旋转方式的组合。(注意:三个旋转的顺序是非常重要的原创 2021-07-23 15:39:44 · 9415 阅读 · 2 评论 -
复数与二维旋转
复数与二维旋转复数如下图中所示,定义一个复平面,存在一个复数Z,其中横坐标Re代表复数Z的实部,纵坐标Im代表虚部。可以得出复数 Z 其实就是对基底 {1, i} 的线性组合,且可以写成向量形式,如下所示:定义与性质首先,假设存在两个复数Z1和Z2,分别为:加减法对应分量直接相加减。乘法对于两个复数的乘法,我们可以直接使用乘法分配率进行计算。同时,进行一个定义,即 i^2 = -1 ,这会使上式进一步化简为下式中的形式:同时,观察上式,进一步写成矩阵与向量相乘的形式:原创 2021-07-22 22:19:53 · 2178 阅读 · 5 评论 -
二维坐标系空间变换(详细解读,附MATLAB代码)
二维坐标系空间变换假如存在任意两个二维坐标系,如下图所示:目的:将xoy坐标系经过处理变换到XOY坐标系。经过分析可知:对于二维平面上的变换需要 x y 方向上两个平移参数dx,dy,以及一个绕着垂直于xy平面的旋转参数θ,此外,还存在一个缩放尺度因子m(可选)。求解出以上四个参数就能够实现任意两个二维坐标系之间的相互转换,转换公式如下。下面分两种方法求解以上四个参数:1 直接法前提:已知两对公共点分别在两个坐标系下的坐标,如上图中待转换坐标系中的o,p 和在参考坐标系中的O,P。求解过原创 2021-07-17 11:55:43 · 8025 阅读 · 24 评论 -
A-LOAM配置过程
A-LOAM配置过程工作环境:Ubuntu 18.04 + ROS Melodic + eigen 3.3.4 + PCL 1.8.1 + ceres 2.0安装 ceres(参考链接)1)下载:git clone https://ceres-solver.googlesource.com/ceres-solver2)依赖项准备:# 确保已经安装CMakesudo apt-get install cmake# 安装google-glog + gflags,应该是输出代码提示消息的一个goo原创 2021-07-11 15:12:41 · 2172 阅读 · 14 评论