自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 【SLAM】ORB-SLAM3解析——综述(1)

之前学习VINS和LIO-SAM的时候都是代码流,不是很重视看论文,现在有空学ORB-SLAM3了,这一次,先看一下论文。考虑到边上班边学,更新的会比较慢。看完论文之后,对这个系统最大的主观感受就是它的多图系统Atlas。机器人运行过程中是可能会跟丢的,一旦跟丢了就新建一个map,如果走到之前的位置,一旦发现和之前的map是同一个地方,就可以合并map。它的初始化和VINS很像,地图操作,回环检测,重定位很鲁棒。github: https://github.com/UZ-SLAMLab/ORB_SLAM

2022-04-28 22:18:34 7660 1

原创 【SLAM】LIO-SAM解析——流程图(1)

LIO-SAM是2020年新出的激光SLAM,代码量不大,结构统一清晰,是我看的最快的一篇SLAM代码,效果在原数据集也不错。有一个不错的注释版代码写的不错,https://github.com/smilefacehh/LIO-SAM-DetailedNote。注释中,mapOptimization中位姿初始估计的解释和我的理解不太一样,放流程图了。......

2021-06-16 08:51:01 6861 4

原创 【SLAM】VINS-MONO解析——综述

目前网上有很多分析文章,但是都只是一些比较基础的原理分析,而且很多量,虽然有推倒,但是往往没有讲清楚这些量是什么,为什么要有这些量,这些量是从哪来的,也没有刷通整个代码,或者太简练了,对新手不友好。这一次我计划从原理/代码一步步刷通整个VINS,并且说清楚代码中遇到的每一个数据结构对应的作用是什么。github官方上开源了VINS-mono,VINS-Fusion和VINS-mobile,还有另...

2020-03-02 19:38:00 52386 8

原创 【操作系统】 Operation System 第一章:概述

B站 陈渝老师 清华大学https://www.bilibili.com/video/av6538245?from=search&seid=436175425155932048相关资料(源自B站下方评论区)https://www.shiyanlou.com/courses/221 配套上机实验地址https://b23.tv/av18273642/p1 这个适合跨考和基础薄弱的h...

2020-01-11 10:44:45 38844 7

原创 【计算机网络】第一章:计算机网络概述

第一章 计算机网络概述局域网:覆盖范围小,自己花钱购买设备, 带宽固定10M 100M 1000M, 自己维护,最远100m广域网:距离远(>100m),花钱租带宽internet:ISP是电信运营商internet service producer;自己的机房,对网民提供访问Internet网站的访问:帧:数据包包括数据+网站和请求端的IP地址;后两部分是目标mac地址和原mac地...

2020-01-02 00:55:04 51439 27

原创 【CAD算法】【计算机图形学】Bezier贝塞尔曲线生成程序(python/numpy实现)[1]

Bezier Curve是机械工程专业CAD课程的必修内容,大家肯定都很清楚了。接下来将通过一个例子对CAD算法加深理解。1.内容回顾首先回顾一下,表示一个曲线,有两种方式,implicit表示法和参数表示法。implicit表示法:通过XYZ坐标表示曲线。优点:CompactEasy to check if a point belongs to the curve缺点:Diff...

2019-12-18 21:17:13 3642

原创 【SLAM】SVO2.0编译运行和论文代码解读

SVO2是我遇到的最难编译的代码了,可能公开版本不能放太鲁棒的代码吧,搞了快一个星期,终于跑起来了。

2022-08-27 15:08:47 4220 5

原创 【SLAM】DM-VIO(ros版)安装和论文解读

进入,基本上就是按照readme的操作来这里要注意,如果电脑里没有pangolin,是可以编译的,但是不会生成可执行文件,所以这个仍然是必须安装的库,此外,必须是0.6版本。编译完成后,在build/bin目录下,就能看到可执行文件dmvio_dataset。接下来,就可以按照官方的方法跑数据了。...

2022-08-02 11:02:10 4632 15

原创 【SLAM】LVI-SAM解析——综述

LVI-SAM可以认为是LIO-SAM和VINS-MONO的合体,在此基础上的修改不大。githubpaperLVI-SAM这个注释版代码中一些关于坐标系的注释我认为是有错误的,大家擦亮眼睛。和我也分别写过比较详细的代码解析,详情见链接。.........

