slam

slam技术面试问题(二)

匆匆过客 提交于 2019-11-26 20:53:33
14.特征匹配(稀疏)和稠密匹配区别 1)稀疏匹配可以快速地求解相机的位姿; 2)稠密匹配可以建立完整地图,但是速度慢、效率低,并且像素梯度不明显的地方对运动估计没有什么贡献。 15.EKF与BA的区别 1)EKF只估计当前时刻的机器人位姿,无法纠正历史的机器人位姿;然而BA更加倾向于使用所有的历史数据,因此它利用了更多的信息; 2)EKF在工作点附近用一阶泰勒展开近似整个函数,但是在工作点较远处不一定成立;然而非线性优化每迭代一次,状态发生改变后,重新对新的估计点做泰勒展开,因此在状态变化较大时也能适用; 3)EKF的可扩展性和鲁棒性更强。(多传感器融合) 16.单目、双目、深度相机的对比 1)单目相机具有尺度不确定性; 2)基线距离越大,测量距离越远,可以用于室内和室外; 3)测量范围窄,噪声大,易受日光干扰,主要用于室内。 17.常用的边缘检测算子和优缺点 边缘检测一般分为三步,分别是滤波、增强、检测。基本原理都是用高斯滤波器进行去噪,之后在用卷积内核寻找像素梯度。常用有三种算子:canny算子,sobel算子,laplacian算子。 1)sobel算子是一阶导数算子,对噪声具有平滑作用,抗噪声能力强,计算量较大,但定位精度不高,得到的边缘比较粗,适用于精度要求不高的场合。 2)canny算子抗噪能力强,它使用两种不同的阈值分别检测强边缘和弱边缘

slam技术面试问题(三)

点点圈 提交于 2019-11-26 20:53:08
26.回环检测常用方法 视觉词袋算法,会对比当前关键帧和与之相连的共视图中的关键帧的相似度,得到一个最低评分;然后遍历所有关键帧找出相似度大于最低评分的闭环备选帧,最后在候选帧中检测具有连续性的候选帧。 闭环检测一般使用词袋模型作为场景匹配方法。而作为一个场景识别问题,闭环检测可以看做是一个视觉系统的模式识别问题。所以可以使用各种机器学习的方法来做,比如什么决策树/SVM,也可以试试CNN方法。不过实际当中要求实时检测,没有那么多时间训练分类器。所以SLAM更侧重在线的学习方法。 27.orbslam工作原理及其优缺点,如何改进 28.SVO中的深度滤波器原理 深度滤波器认为像素点的深度误差满足高斯分布。在每一个关键帧上提取若干特征点,这些特征点的深度未收敛,称为seed。根据当前帧与上一关键帧的坐标变换,计算seed在当前帧上的极线,在极线上寻找与上一关键帧的匹配点,三角化配对点,得到新的深度估计。将当前的深度估计与以往的最优深度估计做融合,更新seed的深度估计。当该深度估计收敛时,将seed添加到地图中。 29.推导重投影误差偏导计算 30.后端边缘化 由于BA的计算量随优化变量的增多而增大,因此必须限制优化变量的数量,但是不能直接丢弃不需要优化的变量,这样会破坏变量之间的约束关系,因此采用边缘化来计算更新量。 31.鲁棒核函数(降低误匹配影响的方法)

视觉SLAM十四讲随笔

☆樱花仙子☆ 提交于 2019-11-26 19:19:04
CH1: clion的使用 断点设置之后,逐行执行 (Step Into) ( F7 ),逐函数执行 (Step Over) ( F8 ),注意0和O在clion中的显示区别,0是中间有个点的,O看起来像0,中间没有原点 Run->Edit Configurations-> Program arugements可直接加入程序所需的文件等等,便于debug的使用 如ch5的图片 Run->Edit Configurations-> Working Directory 可直接加入fstream所需的工作目录,便于debug或者run的使用 如ch4的轨迹文件 TODO 类似与带书签属性的注释 CH2: 文件夹的命名和作用: library是库文件 include是头文件 src是源文件(该源文件不一定是可执行程序的所需的源文件,也可以是生成所需的内部库的源文件) CMakeLists.txt: library是库的意思 include是包含 directory是目录 include_directories() 添加目录 一般find_package()下紧挨着include_directories() 找到外部库之后添加目录到工程中 find_package(OpenCV 3 REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS})

视觉−惯性导航融合SLAM方案

