
slam
文章平均质量分 71
Philtell
长风破浪会有时,直挂云帆济沧海
展开
-
优达学城,基于激光的卡尔曼滤波器的C++实现。
【代码】优达学城,基于激光的卡尔曼滤波器的C++实现。原创 2022-10-03 22:55:57 · 543 阅读 · 0 评论 -
二维卡尔曼滤波python实现
卡尔曼滤波实现原创 2022-10-02 16:41:10 · 1020 阅读 · 0 评论 -
相机内参,外参的物理意义
原创 2022-03-30 11:06:47 · 820 阅读 · 0 评论 -
LeGO-LOAM分析之建图(三)
接着上一章的分析,特征提取和特征匹配2步完成了lidar里程计的输出。接着看建图过程的分析。整体介绍LeGO-LOAM把当前帧扫描到的点云特征 {Fet,FptF_e^t,F_p^tFet,Fpt},这里FetF_e^tFet表示包含线特征的点云, FptF_p^tFpt 表示包含面特征的点云,和当前帧周围的点云地图 Q−t−1Q^{-t-1}Q−t−1 做匹配,进一步优化姿势变换。并且这个过程以一个较低的频率运行。LeGO-LOAM和LOAM的区别在于,LeGO-LOAM保存的是每帧的特征点转载 2021-09-21 20:55:36 · 1011 阅读 · 0 评论 -
LeGO-LOAM分析之特征提取(二)
转载地址:https://zhuanlan.zhihu.com/p/384902839接着上一章的分析,LeGO-LOAM进行点云分割之后,接着会对分割后的点云进行特征提取,下面我们首先回顾下点云分割的过程,然后开始分析特征提取。点云分割LeGO-LOAM首先进行地面分割,找到地面之后,对地面之上的点进行聚类。聚类的算法如下图,主要是根据斜率对物体做切割,最后得到地面和分割后的点云。上述步骤的关键是要理解如何进行地面分割和点云分割。特征提取点云分割完成之后,接下来对分割后的点云提取特征,提取的特转载 2021-09-21 20:42:10 · 2310 阅读 · 0 评论 -
cartographer 源码解析(六)
相关链接:cartographer 源码解析(一)cartographer 源码解析(二)cartographer 源码解析(三)cartographer 源码解析(四)cartographer 源码解析(五)原创 2021-09-17 16:39:15 · 2208 阅读 · 3 评论 -
lego loam 代码阅读
前言LEGO LOAM这篇文章发在18年的IROS上,因为其代码开源以及对设备性能要求低等优点,到现在依然用的比较多。论文里面主要是和LOAM对比,其相比LOAM具有以下三个特点,轻量级,能在嵌入式设备上实时运行。地面优化,在点云处理部分加入了分割模块,这样做能够去除地面点的干扰,只在聚类的目标中提取特征。两步L-M优化法估计6个维度的里程计位姿,匹配方式还是Scan2Scan。在UGV运动的场景中,由于地形的变化采集到的数据经常是畸变比较大的,并且UGV自身性能有限,难以负担过大的计算,在一原创 2021-08-31 20:11:22 · 410 阅读 · 0 评论 -
激光的前端配准算法
帧间匹配算法其中我们所说的帧间匹配,并不仅仅是相邻两帧的点云进行匹配,也有可能是前几帧和后一帧去匹配。这就是所谓的map to scan。常用的算法有1. ICP算法2. PL-ICP算法3. 基于优化的方法 Hector-SLAM Cartographer4. 相关匹配方法及其分枝定界加速 CSM...原创 2021-08-26 15:26:19 · 238 阅读 · 0 评论 -
cartographer 源码解析 (五)
相关链接:cartographer 源码解析(一)cartographer 源码解析(二)cartographer 源码解析(三)cartographer 源码解析(四)cartographer 源码解析(五)因为第四节用文字表达起来有些难以直观的去理解,所以我录制了讲解的视频:https://www.bilibili.com/video/BV1go4y1D792本章节主要讲的内容是对外推器的数据进行激光矫正。...原创 2021-08-21 21:12:25 · 1533 阅读 · 0 评论 -
cartographer 源码解析 (四)
这一章主要内容是多激光的数据同步首先看一下global_trajectory_builder.cc里面的添加传感器数据AddSensorData()废话不多数,上代码void AddSensorData( const std::string& sensor_id, const sensor::TimedPointCloudData& timed_point_cloud_data) override { CHECK(local_trajectory_bui原创 2021-07-27 22:00:56 · 1368 阅读 · 0 评论 -
cartographer 源码解析 (三)
今天讲一下数据格式转化具体的过程,首先以激光数据为例子,看一下在node.cc里面的激光的回调函数。node.ccvoid Node::HandleLaserScanMessage(const int trajectory_id, const std::string& sensor_id, const sensor_msgs::LaserScan::ConstP原创 2021-07-23 09:45:09 · 1662 阅读 · 0 评论 -
Ubuntu18.04 安装liblas库
参考链接:https://liblas.org/compilation.html#get-the-source-code下载libLAS 源码 地址:https://liblas.org/download.html#download解压之后,进入cd libLAS-1.8.1mkdir makefilescd makefilescmake -G "Unix Makefiles" ../lasinfo ../test/data/TO_core_last_clip.lassudo make原创 2021-07-21 22:42:14 · 1821 阅读 · 0 评论 -
python GPS采集的路径
采集的数据gps_data.txt39.864802 110.04882339.864808 110.04882639.864817 110.04883039.864828 110.04883639.864837 110.04884039.864846 110.04884439.864853 110.04884739.864862 110.04885239.864874 110.04885739.864883 110.04886139.864892 110.04原创 2021-07-20 10:36:37 · 796 阅读 · 0 评论 -
伯恩大学博士:语义激光SLAM
原创 2021-07-19 20:27:54 · 266 阅读 · 0 评论 -
cartographer 源码解析(二)
上一次讲了建立数据处理流水线,等待数据处理:链接现在开始从订阅器的回调函数入手,跟着数据跟踪它的流向,我们举一个例子,二维激光数据的例子吧。原创 2021-07-18 19:46:39 · 1503 阅读 · 1 评论 -
cartographer 源码解析(一)
cartographer算法是google大佬2016年写的开源SLAM算法,其主要是以2D定位为主。我们首先从cartographer_ros这个源码开始对其进行原创 2021-07-15 22:28:56 · 5714 阅读 · 4 评论 -
SLAM框架详细解读
通常的slam框架是这样的先有一个传感器数据的输入,然后是视觉里程计,也成为前端。然后是后端就是优化位姿。最后是见图。其中还涉及到回环检测。再看下一个流程图ORB-SLAM流程图中间多个线程同时运行。视觉里程计,根据图像定量的估算帧间相机的运动,通过特征点进行特征匹配,跟踪。然后确定他在三维空间中的位置。后端优化就是通过优化位姿来减少漂移。建图 有2D的3D的稠密的,稀疏的。回环检测 认识自己曾经去过的地方,消除累计误差。...原创 2021-07-14 22:06:20 · 1292 阅读 · 0 评论 -
波恩大学Cyrill Stachniss SLAM课程
Introduction to SLAMSimultaneous Localization and MappingGraph-based SLAM using pose graphsGraph-based SLAM with landmarksRobust optimization in SLAMRelative pose estimation using visionWhat is SLAM同时定位映射问题,我们将引入最小二乘,首先,这是我们用来进行状态估计的主要技术。然后我们研究一种2D原创 2021-04-13 20:29:27 · 579 阅读 · 0 评论 -
激光的前端配准算法
激光的前端配准算法1、ICP 匹配算法2、PL-ICP匹配算法基于优化的匹配方法相关匹配方法及分支定界加速在SLAM形成回环之前,是一个LO算法。视觉可以通过特征描述符feature descriptor来判断两副图像是否是同一副图像,但是对激光来说没什么太大的区别。框太大,计算量大,可区分性低,形成错误的回环。基本上来说,前端配准越好,后面的效果也越好并不一定是前后两帧进行匹配,也有可能是前n帧形成的submap跟当前n+1帧进行匹配,所以叫 map 2 scan。1、ICP 匹配算法2帧原创 2021-03-28 21:47:16 · 627 阅读 · 1 评论 -
传感器数据处理(二):激光雷达运动畸变去除
传感器数据处理二,激光雷达运动畸变去除1、激光雷达传感器介绍测距原理2、激光雷达数学模型介绍3、运动畸变介绍1、畸变去除 纯估计方法2、里程计辅助方法概念介绍1、激光雷达传感器介绍测距原理三角测距飞行时间法 TOF time of flight2、激光雷达数学模型介绍3、运动畸变介绍畸变去除1、畸变去除 纯估计方法2、里程计辅助方法...原创 2021-03-20 21:27:00 · 500 阅读 · 0 评论 -
传感器数据处理I:里程计运动模型及标定
主要介绍两部分内容一部分是里程计模型另一部分是里程计标定这里写目录标题一、里程计模型1.1、两轮差分底盘的运动学模型1.2、三轮全向底盘的运动学模型1.3、航迹推算(Dead Reckoning)二、里程计标定2.1、2.2、2.3、一、里程计模型1.1、两轮差分底盘的运动学模型欠驱动模型,自由度是三个,输入的是两个,一个左轮一个右轮速度,会造成他的运动是耦合的。不能进行分解,差分只能做一种运动,就是圆弧运动,直线是R趋于无穷。1.2、三轮全向底盘的运动学模型1.3、航迹推算(D原创 2021-03-15 14:48:27 · 1213 阅读 · 0 评论 -
再谈激光SLAM
激光SLAM1. 激光的分类和特点1.1 特点优点缺点二级目录三级目录1. 激光的分类和特点1.1 特点优点可以直接获得深度信息不受环境光照影响,比较稳定缺点稀疏性几何信息区分度小2D 激光点少,大概几千个点。3D 激光信息量多,跟图像有很多类似性,但是激光的稀疏性明显,上下和左右相差比较大。左右可是是零点几度,上下就是64根线,或者128根线,所以提取特征不能像图像那样提取,还有一个顺序性,比如40帧数据,从左到右或者从右到左都是等实的。二级目录三级目录...原创 2021-03-07 17:38:32 · 554 阅读 · 0 评论 -
基于滤波的激光SLAM方法(Grid-based)
这里写自定义目录标题前言1、贝叶斯滤波1.1、数学概念2、粒子滤波3、FastSLAM的原理及优化4、Gmapping的介绍前言第一个SLAM系统,基于滤波器的SLAM方法当前来说已经落后,滤波就是只记录当前时刻状态,前面的时刻一旦出现错误就无法修正,在激光里面,效果不会特别好,但是他在发展过程中,是必不可少的一环。,尤其是粒子滤波,贝叶斯估计。一般来说有两种地图,一种是feature-based 视觉常用,激光的话就是栅格地图(2d)1、贝叶斯滤波状态估计,大部分是贝叶斯滤波。1.1、数学概念原创 2021-03-01 12:37:42 · 1697 阅读 · 3 评论 -
激光SLAM的发展和应用
激光SLAM简介1.SLAM是什么1.1 SLAM的定义1.1.1 Localiztion: 在给定地图的情况下,估计机器人的位姿1.1.2 Mapping: 在给定机器人位姿的情况下,估计环境地图1.1.3 SLAM:同时估计机器人的位姿和环境地图1.2 SLAM解决的问题1.2.1 机器人在环境中的位姿1.2.2 导航过程中需要的环境地图2.SLAM的分类3.SLAM的框架激光SLAM1.SLAM是什么1.1 SLAM的定义1.1.1 Localiztion: 在给定地图的情况下,估计机器人的位姿原创 2021-02-20 17:39:08 · 1151 阅读 · 0 评论 -
slam十四讲之特征提取feature_extraction
#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/features2d/features2d.hpp>#include <opencv2/highgui/highgui.hpp>using namespace std;using namespace cv;int main ( int argc, char** argv ){ if ( argc !原创 2020-12-08 13:14:41 · 544 阅读 · 0 评论 -
OpenCV(3.4.7) !_src.empty() in function ‘cvtColor‘
运行的时候遇到的错误是这个what(): OpenCV(3.4.7) /home/philtell/Downloads/opencv-3.4.7/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cvtColor’分析问题,这个是imread没有正确加载图片,你可以检查一下输入图片的路径对不对。...原创 2020-12-07 13:59:06 · 1346 阅读 · 0 评论 -
安装opencv遇到问题
-- Checking for modules 'gstreamer-base-1.0;gstreamer-video-1.0;gstreamer-app-1.0;gstreamer-riff-1.0;gstreamer-pbutils-1.0'-- No package 'gstreamer-base-1.0' found-- No package 'gstreamer-video-1.0' found-- No package 'gstreamer-app-1.0' found--原创 2020-12-06 21:12:21 · 926 阅读 · 0 评论 -
KDevelop 添加OpenCV出错。
出现的错误如图所示。/usr/local/include/opencv2/core/mat.inl.hpp:886: undefined reference to `cv::Mat::deallocate()'CMakeFiles/destest.dir/feature_extraction.cpp.o: In function `cv::Mat::~Mat()':/usr/local/include/opencv2/core/mat.inl.hpp:774: undefined reference原创 2020-12-06 20:44:53 · 742 阅读 · 0 评论 -
视觉SLAM十四讲之对极几何笔记
相机成像过程p=KPp = KPp=KPp是图像的像素点坐标,K是相机的内参矩阵,P是相机坐标系下的三维坐标。先来说 三个坐标系,分别是世界坐标系,相机坐标系,和图像坐标系。世界坐标系下的点是三维点,相机坐标系和图像坐标系都是二维点。内参矩阵就是关于焦距和x,y坐标的偏移矩阵,其中,fx,fyf_x,f_yfx,fy的由来如下所示:其中,u,v是像素坐标。...原创 2020-12-03 15:59:30 · 391 阅读 · 0 评论 -
《视觉SLAM14讲》之非线性优化
原创 2020-12-01 14:39:08 · 307 阅读 · 0 评论 -
李群和李代数以及线性变换相关笔记
参考链接:https://www.bilibili.com/video/BV1ys411472E?p=5Lie’s Group is Group, 既是一个群,又是流形。群有两种运算#mermaid-svg-jUu8POTTs0or0Bli .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-jUu8POT原创 2020-11-25 20:12:09 · 1114 阅读 · 0 评论 -
《视觉14讲》Eigen库的调用实例。
useEigen#include <iostream>using namespace std;#include <ctime>// Eigen 部分#include <Eigen/Core>// 稠密矩阵的代数运算(逆,特征值等)#include <Eigen/Dense>#define MATRIX_SIZE 50/***************************** 本程序演示了 Eigen 基本类型的使用*********原创 2020-11-24 14:33:14 · 485 阅读 · 0 评论 -
深度学习SLAM 综述部分翻译
我们提供了一种与定位和建图相关的现有的深度学习方法的新分类法,来连接机器人技术,计算机视觉和机器学习领域。大致可以分为按里程计估算,建图,全局定位和SLAM为类别进行分类,如图2展示的分类方法所示。里程计估计涉及到两帧或者更多帧传感器数据以平移和旋转的方式来计算相关位姿的变化。他不断的跟踪自我运动,通过对相对于初始状态的这些位姿的变化进行积分的程序,根据位置和方向获得全局的位姿。这就是众所周知的所谓的航迹推算法。里程计估计可用来提供位姿信息,并辅助机器人控制的反馈回路。关键在于不同传感器测量中准确的估计运翻译 2020-11-08 00:16:34 · 385 阅读 · 0 评论