slam
文章平均质量分 80
视觉、激光slam相关知识
chennuo0125-HIT
Slam, Vio
展开
-
李群李代数求导-常用求导公式
李群李代数求导的一些常用公式原创 2023-03-02 12:29:58 · 622 阅读 · 1 评论 -
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 · 1914 阅读 · 0 评论 -
SLAM中非线性优化问题求解方法
这篇文章是为了解释下面几个问题:上面表格中出现了线性收敛、二阶收敛等收敛性名词,其定义如下:线性收敛:∥ek+1∥≤∥aek∥当∥ek∥比较小,并且0原创 2022-06-14 15:31:40 · 599 阅读 · 0 评论 -
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 · 894 阅读 · 0 评论 -
旋转矩阵求导推导
李群李代数常用结论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 · 2453 阅读 · 2 评论 -
ORB_SLAM3系统框图
前言此框图是对原框图的丰富,主要是基于自己对代码的理解来写的。为了使内容简单一些,只以stereo-imu这种情况来梳理。原框图丰富后框图(点击可放大)原创 2022-02-11 21:44:53 · 1021 阅读 · 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 · 5363 阅读 · 22 评论 -
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 · 2062 阅读 · 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 · 955 阅读 · 0 评论 -
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 · 778 阅读 · 0 评论 -
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 · 1020 阅读 · 2 评论 -
imaging_lidar_place_recognition 论文翻译及源码解析
1. 前言(个人的理解)编译和该算法运行效果参考我上篇博客: https://blog.csdn.net/weixin_37835423/article/details/114312443对于用雷达进行回环检测一直是个难点,主流的基于雷达的开源方案LeGO-LOAM、LIO-SAM、hdl_graph_slam使用的都是最传统的基于欧拉距离的回环检测方法,该方法对于雷达里程计要求较高,如果里程计误差较大,则很容易引起误匹配,其次该方法依赖点云匹配得分来判断回环是否准确,但点云匹配很容易陷入局部最优,在有原创 2021-03-12 19:33:28 · 539 阅读 · 0 评论 -
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 · 375 阅读 · 1 评论 -
稠密建图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 · 1112 阅读 · 7 评论 -
基于词袋模型DBoW2的回环检测实现DLoopDetector (c++)
1. 参考原创 2021-01-21 16:03:35 · 1130 阅读 · 1 评论 -
回环检测中词袋模型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 · 1811 阅读 · 2 评论 -
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 · 1027 阅读 · 0 评论 -
VINS-Mono-紧耦合VIO中IMU残差的优化原理和代码解析
前言VINS-Mono算法中VIO部分是基于优化的方法来做的,其优化的目标函数为:minχ{∥rp−Hpχ∥2+∑k∈B∥rB(z^bk+1bk,χ)∥Pbk+1bk2+∑(l,j)∈Cρ(∥rC(z^lcj,χ)∥Plcj2)}\min_{\boldsymbol{\chi}} \left\{{\left\| \mathbf{r}_{p}-\mathbf{H}_{p}\boldsymbol{\chi} \right\|}^{2} + {\sum_{k\in B}\left\| \mathbf{原创 2020-12-12 19:57:49 · 829 阅读 · 0 评论 -
VINS-Mono-IMU预积分原理及源码解析
IMU预积分原理PVQ增量预积分(可理解为EKF过程中的状态估计)PVQ增量的连续形式参照VINS-Mono论文知识点精炼(翻译)中IMU预积分章节,可知PVQ增量连续时间积分公式如下:αbk+1bk=∬t∈[tk,tk+1]Rtbk(a^t−bat)dt2βbk+1bk=∫t∈[tk,tk+1]Rtbk(a^t−bat)dtγbk+1bk=∫t∈[tk,tk+1]12Ω(ω^t−bwt)γtbkdt(1)\begin{aligned}&\boldsymbol{\alpha}_{b_{原创 2020-12-08 17:12:49 · 747 阅读 · 2 评论 -
VINS-Mono-视觉惯性对齐原理及源码解析
VINS-Mono视觉惯性对齐包括两部分陀螺仪偏置矫正和速度、重力向量、尺度因子初始化陀螺仪偏置矫正原理推导由约束关系通过视觉测得的姿态变化 = IMU预积分获得的姿态变化可获得如下约束方程:qbk+1c0−1⊗qbkc0⊗γbk+1bk=[10](1){\mathbf{q}_{b_{k+1}}^{c_{0}}}^{-1} \otimes \mathbf{q}_{b_{k}}^{c0} \otimes \boldsymbol{\gamma}_{b_{k+1}}^{b_{k}} = \begin{原创 2020-12-05 13:13:08 · 1092 阅读 · 4 评论 -
VINS-Mono-相机与IMU外参标定原理及源码解析
前言相机与IMU的标定方法很多,有在线和离线两种方式.其中通过Kalibr工具箱进行标定的方法属于离线标定,并且还依赖场景中的标定板,是很麻烦的一种标定方法.而在线标定方法操作简便,不需要特定的场景布置,直接多角度移动设备即可实现标定,因此是极力推崇的方法,本文将介绍VINS-Mono中在线标定相机与IMU外参的方法.旋转部分标定原理推导说明: qbk+1bk\mathbf{q}_{b_{k+1}}^{b_{k}}qbk+1bk是从时刻bkb_{k}bk到时刻bk+1b_{k+1}bk+1原创 2020-12-05 11:41:37 · 13332 阅读 · 9 评论 -
VINS-Mono源码解析-特征跟踪
特征跟踪流程框图img_callbackvoid img_callback(const sensor_msgs::ImageConstPtr &img_msg){ // 初始化上一张图像时间戳 if (first_image_flag) { first_image_flag = false; first_image_time = img_msg->header.stamp.toSec(); last_image_t原创 2020-12-03 14:43:06 · 636 阅读 · 0 评论 -
VINS-Mono论文知识点精炼(翻译)
论文地址: VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator摘要VINS-Mono:一种鲁棒的和多功能的单目视觉惯性状态估计器鲁棒的估计器初始化紧耦合非线性优化方法融合IMU测量值和特征观测值,获取高精度视觉惯性里程计使用低功耗回环检测模块四自由度全局位姿图优化地图可保存、加载和拼接关键字: 单目视觉惯性系统、状态估计、传感器融合、同时定位建图引言单目优点: 尺寸小、低功耗、安装原创 2020-12-01 18:34:46 · 617 阅读 · 0 评论 -
Runge-Kutta数值积分方法
在进行vio算法开发时,总是避免不了对imu状态进行积分,当前几种主流的vio算法都是基于Runge-Kutta算法进行数值积分的,其中vins-mono中使用的是中值积分(二阶Runge-Kutta),msckf中使用的是五阶Runge-Kutta.下面我将列出几种Runge-Kutta算法,随着阶数的提高,积分越精确,实现越困难.待积分函数x˙=f(t,x)\dot{\mathbf{x}}=f(t,\mathbf{x})x˙=f(t,x)一阶Runge-Kutta算法(欧拉法)k1=f(tn原创 2020-11-28 17:24:21 · 1773 阅读 · 0 评论 -
MSCKF源码解析
源码路径: https://github.com/daniilidis-group/msckf_mono我注释的源码路径: https://github.com/chennuo0125-HIT/msckf-note/前言MSCKF算法是一个基于EKF(ESKF)框架的算法,但其提出了一种不需要将3D特征点包含到状态向量中的测量模型,使得算法计算规模小,复杂度低.虽然该算法是基于滤波的框架,但其推导过程并不简单,特别是imu预测过程中状态和协方差的预测推导、测量更新等过程.源码虽然能让我们从流程上梳理清原创 2020-11-28 16:26:27 · 1035 阅读 · 0 评论 -
MSCKF原理解析(参照论文)
参考论文地址 https://www-users.cs.umn.edu/~stergios/papers/ICRA07-MSCKF.pdf算法特点基于EKF框架(个人觉得叫ESKF更妥,文章中进行更新的状态都是误差状态)提出了一种不需要将3D特征点包含到状态向量中的测量模型,使得计算规模小,复杂度低.算法组成状态的定义IMU预测(包括状态预测、协方差的更新)状态增广测量模型的构建EKF更新下面将详细描述上述每个过程状态定义IMU状态:XIMU=[GI qˉTbgTG 原创 2020-11-27 19:53:47 · 2792 阅读 · 1 评论 -
相机与imu的标定(Kalibr)
在进行vio算法开发前最重要的事是对设备内参外参的标定,其准确性直接决定了算法的有效性.这里我将对最著名的kalibr标定工具的使用步骤进行说明,包括安装、相机标定、imu标定、相机与imu联合标定等步骤.Kalibr安装1. ros安装(支持ros indigo和ros kinetic版本)2. 安装依赖sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev do原创 2020-11-26 14:39:33 · 3086 阅读 · 0 评论 -
单目视觉惯性里程计(VIO)算法性能比较
算法简述MSCKF多状态约束卡尔曼滤波器构成了许多现代专有VIO系统的基础,但是直到最近,还没有足够的,可公开获得的实现。 原始MSCKF算法提出了一种测量模型,该模型表达了观察特定图像特征的所有相机姿态之间的几何约束,而无需在该状态下维持3D特征位置的估计.OKVIS基于开放式关键帧的视觉惯性SLAM(OKVIS),在关键帧位姿的滑动窗口上利用了非线性优化.代价函数由加权的视觉特征重投影误差和加权的惯性误差项组合而成. 前端使用Harris角点检测器检测特征,然后在特征上计算BRISK描述子以便原创 2020-11-06 11:47:36 · 2844 阅读 · 1 评论 -
Quaternion kinematics for ESKF-更新
ESKF的预测过程分析在上一篇博客,此篇分析更新过程,并配合实际示例验证结果.融合IMU与互补的传感器数据包含以下两个过程:更新(通过观测模型更新ESKF状态δx,P\delta\mathbf{x},\mathbf{P}δx,P)假设观测方程为: y=h(Xt)+v\mathbf{y}=h(\mathbf{X_{t}})+vy=h(Xt)+v,其中vvv是观测传感器的测量噪声,满足v∼N(0,V)v\sim N(0, \mathbf{V})v∼N(0,V).由于h(Xt)h(\mathbf{X原创 2020-11-03 22:08:36 · 2125 阅读 · 14 评论 -
Quaternion kinematics for ESKF-预测
前言在看vins-mono, okvis, msckf等基于imu的vslam论文时,发现这些主流的slam前端vio都需要计算imu的预积分及其协方差,而计算方法类似,都是参考Quaternion kinematics for the error-state KF或Indirect Kalman Filter for 3D Attitude Estimation,可见这两篇文章的影响力,抱着这样的好奇心开始了对其中一篇文章的阅读.四元素和旋转操作(基础)1. 四元素定义和表示形式定义:Q=a+b原创 2020-11-03 18:26:33 · 3772 阅读 · 1 评论 -
使用D415相机运行ORB_SLAM2
ORB特征原创 2020-02-22 12:25:33 · 644 阅读 · 0 评论 -
segmap 编译安装指南
segmap 编译安装指南1、建立工作空间,下载segmap程序包2、源码安装tensorflow1.83、编译tensorflow_ros_cpp程序包4、编译segmapper程序包1、建立工作空间,下载segmap程序包安装依赖项$ sudo apt-get install python-wstool doxygen python3-pip python3-dev python-vi...原创 2019-02-14 20:24:36 · 2055 阅读 · 1 评论