对SLAM的理解

2023-05-16

https://blog.csdn.net/u010128736/article/details/53141681

一、我与SLAM不得不说的二三事

早在一年多前就接触了一点SLAM,当时研究的是LSD-SLAM,一个半稠密的SLAM系统,也是当时可以说是最好的SLAM系统。当时看着算法建出的美丽的点云图、准确的摄像机定位、以及作者在youtube上放出的大场景建图视频和基于LSD-SLAM做的手机端AR应用视频,真的是被LSD-SLAM酷炫的效果所吸引。然后自己凭借着蹩脚的视觉几何基础啃着论文,在ROS上搭着环境,也测试了自己采集的数据,还把运行离线数据的部分从ROS里抽离出来移植到了Windows平台上。当时用无人机拍了一组数据如下图所示:
这里写图片描述

那会儿确确实实学习到了很多技能,但对SLAM的理解还是不是那么透彻。后来因为被叫去做其他项目,就没有再接着往下研究了。下面附一下LSD-SLAM的相关网址,感兴趣的朋友可以去关注一下。
LSD-SLAM的主页:http://vision.in.tum.de/research/vslam/lsdslam
Github网址:https://github.com/tum-vision/lsd_slam

随着项目的需要,以及视觉几何知识的积累,现在需要用到目前更高效、更便于二次开发的最新的ORB-SLAM,既然又要拾起SLAM,所以想整理一下有关于SLAM的一些东西,便于更好地理解。ORB-SLAM是一个基于特征点的稀疏建图框架,但对于大规模的KITTI这些测试数据来说,也是相当漂亮的。目前国内网上找到讲解的比较好的、在该领域比较活跃是大神是高博,ID为半闲居士。知乎上一些关于SLAM的问题也能看到高博的讲解。讲的还是很好的,这里贴一个高博的博客地址,大家可以去拜读一下。http://www.cnblogs.com/gaoxiang12/。在附上LSD-SLAM和ORB-SLAM运行的十分漂亮的结果图~

二、SLAM综述

SLAM,全称是Simultaneous Localization and Mapping,即同时定位与建图。所以我们能看到SLAM的主要工作是定位以及建图。SLAM目前有很多实现方法,主要分为激光雷达和视觉传感器两个方向。视觉SLAM(Visual SLAM)包括使用单目SLAM、双目SLAM和以Kinect为代表的使用景深摄像头的RGB-D SLAM。Visual SLAM领域比较好的SLAM系统有:

单目SLAM:
(1).PTAM(Parallel Tracking And Mapping):2007年 很牛逼的SLAM项目,是第一个使用BA完成实时SLAM的系统,论文中提出的关键帧以及多线程处理思想成为之后视觉SLAM标配。但其由于缺乏回环检测和重定位等功能,只能作用于小规模的场景,且稳定性也不是很高;
(2).DTAM(Dense tracking and mapping in real-time):2011年,Direct SLAM方法的鼻祖;
(3).LSD-SLAM(Large-Scale Direct Monocular SLAM):2014年一个半稠密SLAM系统;
(4).ORB-SLAM:2015年一个比较完整的基于特征点的SLAM系统。

RGBD:
(1).KinectFusion 2011
(2).RGBD-SLAM2 2014
(3).ElasticFusion 2015
三、SLAM框架

视觉SLAM主要分为几个模块:数据采集、视觉里程计(Visual Odometry)、后端优化、建图(Mapping)、闭环检测(Loop closure detection)。如下图所示:
这里写图片描述
视觉里程计

视觉里程计就是利用一个图像序列或者一个视频流,计算摄像机的方向和位置的过程。一般包括图像获取后、畸变校正、特征检测匹配或者直接匹配对应像素、通过对极几何原理估计相机的旋转矩阵和平移向量。
这里写图片描述
后端优化

后端优化理论上来说,如果视觉里程计模块估计的相机的旋转矩阵R和平移向量t都正确的话,我们就能得到完美的定位和建图了。但实际试验中,我们得到的数据往往有很多噪声,且由于传感器的精度、错误的匹配等,都对造成结果有误差。并且由于我们是只把新的一帧与前一个关键帧进行比较,当某一帧的结果有误差时,就会对后面的结果产生累计误差,最后的结果肯定误差越来越大。为了解决这个问题,引入后端优化。
  后端优化一般采用捆集调整(BA)、卡尔曼滤波(EKF)、图优化等方式来解决。其中基于图优化的后端优化,效果最好。Graph-based SLAM一般使用g2o求解器,进行图优化计算。