2022-07-27 19:44:54 7029 4

原创 【SLAM】lidar-camera外参标定(港大MarsLab)无需二维码标定板

参考论文: Pixel-level Extrinsic Self Calibration of High Resolution LiDAR and Camera in Targetless Environmentsgithub:https://github.com/hku-mars/livox_camera_calib这篇论文是著名的港大Mars Lab出品,他们解决的是livox和camera的标定问题。论文很长,很多篇幅在介绍他们这么做的理由,这部分我们跳过,只看他们在代码里是怎么做的。提取鲁棒的,高度

2022-06-25 12:34:07 3515

原创 【SLAM】ORB-SLAM3解析——跟踪Track()(3)

在构建完最新的一帧Frame之后,就开始SLAM的正菜Tracking过程了。这个函数很长,有很多if-else看得很闹心。Track()干了一件什么事呢?首先把active map找出来;然后IMU预积分还没干,这里需要补上;接下来还得判断是正常跟踪建图状态还是初始化状态,如果没初始化那就去初始化;如果初始化了,先进行帧间匹配,也就是短期数据关联获得当前帧位姿的初始值,先试试与相邻帧匹配,不行就和最近的关键帧匹配,还不行就重定位,还是不行就开张新图重新跑里程计;然后和local Map匹配,也就是中期数

2022-05-24 09:35:25 4465 2

原创 【SLAM】ORB-SLAM3解析——帧Frame()的构建(2)

在路径\src\Frame.cc下。以Stereo(左右相机模型不同)-IMU模式的构造函数(1034行)为例进入到它的内部。这部分的主体思路:对于每一帧image(可能是mono,stereo, RGBD),首先构建图像金字塔,从而方便提取不同尺度的特征点和找到不同尺度特征点间的匹配关系。然后在image上提取均匀分布的FAST角点,为了实现这一点,对照片分成若干个格子,在不同的格子下分别提取角点;另外,运用BFS的方式不断把有角点的区域四等份,直到每个区域只有一个角点。随后对于每一个角点的周

2022-05-04 11:47:02 2709 3

原创 【SLAM】ORB-SLAM2代码流程图

之前阅读ORB-SLAM2源码时记录的流程图,作为自己的一个记录,之后项目如果有用到的话再回来复习。

2022-03-13 20:53:46 1771 1

原创 【SLAM】VINS-MONO解析——回环检测和重定位

本部分内容涉及到的代码大部分在pose_graph文件夹下,少部分在vins_estimator里。这部分最主要的作用就是求出漂移位姿矫正矩阵r_drift和t_drift。这么大一个工程,这么多行代码,保存这么多帧特征点和描述子,就是为了找出这6个自由度的变量。

2022-03-06 15:19:19 14620 3

原创 【SLAM】LIO-SAM解析——获得高频的lidar里程计TransformFusion(6)

知识点:如何合并一个低频但高精度的里程计和一个高频但低精度的里程计,输出一个高频高精度的里程计。(虽然我觉得代码里IMUPreintegration输出的里程计已经很高频且高精度了)这是LIO-SAM里最小的一个类,它虽然和IMUPreintegration在同一个文件下,但是这个类所处的环节是最靠后的,所以分开讲。LIO-SAM涉及到多个不同的坐标系,首先是lidar系,大部分运算都是在这个系上;baselink是指body系,一般和IMU坐标系重合。6.1 综述Transfor.

2022-03-05 00:12:04 2786

原创 【SLAM】LIO-SAM解析——后端优化mapOptimization(5)

知识点:如何使用GTSAM进行后端优化;如何在全局地图里找到和最新帧相关的局部地图;如何用最新帧点云与局部地图进行点面icp实现scan2mapOptimization求位姿;5. 综述mapOptmization.cpp是LIO-SAM里代码量最大,涉及算法内容最多的内容。我自己的思考:实际业务使用的平台算力不够,带不动GTSAM咋办?内存不够存不了这么多点云咋办?主要函数:laserCloudInfoHandler():

2022-02-27 23:13:01 5290 7

