电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
【7天搞定视觉SLAM】第一天——什么是SLAM?
分 享
扫描二维码分享
【7天搞定视觉SLAM】第一天——什么是SLAM?
slam
hero_chao
关注
发布时间: 2020-04-16
丨
阅读: 810
# 一、初见slam ## 1.什么是SLAM? > SLAM (simultaneous localization and mapping),也称为CML (Concurrent Mapping and Localization), 即时定位与地图构建,或并发建图与定位。问题可以描述为:将一个机器人放入未知环境中的未知位置,是否有办法让机器人一边移动一边逐步描绘出此环境完全的地图,所谓完全的地图(a consistent map)是指不受障碍行进到房间可进入的每个角落。 这是百度给出的SLAM定义。 也就是说,一般我们对于机器人的定位问题可以通过GPS去定位,但是当GPS信号没有的时候怎么办呢?这时就需要用到了我们的slam系统,它可以在一个未知环境中通过传感器感知周围环境,进行机器的定位,进而实现导航。 ![这是一个典型的SLAM三维地图](https://cf03.ickimg.com/bbsimages/202004/9254ce35a11bd8ca5f54968a7e76861f.jpg "这是一个典型的SLAM三维地图") ## 2.什么是视觉SLAM? 视觉SLAM(同时定位与建图)是指利用图像信息这一外部信息来确定环境中机器人、车辆或者移动相机的位置,同时能够建立已探索区域的一种表示法(地图)。SLAM是移动机器人实现自主化的一项基本任务。当下,在小范围,静态的场景中,认为使用距离传感器(比如激光、声呐)来建立二维地图,能够很好的解决SLAM问题。然而,在动态,复杂,大场景下,仅使用视觉作为唯一的外部传感器来进行SLAM是当今的研究热点。应用于视觉SLAM的计算机视觉技术包括显著特征的检测、描述以及匹配,图像的识别与检索等等,这些技术仍然需要提升。 ![](https://cf03.ickimg.com/bbsimages/202004/edf4733533de3c2fa4513d6433ca9273.jpg) 视觉SLAM与传统SLAM问题最大的不同就是它的主要传感器是以图像传感器为主,就是可以理解为我们所说的相机。通过相机来采集周边环境获得一个图像和感知信息。 # 二、简单认识视觉SLAM的系统构成 ## 1.传感器简介 随着计算机处理性能的大幅提升,以各种摄像头为传感器的SLAM逐渐成为研究新热点,并在近年开始有市场化的迹象。 视觉传感器主要分为三种: 1. 单目摄像头(Monocular Camera) 2. 双目摄像头(Binocular Camera) 3. 深度摄像头(RGB-D Camera) - 深度摄像头可以通过time of flight等方法来直接获得图像及对应的深度信息,优点在于方便获得深度数据,缺点在于成本高,体积大,室外环境基本报废。 - 双目摄像头可以通过三角方法计算出深度信息,市面上有一些深度摄像头也是直接基于双摄像头来做的。然而双目摄像头在目标距离较远的时候会退化成单目。因此近年来大量的研究都是围绕单目进行的。 - 单目SLAM可以通过临近图像匹配计算出摄像头位姿的变换,在两个视角上进行三角测距又可以得出对应点的深度信息。通过这样迭代的过程可以实现定位及建图。 ## 2.系统构成 视觉SLAM几乎都有一个基本的框架 。一个SLAM系统分为四个模块(除去传感器数据读取):VO、后端、建图、回环检测。 ![](https://cf03.ickimg.com/bbsimages/202004/50a4c27dae7a83770fc0158eafa15721.png) 1. Visual Odometry,即视觉里程计。它估计两个时刻机器人的相对运动(Ego-motion)。在激光SLAM中,我们可以将当前的观测与全局地图进行匹配,用ICP求解相对运动。而对于相机,它在欧氏空间里运动,我们经常需要估计一个三维空间的变换矩阵——SE3或Sim3(单目情形)。求解这个矩阵是VO的核心问题,而求解的思路,则分为基于特征的思路和不使用特征的直接方法。 2. 后端,目前的视觉SLAM系统后端算法主要分为2类,一类是卡尔曼滤波及其改进型,一类是BA算法及其改进型,这些我们在后面会讲到。SLAM最早的提出者R. Smith等人就把SLAM建构成了一个EKF(Extended Kalman Filter,扩展卡尔曼滤波)问题。他们按照EKF的形式,把SLAM写成了一个运动方程和观测方式,以最小化这两个方程中的噪声项为目的,使用典型的滤波器思路来解决SLAM问题。 3. 回环检测,又称闭环检测(Loop closure detection),是指机器人识别曾到达场景的能力。如果检测成功,可以显著地减小累积误差。回环检测实质上是一种检测观测数据相似性的算法。对于视觉SLAM,多数系统采用目前较为成熟的词袋模型(Bag-of-Words, BoW)。词袋模型把图像中的视觉特征(SIFT, SURF等)聚类,然后建立词典,进而寻找每个图中含有哪些“单词”(word)。也有研究者使用传统模式识别的方法,把回环检测建构成一个分类问题,训练分类器进行分类。即如果两个图形看上去很相似,那么可以认为相机已经重叠,回环确认。这个方法也是主流方法。 4. 建图,就是SLAM系统最后的输出问题,可以是简单的拓扑地图,也可以是三维重建的精密地图,主要以不同的应用范围,作为不同的输出结果。 # 三、编程环境 ## 1.安装LINUX系统 理论和实践是有很大的不同,所以实践是我们这一个系列课程最为重要的内容。接下来让我们看看如何进行实验环境的搭建。 首先,安装linux系统。这里我们使用UBUNTU系统作为我们的学习环境大家可以下载Ubuntu18.04这一版本作为安装的系统,对于在windows环境下如何使用UBUNTU系统问题,大家可以自行搜索虚拟机运行linux系统的方法,网上资源众多,这里就不单独介绍了。 > Ubuntu是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu"一词,意思是“人性”“我的存在是因为大家的存在",是非洲传统的一种价值观。Ubuntu基于Debian发行版和Gnome桌面环境,而从11.04版起,Ubuntu发行版放弃了Gnome桌面环境,改为Unity。从前人们认为Linux难以安装、难以使用,在Ubuntu出现后这些都成为了历史。Ubuntu也拥有庞大的社区力量,用户可以方便地从社区获得帮助。 ![](https://cf03.ickimg.com/bbsimages/202004/e2636d480fcb8801854e593e2d71ca63.png) 在这里下载UBUNTU镜像后安装即可,安装系统需要一段时间哦。 ![](https://cf03.ickimg.com/bbsimages/202004/8b5d7fceb40960d1d342d2998b39856d.png) 在安装好系统后大家可以进行一些配置,我这里使用XSHELL作为远程登陆系统进行编程,大家也可以直接在系统界面打开终端进行环境编程哦。 ## 2.敲一个程序吧 - 打开终端,安装G++编译器。 ```cpp sudo at-get install g++ ``` - 创建第一个slam系统文件。 ```cpp sudo gedit helloSLAM.cpp ``` - 复制以下代码。 ```cpp #include
using namespace std; int main(int argc, char **argv) { cout << "Hello SLAM!" << endl; return 0; } ``` - 编译。 ```cpp g++ helloSLAM.cpp ``` - 运行。 ```cpp ./a.out ``` 我们成功用LINUX系统编译了第一个slam系统的程序。 接下来一章我会开始介绍三维空间的转化问题,了解这个问题是进行slam研究的基础,我也会单开一章内容,简单介绍一下CMAKE的使用,希望大家持续关注!
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
hero_chao
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交