闭环检测

后端优化可能得到一个比较优的解,但当运动回到某一个之前去过的地方,如果我们能认出这个地方,并找到那个时候的关键帧进行比较,我们就可以得到比单用后端优化更准确更高效的结果。闭环检测就是要解决这个问题。
  闭环检测有两种方式,一是根据估计出来的相机的位置,看是否与之前否个位置邻近;另外一种是根据图像,去自动识别出来这个场景之前到过,并找到那时候的关键帧。现在比较常用的是后一种方法,其实是一个非监督的模式识别问题。比较常用的方法是使用Bag-of-Words(BOW),ORB-SLAM就是使用这个方法来进行闭环检测。
原文:https://blog.csdn.net/u010128736/article/details/53141681

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对SLAM的理解 的相关文章

  • 三维刚体变换

    欢迎访问我的博客首页 三维刚体变换 1 坐标系 1 1 空间坐标系 1 2 右手坐标系与像素坐标系 2 旋转与平移 2 1 推导旋转 2 2 推导平移 2 3 推导变换 2 4 刚体变换 2 5 坐标系旋转与向量旋转 3 链式变换 4 Ei
  • No rule to make target

    No rule to make target 引言 解决方法 引言 报错 No rule to make target Thirdparty g2o lib libg2o so needed by lib libygz SLAM so 停止
  • 从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)

    背景 SLAM小白 因为项目需要花了两天时间编译代码 连接雷达实现了交互 踩了很多坑 简单记录一下 让后面感兴趣的朋友少走点弯路 肯定有很多不专业的 错误的地方 还请大家不吝赐教 噗通 也可以见知乎 https zhuanlan zhihu
  • 各向异性(anisotropic)浅提

    文章目录 各向异性 anisotropic 定义 哪种物体具有各向异性反射 什么导致各向异性反射 总结 各向异性 anisotropic 定义 它指一种存在方向依赖性 这意味着在不同的方向不同的特性 相对于该属性各向同性 当沿不同轴测量时
  • ORB_SLAM3复现——上篇

    ORB SLAM3 前言 1 ORB SLAM3 2 准备环境 2 1 C 11 Compiler 2 2 Pangolin 2 3 Opencv 2 4 Eigen 3 复现ORB SLAM3 3 1 下载代码 3 2 执行build s
  • np.meshgrid()函数 以及 三维空间中的坐标位置生成 以及 numpy.repeat()函数介绍

    一 np meshgrid 函数 1 np meshgrid 介绍 X Y np meshgrid x y 代表的是将x中每一个数据和y中每一个数据组合生成很多点 然后将这些点的x坐标放入到X中 y坐标放入Y中 并且相应位置是对应的 下面是
  • 速腾聚创雷达最新驱动安装(包含ring和timestamp)运行lio-sam

    记录一下搞slam的过程 ring和timestamp 最近想跑lio sam 需要用到ring和timestamp两个参数 lio sam作者用的velodyne雷达是带这两个参数的 但是rs雷达的老版驱动录制的点云包没有这两个参数 在g
  • 视觉SLAM漫谈(二):图优化理论与g2o的使用

    视觉SLAM漫谈 二 图优化理论与g2o的使用 1 前言以及回顾 各位朋友 自从上一篇 视觉SLAM漫谈 写成以来已经有一段时间了 我收到几位热心读者的邮件 有的希望我介绍一下当前视觉SLAM程序的实用程度 更多的人希望了解一下前文提到的g
  • Difference Between LiDAR and RADAR——LiDAR和RADAR的不同

    Difference Between LiDAR and RADAR 原文连接 https www differencebetween com difference between lidar and vs radar 翻译 RADAR和L
  • 单目视觉里程记代码

    在Github上发现了一个简单的单目vo 有接近500星 链接如下 https github com avisingh599 mono vo 这个单目里程计主要依靠opencv实现 提取fast角点并进行光流跟踪 然后求取本质矩阵并恢复两帧
  • 关于GPS、惯导、视觉里程计的几个定义

    1 首先写几个定义 惯性导航系统 Inertial Navigation System INS 全球定位卫星系统 Global Navigation Satellite System GNSS GNSS 包括全球定位系统 Global Po
  • 视觉SLAM技术及其应用(章国锋--复杂环境下的鲁棒SfM与SLAM)

    SLAM 同时定位与地图构建 机器人和计算机视觉领域的基本问题 在未知环境中定位自身方位并同时构建环境三维地图 应用广泛 增强现实 虚拟现实 机器人 无人驾驶 SLAM常用的传感器 红外传感器 较近距离感应 常用与扫地机器人 激光雷达 单线
  • 高斯牛顿法求非线性最小二乘的步骤和c++代码实现

    slam图优化的本质是一个非线性优化问题 Gauss Newton求解步骤 1 线性化误差函数 2 构建线性系统 3 求解线性系统 4 更新解 并不断迭代直至收敛 一个简单的代码实现 一维参数xy 高维变为对应的矩阵即可 include
  • GMAPPING的参数设置

    二 运行gmapping 我总结了运行gmapping的两种方法 1 基于命令行 rosrun gmapping slam gmapping scan scan delta 0 1 maxUrange 4 99 xmin 5 0 ymin
  • 快看!那个学vSLAM的上吊了! —— (一)综述

    不同于之前发布的文章 我将使用一种全新的方式 iPad Notability Blog的方式打开这个板块的大门 原因有两个 1 Notability更方便手写长公式 也方便手绘坐标系变换等等 2 之前Apple Pencil找不到了新破费买
  • Ubuntu18.04安装pcl(过程/坑记录式教程)

    Ubuntu18 04安装pcl 1 下载pcl 2 安装依赖项 3 编译 4 安装 5 网上教程说要安装QT5和VTK 但按照本文的 本文记录了安装时出现的问题 出错的安装命令也记录了 建议浏览一遍再参考 不要错用了错误的指令 1 下载p
  • Object SLAM: An Object SLAM Framework for Association, Mapping, and High-Level Tasks 论文解读

    是一篇来自机器人顶刊T RO的文章 发表于2023 5 An Object SLAM Framework for Association Mapping and High Level Tasks 论文 An Object SLAM Fram
  • SLAM练习题(十一)—— G2O实战

    SLAM 学习笔记 写在前面的话 算是一点小小的感悟吧 估计位姿的方法有线性方法和非线性方法 线性方法就是特征点法中的2D 2D的对极约束 3D 2D的PnP问题 非线性方法有BA优化 它将位姿的估计问题转换成了一个误差关于优化量的最小二乘
  • ORB_SLAM2运行官方数据集/自己数据集

    官方数据集运行结果 WeChat 20230210194425 可以正常运行 自己数据集运行结果 自己的数据集 主要是用手机摄像头采集的实验室进行了一下简单的运行 可以成功运行 但是由于查看的相关程序的是死循环不能像运行官方数据集那样完整保
  • 3.Open3D教程——点云数据操作

    点云数据 本教程阐述了基本的点云用法 随需要的文件链接 1 显示点云 import open3d as o3d import numpy as np print Load a ply point cloud print it and ren

