SLAM
梧桐雪
I am MetaWu from a magicverse where Models are all wrong, some of which are useful.
展开
-
SLAM踩坑记:在XTDrone上跑通ORB-SLAM2
今天在安装OPenCV的过程中,反复出现一个现象,提示出现c++: internal compiler error: killed (program cc1plus)。原创 2020-12-11 20:41:34 · 889 阅读 · 7 评论 -
三张知识图谱掌握卡尔曼滤波中的重要概念
一、状态估计中的重要概念二、线性系统和KF三、非线性系统和EKF原创 2020-11-11 21:37:54 · 230 阅读 · 0 评论 -
对《视觉SLAM十四讲》4.3.5节李代数求导的推导过程的勘误
一、引言在《视觉SLAM十四讲》(1)的4.3.5节,推导了李代数求导的表达式,我认为其中存在一些容易产生歧义的符号使用,本文先展示我认为正确的推导,然后提出了修改建议。二、正确推导过程我们假设旋转并且微扰后的位姿是一个关于ϵ\boldsymbol\epsilonϵ和 ξ\boldsymbol\xiξ的多元函数 f(ϵ,ξ)f(\boldsymbol\epsilon,\boldsymbol\xi)f(ϵ,ξ),可表示为下式:因为是微扰,所以 是一个在0附近的小量,即:且根据指数函数性质,有以下原创 2020-10-28 14:58:17 · 557 阅读 · 0 评论 -
SLAM基础:对极约束的知识图解
在slam中,我们可以使用对极几何来求解2d-2d条件下的相机位姿估计问题,而对极约束是对极几何的基础,然而这个基础所牵涉的概念比较多,因此我制作了一下知识图谱方便理解。一、对极约束的概念二、对极约束的数学模型...原创 2020-10-21 14:48:38 · 909 阅读 · 0 评论 -
一图总结相机运动计算知识图谱
我们的目标是求解相机的运动计算,也就是求解相机的R\bf{R}R和t\bf{t}t,这是SLAM的最基本问题之一,常用的有三种方法如下,分别是对极几何、ICP、PnP,对应的是2d2d、2d3d和3d3d三种求解方法。原创 2020-10-21 11:30:54 · 291 阅读 · 0 评论 -
《视觉SLAM十四讲》特征点知识图谱总结
SLAM中有很多英文缩写的概念(acronym),第一次接触的时候会比较抽象,下面就对特征点部分的名词进行总结,方便之后的复习:一、特征点(FeaturePoint)可以理解成图像中有特点的点,容易被人或机器识别出来,比如角点、边缘、区块等等,下图总结了特征点的分类情况;特征点包含关键点和描述子两种信息,关键点记录了这个点在图像中的位置,描述子则通过把这个点的更多信息(比如方向、大小等等)记录到一个向量当中。二、人工特征点研究人员设计了许多更加稳定的图像特征,SIFT、ORB和SURF是其中比原创 2020-10-21 10:32:11 · 905 阅读 · 0 评论 -
SLAMBook2踩坑记之:Fatal error :Eigen/core没有那个文件或目录
slambook默认的的eigen是安装在"/usr/include/eigen3"目录下,但是对于本机,使用默认的安装路径,使用cmake…和cmake指令之后,会出现以下的报错:/ home/robotlab1/slam/slambook2/ch7/pose_estimation_3d2d.cpp :6 :10 :fatal error :E igen/core没有那个文件或目录# include< Eigen/core compilation terminated. CMakeFiles原创 2020-10-19 17:41:40 · 4448 阅读 · 1 评论 -
图解卡尔曼滤波
卡尔曼滤波的基本过程如上图所示,下面我们来理解一下这个公式中的各个字母分别表示的是什么意思?x^k\bf{\hat{x}_k}x^k:表示k时刻,带估计的状态变量的最优估计,比如机器人的位置和速度最优估计构成的矢量。Pk\bf{{P}_k}Pk:表示k时刻,带估计量的协方差矩阵,比如位置和速度,本质上来说他们是随机变量,也就是说有会存在一个分布,一般来说他们是服从高斯分布的,两两组合可以生成一个协方差矩阵。卡尔曼滤波假设状态所有的变量都是随机的且都服从高斯分布,每个变量都有其对应的均值以及方差.原创 2020-10-07 17:10:37 · 1938 阅读 · 0 评论 -
张氏标定法求相机模型中的内参(Intrinsics)
张正友2000年在《A Flexible New Technique for Camera Calibration》一文中提出了一种灵活的新技术来方便地校准相机。它只需要相机观察在几个(至少两个)不同方向显示的平面图案。无论是相机还是平面图案都可以自由移动。运动是不需要知道的。对径向透镜畸变进行了建模。所提出的程序包括一个封闭形式的解决方案,然后是基于最大似然准则的非线性细化。通过计算机仿真和实测数据对该方法进行了验证,取得了良好的效果。与传统的使用两正交平面或三正交平面等昂贵设备的技术相比,该技术使用方便原创 2020-09-03 23:48:10 · 1479 阅读 · 2 评论 -
SLAMBook踩坑记之CH5:相机与图像
/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: No such file or directory原创 2020-09-02 00:25:53 · 1140 阅读 · 0 评论 -
cmake的find_package指令是如何运行的
find_package是cpp工程中.cmake文件里面重要的指令,顾名思义,它的作用是就是找到工程需要引用的头文件(拓展名为.h的header file)和库文件(拓展名为.o或者.so的library)。然后得到他们的绝对路径XXX_INCLUDE_DIR和XXX_LIBRARIES。注意对XXX_INCLUDE_DIR和XXX_LIBRARIES赋值的过程定义在FindXXX.cmake专业文件里面,赋值是通过find_path来完成的,其实就是把绝对路径拆成了两部分,第一部分是文件名字NAME,原创 2020-08-31 13:34:25 · 2684 阅读 · 0 评论 -
旋转矩阵的项恰好等于其余子式
今天在推导公式的时候发现了一个有趣的结论,就是旋转矩阵中的项恰好等于其代数余子式(minor),这样我们可以快速地验证一个矩阵是否为旋转矩阵了。举个例子,在如下旋转矩阵R\textbf{R}R中:我们可以通过旋转矩阵的正交性和SO(3)群的性质来证明,假设矩阵R\textbf{R}R对应的新坐标系的三组基为e1\textbf{e}_1e1,e2\textbf{e}_2e2,e3\textbf{e}_3e3,并且假设Base坐标系(世界坐标系)的三组基为i\textbf{i}i,j\textbf原创 2020-08-30 19:41:29 · 801 阅读 · 0 评论 -
借助李群李代数完成对位姿的求导计算
一、对位姿求导数的意义我们在对机器人进行位姿估计时的目标函数如下:为了能取到损失函数J的最小值,我们需要对目标函数关于变换矩阵T求导数,我们可以不严谨非正式地记为如下表达式:然而,变换矩阵T,包括其中的重要组成部分旋转矩阵R,都不满足对加减法的封闭,因此我们需要采用新的方法,那就是引入李群和李代数。二、SO(3)李群和so(3)李代数满足CAI2性质(Closure, Associativity, Identity-element, Inversible)的集合与运算的代数结构称为群。我们知道原创 2020-08-29 01:10:35 · 2345 阅读 · 0 评论 -
图解C++工程的编译原理
高翔SLAM理论与实践公开课中介绍了一个族简单C++工程(HelloSLAM)的编译过程,我把这个过程整理成为了一张图片如下,并且在后面附上注释。总的来说一个C++工程的编译和执行分成以下几个步骤预处理:也就是对#include等带#符号的头文件等进行处理,这里需要编写.h文件来把模块中定义的函数名及其使用方法(也就是接口)定义清楚,以便于在主程序中进行调用。编译,这个过程就是把.cpp编译成.o文件(机器码文件)的过程,当然只有主程序mail.cpp才会编译成可执行文件,其他的模块文件只会根据配原创 2020-08-11 15:24:49 · 750 阅读 · 0 评论 -
Ubuntu18.04下运行ORB-SLAM2踩坑记
今天做了一下高翔SLAM十四讲的作业如下,文档讲的已经比较详细了,但是还是会遇到一些坑,在此记录。比较完整的参考链接(不过有些坑他也没有提到),特别是版本问题,这个日新月异,很难保证今天能用的版本或者版本名,明天就失效了,随缘随缘。坑一:usleep问题(error: ‘usleep’ was not declared in this scope)重点参考这篇博客(写的还不错),在以下文件中加入一行代码即可:#include <unistd.h>Examples/Monocu原创 2020-08-15 00:31:20 · 2781 阅读 · 1 评论 -
Ubuntu18.04下Kdevelop报错“Failed to specify program to start:”解决方法
今天在使用Kdevelop的时候遇到了以下报错:*** Failed to specify program to start: ***查了一个小时才发现问题在于Current Launch Configuration配置出错了。解决方案是依次点击Run-Current Launch Configuration,然后选择cpp程序的文件名而不是New compiled Binary Laucher...原创 2020-08-27 15:56:10 · 1327 阅读 · 1 评论 -
旋转矩阵的两种用法
我们在研究机器人或者计算机视觉的时候经常需要用到旋转矩阵,常用R\textbf{R}R来表示一个旋转操作,它的组成可以简单的认为是原来坐标系的两组正交基ex\textbf{e}_xex和ey\textbf{e}_yey,在旋转后在世界坐标系中的新坐标wex′^w\textbf{e}_x'wex′和wey′^w\textbf{e}_y'wey′,如下图所示。看似简单,但是其实这个矩阵有着丰富的含义,至少有以下两种意义,如果不仔细的话,很容易就搞混淆了,下面就总结一下旋转举证的这两个作用。一、动态点原创 2020-08-25 22:28:49 · 8677 阅读 · 1 评论 -
旋转矩阵罗德里格斯公式(Rodriguez formula)的理解证明
罗德里格斯公式(Rodriguez formula)是计算机视觉中的一大经典公式,在描述相机位姿的过程中很常用,其形式如下:我们假设v⃗\vec{v}v向量绕n⃗\vec{n}n轴转了θ\thetaθ角度,得到了v⃗′\vec{v}'v′向量,R\bf{R}R为旋转矩阵,我们由旋转矩阵的概念可以知道,他们的关系如下:v⃗′=Rv⃗\vec{v}'=\textbf{R} \vec{v}v′=Rv也就是说旋转前的向量坐标乘以旋转矩阵,等于旋转后的向量坐标,以下是这个公式的推导过程(该推导及下图来自于you原创 2020-08-24 21:21:10 · 5095 阅读 · 0 评论 -
SLAMBOOK2踩坑记之:plotTrajectory.cpp中的undefined reference to symbol ‘glTexImage2D‘错误
./cmake/FindPangolin.cmakefind_path(PANGOLIN_INCLUDE_DIR NAMES pangolin.h PATHS "/usr/local/include/pangolin/" )find_library(PANGOLIN_LIBRARY NAMES pangolin PATHS "/usr/local/lib/" )MESSAGE("THIS IS A DEBUG INFO.")MESSAGE("${PANGOLIN_INCLUDE_DI原创 2020-08-26 02:27:08 · 2415 阅读 · 0 评论 -
通俗易通解释SLAM问题的数学描述:运动方程和观测方程
高翔博士在他的《视觉SLAM十四讲》中把SLAM问题的数学描述抽象成了两个数学方程,以下对此做个总结,并且对此做一些通俗易懂的解释:一、方程的总体形式作为理性层次的描述,我们引入数学方程来描述SLAM过程,其中第一个方程叫做运动方程、第二个方程叫做观测方程,想象一下我们在研究SLAM的时候肯定需要观测机器人(无人汽车、无人机等都可以统称为机器人)的运动(画面感很强哈哈),这样很容易理解并且记忆这两个方程的名称和意义:二、变量的含义我们看到,这两个方程中有大量的英文字母作为变量存在其中,下面介绍一下原创 2020-08-28 14:29:03 · 6262 阅读 · 5 评论