孤人 提交于 2019-11-26 17:06:38
VIO和之前的几种SLAM最大的不同在于两点: 首先,VIO在硬件上需要传感器的融合,包括相机和六轴陀螺仪, 相机产生图片, 六轴陀螺仪产生加速度和角速度。 相机相对准但相对慢,六轴陀螺仪的原始加速度如果拿来直接积分会在很短的时间飘走(zero-drift), 但六轴陀螺仪的频率很高,在手机上都有200Hz。 其次,VIO实现的是一种比较复杂而有效的卡尔曼滤波,比如MSCKF(Multi-State-Constraint-Kalman-Filter), 侧重的是快速的姿态跟踪,而不花精力来维护全局地图, 也不做keyframe based SLAM里面的针对地图的全局优化(bundle adjustment)。 最著名的商业化实现就是Google的Project Tango和已经被苹果收购的Flyby Media, 其中第二代Project Tango搭载了Nividia TK1并有主动光源的深度摄像头的平板电脑, 这款硬件可谓每个做算法的小伙伴的梦幻搭档,具体在这里不多阐述。 主要问题: 使用 IMU 对相机在快门动作期间内估计相机的运动 , 但是由于 CMOS 相机的快门时间戳和 IMU 的时间戳的同步比较困难 , 且相机的时间戳不太准确 , Guo 等 [52] 对时间戳不精确的卷帘快 门相机设计了一种 VIO (Visual inertial odometry)系统 ,

8、使用Gazebo虚拟SLAM和导航

风格不统一 提交于 2019-11-26 16:57:28
1.1、启动Gazebo cd ~/catkin_ws export SVGA_VGPU10=0 source ./devel/setup.bash export TURTLEBOT3_MODEL=burger roslaunch turtlebot3_gazebo turtlebot3_world.launch 1.2、 运行SLAM cd ~/catkin_ws export SVGA_VGPU10=0 source ./devel/setup.bash export TURTLEBOT3_MODEL=burger roslaunch turtlebot3_slam turtlebot3_slam.launch 1.3、运行远程操控 cd ~/catkin_ws export SVGA_VGPU10=0 source ./devel/setup.bash export TURTLEBOT3_MODEL=burger roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch 遥控着走完,建立如下地图 2.1虚拟导航运行顺序 在运行导航之前退出所有执行的程序。然后,如下所示运行相关功能包时,机器人将 显示在之前创建的地图上。在RViz上设置机器人的初始位置并设置目的地后,可以看到 机器人移动到目的地 2.2运行Gazebo

SLAM中的逆深度参数化

折月煮酒 提交于 2019-11-26 14:30:56
参数化问题   在SLAM的建图过程中,把像素深度假设成了高斯分布。那么这么假设是否是合适的呢?这里关系到一个参数化的问题。   我们经常用一个点的世界坐标x,y,z三个量来描述它,这是一种参数化形式。我们认为x,y,z三个量都是随机的,它们服从三维的高斯分布。然而,在极线搜索中使用了图像坐标u,v和深度值d来描述某个空间点(即稠密建图)。我们认为u,v不动,而d服从(一维的)高斯分布,这是另一种参数化形式。那么这两种参数化形式有什么不同吗?我们是否也能假设u,v服从高斯分布,从而形成另一种参数数化形式呢?   不同的参数化形式,实际都描述了同一个量,也就是某个三维空间点。考虑到我们在相机看到某个点时,它的图像坐标u,v是比较确定的(u,v的不确定性取决于图像的分辨率)而深度值d则是非常不确定的。此时,若用世界坐标x,y,z描述这个点,那么根据相机当前的位姿,x,y,z三个量之间可能存在明显的相关性。反映在协方差矩阵中,表现为非对角元素不为零。而如果用u,v,d参数化一个点,那么它的u,v和d至少是近似独立的,甚至我们还能认为u,v也是独立的----从而它的协方差矩阵近似值为对角阵,更为简洁。 逆深度   逆深度(Inverse depth)是近年来SLAM研究中出现的一种广泛使用的参数化技巧。在极线搜索和块匹配中,我们假设深度值满足高斯分布。然而仔细想想会发现

《视觉Slam十四讲》第1讲

对着背影说爱祢 提交于 2019-11-26 00:56:25
Slam十四讲第1讲 重点总结 首先第1讲介绍了slam的基本概念、主要结构、所需掌握的基础知识。 SLAM 是 Simultaneous Localization and Mapping 的缩写,中文译作“同时定位与地图构建”,目的是解决“定位”和“地图构建”两个问题。 《视觉Slam十四讲》主要结构 需要掌握的基础知识 1)高等数学、线性代数、概率论 2)C++语言基础 3)Linux基础 课后习题 有线性方程 Ax = b,当我们知道 A,b,想要求解 x 时,如何求解?这对 A 和 b 需 要哪些条件?提示:从 A 的维度和秩角度来分析。 1) b等于0 ;n元齐次线性放程序A_(m×n) x=0有非零解的充分必要条件是习数矩阵的秩R(A)<n; 2) b不等于0 ;非齐次线性方程组Ax=b有解的充分必要条件是系数矩阵的秩等于增广矩阵的秩,即R(A)=R(B). R(A)=R(B)=n <=> Ax=b有唯一解; R(A)=R(B)<n <=> Ax=b有无穷多解; 高斯分布是什么?它的一维形式是什么样子?它的高维形式是什么样子? 高斯分布又叫正态分布,与高斯分布相关的一个重要定理是中心极限定理,它的内容为:任何分布的抽样分布当样本足够大时,其渐进分布都是高斯分布。 1) 一维高斯分布形式: 2)高维高斯分布: 你知道 C++ 的类吗?你知道 STL 吗?你使用过它们吗?