视觉SLAM十四讲 学习笔记1——ch1预备知识 ch2初始SLAM

第一章

SLAM(Simultaneous Localization and Mapping(同时定位与地图构建)):搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。

第二章

考虑携带于机器人本体上的传感器——IMU、激光、相机。

SLAM一般分为激光SLAM和视觉SLAM(相机),目前激光SLAM技术比较成熟,相机SLAM仍在发展过程中。

视觉SLAM一般分为3种:单目相机(Monocular)、双目相机(Stereo)、深度相机(Stereo)

单目相机:没有深度,必须通过移动相机产生深度。

双目相机:通过视差计算深度。

深度相机:通过物理方法测量深度。(量程较小、易受干扰、功耗较大)

视觉SLAM整体流程图:

 

  视觉里程计(Visual Odometry,VO):视觉里程计的任务是估算相邻图像间相机的运动,以及局部地图的样子(VO 又称为前端)

  后端优化(Optimization):后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图(由于接在 VO 之后,又称为后端)

  回环检测(Loop Closing):回环检测判断机器人是否到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。

  建图(Mapping):它根据估计的轨迹,建立与任务要求对应的地图。

视觉里程计:根据相邻的图像估计相机的运动,不可避免地存在漂移。目前基本存在两种主要方法:特征点法(第七讲)、直接法(第八讲)

后端优化:从带有噪声的数据中优化轨迹和地图,解决状态估计的问题。后端优化要考虑状态估计的不确定性有多大——即最大后验概率估计(MAP)。后端优化的方法前期以EKF为代表,现在以图优化为代表。(第十讲、第十一讲)

回环检测:词袋模型(第十二讲)

建图:(第十三讲)

SLAM问题的数学描述:

 

  前一个方程为运动方程,描述了从k-1时刻到k时刻,机器人的位置是如何变化的。(u为传感器的输入,w为该过程中加入的噪声)

  后一个方程为观测方程,描述了k时刻机器人在x位置上看到了某个路标y,产生了一个观测数据z。(u为这次观测的噪声)

Cmake的使用:

  cmake过程处理了工程文件之间的关系,make过程实际调用了g++来编译工程。

使用库文件:

  在Linux中,库文件分为静态库和共享库两种,静态库以.a作为后缀名,共享库以.so作为后缀名。所有库文件都是一些函数打包后的集合,差别在于静态库每次调用都会生成一个副本,而共享库则只有一个副本,更省空间。

  add_library(hello libHelloeSLAM.cpp)——添加静态库

  add_library(hello SHARED llibHelloSLAM.cpp)——添加动态库

  库文件是一个压缩包,里面有编译好的二进制函数。不过,如果仅有.a或.so库文件,那么我们并不知道里面的函数到底是什么,调用的形式又是什么样。为了让别人(或者自己)使用这个库,我们需要提供一个头文件,说明这些库里都有些什么。因此,对于库的使用者,只要拿到了头文件和库文件,就可以调用这个库了。

  另外,还需要完成可执行程序链接与要使用的库的链接:

  add_executable(useHello useHello.cpp)

  target_link_libraries(useHello hello_shared)

集成开发环境IDE:Kdevelop

 

  

 

posted @ 2020-08-20 15:41  Yu_tiann  阅读(251)  评论(0编辑  收藏  举报