随机推荐

  • ROS-mavros-PX4加速度控制

    要写的飞控算法本来的输入是roll pitch以及推进力 xff0c 由于PX4不支持输入具体大小的推进力 xff0c 改用三方向加速度 xff08 可用旋转矩阵进行变换 xff09 进行控制 但是PX4的setpoint accel实际控
  • C# 委托(Delegate)与事件(Event)、Func与Action

    一 委托 1 概念 xff1a 从内存角度看 xff0c 委托是一个存储方法的容器 xff0c 当使用该容器时 xff0c 会把容器里面的方法全部执行一遍 xff0c 容器里面的方法可增 43 61 可减 61 从IL Microsoft中
  • STM32 UART串口通信IDLE空闲中断的使用步骤

    参考了各路大神的资料 xff0c 蒙蔽了半天 xff0c 终于学会了 xff0c 记录一下 xff0c 以后忘了可以回来复习参考 一 首先在stm32cube中配置打开对应uart串口的中断 二 工程main函数调用 HAL UART EN
  • 三大通信协议(1)UART

    目录 一 UART通信协议简介 二 UART通信时序 三 UART RS232 TTL关系阐述 1 简介 2 电平转换 四 实例 1 程序代码 2 仿真验证 总结 一 UART通信协议简介 UART xff08 Universal Asyn
  • CAD难学吗?

    首先 xff0c CAD程序不容易学习 这些程序不像学习Microsoft Word或Excel 大多数CAD应用程序都有较高的学习曲线 一些参数和3D CAD应用程序的学习曲线相当陡峭 由于它们的复杂性 xff0c 学习的承诺会更长 CA
  • 安卓strings.xml文件中的msgid的作用__2019.09.12

    lt string name 61 34 name 34 msgid 61 34 012345678912345 34 gt 34 name Name 34 lt string gt 是系统返回信息的标识id这个信息的唯一性 xff0c 你
  • RealSense SDK编译

    0 uname r 查看linux的内核版本 1 xff0c ls l dev sda 查看USB设备的设备文件 2 sudo dmesg tail n 50 查看是否能检测到相机 3 查看 librealsense doc install
  • Linux-磁盘管理

    第14章 Linux系统管理 磁盘管理 第14章 Linux系统管理 磁盘管理 1 磁盘的基本概念 2 磁盘的基本结构 3 磁盘的预备知识 4 磁盘基本分区Fdisk 5 磁盘基本分区Gdisk 6 磁盘挂载方式Mount 7 虚拟内存Sw
  • 网络---数据链路层

    数据链路层 一 数据链路层的信道类型 1 点对点信道 这种信道使用一对一的点对点通信方式 2 广播信道 这种信道使用一对多的广播通信方式 xff0c 因此过程比较复杂 xff0c 广播信道上连接的主机很多 xff0c 因此必须使用专用的共享
  • 第二讲:双目vio视觉前端以及后端重投影残差

    双目vio视觉前端以及后端重投影残差 vins双目 本次主要讲解vio双目系统的视觉前端部分和后端融合的重投影残差部分 xff0c 以vins切入做为分析 xff0c 并赋代码注释解析 主要包含以下五部分内容 xff11 xff09 双目特
  • Eigen 中Geometry (几何模块)

    该代码源于 视觉SLAM十四讲 Eigen 中Geometry xff08 几何模块 xff09 主要操作有旋转向量和旋转矩阵之间的转换 xff1b 欧拉角 xff08 旋转矩阵变欧拉角 xff09 xff1b 欧式变换 xff08 旋转
  • C++实现http发起GET/POST请求

    目录 HTTP请求报文解析HTTP响应报文解析C 43 43 实现http发起GET请求 HTTP xff08 Hyper Text Transfer Protocol xff0c HTTP xff09 超文本传输协议 xff0c 是一个简
  • C++/Qt音视频通话开发MetaRTC源码解读,音频推流和拉流

    本章内容解读MetaRTC开源代码 xff0c 无任何二次开发 xff0c 用于学习交流 MetaRTC是国人开发的开源项目 xff0c 适用各种场景音视频二次开发 xff0c 可以去git阅读README xff0c 我们使用相对成熟的版
  • ROVIO论文笔记

    最近看了ROVIO的相关论文 1 3 1 是15年作者发表的会议论文 xff0c 内容特别简要 xff0c 根本看不懂 3 是作者发表在杂志上的论文 xff0c 对 1 进行了改进 xff0c 内容也进行了大量的扩充 2 是作者16年发表的
  • TX2(RTSO-9002)环境配置(ROS,mavros,arduino,ttyACM,串口)

    TX2 环境配置 1 TX2 ubuntu16 04换源 备份文件 xff1a sudo cp etc apt sources list etc apt sources init list 打开文件 xff1a etc apt source
  • TX2(RTSO-9002)上的Can 和 Ros 通信

    TX2 RTSO 9002 上有两个can接口 xff0c 分别是P1上的5 6接口 xff08 CAN1 H xff0c CAN1 L xff09 xff1b 7 8接口 xff08 CAN0 H xff0c CAN0 L xff09 C
  • 97项开源视觉SLAM方案(一)

    原文链接 xff1a https zhuanlan zhihu com p 115599978 未经作者允许 xff0c 禁止二次转载 微信扫码 xff0c 回复 xff1a 开源SLAM xff0c 即可获取全文文档 xff08 共97个
  • git修改代码后,如何再git pull而不覆盖修改的代码

    一 git pull不覆盖修改的代码 xff1a 先把修改好的代码存放在缓存里 xff0c 等代码拉下来以后再恢复缓存里的修改的代码 步骤 xff1a 1 git stash save span class token string 34
  • winscp连接linux时提示连接失败OOPS:cannot change directory:/home/....什么的原因以及解决方案

    解决 xff1a 关闭SELinux secure enhanced linux安全增强型linux gt vi etc selinux config 完成编辑并reboot 重启系统 xff0c 并启动 ftp 服务 selinux se
  • 对SLAM的理解

    https blog csdn net u010128736 article details 53141681 一 我与SLAM不得不说的二三事 早在一年多前就接触了一点SLAM xff0c 当时研究的是LSD SLAM xff0c 一个半