- 博客(79)
- 收藏
- 关注
原创 Imu水平放置时的Z轴分量为什么是正值?
水平放置时,imu的z轴的值是正值,难道imu的z轴是朝下?水平往前倾,根据各轴的读数值,觉得imu的坐标系难道是左手系?基于以上两个疑问,下面我将按我的理解解释一下。
2023-09-14 16:06:47
1333
原创 Ubuntu20.04安装使用matplotlib-cpp
按官网安装方法无法有效的在ubuntu20.04系统上部署该软件,因此将最后成功安装的过程记录一下,便于以后安装。
2022-08-04 14:48:24
2526
原创 ceres-solver和g2o性能比较
ceres-solver 和 g2o 是slam领域常见的优化器,其中ceres-solver被vins-mono使用,而g2o被orb-slam3使用,因此到底哪个优化器更适合于在slam算法开发中使用?分别基于这两种优化器实现BA过程,然后针对同一个仿真数据集进行测试,测试程序链接: https://github.com/chennuo0125-HIT/test/tree/main/ceres_g2o_comparer,按readme进行编译运行可得如下结果:说明测试程序中的仿真数据来源于 g2o
2022-06-30 15:54:04
2126
原创 SLAM中非线性优化问题求解方法
这篇文章是为了解释下面几个问题:上面表格中出现了线性收敛、二阶收敛等收敛性名词,其定义如下:线性收敛:∥ek+1∥≤∥aek∥当∥ek∥比较小,并且0
2022-06-14 15:31:40
665
原创 MSCKF中左零空间的计算
问题如下公式(1)对应MSCKF论文中的公式(23),其表示特征jjj与所有观测到该特征的状态构成的观测方程,但这个方程中的 Gp~j{}^{G}\widetilde{\boldsymbol{p}}_{j}Gpj 是由状态 X~\widetilde{\boldsymbol{X}}X 推导出来的,于是这两类状态之间存在耦合,这与EKF所要求的观测方程不一致,因此需要调整该观测方程。r(j)≃Hx(j)X~+Hf(j)Gp~j+n(j)(1)\mathbf{r}^{(j)} \simeq \mathb
2022-04-16 11:56:25
999
原创 旋转矩阵求导推导
李群李代数常用结论exp(⌊δθ⌋×)=I+⌊δθ⌋×exp(\left\lfloor\delta\boldsymbol{\theta}\right\rfloor_{\times})=\mathbf{I}+\left\lfloor\delta\boldsymbol{\theta}\right\rfloor_{\times}exp(⌊δθ⌋×)=I+⌊δθ⌋×exp(⌊δθ⌋×)R=Rexp(⌊RTδθ⌋×)exp(\left\lfloor\delta\boldsymbol{\theta}\righ
2022-03-23 20:45:05
2651
2
原创 ORB_SLAM3系统框图
前言此框图是对原框图的丰富,主要是基于自己对代码的理解来写的。为了使内容简单一些,只以stereo-imu这种情况来梳理。原框图丰富后框图(点击可放大)
2022-02-11 21:44:53
1214
1
原创 使用ORB_SLAM3运行Realsense T265
关于硬件官网说明使用说明Realsense T265是一款跟踪相机,配有两个FOV为111.7 x 108.6的广角相机,并且带有IMU(BMI055)惯性测量单元。设备内部配有vpu处理器并嵌入了建图和定位算法(VIO),利用其SDK或UI软件就可以运行对应的算法,实测效果非常好。获取硬件参数Realsense系列相机都已经进行了出厂标定并且嵌入到设备中,在安装完SDK并连接上相机之后,即可通过如下指令获取标定参数:rs-enumerate-devices -c结果(只列出部分需要的)I
2022-01-25 21:28:44
5583
23
原创 ORB_SLAM3中IMU预积分过程原理分析
ORB_SLAM3中IMU预积分过程原理分析1. 特殊正交群SO(3)的一些性质指数映射:exp(ϕ^)=I+sin(∥ϕ∥)∥ϕ∥ϕ^+1−cos(∥ϕ∥)∥ϕ∥2(ϕ^)2(1)exp(\phi^{\hat{ }}) = \mathbf{I} + \frac{sin(\left\|\phi \right\|)}{\left\|\phi \right\|}\phi^{\hat{ }} + \frac{1-cos(\left\|\phi \right\|)}{\left\|\phi \right\|
2022-01-07 18:40:14
2194
4
原创 ORB_SLAM2和3的位置识别差异
概述上面是ORB_SLAM3中提到的一个创新点,主要内容是现有的基于DBoW2的位置识别算法为了提高识别精度,要求先进行时间一致性验证,然后再进行空间一致性验证,其中时间一致性验证会出现连续3个关键帧匹配同一个地方,这样就使得整个位置识别过程非常缓慢,而且召回率低。而新识别算法是首先对当前帧进行几何一致性验证,然后再检查局部一致性验证,从而达到以少量的计算量增加换取高召回率和高地图精度。ORB_SLAM2位置识别过程时间一致性验证获取连续3帧关键帧(0,1,2)(0,1,2)(0,1,2),并通
2021-12-17 17:02:29
1005
原创 Ax=b常见解法对比
1. 参考https://eigen.tuxfamily.org/dox/group__TutorialLinearAlgebra.html2. 问题来源在解决平面拟合、直线拟合等问题时,我们经常会利用多维空间中的多个点来构建超定方程Ax=b\mathbf{Ax=b}Ax=b,然后利用最小二乘法求解该方程组来获得待拟合对象的参数。在基于优化的slam框架中,我们经常会构建类似于 ∑i=1n∣∥f(x,li)∥22\sum_{i=1}^{n}\left|\| f(\mathbf{x},l_{i})
2021-12-10 21:18:47
2412
原创 基于rgbd相机的三维重建算法概要-BundleFusion
参考仓库 https://github.com/victorprad/InfiniTAM论文 https://arxiv.org/pdf/1604.01093.pdfBundleFusion框架BoundleFusion算法的核心是抛弃了常用的slam框架(帧间匹配+回环检测优化),作者认为帧间匹配特别脆弱容易出现跟踪失败的问题,所以作者采用了一种新的框架来实现实时的全局位姿优化,既然是实时全局位姿优化那就不需要回环检测要消除累积误差。为了实现实时的全局位姿优化,作者提出了局部优化和全局优化两步走
2021-12-09 19:59:51
2138
原创 解决cv_bridge依赖opencv版本问题
问题来源在安装ros的过程中,系统会默认安装cv_bridge库,但该库指定了依赖的opencv库路径,拿ros melodic版本来说,默认依赖opencv库: /usr/lib/x86_64-linux-gnu/libopencv_core.so.3.2.0,但我们在进行开发过程中难免会更换opencv的版本,此时就会导致在编译的时候出现 Project ‘cv_bridge’ specifies ‘/usr/include/opencv’ as an include dir问题,原因是利用源码安装
2021-11-18 17:25:17
4038
1
原创 infiniTAM三维重建算法编译运行
算法相关链接代码仓库: https://github.com/victorprad/InfiniTAM相关论文: InfiniTAM v3: A Framework for Large-Scale 3D Reconstruction with Loop Closure测试平台编译1. clone仓库git clone https://github.com/victorprad/InfiniTAM2. 安装依赖主要是安装cuda,直接安装最新版本的就可以了,其它的库ubuntu18.04系
2021-09-15 21:10:59
1614
3
原创 贝塞尔曲线和B样条曲线
贝塞尔曲线公式:P(t)=∑i=0n−1PiBi,n(t)(1)\mathbf{P}(t) = \sum_{i=0}^{n-1}\mathbf{P}_{i}B_{i,n}(t) \tag{1}P(t)=i=0∑n−1PiBi,n(t)(1)其中:Bi,n(t)=Cniti(1−t)n−i(2)B_{i,n}(t) = C_{n}^{i}t^{i}(1-t)^{n-i} \tag{2}Bi,n(t)=Cniti(1−t)n−i(2)B-Spline曲线产生的背景: 贝塞尔曲线两大
2021-06-15 18:31:47
1688
1
原创 ORB_SLAM2中基础矩阵F求解的原理及源码分析
1. 基础矩阵的定义如图所示是对极几何约束关系图,图中O1,O2O_{1},O_{2}O1,O2分别表示相机的两个位姿,平面I1,I2I_{1},I_{2}I1,I2分别表示对应的投影平面,PPP点为三维环境中的一个位置点,p1,p2p_{1},p_{2}p1,p2分别表示PPP点在两个投影平面上的投影.假设位姿O2O_{2}O2相对于位姿O1O_{1}O1的旋转变换矩阵为R\mathbf{R}R、平移向量为t\mathbf{t}t,相机的内参为K\mathbf{K}K,则根据相机投影关
2021-03-27 10:34:46
844
原创 ORB_SLAM2与OpenCV中ORB特征提取器的区别
测试测试代码: https://github.com/chennuo0125-HIT/opencv_demo/tree/master/orb_compare# 编译git clone https://github.com/chennuo0125-HIT/opencv_demo.gitcd orb_compare && mkdir buildcd buildcmake ..make# 运行../bin/orb_compare ../data/test.png结果显示通过
2021-03-25 11:29:05
1117
2
原创 三维建模之泊松重建 Poisson Surface Reconstruction
参考论文链接: http://sites.fas.harvard.edu/~cs277/papers/poissonrecon.pdf资源网站链接: http://www.cs.jhu.edu/~misha/Code/PoissonRecon/Version8.0/
2021-03-16 15:12:38
4492
13
原创 imaging_lidar_place_recognition 论文翻译及源码解析
1. 前言(个人的理解)编译和该算法运行效果参考我上篇博客: https://blog.youkuaiyun.com/weixin_37835423/article/details/114312443对于用雷达进行回环检测一直是个难点,主流的基于雷达的开源方案LeGO-LOAM、LIO-SAM、hdl_graph_slam使用的都是最传统的基于欧拉距离的回环检测方法,该方法对于雷达里程计要求较高,如果里程计误差较大,则很容易引起误匹配,其次该方法依赖点云匹配得分来判断回环是否准确,但点云匹配很容易陷入局部最优,在有
2021-03-12 19:33:28
586
原创 imaging_lidar_place_recognition 概要编译测试
概要我们提出了一种鲁棒的实时的利用高分辨率成像雷达进行位置识别的方法.利用成像雷达点云的强度信息,我们将点云投影到一张强度图像上.然后我们从强度图像上提取ORB描述子,并插入到DBoW维护的数据库中,用于快速的位置识别.返回的候选图像将会通过视觉特征匹配进行进一步验证.为了丢弃误匹配,我们采用了基于RANSAC的PnP方法.我们的方法包含了基于相机和雷达进行位姿识别的优点,具有旋转不变性,可以有效的解决传感器反向和颠倒问题.该方法已经在多平台多尺度的数据集上进行了充分的验证.源码链接: https://
2021-03-03 14:52:39
815
13
原创 OctoMap开启多线程
1. 前言OctoMap是一个对三维空间进行体素化展示的工具包,其不仅以概率的形式刻画每个三维空间体素是障碍物的几率(这对机器人导航和运动规划非常重要),同时优化了数据结构,极大的减少了三维体素地图对内存的消耗.库链接: https://github.com/OctoMap/octomap论文链接: http://www.arminhornung.de/Research/pub/hornung13auro.pdf2. 单线程版本2.1 库安装直接使用ros发行的版本:sudo apt-get
2021-02-04 10:50:12
411
1
原创 TSDF算法原理及源码解析
先看效果参考源码: https://github.com/andyzeng/tsdf-fusion-python从图中可以看出,tsdf算法的重建效果还是不错的.该算法是很多牛掰3D重建算法的基础,例如:KinectFusion、InfiniTAM等.
2021-02-01 14:17:55
10339
10
原创 稠密建图voxgraph安装测试
1. 前言当前的建图方法要么是低硬件要求的稀疏特征地图构建方法,要么就是高硬件要求(配备gpu或大内存条)稠密地图构建方法,对于MAV这种平台的硬件配置都较低,因此基于当前的已有方法只能构建较为稀疏的地图.但稀疏地图不利于MAV在三维环境中进行导航,于是提出了voxgraph建图方法的,该方法能够在只配备了cpu而无gpu的平台上构建稠密的mesh地图.2. 安装2.1 安装voxbloxmkdir -p ~/catkin_ws/srccd ~/catkin_wscatkin initcatk
2021-01-28 12:14:20
1156
7
原创 回环检测中词袋模型DBoW2的原理分析
1. 参考论文: http://doriangalvez.com/papers/GalvezTRO12.pdf源码: https://github.com/dorian3d/DBoW2效果: https://www.youtube.com/watch?v=Y6J6C_-mgRw2. 何为词袋模型 ?如上左图是一个很直观的词袋模型,袋子中装的就是单词,有了这个单词袋,上面一段话就可以用一个统计直方图来表示,即统计单词袋中每个单词在这段话中出现的次数,于是就将这段话转换成了一个词袋向量[8,5,4,
2021-01-21 12:08:34
2017
2
原创 齐次变换矩阵的逆矩阵的求解
问题描述已知坐标系 AAA 相对于坐标系 BBB 的齐次变换矩阵为 TABT_{A}^{B}TAB,有时在求解问题时需要依据 TABT_{A}^{B}TAB 求取坐标系 BBB 相对于坐标系 AAA 的齐次变换矩阵 TBAT_{B}^{A}TBA ,这个问题可以简单的描述为齐次变换矩阵求逆问题.问题求解假设齐次变换矩阵 TAB\mathbf{T}_{A}^{B}TAB 的旋转部分为 RAB=[uxvxwxuyvywyuzvzwz]\mathbf{R}_{A}^{B}=\begin{bmatri
2021-01-13 10:31:53
9262
原创 NDT点云配准算法原理及PCL实现
参考论文The Three-Dimensional Normal-Distributions Transform — an Efficient Representation for Registration, Surface Analysis, and Loop Detection注: 下面用于讲解来自于论文中的公式都保留了对应的公式序号.算法流程依据上述伪码流程可以看出,该算法主要的思路就是将目标点云刻画成多个概率分布,然后通过位姿变换关系将待配准点云转换到目标点云坐标系下,计算转换后待配准点云
2021-01-11 17:20:06
6733
5
原创 OpenCV相机标定原理及实现(普通相机标定、鱼眼相机标定)
前言OpenCV相机标定包括普通相机标定和鱼眼相机标定,其中普通相机标定参考的是张正友标定法,而鱼眼相机的标定是基于等距投影模型进行标定的.普通相机标定张正友标定法(1) 针孔模型内外参标定针孔相机投影模型方程:sm~=A[Rt]M~(1)s\widetilde{\mathbf{m}} = \mathbf{A}\begin{bmatrix} \mathbf{R} & \mathbf{t} \end{bmatrix} \widetilde{M} \tag{1}sm=A[Rt]M(1
2021-01-10 18:34:25
5965
2
原创 c++实现aruco码检测和位姿估计(兼容鱼眼相机)
Aruco Marker 功能包说明该功能包参考官网教程对aruco marker码的生成、检测和位姿估计等功能进行了封装,并引入了对鱼眼相机的支持,可直接使用.源码链接https://github.com/chennuo0125-HIT/opencv_demo/tree/master/aruco依赖OpenCV编译git clone https://github.com/chennuo0125-HIT/opencv_demo.gitcd arucomkdir buildcd bu
2021-01-06 20:49:25
1659
原创 LIO-SAM-scan2MapOptimization()优化原理及代码解析
前言LIO-SAM中的扫描匹配优化部分代码是直接套用LOAM,该部分代码的最大特点是没有利用任何开源的优化库(ceres-solver, g2o, gtsam…)进行残差方程的优化,而是只基于Eigen库构造了高斯牛顿迭代算法对残差方程进行优化,获得最小二乘解.一般slam后端都是基于简单易用的开源优化库进行残差方程的优化,使得代码的可读性和开发速度都得到提升,基于这样的思路,港科大基于LOAM写了一个A-LOAM框架,将里面可读性差的优化部分全部用ceres-solver优化库取代,使得代码可读性明显提
2020-12-24 11:23:32
7847
8
原创 LIO-SAM源码解析-地图优化mapOptmization.cpp
节点数据传递从上图可以看出,地图优化节点(红色)接收话题(绿色)/odometry/gps, /lio_sam/feature/cloud_info,并发 /lio_sam/mapping/odometry, /lio_sam/mapping/odometry_incremental 话题,发布的被rviz节点订阅的话题只是为了显示用,忽略讨论.main概览int main(int argc, char **argv){ ros::init(argc, argv, "lio_sam");
2020-12-19 11:46:09
2645
5
原创 LIO-SAM源码解析-特征提取featureExtraction.cpp
节点数据传递从上图可以看出来,特征提取节点(红色)/lio_sam_featureExtraction只订阅图像投影节点发布的话题(蓝色)/lio_sam_deskew/cloud_info,并且只发布话题(绿色)/lio_sam/feature/cloud_info.订阅 /lio_sam_deskew/cloud_info 做了什么?void laserCloudInfoHandler(const lio_sam::cloud_infoConstPtr &msgIn){ clo
2020-12-19 10:27:59
1982
2
原创 LIO-SAM源码解析-图像投影imageProjection.cpp
节点数据传递从上图中可以看出,节点(红色)/lio_sam_imageProjection 订阅(蓝色)/imu, /rslidar_points, /odometry/imu_incremental三个话题,并发布(绿色)/lio_sam/deskew/cloud_info, /lio_sam/deskew/cloud_deskewed两个话题.其中*/lio_sam/deskew/cloud_deskewed*为偏斜矫正后的点云,是显示用的,只被rviz节点订阅,因此该话题不加讨论.订阅 /imu
2020-12-18 21:47:37
1548
2
原创 LIO-SAM源码解析-IMU预积分imuPreintegration.cpp
节点数据传递从上面的节点之间话题传递图可以看出imu预积分节点 /lio_sam_imuPreintegration 接收了话题 /imu, /odometry/imu_incremental, /lio_sam/mapping/odometry, /lio_sam/mapping/odometry_incremental,发布了被其它节点使用的话题 /odometry/imu_incremental, /lio_sam/imu/path,其中发布的话题 /lio_sam/imu/path 只是被用于r
2020-12-18 20:48:25
4342
3
原创 LIO-SAM论文翻译
LIO-SAM: 通过SAM紧耦合雷达惯性里程计摘要我们提出一个框架用于通过SAM紧耦合雷达惯性里程计LIO-SAM,可实现高精度、实时的移动机器人轨迹估计和地图构建.LIO-SAM是基于因子图构建雷达惯性里程计,可以将大量的相对测量值、绝对测量值、回环等多种不同数据作为因子融入雷达惯性里程计系统中.通过imu预积分获得的运动估计可以用于点云的偏斜矫正和用于雷达里程计优化的初始值.获得的雷达里程计结果又可以反过来估计imu的偏置.为了确保实时高性能,我们在进行位姿优化时边缘化掉了一些老的雷达数据,而不是
2020-12-18 16:53:08
3900
转载 如何免费下载IEEE文章!
1.复制要下载的IEEE论文的链接或者DOI 例如: 链接:https://ieeexplore.ieee.org/document/8302050 DOI:10.1109/CISP-BMEI.2017.8302050 2.打开网站 http://tool.yovisun.com/scihub/,选择一个进去 3.进入之后把链接或DOI复制进去,点击OPEN,看到页面是这样的,有时候需要输入验证码,...
2020-12-17 11:01:50
23085
4
原创 VINS-Mono-紧耦合VIO中视觉残差的优化原理和代码解析
前言承接上一篇博客,此篇分析残差:∑(l,j)∈Cρ(∥rC(z^lcj,χ)∥Plcj2\sum_{(l,j)\in C}\rho(\left\| \mathbf{r}_{C}(\hat{\mathbf{z}}_{l}^{c_{j}},\boldsymbol{\chi}) \right\|^{2}_{\mathbf{P}_{l}^{c_{j}}}(l,j)∈C∑ρ(∥∥rC(z^lcj,χ)∥∥Plcj2原理定义残差方程视觉残差即重投影误差,但VINS-Mono中所使用的重
2020-12-12 21:31:06
1152
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人