- 博客(38)
- 收藏
- 关注
原创 视觉SLAM面试题汇总(二)
本节目录如下:29、3D地图点是怎么存储的?表达方式? 以ORB SLAM2为例,3D地图点是以类的形式存储的,在类里面除了存储3D地图点的空间坐标; 同时还存储了3D点对应的(多个)图像点的描述子(其实就是BRIEF描述子),用来快速进行与特征点的匹配; 同时还用一个map存储了与其有观测关系的关键帧以及其在关键帧中的Index等等。class MapPoint{ // ... protected: // Positio...
2021-07-26 20:19:26 832
原创 my_gmapping_slam来龙去脉(一)
参考博客:1、https://zhuanlan.zhihu.com/p/59748042 通俗地解释粒子滤波器2、https://blog.csdn.net/zhao_ke_xue/article/details/110702322图解SLAM3、https://blog.csdn.net/zhao_ke_xue/article/details/108944811不可错过的gmapping算法使用与详细解释4、...
2021-07-26 19:34:23 301
原创 视觉SLAM面试题汇总(三)
北京某自动驾驶公司:1. 点云的聚类;求法向量;多个点集,求点集的法向量;2. LM算法里面lamda的作用;3. KD-Tree4. 描述子距离的匹配的方法?除了暴力匹配还有什么方法?(提示:点对匹配的集中方式:暴力匹配;FLANN匹配;使用词袋模型进行初步筛选的匹配;重投影的匹配)5. ORB-SLAM中特征匹配6. 四叉树特征点均匀化原理7. 对于非二进制的描述子,如sift描述子,是如何计算出他们之间的距离的?8. 哈希表9. ORB-SLAM2的整体流程..
2021-07-15 16:48:13 4356
原创 视觉SLAM面试题汇总(一)
1、室内SLAM与自动驾驶SLAM有什么区别?这是个开放题,参考无人驾驶技术与SLAM的契合点在哪里,有什么理由能够让SLAM成为无人驾驶的关键技术?都属于SLAM的问题范畴,但应用场景不同,技术上的侧重点也不同。 参考https://www.bilibili.com/video/BV17X4y1w7yL高翔老师《智行者SLAM专家高翔博士:室内无人车和室外无人车有什么区别》 室内更倾向于叫机器人,室内的特点一是面积比较小,二是没有什...
2021-07-15 10:54:55 1068
原创 VINS-Mono学习(五)——闭环优化4DoF
闭环优化是跟在闭环检测之后步骤。首先回顾闭环检测的过程: 1、pose_graph_node.cpp开启process闭环检测线程; 2、创建新的关键帧KeyFrame,new KeyFrame; 2.1 computeWindowBRIEFPoint,提取已有点的描述子 2.2 computeBRIEFPoint:提取新的Fast特征点和描述子 3、PoseGr...
2021-08-23 08:11:25 1304
原创 VINS-Mono学习(三)——基于滑动窗口的VIO紧耦合后端非线性优化
初始化后,采用基于滑动窗口的紧耦合单目VIO进行状态估计。首先来看VINS-Mono后端的整体思路:大道至简,思路比较简单,但是实现相当复杂。回顾BA三要素:误差项、优化变量、协方差。简单说,VINS-Mono的误差来源于三部分,分别是来源于视觉的重投影误差,来源于IMU预积分的IMU误差(PVBQ的运动误差)以及来源于滑动窗口维护的边缘化操作带来的先验误差。 BA优化模型分为三部分: 1、M...
2021-08-18 15:54:44 982
转载 语义SLAM综述
1、摘要 SLAM技术在计算机视觉和机器人领域中占有重要低位。传统的SLAM框架采用了较强的静态世界假设,便于分析。大多基于小区域静态环境。在大规模的动态环境下,它们大多难以获得较好的性能,系统的准确性、快速性仍需加强。如何应对动态环境是一个非常重要而又备受关注的问题。现有的面向动态场景的SLAM系统要么只利用语义信息,要么只利用几何信息,要么以松散耦合的方式天真地组合它们的结果。近年来,一些研究集中在语义信息与视觉SLAM的结合上。2、当前现状...
2021-08-15 18:54:10 2974
原创 VINS知识点汇总
0、总体框架 包括5个部分:数据预处理、初始化、后端非线性优化、闭环检测、位姿图优化。图片来自大佬博客:https://blog.csdn.net/try_again_later/article/details/104854698VINS原框架:图解VINS框架:闭环检测拆解:1、数据预处理 1、视觉 1)提取Harris角点,KLT金字塔光流跟踪相邻帧; ...
2021-08-13 23:52:06 4676
转载 解方程AX=b与矩阵分解:奇异值分解(SVD分解) 特征值分解 QR分解 三角分解 LLT分解
本文转自大佬博客:https://blog.csdn.net/Hansry/article/details/1041746511. 前言本博客主要介绍在SLAM问题中常常出现的一些线性代数相关的知识,很早就想整理一下了,刚好看到Manii 的博客对矩阵分解的方法进行了总结,以方便求解线性方程组AX=B。在基于《计算机视觉—算法与应用》附录A 的内容 ,重点介绍了各种分解的适用情况、分解的特点。1.1 为什么要进行矩阵分解?1、矩阵分解可以在...
2021-08-12 21:46:33 3109
转载 my_gmapping_slam来龙去脉(二)
本节主要记录如何使用urdf和xacro编写小车模型。1、使用urdf编写自己的ros小车模型1.1 常见的ROS小车结构有哪些?下面就是常见ROS小车,下面是几种小车的样子:这里对urdf进行简单介绍,然后使用urdf最基础的标签,建立机器人的urdf机器人模型。关于更多细节,请参考官网:http://wiki.ros.org/urdf/Tutorials1.2 什么是urdf?建模的原因1.2.1 ...
2021-08-11 11:09:31 394
转载 my_gmapping_slam来龙去脉(三)
本文转自深蓝学院《理解ROS Navigation Stack》https://www.bilibili.com/read/cv125913910、前言ROS Navigation Stack是ROS提供的一个二维的导航功能包集合,通过输入里程计、传感器信息和目标位姿,输出控制机器人到达目标状态的安全速度指令。ROS Navigation Stack为移动机器人的导航规划提供了比较好的参考,通过实现功能包集合提供的接口,也可以比较容易地将自己的算法应用到移动机器人上。本文...
2021-08-11 08:34:45 418
原创 G2O 图优化基础与示例汇总
本文针对经常遇到的g2o示例进行汇总,试图总结g2o的常用编程套路和最小化残差模型的建模套路。参考博客:1、https://zhaoxuhui.top/blog/2018/04/10/g2o&bundle_adjustment.html#2g2o%E5%BA%93%E7%AE%80%E4%BB%8B%E4%B8%8E%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85G2O图优化基础和S...
2021-08-05 19:50:04 1337
原创 SLAM前端知识汇总
1、常用特征点汇总1.1 Fast特征点 《SLAM14讲》中LK光流中用的特征点就是Fast特征点,然后对这些特征点进行光流追踪。在8.3.2节的LK光流代码,第1帧提取的就是Fast特征点,注意代码的写法:if ( 0 == index ){ // “只”对第一帧提取FAST特征点 vector<cv::KeyPoint> kps; cv::Ptr<cv::FastFeatureDetector> dete...
2021-08-04 15:24:05 1082
原创 VINS-Mono学习(二)——松耦合初始化
初始化:如何当好一个红娘?图解SfM视觉和IMU的羁绊怎么知道发生了闭环?位姿图优化与滑窗优化都为哪般?闭环优化:拉扯橡皮条1、初始化:如何当好一个红娘2、图解SfM 初始化代码在estimator.cpp文件的processImage()函数中,具体在第三个步骤中完成VIO的初始化,代码如下:// Step 3: VIO初始化if( ESTIMATE_EXTRINSIC != 2 && (he...
2021-08-01 21:47:20 1652 1
原创 VINS-Mono后端知识点汇总
processImage:每帧都干了什么谁是Featureanager:维护路标点与图像后端干了啥:详解因子图(视觉的因子图、IMU的因子图、因子图和Hessian矩阵的关系)optimization:优化了谁?(参与到优化的约束有IMU的约束、重投影的约束、边缘化约束(先验约束))IMU约束、重投影约束:谁长什么样?麻烦的边缘化0、后端预处理后端node拿到imu和图像后,做了两件事情:IMU预积分:processIMU() 将图像往后端优化:processIma..
2021-07-31 14:25:15 858 1
原创 《SLAM14讲》后端知识汇总及非线性优化
1、介绍一些你熟悉的非线性优化库 非线性优化库一般有ceres和g2o两种,我比较熟悉的是g2o,看下g2o的结构:它表示了g2o中的类结构。 首先根据前面的代码经验可以发现,我们最终使用的optimizer是一个SparseOptimizer对象,因此我们要维护的就是它(对它进行各种操作)。 一个SparseOptimizer是一个可优化图(OptimizableGraph),也是一个超图(HyperGraph)。而图中有很多顶点(Vertex)和边(Ed...
2021-07-29 23:13:26 422
原创 ROS面试题汇总
1、ROS中订阅(Subscribe)最新消息以及消息队列相关问题机器人应用中难免会遇到运算起来很费时间的操作,比如图像的特征提取、点云的匹配等等。有时候,不可避免地,我们需要在ROS的Subscriber的Callback回调函数中进行这些费时的操作。Subscriber所订阅的消息的发布频率可能是很高的,而这些操作的运算速度肯定达不到消息发布的速度。所以,如果我们要是没有取舍的对于每个消息都调用一次回调函数,那么势必会导致计算越来越不实时,很有可能当下在处理的还是几十秒以...
2021-07-28 16:19:34 11543
转载 两种点云地面去除方法
本文参考自大佬博客:1.https://adamshan.blog.csdn.net/article/details/82901295《无人驾驶汽车系统入门(二十四)——激光雷达的地面-非地面分割和pcl_ros实践》2.https://adamshan.blog.csdn.net/article/details/84569000《无人驾驶汽车系统入门(二十七)——基于地面平面拟合的激光雷达地面分割方法和ROS实现》1、基于角度分割的地面、非地面分割...
2021-07-28 11:28:07 15617 3
转载 三角化相关总结
本文转自大佬博客https://blog.csdn.net/weixin_44580210/article/details/90679847《多视图几何总结——三角形法》。 在《视觉SLAM14讲》中,三角测量那一节简单介绍了如何通过两帧中匹配的点获得空间点深度,这对单目相机的成像是非常重要的,其证明如下,设,分别为两帧中匹配好的特征点的归一化坐标,然后满足:我们已经知道变换矩阵R和t,然后上面方程左乘一个就可以求得,如下:很简单的,文中也...
2021-07-27 23:25:27 1971
原创 点云基本操作汇总
本节目录如下: 激光SLAM里程计方案有以下几种方式: 其中基于栅格和基于匹配的方法有所了解,基于栅格的方法可以看gmapping的相关博客,这里介绍基于直接匹配ICP和NDT的方案。激光点云的帧间匹配问题主要由两种方式实现,一种是ICP,另一种是更加常用的NDT(Normal Distributions Transform,正太分布变换)。1、ICP变换 ICP(Iterativ...
2021-07-27 22:05:54 1664
原创 VINS-Mono学习(四)——回环检测与重定位
目录1、闭环检测常用方法有哪些?2、ORB SLAM2中Loop Closing的具体实现流程是怎样的?3、VINS回环检测与重定位、四自由度位姿图优化3.1 第一部分:回环检测与重定位3.1.1 回环检测(只对关键帧)3.1.2 回环候选帧之间的特征匹配3.1.3 紧耦合重定位3.2 第二部分:全局位姿图优化3.3 代码解析3.3.1pose_graph_node.cpp3.3.2 process()函数3.3.3 pose_graph.h3.3....
2021-07-27 11:42:11 6887
原创 VINS-Mono学习(一)——数据预处理
本节目录如下:0、VINS常见面试题汇总0.1 说一下VINS-Mono的优缺点 (1)VINS-Mono的前端是采用提取关键点然后采用光流法追踪,因此对于弱纹理,关键点少的环境鲁棒性和精度差;(2)同样还是前端的问题,因为没有提取特征描述子,而是使用光流法进行追踪匹配,一旦画面模糊或者图像丢失,相机就会丢,而且没有重定位模块。 (3)在恒速运动下,会使得IMU有一个自由度不可观,因此会发生漂移。0.2 推导一下VI...
2021-07-26 19:36:38 3864
转载 ORB-SLAM2中关键知识点总结
目录1、ORB SLAM2的总体框架是怎样的?2、ORB SLAM2是怎样完成初始化的?3、ORB SLAM2是如何进行Tracking的?4、ORB SLAM2是如何选取关键帧的?5、ORB SLAM2中有哪些(非线性/后端)优化相关的操作?6、ORB SLAM2中有维护了哪些图?7、ORB SLAM2中是如何对地图点进行筛选的?8. ORB SLAM2中是如何对关键帧进行剔除的?9. ORB SLAM2中Loop Closing的具体实现流程是怎样的?10. ..
2021-07-26 19:32:19 3089 1
原创 my_gmapping_slam代码解析三
0、写在前面 gmapping的核心处理算法都在addscan函数调用的processscan()中,该函数对所有粒子都通过里程计运动模型,更新每一个粒子对象存储的地图坐标系下的激光雷达位姿。gmapping的函数调用关系如下图所示:我们按照顺序在processScan函数中出现的位置,进行代码解析:// △△△△△△ SLAM核心代码 △△△△△△bool GridSlamProc...
2021-07-20 23:11:47 1306
原创 my_slam_gmapping代码解析二——2D激光雷达畸变去除
1、激光雷达运动畸变说明 如果激光雷达的扫描帧率为5Hz,一帧数据的首尾时间差200ms,若机器人以0.5m/s的速度向x方向走,扫描前面的墙面,那么200ms后尾部的测量距离和首部的测量距离在x方向上相差10cm,如下图所示: 绿色箭头表示激光雷达旋转方向,黑色箭头表示激光雷达运动方向。显然,我们可以看出每个激光束的距离数据都是在不同位姿下采集而来,如橙色、灰色、蓝色点位姿所示;然而,一般激光雷达驱动封装数据时,却默认一帧激光雷达数据的所有激光束是...
2021-07-19 23:47:41 1379
原创 gmapping坐标系转换和基本数据结构
1、gmapping坐标系转换1.1 mapmap坐标系是一个世界固定坐标系,其Z轴指向上方。相对于map坐标系的移动平台的姿态,不应该随时间显著移动。map坐标系作为长期的全局参考是很有用的,但是跳变使得对于本地传感和执行器来说,其实是一个不好的参考坐标。使用Gmapping建图时,建图起始点被设为map的原点(如下图)1.2 base_link机器人本体坐标系,与机器人中心重合,也有的成为base_footprint。...
2021-07-19 19:59:17 1724
原创 C++ STL相关知识汇总
1、STL 6 大部件1、STL数据结构:1、vector:底层数据结构为数组,支持快速随机访问2、list:底层数据结构为双向链表,支持快速增删3、deque:底层数据结构为中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问4、statck:底层一般用list或deque实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时5、queue:底层一般用list或deque实现,封闭头部即可,...
2021-07-19 11:23:22 541
原创 VINS-Mono 简单跑通
参考博客:1 https://zhuanlan.zhihu.com/p/1588244842 https://blog.csdn.net/u014527548/article/details/86503256?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task3 https://blog.csdn.net/qq_40114620/ar...
2021-07-19 10:31:57 1083
原创 RGB-D SLAM 相关总结
目录一、RGB-D SLAM是什么?二、D435i说明三、RGB-D SLAM研究现状1、现有的RGB-D SLAM方法1.1 前端1.2 后端1.3 闭环检测1.4 制图2、优秀RGB-D SLAM介绍2.1 KinectFusion2.2 ElasticFusion2.3 Kinitinuous2.4 RGB-D SLAM22.5 RTAB Map(RTAB SLAM)3、RGB-D SLAM难点 (见知乎:视觉SLAM难点以及可能的解决...
2021-07-18 21:19:37 5911
原创 RGB-D SLAM代码解析(二)
1、main函数主要流程 两张图:1.1 参数读取 先创建参数读取类ParameterReader,获取起始帧和结束帧,创建关键帧向量vector<FRAME>,中间的类是FRAME。 int main(int argc, char* *argv){ // 前面部分和vo是一样的 ParameterReader pd; int startIndex = atoi( pd.get...
2021-07-18 16:34:11 322
原创 RGB-D SLAM 代码解析(一)
目录1、数据结构解析1.1 类定义1.2 相机内参、帧结构、PnP结果3个结构体定义1.3 参数读取类1.4 函数接口定义2、函数调用流程解析1、数据结构解析 数据结构类CAMERA_INTRINSIC_PARAMETERS、FRAME、RESULT_OF_PNP、ParameterReader都在slambase.h文件中定义,我们首先进行slambase.h的解析。1.1 类定义 定义我们使用的点云中的点数据结构和点云数据结...
2021-07-18 14:44:18 1004 1
转载 gmapping粒子滤波先实践再推导
本节目录如下:1. 推导之前,先看实践整个推导过程其实是一个两头小中间大的过程,怎么说呢,就是从贝叶斯滤波开始,到最后Sampling Importance Resampling Filter(SIR)算法结束,中间推导过程其实主要就是应用了条件概率公式、贝叶斯概率公式、马尔科夫性、大数定理这样一些基础知识,其实我觉得在推导之前我们可以先看看到底什么是粒子滤波,也就是结果到底是什么。1.1 伪代码分析经典的SIR算法...
2021-07-16 11:16:35 688
原创 C++面试题汇总
本节目录如下:1、 C++中map与unordered_map的区别(1)头文件:map: #include < map >unordered_map: #include < unordered_map >
2021-07-15 15:17:07 4168
原创 VINS代码解析0——预备知识记录
// 抽象模板工厂类 // 模板参数:AbstractProduct_t 产品抽象类 template <class AbstractProduct_t> class AbstractFactory { public: virtual AbstractProduct_t *CreateProduct() = 0; virtual ~AbstractFactory() {} }; // 具体模板工厂类 // 模板参数:AbstractProduct_...
2021-07-05 16:47:05 525
原创 基于VINS与FastPlanner的无人机自主飞行Gazebo仿真
项目来源及展示:https://www.bilibili.com/video/BV1WK4y1V7um?from=search&seid=12548150687335659873基本思路:采用Gazebo+PX4进行仿真,定位导航使用港科大的VINS和FastPlanner方案。1. Fast-Planner简单安装试用 代码地址:https://github.com/HKUST-Aerial-Robotics/Fast-Planner#4-run-sim...
2021-07-02 23:22:10 6178 10
原创 my_slam_gmapping代码解析一
目录1 main.cpp2 my_slam_gmapping2.1 my_slam_gmapping.h2.2 my_slam_gmapping.cpp1 main.cpp2 my_slam_gmapping my_slam_gmapping串联起后面所有的函数,具体的函数调用关系如下所示:主要会调用到7部分内容,也是part_slam中的7个文件夹:2.1 my_slam_gmapping.h2...
2021-06-29 17:38:27 1321
原创 VINS代码逐行解析
VINS代码逐行解析11、程序开始首先读取参数:int main(int argc, char* *argv){ // ./run_eruroc /home/zlc/VIOFiles/MH_05_difficult/mav0/ ./config/ sData_path = argv[1]; sConfig_path = argv[2]; pSystem.r...
2020-04-26 14:16:28 1168
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人