
SLAM
文章平均质量分 87
Hansry
我希望能有个明亮的落地窗,每天都晒一晒太阳。。。
展开
-
Ubuntu16.04下安装AutoWare
平台:ros-kinetic安装依赖:sudo apt-get install ros-kinetic-desktop-full ros-kinetic-nmea-msgs ros-kinetic-nmea-navsat-driver ros-kinetic-sound-play ros-kinetic-jsk-visualization ros-kinetic-grid-map ros-k...原创 2019-11-27 20:56:29 · 1146 阅读 · 1 评论 -
SLAM——图优化篇
1.图优化的入门在上节中,直接用俩俩匹配搭建一个里程计,但是如果:1.错误匹配,整个图就会看起来很奇怪,就是错了。2.误差会累积,常见的现象是:相机转过去的过程能作对,但转回来就很奇怪。3.效率低。由于地图拼接中累计误差是个很严重的问题,所以要保证每次匹配都精确无误,而这是很难实现的。所以我们把所有整的信息都考虑进来,成为一个全slam问题。姿态图(原理部分) 姿态图,是由相机姿态构成的...原创 2017-09-20 22:25:34 · 29962 阅读 · 6 评论 -
RGB-D SLAM——g2o篇(三)
一.g2o的使用在该部分中,我们调用g2o程序优化一个球,就是在论文中经常看到的那个例子,论文名字为《g2o:a general framework for(hyper) graph optimization》,优化前后结果如下:在使用g2o_viewer的时候,如果你是ubuntu14.04使用了现在的版本,那么在运行g2o_viewer的时候会出现错误,原因是:现在的g2o使用Qt...原创 2017-09-24 22:59:50 · 2984 阅读 · 0 评论 -
RGB-D SLAM——回环检测篇(四)
一.回环检测的流程1.关键帧提取:把每一帧都拼到地图中是不明智的选择。因为帧与帧之间距离很近,导致地图需要频繁更新,浪费时间,所以当机器人的运动超过一个”关键帧”,将关键帧拼到地图里就行了。2.回环的检测。回环的本质是识别曾经到过的地方。最简单的回环策略,是将新来的关键帧与之前所有的关键帧进行比较,不过这样会导致越往后,需要比较的帧就越多。所以,稍微快点的方法就是在过去的帧里面随机挑选一些...原创 2017-09-25 17:11:34 · 2213 阅读 · 1 评论 -
Robotics: Estimation and Learning 3 —机器人建图及定位概述(Robotic Mapping and Localization)
一.引言(Introduction to Mapping)我们将学习机器人地图构建,更确切地说,是理解一种基于距离测量的地图构建算法——占据栅格地图(Occupancy Grid Mapping)。机器人的地图是它所环境的模型,我们称建立一个地图的过程为mapping(地图构建)。为了帮助我们的机器人建立一张地图,常见的地图类型有: 1). 尺度地图 (Metric Map) 通常...原创 2018-05-26 23:22:19 · 9122 阅读 · 3 评论 -
Robotics:Estimation and Learning 1—机器人学统计建模中的高斯分布(Gaussian distribution in robotics statistic model)
1.为什么是高斯分布?是什么让高斯分布变得有用而且重要呢? a.描述高斯分布只需要俩个参数,它们是均值和方差,它们就是该分布的本质信息。(Only two parameters) b.高斯分布具有一些很好的数学性质,例如:多个高斯分布的乘积可以形成另一个高斯分布。(Good mathematical properties) c.中心极限定理告诉我们任何随机变量的样本均值的期望都收敛于高斯分布...原创 2018-05-22 23:26:39 · 2121 阅读 · 0 评论 -
Robotics: Estimation and Learning 2—卡尔曼滤波 (Kalman Filter)
1.卡尔曼滤波的动机(Kalman Filter Motivation)如何利用卡尔曼滤波来进行机器人学的贝叶斯估计?卡尔曼滤波器是一种广泛使用的针对线性系统的最优跟踪算法,一些跟踪的例子包括自动驾驶汽车追踪行人和车辆,或者追踪装配线(assembly line)中在传送带(conveyor belt)上运动的部件。我们将讨论卡尔曼滤波器(Kalman filter)的系统模型和测量模...原创 2018-05-24 18:09:08 · 9097 阅读 · 0 评论 -
LIFT: Learned Invariant Feature Points 环境配置
论文:Kwang Moo Yi, Eduard Trulls, Vincent Lepetit, Pascal Fua, ” LIFT: Learned Invariant Feature Transform”, in ECCV 2016, https://arxiv.org/abs/1603.09114 LIFT github 代码: https://github.com/cvlab-epfl...原创 2019-03-29 16:18:40 · 1404 阅读 · 19 评论 -
ORB-SLAM2框架梳理
原创 2019-05-10 15:20:06 · 1123 阅读 · 0 评论 -
Kinetic ROS编译ORB-SLAM
流程:https://blog.youkuaiyun.com/Fishmemory/article/details/53288140遇到问题参照:http://lingtong.de/2018/10/25/Install-ORB-SLAM/原创 2019-05-12 13:51:51 · 337 阅读 · 0 评论 -
Ubutu16.04编译Kintinuous
下载Kintinuous: git clone https://github.com/mp3guy/Kintinuous,严格按照里面的build.sh安装1.安装依赖项 sudo apt-get install -y cmake-qt-gui git build-essential libusb-1.0-0-dev libudev-dev openjdk-7-jdk freeglut3-d...原创 2019-08-05 15:37:34 · 587 阅读 · 1 评论 -
ORB-SLAM2中的g2o
一. 图优化库g2o图优化,是把优化问题表现成图(Graph)的一种形式。这里的图是图论意义上的图。一个图由若干个顶点(Vertex),以及连接着这些定点的边(Edge)组成。进而,用顶点表示优化变量,用边表示误差项。于是,对于任意一个如下形式的非线性最小二乘问题,我们可以构建与之对应的一个图:mina,b,c12∑i=1N∥yi−exp(axi2+bxi+c)∥2\underset{a,b,...原创 2019-08-25 11:52:51 · 1835 阅读 · 0 评论 -
RGB-D SLAM——匹配篇(一)
之前跑过高博的一起做RGB-D SLAM,趁着放假,也稍微整理一下,顺便理一下思路, 由于本人是在Ubuntu上跑的代码,所以用的工具和IDE是CMake+QtCreator,先稍微介绍下如果用QtCreate建立CMake工程,正确来说应该是如何导入CMake工程,然后再进行RGB-D SLAM的搭建。1.通过QtCreator导入CMake工程在任意一个Directory中创建一个...原创 2017-09-17 19:15:02 · 2167 阅读 · 0 评论 -
SLAM学习——建图(二)
1.对单目构建稠密地图的讨论像素梯度的问题在前面中,通过块匹配来获得匹配结果。块匹配的正确与否,依赖于图像块是否具有区分度,有明显梯度的小块将具有良好的区分度。对于梯度不明显的像素,将比较难估计其有效深度。立体视觉一个常见问题:对物体纹理的依赖性。像素梯度与极线的关系:像素梯度平行于极线方向以及垂直于极线方向。 像素梯度垂直于极线:当沿极线寻找的时候,发现匹配程度是一样的,得到不到有效匹配。原创 2017-08-05 16:51:19 · 10929 阅读 · 0 评论 -
SLAM学习——后端(一)
1.概述对于里程计而言,只有短暂的记忆。而在后端优化中,我们更加考虑一段更长时间内(或所有时间内)的状态估计问题。 与之前略有不同,我们令xkxkx_{k}为k时刻的所有未知量,包含了当前位姿与m个路标点,则写成表达式可为:xk=Δ{xk,y1⋯ym}xk=Δ{xk,y1⋯ym}x_{k}\overset{\Delta }{=}\begin{Bmatrix} x_{k}, & y_{1}...原创 2017-07-22 13:54:57 · 3491 阅读 · 1 评论 -
设计前端(二)
1.特征提取和匹配前面我们所说的,仅凭俩帧的估计是不够的。我们会将特征点缓存成一个小地图,计算当前帧和地图之间的位置关系。忽略掉很多关键点,只关心当前帧与上一时刻帧(即参考帧),即我们只考虑如下图所示的运动:以传统的匹配特征点(ORB-slam)——求PnP的方法(接下来可以使用光流法/直接法——ICP求解ICP),流程如下图:1.对新来的当前帧,提取关键点和描述子。 2.如...原创 2017-07-17 23:29:43 · 569 阅读 · 1 评论 -
设计前端(一)
1.搭建VO框架A. SLAM库是一个小型库,库的组织结构如下:1.bin 用来存放可执行的二进制文件。 2.include/myslam存放SLAM模块的头文件,主要是.h文件,当把包含目录设到include,引用自己的头文件时,需要写include“myslam/xxx.h”。 3.src 存放源代码文件,主要是.cpp文件。 4.test 存放测试文件,也是.cpp文件。 5...原创 2017-07-17 19:33:29 · 883 阅读 · 0 评论 -
SLAM学习——李群与李代数
1.李群与李代数基础三维旋转矩阵构成特殊正交群SO(3),而变换矩阵构成了特殊欧氏群SE(3):其中特殊正交群SO(3)和特殊欧氏群SE(3),对加法不封闭,而对乘法封闭。则有:群,是一种集合加上一种运算的代数结构,主要满足有:封闭性、结合律、幺元、逆等性质。而李群,则是指具有连续光滑性质的群。对于李代数,考虑任意旋转矩阵 R,会随着时间变化而变化,即为时间的函数:R(t)。 则有:通过对其时间的原创 2017-07-09 20:12:42 · 18190 阅读 · 0 评论 -
SLAM学习——后端(二)
1.投影模型和BA代价模型对于观测模型而言,我们可以简单的用以下的模型进行表示:z=h(x,y)上图中,P点是世界坐标系的点,中间的畸变模块满足:r2c=u2c+v2crc2=uc2+vc2r_{c}^{2}=u_{c}^{2}+v_{c}^{2}把观测返程抽象出来,有:z=h(x,y) ,这里的x指代此时相机的位姿,即外参R,t,对应的李代数为 ξξ\xi。路边y即为三维点p,若...原创 2017-07-27 01:10:40 · 2966 阅读 · 0 评论 -
SLAM学习——建图问题(一)
1.单目稠密地图的构建在上述中,我们讨论的是稀疏地图的构建,但是在实际的定位、导航和壁障过程中,我们需要有稠密地图。常见的单目稠密地图的构建思路有: 1.单目:通过运动,得出运动轨迹,计算出运动的关系,通过三角测量计算出像素深度。(同下) 2.双目:利用俩个相机的视差计算出像素的深度。(吃力不讨好,但是大型场合可能有比较好的效果。) 3.RGBD:自带深度图,可直接得到像素的深度。(比较好,但原创 2017-08-03 10:30:25 · 7524 阅读 · 3 评论 -
CMake
1.cmake就是linux下的C++管理工具,简单的代码你可以用g++一条条敲,再多些可以用Makefile来管理,cmake就是自动生成makefile的工具,比makefile集成度更高一些2.bin 用来放编译好的可执行二进制文件。 src 用来放源代码。 lib 用来放编译好的库文件。 include 用来放头文件。3.Cmakelist结构:这里写代码片原创 2017-08-07 16:38:27 · 487 阅读 · 0 评论 -
RGB-D SLAM——点云拼接篇(二)
1.OpenCv旋转向量平移向量转换为Eigen变换矩阵在上一节中我们已经知道如何求出俩张图片的旋转向量和平移向量,那么接下来我们需要将旋转向量和平移向量转换成平移矩阵,可以使用Eigen工具来实现:Eigen::Isometry3d cvMat2Eigen(cv::Mat &rvec,cv::Mat &tvec){ cv::Mat R; cv::Rodrigues(rvec,R)原创 2017-09-19 23:46:35 · 3812 阅读 · 2 评论 -
SLAM学习——非线性优化
1.状态估计问题对于SLAM经典模型,我们知道是由一个运动方程和一个观测方程构成,如下方程:{xk=f(xk−1,uk)+wkzk,j=f(yj,xk)+vk,j{xk=f(xk−1,uk)+wkzk,j=f(yj,xk)+vk,j\left\{\begin{matrix} \mathit{x}_{k}=f(\mathit{x}_{k-1},\mathit{u}_{k})+\mathit{...原创 2017-07-10 23:07:42 · 5624 阅读 · 2 评论 -
SLAM学习——回环检测
1.回环检测回环检测的关键,就是如何有效的检测出相机经过同一个地方这件事。它关系到我们估计的轨迹和地图在长时间下的正确性。由于回环检测提供了当前数据与所有历史数据的关联,在跟踪算法丢失后,我们还可以利用重定位。有些时候,我们把仅有前端和局部后端的系统称为VO,把带有回环检测和全局后端的系统称为SLAM。 回环检测的方法:基于里程计的几何关系和基于外观。 基于几何关系是说,当我们发现当...原创 2017-07-28 00:40:29 · 16041 阅读 · 6 评论 -
Ceres库和g2o库的使用
1.Ceres库Ceres库向通用的最小二乘问题的求解,定义优化问题,设置一些选项,可通过Ceres求解。 Ceres求解的最小二乘问题最一般形式为:minx12∑ipi(||fi(xi1,⋯xin)||2),s.t.lj≤xj≤ujminx12∑ipi(||fi(xi1,⋯xin)||2),s.t.lj≤xj≤uj\underset{x}{min}\frac{1}{2}\sum_{i}p...原创 2017-07-11 16:09:45 · 6631 阅读 · 1 评论 -
SLAM——ORB特征提取、对极约束(E\F)、单应矩阵和三角测量
1.特征点法视觉SLAM主要分为视觉前端和优化后端。前端也称为视觉里程计(VO),根据相邻图像的信息估计处粗略的相机运动,给够后端提供较好的初始值。 VO的实现方法,按是否需要提取特征,可分为特征点的前端和不提特征点的直接法前端。VO的主要问题是如何根据图像估计相机的运动:从图像选取有代表性的点(路标),在相机发生微笑变化时会保持不变,接着从各个图片找到相同的点,进而讨论相机位姿估计问题。...原创 2017-07-12 00:58:52 · 11352 阅读 · 0 评论 -
视觉里程计(二)
1.3D-2D:PnPPnP(Perspective-n-Point)是一种求解3D到2D点对运动的方法。描述了当知道n个3D空间点及其投影位置时,如何估计相机的位姿。 对象:双目或RGB-D视觉里程计 原理:如果俩张图像中其中一张特征点已知,那么最少只需要3个点对(一个额外点验证结果) 优势:对比对极约束而言,PnP只需要3个点即可估计其相机的位姿PnP求解问题的方法:3对点估计位...原创 2017-07-12 22:57:06 · 4859 阅读 · 0 评论 -
视觉里程计(四)
1.直接法如下图为空间点P在第一帧和第二帧的映射,而R,t(exp(ξ∧)exp(ξ∧)exp(\xi^{\wedge } ))则为第一帧到第二帧的转换矩阵。在直接法中,不通过特征法,而是通过相机的位姿(在直接法中是已知的)来估计第二个相机中的像素位置。直接法:当相机估计位置不好时,p2p2p_{2} 和 p1p1p_{1}的外观就会有差别。通过优化位姿,来减小差别。这个又是一个最小二...原创 2017-07-15 21:52:16 · 2176 阅读 · 0 评论 -
SLAM学习——相机与图像
1.针孔模型一般而言,我们通过小孔成像来描述相机的成像原理,对其进行数学建模,如下图所示。其中O-x-y-z为相机坐标系,O’-x’-y’-z’为成像平面物理坐标系,o-u-v为像素坐标系,通过此几何模型,我们可以得到:Z/f=-X/X’=-Y/Y’,其中负号表示这个在成像平面上所形成的像是倒的,我们可以对该模型进行一定的处理,将负号去掉,得到以下模型:以上分别为真实成像平面、...原创 2017-07-10 16:05:36 · 2778 阅读 · 0 评论