原创 【SLAM】LIO-SAM解析——IMU预计分IMU-Preintegration(4)

知识点:如何使用GTSAM;已知上一帧lidar里程计(频率低),当前帧lidar里程计(频率低),两个lidar帧之间的IMU数据,如何利用图优化的方式优化位姿状态量(PVQ)和IMU状态量(noise,bias);如何结合lidar里程计(频率低)和IMU数据(频率低)输出IMU里程计(频率高)。4. 综述从看代码的角度讲,LIO-SAM涉及到的数学好像不是很多,基本GTSAM都给你搞定了,所以知道相关的基本原理就能看懂代码。这部分内容对应IMUPreintegratio...

2022-02-27 22:20:02 5625 1

原创 【SLAM】LIO-SAM解析——点云特征提取FeatureExtraction(3)

这一部分会接收来自imageProjection处理完的lidar帧数据,对应的点云是去畸变的,也就是在同一个坐标系下。这部分对此帧的点云进行面点,角点特征的分类。这一章内容比前一章还要简单一些,作者在这里做了大幅度的点云降采样,有些奢侈了。工业中很少会使用密度如此高,精度如此高的传感器,数据处理往往是业界关注的问题。3. 功能入口int main(int argc, char** argv){ ros::init(argc, argv, "lio_sam"); Feat...

2022-02-23 00:15:07 3676 1

原创 【SLAM】LIO-SAM解析——数据预处理imageProjection(2)

这部分内容对应imageProjection.cpp,雷达帧是一定角度旋转的(例如360°),同时机器人也在运动,这就造成了雷达在不同角度获取数据时机器人的位姿是不同的,也就是说,lidar在一帧时间范围内的每一个时刻所在的坐标系是不同的,对应获得的点云也是在不同坐标系下的。这部分代码的作用就是把雷达旋转一周时,所有的点云都转换到同一个位姿下,也就是该帧初始时刻的lidar坐标系下。如何做到呢?初始时刻的位姿我知道,起止时间内的位姿变化我知道,每一个点云的时刻我知道,那么每一个时刻相对于初始时刻的位姿变化

2022-02-21 23:59:32 5621 6

原创 【SLAM】Dense Surfel Mapping流程图

Dense Surfel Mapping 总结:主观感受是这个三维重建系统是不完整的,100%依赖外部输入的回环信息和位置,更像是配合slam系统的一个建图插件,它的主要内容包括:面元surfel和superpixel的设计;新提取的superpixel和local map中原先的surfel进行融合降低map的内存消耗,同时减少同一位置点云误差带来的重影;局部地图的快速变形:某一帧的surfels在该帧的坐标是固定的,当系统收到SLAM传来的该帧的最新位姿时,通过对这些surfels进行统一的位

2021-08-07 18:15:02 1861

原创 图片

2020-07-18 22:02:22 242

原创 【SLAM】基于线特征的三维路标及其图像序列生成工具(VO仿真工具)

这个工具的作用就是构造一个三维的路标,再根据一系列的pose将这些路标投影到一系列照片上,也就是视频。可以用来进行VO-SLAM的仿真,也很容易拓展为VIO-SLAM的仿真工具。github地址:[LISS]

2020-06-17 16:39:51 711

原创 pyplot颜色大全

colors = ['#F0F8FF','#FAEBD7','#00FFFF','#7FFFD4','#F0FFFF','#F5F5DC','#FFE4C4', '#000000','#FFEBCD','#0000FF','#8A2BE2','#A52A2A','#DEB887','#5F9EA0', '#7FFF00','#D2691E','#FF7F50','#6495ED','#FFF8DC','#DC143C','#00FFFF', ..

2020-06-08 15:18:02 3976

原创 sudo rosdep init 出现 ERROR:Website may be down.

https://blog.csdn.net/nanianwochengshui/article/details/105702188qq_36037304:https://community.bwbot.org/topic/811/rosdep-init-%E6%88%96%E8%80%85rosdep-update-%E8%BF%9E%E6%8E%A5%E9%94%99%E8%AF%AF%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95

2020-06-01 09:05:58 3652 2

原创 【openCV踩坑日记】人工数据集Synthetic Shapes dataset的生成方法

1.为什么要介绍这个方法?2018年的时候,D.DeTone等人发表了Self-Supervised Interest Point Detection and Description,提出了一种特征提取SuperPoint的方法。他们在训练Superpoint的时候,构造了一组人工合成数据集Synthetic Shapes dataset(这个数据集能提供角点的坐标作为groundtruth),因此也可以测试superpoint最后的效果。所以说,Synthetic Shapes dataset它最大的

2020-05-14 12:56:07 2031 3

原创 【openCV踩坑日记】openCV3.X.X: nonfree模块的安装、调试和使用(SIFT的使用)

opencv2/nonfree的安装要想用SIFT,就需要#include <opencv2/nonfree/nonfree.hpp>但是在编译的时候,会报错:fatal error: opencv2/nonfree.hpp: No such file or directory所以说这个时候,你就需要安装openCV的nonfree模块,输入以下内容,sudo apt-get updatesudo add-apt-repository --yes ppa:xqms/opencv-

2020-05-12 16:19:11 4331 5

原创 如何向gitlab上传代码

1 add SSH key2 build remote repository3 clone it to local filegit clone gitlab@XXX.com.cn:XXX.git4 move the data into the file5 check statusgit status6 add what you want uploadgit add XXX_fi...

2020-04-30 20:18:30 1303

原创 【SLAM】VINS-MONO解析——基于vins-mono的双目slam系统开发

这个系统是基于香港科技大学飞行机器人组的开源框架VINS-Mono开发的,原开源框架是针对单目SLAM。本双目SLAM系统是在原单目开源框架基础上的二次深度开发,外部接口与原框架一致。这个项目是我的研究课题项目,非商业用途,感谢HKUST的沈老师课题组提供的开源框架。该项目的github地址请点击这里。1.需要的基本配置Ubuntu 16.04ROS KineticCeres Solver...

2020-03-23 16:16:39 3665 10

原创 【SLAM】VINS-MONO解析——对vins-mono的一点小改动

vins-mono刷了三遍,手写vio刷了两遍,从一开始完全看不懂是啥,再到自己写总结写攻略,真的有很多感慨。学习开源代码的目的其实就是是为了自己能够去开发一个vio,一个slam系统。slam最难的就是工程化了,公式很多人推导了一遍又一遍,道理大家都懂,但是转化为c++项目就是另一码事了。vins系列真的是神作,对沈老师和对秦神真的是佩服。在这里我对vins-mono进行了一下小小的提升和修...

2020-03-17 17:45:26 6266 2

原创 【SLAM】VINS-Fusion解析——流程

VINS-Fusion分析因为时间原因,没有像vins-mono看的和写的那么具体。vins-fusion不像mono那样有三个node,它只有一个node,在rosNodeTest.cpp里。我推测之所以这样做,是为了方便非ros版的c++项目使用。先上流程图。基本上所有的内容都在estimator.cpp。几个比较印象深刻的的地方。feature_tracker里面,并没有对i...

2020-03-13 11:27:32 8179 4

原创 【SLAM】VINS-MONO解析——sliding window

8.sliding window8.1 理论基础实际上,这一部分跟后端非线性优化是一起进行的,这一部分对应的非线性优化的损失函数的先验部分。理论基础部分的代码基本在第7章部分。8.1.1 上一次非线性优化结束,最后的H矩阵就是本轮非线性优化的先验矩阵的前身。8.1.2 构造先验矩阵(1)移动需要marg掉的pose和路标点对应的,J矩阵的一些列需要删除掉;H矩阵的一些行需要删掉。在操作...

2020-03-08 11:59:38 14261 6

原创 【SLAM】VINS-MONO解析——后端优化(代码部分)

7.2 代码在estimator.cpp的processImage()的最后,代码如下: else//solver_flag = NON_LINEAR,进行非线性优化 { solveOdometry(); //<--1 //边界判断:检测系统运行是否失败,若失败则重置估计器 if (failureDetection()) /...

2020-03-08 11:45:48 5884 7

原创 【SLAM】VINS-MONO解析——后端优化(理论部分)

7.后端非线性优化7.1 理论基础7.1.1 bayes模型,因子图和最小二乘这一部分主要是对董靖博士在公开课《因子图的理论基础》上的回忆和总结。(1)bayes模型假设有黄色是机器人在不同时刻的位姿,蓝色是机器人观测到的路标点,红色是机器人对路标点的观测,绿色是机器人对自身运动的观测。那么,这个过程可以用下面这个bayes-net来描述:那么,可以有这样的定义:黄色——机器人...

2020-03-08 11:32:35 20271 4

原创 【SLAM】VINS-MONO解析——初始化(代码部分)

6.2 代码解析这部分代码在estimator::processImage()最后面。初始化部分的代码虽然生命周期比较短,但是,代码量巨大!主要分成2部分,第一部分是纯视觉SfM优化滑窗内的位姿,然后在融合IMU信息,按照理论部分优化各个状态量。 if (solver_flag == INITIAL)//进行初始化 { if (frame_count == WIN...

2020-03-08 11:11:02 8413 23

原创 【SLAM】VINS-MONO解析——初始化(理论部分)

6.初始化第一个问题,为什么要初始化?对于单目系统而言,(1)视觉系统只能获得二维信息,损失了一维信息(深度),所以需要动一下,也就是三角化才能重新获得损失的深度信息;(2)但是,这个三角化恢复的深度信息,是个“伪深度”,它的尺度是随机的,不是真实的,所以就需要IMU来标定这个尺度;(3)要想让IMU标定这个尺度,IMU也需要动一下,得到PVQ的P;(4)另外,IMU存在bias,视觉...

2020-03-05 12:50:05 20295 9

原创 【SLAM】VINS-MONO解析——vins_estimator流程

5.vins_estimator基本上VINS里面绝大部分功能都在这个package下面,包括IMU数据的处理(前端),初始化(我觉得可能属于是前端),滑动窗口(后端),非线性优化(后端),关键帧的选取(部分内容)(前端)。我第一次看的时候,总是抱有一个疑问,就是为什么把这么多内容全都放在这一个node里面。为了回答这个问题,那么首先先搞清楚vins_estimator里面分别具体都是什么,为什...

2020-03-03 16:46:48 20303 13

原创 【SLAM】VINS-MONO解析——IMU预积分

4.IMU预积分IMU预积分主要干了2件事,第一个是IMU预积分获得α、β、γ值,另一个是误差传递函数的获取。本部分的流程图如下图所示。4.1 IMU预积分4.1.1 连续形式第一个问题,为什么要IMU积分?IMU获取的是加速度和角速度,通过对IMU测量量的积分操作,能够获得机器人的位姿信息。IMU测量值包括加速度计得到的线加速度和陀螺仪得到的角速度。其中 t下标表示在IMU坐标...

2020-03-03 00:03:17 25107 14

原创 【SLAM】VINS-MONO解析——前端

3. feature_trackerfeature_tracker是vins的前端,它的目录在src/ feature_tracker下,功能主要是获取摄像头的图像帧,并按照事先设定的频率,把cur帧上满足要求的特征点以sensor_msg::PointCloudPtr的格式发布出去,以便RVIZ和vins——estimator接收。这个package下面主要包括4个功能:feature_t...

2020-03-02 21:24:40 23296 14

原创 roboware安装包

不客气,我的名字叫雷锋。好用,忘了从哪弄来的了。加油,奥利给!首先,你得知道这个是ubuntu上用的,安装方法我就不说了哈,网上很多。复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1ELQa6y5TTMgC5dCweV88Qg 提取码:o216...

2020-02-20 17:45:05 2007 1

原创 【leetcode刷题日记】树

树一般涉及到递归,回溯,剪枝,深度优先/栈,广度优先/队列,三种遍历方式。树的递归都是一样的套路,首先判断 最下方叶节点 和 根节点为空 的情况,这两个的代码或者情景实际上是一样的,然后判断左右子树对应的某个结点,这两个结点各自的子树也有相同的关系。这样就实现了递归。对递归的两种理解:前序递归:每次先对当前结点操作一下,再往左子树慢慢下去,右子树慢慢下去;中序遍历:先往左子树跑到头,然后依次...

2020-02-07 14:04:22 414

空空如也

空空如也

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

TA关注的人

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