![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
视觉SLAM十四讲学习笔记
文章平均质量分 91
我只是一只自动小青蛙
这个作者很懒,什么都没留下…
展开
-
LK光流法与反向LK光流法
文章目录一、基本概念二、LK光流法1、空间点在图像中的灰度表示一、基本概念光流法:光流法是一种描述像素随时间在图像之间运动的方法稀疏光流法:计算部分像素运动的称为稀疏光流法,以 Lucas-Kanade 光流为代表稠密光流法:计算所有像素的称为稠密光流法,以 Hom-Schunck 光流为代表灰度不变假设:同一个空间点的像素灰度值,在各个图像中是固定不变的。这是光流法的基本假设,同时也是一个很强的假设,在现实中很难得到保证;因此光流法得出的结果可能存在偏差二、LK光流法1、空间点在图像中的灰度原创 2021-07-19 17:42:33 · 3965 阅读 · 3 评论 -
ELAS_ROS算法在KITTI数据集上生成稠密点云
ELAS是一种基于概率模型的有效立体匹配算法,能够给予双目图像生成深度图,进而转化为点云.该算法的一种改进算法为LS-ELAS,其论文发表在2017年ICRA上,文章题目为"LS-ELAS: Line Segment based Efficient Large Scale Stereo Matching".本片博客主要介绍ELAS算法的一种开源代码ELAS_ROS安装,及其在KITTI数据集上的具体实现.一.KITTI数据集下载与转换为rosbag本文使用的KITTI数据集由kitti2bag转换为.原创 2021-03-08 23:22:08 · 2649 阅读 · 8 评论 -
利用G2O拟合曲线
一、CMakeLists文件cmake_minimum_required(VERSION 3.15)project(byg2o)list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)#OpenCVfind_package(OpenCV REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS})#g2ofind_package(G2O REQUIRED)include_direc原创 2020-10-27 17:42:15 · 178 阅读 · 0 评论 -
第六讲-利用Ceres进行曲线拟合
一、CMakeListscmake_minimum_required(VERSION 3.15)project(byceres)#Opencvfind_package(OpenCV REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS})#CERES 调用ceres时候必须调用eigen#注意这里Ceres只有首字母大写find_package(Ceres REQUIRED)#注意这里CERES要大写include_directorie原创 2020-10-27 15:20:44 · 793 阅读 · 1 评论 -
Ubuntu18.04安装Ceres库和G20库
一、安装依赖zhangman@zhangman-G3-3579:~$ sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev二、下载Ceres包https://github.com/ceres-solver/ceres-solver/tree/e51e9b46f6ca88ab8b2266d0e362771db6d98067三、编原创 2020-10-27 10:57:18 · 2706 阅读 · 0 评论 -
手写高斯牛顿法
二、CMakeListscmake_minimum_required(VERSION 3.15)project(GuassNewton)set(CMAKE_CXX_STANDARD 14)#OpenCVfind_package(OpenCV REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS})#Eigeninclude_directories("/usr/include/eigen3")add_executable(GuassNe原创 2020-10-27 10:25:34 · 670 阅读 · 3 评论 -
高斯牛顿法详解
一、高斯牛顿法发展历程1、从上倒下为高斯牛顿法的前世今生已经未来的演化:最速下降法(一阶梯度法)牛顿法(二阶梯度法)高斯牛顿法列文伯格法马夸尔特法二、高斯牛顿法引出的前世注:由于原理的相似性,最速下降法和牛顿法可以统称为一阶,二阶梯度法1、最速下降法考虑如下优化目标函数:...原创 2020-10-26 14:29:10 · 38909 阅读 · 24 评论 -
第五讲5.4.2-rgbd相机点云还原和拼接
一、CMakeLists文件cmake_minimum_required(VERSION 3.15)project(rgbd)find_package(OpenCV REQUIRED)find_package(Pangolin REQUIRED)set(CMAKE_CXX_STANDARD 14)include_directories("/usr/include/eigen3")add_executable(rgbd main.cpp)target_link_libraries(rgb原创 2020-10-22 17:19:24 · 572 阅读 · 0 评论 -
第五讲5.4.1双目视觉生成点云
一、CMakeLists文件cmake_minimum_required(VERSION 3.15)project(stereoVision)find_package(Pangolin REQUIRED)find_package(OpenCV REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS})include_directories(${Pangolin_INCLUDE_DIRS})set(CMAKE_CXX_STANDARD 14)原创 2020-10-22 16:14:36 · 1994 阅读 · 3 评论 -
第五节-5.3.2图像去畸变
一、CMakeLists文件cmake_minimum_required(VERSION 3.15)project(undistorImage)find_package(OpenCV REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS})set(CMAKE_CXX_STANDARD 14)add_executable(undistorImage main.cpp)target_link_libraries(undistorImage ${O原创 2020-10-22 09:40:32 · 567 阅读 · 0 评论 -
第五讲-5.3.1OpenCV的基本使用方法
一、CMakeLists文件cmake_minimum_required(VERSION 3.15)project(imageBasics)set(CMAKE_CXX_STANDARD 14)#寻找指定版本的OpenCV库find_package(OpenCV REQUIRED)#添加OpenCV头文件include_directories(${OpenCV_INCLUDE_DIRS})add_executable(imageBasics main.cpp)#链接OpenCV库tar原创 2020-10-21 17:02:34 · 204 阅读 · 0 评论 -
第五章第一节-相机与图像-相机模型
相机将三维世界中的点投影到二维图像平面,这一过程可以由针孔模型和畸变模型共同描述,这两个模型构成了相机的内参数。一、针孔相机模型1、针孔相机原始模型针孔相机模型如图所示:相机坐标系O−xyzO-xyzO−xyz:从相机后面看,相机坐标系的zzz轴指向前方,xxx轴指向右方,yyy轴指向下方。点OOO是相机的光心。物理成像平面O′−x′y′O' - x'y'O′−x′y′:x′x'x′轴方向与xxx轴方向一致;y′y'y′轴方向与yyy轴方向一致。焦距fff:光心到物理成像平面的距离设真实世界原创 2020-10-20 17:31:28 · 426 阅读 · 1 评论 -
第四章第五节-相似变换群与李代数
一、相似变换群相似变换矩阵组成的李群成为相似变换群,记做Sim(3),这个群只会在单目视觉中用到,在双目SLAM和RGB-D SLAMZHONG不会用到。二、相似变换李代数1、相似变换李代数其中,2、相似变换的扰动模型(左扰动)一个点ppp经过一个相似变换SSS后为SpSpSp:...原创 2020-10-18 14:07:04 · 593 阅读 · 0 评论 -
第四章第四节-实践:Sophus
一、Sophus库的安装和使用1、Ubuntu18.04下安装Sophus库1)从以下网址中下载Sophus库:https://github.com/strasdat/Sophus/tree/13fb3288311485dc94e3226b69c9b59cd06ff94e或者从视觉SLAM十四讲第二版的github链接中进入:https://github.com/gaoxiang12/slambook2/tree/master/3rdparty2)下载解压后将文件夹命名为Sophus3)在So原创 2020-10-17 16:38:26 · 1702 阅读 · 0 评论 -
第四讲-第三节-李代数求导与扰动模型
一、BCH公式与近似模型1、BCH公式这一节,我们研究在SO(3)SO(3)SO(3)上两个矩阵相乘时其在so(3)so(3)so(3)上对应的李代数会如何变化。为了便于讨论,我们将指数映射:R1R2=exp(ϕ1∧)exp(ϕ2∧)=exp(f(ϕ1∧,ϕ2∧)){{\rm{R}}_1}{{\rm{R}}_2}{\rm{ = }}\exp (\phi _1^\wedge)\exp (\phi _2^\wedge) = \exp (f(\phi _1^\wedge,\phi _2^\wedge原创 2020-10-15 16:35:22 · 1442 阅读 · 0 评论 -
第四章-第二节-指数与对数映射
一、SO(3)SO(3)SO(3)上的指数映射对于so(3)so(3)so(3)中的元素ϕ\phiϕ,可计算其模长及方向向量分别为θ\thetaθ和aaa。经过数学推导(详见视觉SLAM十四讲79页),SO(3)SO(3)SO(3)上的指数/对数映射公式如下:已知ϕ\phiϕ,求解R=exp(ϕ∧)R{\rm{ = }}\exp (\phi ^ \wedge)R=exp(ϕ∧),即指数映射公式:已知RRR,求解ϕ\phiϕ,即对数映射公式:θ=arccostr(R)−12a=Ra\begin{原创 2020-10-15 11:22:58 · 1292 阅读 · 0 评论 -
第四章-第一节-李群与李代数基础
一、引入李群与李代数原因SLAM的关键问题之一是优化当前相机的估计位姿,使得估计位姿下的观测结果与实际观测结果的误差最小,而作为优化目标之一的旋转矩阵是带有约束的(正交且行列式为1),这会为优化带来困难,因此引入李群与李代数,将其转化为无约束优化问题。一、群1、引入李群与李代数原因SLAM的关键问题之一是优化当前相机的估计位姿,使得估计位姿下的观测结果与实际观测结果的误差最小,而作为优化目标之一的旋转矩阵是带有约束的(正交且行列式为1),这会为优化带来困难,因此引入李群与李代数,将其转化为无约束优化原创 2020-10-15 10:33:51 · 401 阅读 · 0 评论 -
Ubuntu18.04安装pangolin
一、安装依赖库sudo apt-get install libglew-devsudo apt-get install cmakesudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev二、利用git安装在home下打开终端git clone https://github.com/stevenlovegrove/Pangolin.gitcd Pangolinmkdir buildcd bui原创 2020-10-10 15:37:00 · 1469 阅读 · 0 评论 -
第三讲第六节-Eigen几何模块
一、Eigen几何模块的引入原创 2020-10-10 10:37:25 · 842 阅读 · 0 评论 -
第三章第五节-相似、仿射、射影变换
引言:除了欧式变换,空间中还有其他的变换,只不过欧式变换是最简单的变换,他不改变物体的形状,而其他的变换则会改变物体的外形。和欧式变换相似,其他变换均有类似的矩阵表示。一、相似变换变换性质: 相似变换在欧式变换的基础上多了一个自由度,为7自由度,允许物体进行均匀缩放。相似变换矩阵TS{T_S}TS:TS=[sRt0T1]{T_S} = \left[ {\begin{matrix}{sR}&t\\{{0^T}}&1\end{matrix}} \right]TS=[sR0T原创 2020-10-09 17:17:04 · 893 阅读 · 0 评论 -
第三讲第四节-四元数
一、四元数的定义1、引入四元数的意义由于旋转矩阵是冗余的,而欧拉角具有奇异性,因此Hamilton找到了一种类似于复数的代数-四元数来表示旋转,它是紧凑的,且没有奇异性。2、由复数的引入在二维平面上,我们想要将复平面的向量旋转θ\thetaθ角时候,我们可以将复向量乘以单位长度复数eiθ{e^{i\theta }}eiθ,而eiθ{e^{i\theta }}eiθ可以写成复数形式:eiθ=cosθ+isinθ{e^{i\theta }} = \cos \theta + i\sin \thet原创 2020-10-09 16:08:43 · 390 阅读 · 0 评论 -
第三讲-第三节 旋转向量与欧拉角
一、旋转向量1、前两节所述的旋转矩阵和变换矩阵的缺点1)旋转矩阵用9个量表达3个自由度,应该有更紧凑的表达方式2)旋转矩阵存在必须是正交矩阵且行列式为1的约束。会给估计和优化旋转矩阵带来困难。2、旋转向量的引入在三维空间中的任意旋转都可以表示为以空间中的某一向量为轴,旋转一定角度。其中,向量反映了这个旋转的性质,即怎么转;而角度则反映了这个旋转的程度,即旋转到多大程度。通常,对于任意旋转,我们记其对应的旋转轴为向量nnn,旋转角度为θ\thetaθ,则θn\theta nθn可以描述该旋转,我们原创 2020-10-05 22:14:32 · 1982 阅读 · 0 评论 -
第三讲 三维空间刚体运动
一、旋转矩阵对于刚体来说,其在空间中的状态由位置和姿态描述,称之为姿态。如,相机在的(0,0,0)处,这是在描述相机的位置。相机朝向为正前方,这是在描述相机的姿态。1、点、向量和坐标系1)定义点:点是空间中的基本元素,没有长度和体积。向量:由一个点指向另外一个点就是一个向量。!!!一般向量用列向量表示!!!坐标系:点和向量要想与坐标联系起来,说先要选定一个坐标系。2)点和向量的坐标三维空间中点的坐标:在给定坐标系下可以直接表示为(x,y,z)三维空间中向量的坐标:原创 2020-09-08 15:31:08 · 2062 阅读 · 0 评论 -
第2讲 初识SLAM
一、引子:小萝卜的例子1、机器人能够自主移动的两个重要能力:定位:了解自身的(位置)状态建图:连接外在的环境(地图)2、机器人常用定位和建图方法地上铺设引导线;墙上张贴识别二维码;安装无线电定位设备(常用于仓储机器人);安装GPS接收机3、传感器分类1)携带与机器人本体上的传感器:例如:相机,激光雷达,IMU,轮式编码器优点:对机器人运行环境约束小 缺点:测量的是简介的物理量而不是直接的位置数据2)外部传感器(布置在环境中的):例如:导轨,二维码优点:直接..原创 2020-08-25 21:14:48 · 645 阅读 · 0 评论 -
第一讲作业 预备知识
1.有线性方程 , 若已知和,需要求解,该如何求解?这对和有哪些要求?提示:从 A 的维度和秩角度来分析。设向量的维度为,定义的增广矩阵为: ,方程组无解,方程组有唯一解,方程组有无穷解,不可能出现,增广矩阵的秩大于等于系数矩阵的秩(矩阵加入一列,其秩只能增大,不可能变小)2. 高斯分布是什么?它的一维形式是什么样子?它的高维形式是什么样子?1)高斯分布及其一维形式高斯分布即正态分布,其图形特点为中间高,两头低,是钟形曲线。在高斯...原创 2020-08-04 21:47:23 · 740 阅读 · 0 评论 -
第一讲 预备知识
参考声明:本笔记多数内容均参考值高翔博士《视觉SLAM十四讲(第二版)》一、本书主要内容1、SLAM定义SLAM 是 Simultaneous Localization and Mapping 的缩写,中文译作"同时定位与地图构建" 。它是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。如果这里的传感器主要为相机,那就称为"视觉 SLAM" 。SLAM要解决的问题:“定位”与“建图”,定位即估计自身位置,建图即构建周围环境模型SLAM面原创 2020-08-04 19:52:07 · 209 阅读 · 0 评论