- 博客(174)
- 资源 (1)
- 收藏
- 关注

原创 ORBSLAM3算法学习总目录
1.ORB-SLAM3系统概述2.1ORB-SLAM3之ORB特征提取和BRIEF描述子计算2.2ORBSLAM3之几种特征点提取方法2.4ORB-SLAM3之Frame构造简介2.5ORB-SLAM3之基于SAD滑窗的双目特征匹配3.0ORB-SLAM3跟踪线程概述3.1ORBSLAM3之IMU预积分3.2ORBSLAM3之双目初始化和单目初始化3.3ORB-SLAM3之视觉与IMU的联合初始化3.4ORBSLAM3之跟踪恒速运动模型3.5ORBSLAM3之跟踪参考关键帧3.6ORB
2023-06-27 09:09:42
176
原创 C++使用OpenMP对简单for循环加速代码实例
发现对于简单的for循环,OpenMP简直是一大加速利器,两行代码就搞定。CMakeLists.txt文件。
2023-11-15 14:02:10
128
原创 一些坐标系概念(ECEF、ENU、WGS-84、Web墨卡托、UTM坐标系)
以地球质心为坐标原点,z轴指向极点,x轴过赤道和本初子午线交点,y轴完成右手坐标系。
2023-11-08 15:41:19
173
原创 gtsam初探以及结合LIO-SAM算法的一些理解
通过模板类定义新的一元因子,其中T为一元因子所对应变量的类型。需要针对新因子定义一下几个信息:(1)有关传感器观测值的私有成员变量。(2)有关因子初始化的构造函数。(3)用于计算评估误差的误差函数,功能包括:返回变量和观测值之间的残差信息、计算用于非线性优化的雅克比矩阵。以定义一元GPS因子为例(1)定义GPS的测量值mx_, my_(2)定义GPS因子的构造函数,在使用时通过该函数实例化因子。用给定的x,y值初始化mx_, my_观测值,并给定与该因子连接的变量代号j。
2023-11-02 14:35:35
229
原创 PCL自定义点云的数据类型PointXYZIRT
个人编码习惯,将自定义点云写在一个头文件中,方便其他所有的源码文件使用。自定义点云数据结构对于自定义点云进行注册#endif其他PCL点云怎么使用自定义点云就怎么使用,不过对于某些PCL库的点云处理函数可能不支持自定义的点云。>>
2023-10-30 13:38:36
194
原创 LIO-SAM算法解析
LIO-SAM在lego-loam的基础上新增了对IMU和GPS的紧耦合,采用一个因子图对位姿进行优化,包括IMU因子,激光里程计因子,GPS因子、回环因子。虽然在创新点上没什么让人觉得有趣的东西,但是在性能上相比Lego-Loam,因为加入了高频的IMU,在一些不好的场景下表现要更鲁棒,回环处的漂移也更小。不过虽然加入了IMU,但似乎连松耦合都称不上,IMU预积分在LIO-SAM中的作用仅用来对激光点云做运动补偿去畸变,以及在scan-2-map时提供优化的初始位姿。
2023-10-27 14:03:41
152
原创 Lego-Laom算法深度解析
作者的实验平台是一个移动小车(UGA),挂载了一个Velodyne VLP-16 线激光雷达,还配有一个低精度的 IMU;选用的硬件平台是 Nvidia Jetson TX2(ARM Cortex-A57 CPU);整体负载是 20Kg;移动速度为:2.0m/s;测试场景为:地面不平(比较颠簸)的草地。LeGO_LOAM的软件系统输入3D Lidar的点云,输出6DOF的位姿估计。这一部分的主要操作是分离出地面点云;同时对剩下的点云进行聚类,滤除数量较少的点云簇。
2023-10-26 16:26:35
117
原创 CMake编译出现undefined reference to symbol ‘pthread_create@@GLIBC_2.2.5‘
undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
2023-10-19 09:52:56
228
原创 OpenCV中initUndistortRectifyMap ()函数与十四讲中去畸变公式的区别探究
根据标定工具和相机模型的不同,获取的鱼眼相机畸变系数可能有多种形式,需要知道的是都可以在OpenCV去畸变函数中使用。最近在使用OpenCV对鱼眼相机图像去畸变时发现一个问题,基于针孔模型去畸变时所使用的参数和之前十四讲以及视觉SLAM中的畸变系数有一点不一样。均为0的时候该去畸变公式和十四讲中的公式就一样了,即十四讲中的去畸变公式是该公式的一个简略版。这种比值形式,暂时为找到公式的设计原理,应该是基于对径向畸变的某种考量进行的设计。有意思的是,这里的相机畸变参数是可选的,可以是4个参数。
2023-10-10 09:39:07
941
原创 代码:对鱼眼相机图像进行去畸变处理
说明:用于备忘1. 第一部分是常规的去畸变操作,在已知内参的情况下对鱼眼相机进行去畸变,这里使用的是remap映射2. 在对图像去畸变后,对于图像边缘的像素全部造成了丢失,所以进行了一次没有意义的尝试,想尽可能的保留图像边缘像素,实现后发现边缘像素部分比较模糊而且还对中心位置的去畸变效果造成了影响
2023-10-05 10:13:10
400
2
原创 ROS2:使用colcon build编译成功但是在运行时提示找不到共享库
基于ROS2写了一个node节点,其中需要链接一个共享库,在编译时没有问题,但是在运行时提示找不到这个共享库。在ROS2节点程序的CMakeLists.txt中加入以下内容,第一个。在共享库的CMakeLists.txt后面加入以下内容,是告诉程序共享库的位置,第二个。是告诉程序可执行文件的位置。
2023-09-14 15:46:10
183
原创 ROS2报错:‘no executable found’
使用`colcon build`编译一个读取激光数据的节点,编译成功了也使用`. install/setup.bash`刷新了环境变量,但是tab不出来节点的名称,自己将节点名称输入到终端后运行提示找不到可执行文件,如下:```No executable found```
2023-09-14 13:55:50
431
1
原创 ROS2报错:ImportError: cannot import name ‘Log‘ from ‘rosgraph_msgs.msg‘
排查原因后发现命令写错了,ROS1用习惯了,使用的。在使用ros2的bag命令查看数据集信息时报错。
2023-09-13 11:06:15
914
原创 视觉SLAM与激光SLAM简单对比分析
本文旨在梳理目前较为前沿的SLAM技术,包括激光和视觉,主要从精度和实时性两个方面对算法进系评价。对于激光SLAM了解不深,后期需要补充相关算法的核心思想与算法框架。有问题请大佬们随时留言,我再改正。
2023-08-31 16:35:07
216
原创 《自动驾驶与机器人中的SLAM技术》之GNSS相关基础知识总结
本篇基于对《自动驾驶与机器人中的SLAM技术》中的GNSS定位相关基础知识进行总结用于备忘。
2023-08-28 16:00:01
763
原创 【报错】undefined reference to `tbb::interface7::internal::isolate_within_arena(tbb::interface7::interna
前置条件:电脑已经将GCC升级到了9+版本。报错提示是未链接到tbb的库,当使用。时,CMake提示无法找到这个库。
2023-08-28 09:14:39
256
原创 ubuntu1804系统ROS1和ROS2一键装机
安装完每次打开终端时, 会提示选择ROS1还是ROS2, 输入。, 工具会自动将ROS1和ROS2放在不同的文件目录下。如果想同时安装ROS1和ROS2, 运行两次。备忘一下ROS1和ROS2的一键装机。选择ROS2, 输入。
2023-08-14 10:52:02
99
原创 ORB-SLAM3读取压缩图ros节点程序备忘
代码备忘,在原本的ORBSLAM3 ROS节点程序中新增以下功能:1. 将图片的ROS消息格式改为压缩图片类型2. 增加地图保存的ros服务,地图保存以前在结束程序是自动保存,现在通过ros服务节点随时保存`rosservice call /save_map 1`3. 增加纯定位模式和SLAM模式切换的ros服务节点(废物功能)
2023-07-25 13:58:44
91
原创 [cmake报错]collect2: error: ld returned 1 exit status
collect2: error: ld returned 1 exit statusCMakeFiles/orbslamTest.dir/build.make:142: recipe for target '../orbslamTest' failedmake[2]: *** [../orbslamTest] Error 1
2023-07-12 16:56:45
1317
原创 6.0ORBSLAM3之几种特征匹配方式总结
结合代码看,ORBSLAM3中的特征匹配从来不用整副图像的暴力匹配,一般都使用一些加速方法,综合的看大致分为以下几种:1. 基于网格注册信息的特征匹配加速 涉及到3D-2D匹配,对于将3D地图点投影到图像帧寻找匹配点时一般使用特征点网格注册信息,在3D点投影位置的附近网格区域内寻找匹配点2. 基于词袋向量的特征匹配加速 涉及到2D-2D匹配,特别的关键帧与关键帧,关键帧与普通帧之间的匹配,一般基于词袋向量加速匹配,只对属于同一节点下的特征点遍历寻找匹配3. 基于带状搜索的匹配方法
2023-07-07 09:30:41
448
1
原创 5.3ORB-SLAM之回环检测线程地图融合
在上一章已经介绍了检测共视区域的部分,接下来就是对共视区域进行回环矫正或者地图融合。回环矫正和之前的ORBSLAM系列一致,就是消除因为长时间运动产生的位姿累计误差和尺度漂移。在ORBSLAM3中新增了多地图系统,因此出现共视区域的地方有可能出现在不同的子地图中,需要对两个子地图进行融合。本篇主要对地图融合部分进行介绍。对于系统融合根据是否使用IMU又可以分为纯视觉地图融合与视觉惯导地图融合。
2023-07-06 17:00:25
202
原创 5.2ORB-SLAM3之回环矫正
在上一章已经介绍了检测共视区域的部分,接下来就是对共视区域进行回环矫正或者地图融合。回环矫正和之前的ORBSLAM系列一致,就是消除因为长时间运动产生的位姿累计误差和尺度漂移。在ORBSLAM3中新增了多地图系统,因此出现共视区域的地方有可能出现在不同的子地图中,需要对两个子地图进行融合。本篇主要对回环矫正部分进行介绍。
2023-07-06 16:28:04
232
原创 5.1ORB-SLAM3之回环检测线程检测是否存在共视区域
本质上是计算当前关键帧和关键帧数据库中的关键帧是否存在公共单词,相似性分数是否满足要求。
2023-07-05 17:02:03
453
原创 4.1ORB-SLAM3之处理缓存队列中的关键帧
对于某个3D地图点会在多个时刻下被相机观测到,因此同一3D地图点会被多个关键帧观测到,也即该3D点是多个特征点的反投影点,该3D点的描述子也由与其对应特征点的描述子决定。记录了每个特征点的索引以及该特征点对应单词在词袋树上的节点id,根据这一信息可以在寻找特征匹配时只对统一节点上的特征点寻找匹配关系,以实现加速匹配。中所有观测到本地图点的关键帧取平均得到的,通过地图点与关键帧对应相机光心的连线可以得到该地图点的观测方向。平均观测距离是根据参考关键帧得到的,观测距离指的是该3D点到参考关键帧光心的距离。
2023-06-30 14:57:53
682
原创 4.0ORBSLAM3之局部建图线程概述
计算该关键帧特征点的Bow信息更新当前关键帧新增地图点的属性更新共视图中关键帧间的连接关系将该关键帧插入到地图中详细见博客《处理缓存队列中的新关键帧》
2023-06-30 14:57:14
334
原创 3.0ORB-SLAM3跟踪线程概述
tracking线程是ORBSLAM系列的三大核心线程之一,主要做的事是接收一张图像帧和一组IMU数据,计算相机在相邻图像帧之间的运动和当前时刻位姿,并根据需要创建关键帧。根据模块的功能不同,tracking线程主要包含:纯视觉初始化,跟踪运动模型,跟踪参考关键帧,跟踪局部地图,重定位和创建关键帧纯视觉初始化主要是根据特征点得到3D空间点,并初始化一个地图。
2023-06-28 09:13:58
297
原创 使用ROS功能包camera_calibration进行单目相机和双目相机的内参和外参标定
本文总结使用ROS标定单目和双目相机的过程,同时提供生成棋盘格文件的方法。
2023-06-26 10:44:03
1545
2
原创 2.3ORBSLAM3之相机模型与畸变模型
1. 对SLAM中常见的相机模型进行介绍,包括针孔相机模型和鱼眼相机模型2. 对每种相机模型的畸变模型进行介绍3. 对VSLAM中常见的几种去畸变方法进行介绍4. 对常见的几种相机标定方法进行总结
2023-06-25 17:37:02
817
原创 超级超级好用的Latex和MarkDown在线公式编辑器
为了方便写博客找了一个很好用的MakrDown公式编辑器,工具栏是和office word的公式编辑器差不多,可以在线生成Latex代码插入到Markdown文件,也可以生成图片保存下来。使用工具栏中的公式模板即可生成Latex代码。
2023-06-19 15:18:23
379
原创 2.2ORBSLAM3之ORB、SIFT、SURF、Harris角点、Shi-Tomas角点特征点提取方法
本节对ORB特征、SIFT特征、SURF特征、Harris角点、Shi-Tomas角点的提取与描述子计算原理进行总结,其中Harris角点、Shi-Tomas角点是关键点,没有对应的描述子,一般用于光流跟踪(Vins系列算法)。综合所有的特征检测算法来看,所有的方法本质上都是通过计算像素灰度梯度检测关键点位置,ORB特征通过与邻域像素进行灰度值比较得到,其余SIFT,SURF,Harris角点、Shi-Tomas角点均都涉及到一个Hessian矩阵(由离散像素二阶导得到)求解问题,根据Hessian矩阵
2023-06-19 09:21:18
427
原创 1.ORB-SLAM3系统概述
本系列文章主要基于ORB-SLAM3代码、论文以及相关博客,对算法原理进行总结和梳理。ORB-SLAM系列整体架构是不变的,都包含Tracking、LocalMapping和LoopClosing三个核心线程,中间伴随着优化过程。在ORB-SLAM3算法中比较突出的改进有两个:1. 引入IMU传感器,系统支持单目+IMU,双目+IMU和RGBD+IMU等三种模式2. 引入地图集Atlas这个概念,支持多个子地图并存,以及地图的保存和加载
2023-06-16 17:26:45
438
原创 C++使用boost::serialization进行序列化
发现一个比较好玩的东西,boost::serialization序列化操作,简单来说感觉像ofstream和ifstream的升级版,Boost.Serialization 库能够将c++项目中的对象转换为一序列的比特(bytes),用来保存和加载还原对象。
2023-06-09 16:08:13
304
原创 记录一个cmake编译过程中的问题:fatal error: 3rdparty/DBoW2/DBoW2/FORB.h: No such file or directory
在进行cmake编译时出现了以下报错,提示找不到某个头文件但是在vscode中通过Ctrl+鼠标右键是可以成功跳转到对应的文件中去的,遂定位到CMakeLists.txt文件中.
2023-05-18 13:43:00
177
原创 C++函数的按值传递参数和按引用传递参数
对于C++函数,传参时可以按值传递参数和按引用传递参数,对于比较庞大的数据结构或者类对象使用按值传递会产生昂贵的拷贝成本,这时可以是用按引用传递,如果不希望改变传递的变量,可以使用按const引用传递
2023-05-16 15:10:34
72
原创 使用ceres库时报错:undefined reference to `ceres::Problem::Problem()‘
myCeres.cpp:(.text.startup+0x247): undefined reference to `ceres::Problem::Problem()'myCeres.cpp:(.text.startup+0x2aa): undefined reference to `ceres::CostFunction::CostFunction()'myCeres.cpp:(.text.startup+0x31d): undefined reference to `ceres::Problem:
2023-04-10 17:09:17
607
邱笑晨博士IMU预积分公式推导文档
2023-07-25
ORBSLAM3并行化提取ORB特征
2023-06-14
基于FLD直线检测和匹配的SLAM位姿估计
2022-12-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人