解读《视觉SLAM十四讲》,带你一步一步入门视觉SLAM—— 第 2 讲 初识SLAM (下)

在上一篇博客中,我主要解读了视觉SLAM所用的传感器和经典的视觉SLAM框架。在这篇博客中,我接着上一篇博客的内容,解读第二讲的下半部分:

  • SLAM问题的数学表述;
  • 完成后续代码实践需要做的准备工作。

解读

SLAM的数学描述

关于SLAM的数学描述,就是两个方程,一个是运动方程,一个是观测方程
x k = f ( x k − 1 , u k , w k ) z k , j = h ( y j , x k , v k , j ) x_k = f(x_{k-1}, u_k, w_k) \\ z_{k,j} = h(y_j, x_k, v_{k,j}) xk=f(xk1,uk,wk)zk,j=h(yj,xk,vk,j)如果你学过控制理论相关的课程,你对上面这两个等式并不陌生,上面的运动和观测方程,随处可见。即使你没有学过相关课程,根据《视觉SLAM十四讲》中的介绍,你也足以理解。
  
  书中有出现一个名词“路标(Landmark)”,如果你初见,可能不能知道它具体代表什么,书中也并没有解释,在这里我要给你解释一下。
  
  在SLAM中“路标”并不是“道路标志”,“路标”指的就是空间中的一些特殊的点。这么说可能还是不具体,看下面这张图
  图中绿色框框中的绿点指示的空间点就是我们所说的“路标”。当我们拍下照片后,就获得了这些“路标”的测量值。为了找到场景的特点,我们会采用不同的方法,在图片中提取一些场景对应的像素点,这些像素点常常是那些变化比较明显的角点,上图中车道线的角点,栏杆的角点都是我们所说的“路标”。随着学习的深入,我们会知道有各种提取角点的算法,而现在你只需要知道“路标”是空间中的一些特殊点就可以了。

编程实践

Linux系统
作者在书中提到,使用Linux发行版中的Ubuntu,书中推荐使用的是Ubuntu14.04,实际上我建议大家使用16.04的版本,一方面是因为16.04不算老也不算新,所以稳定性和功能性都是最适合的,我在16.04的版本上实验了书中的几乎所有的例子,没有碰到系统版本导致的问题。
  
  刚安装好Ubuntu系统之后,也许你根本不知道怎么操作,不用害怕,它也是一个电脑系统,你只要多用用就习惯了,你可以用它来上网看视频,聊微信,总之Windows上能完成的操作,ubuntu上即使不能一模一样的去操作,但是也能找到相应的替代方法,你装上系统之后,可以尝试安装上一些常用的软件,比如谷歌浏览器、网易云音乐、有道词典、搜狗输入法等等,你也可以稍微美化一下你的系统,但是不要在这上面花太多时间,这会浪费很多精力。分享一下我稍微美化之后的样子。

CMake
作者提到当工程原来越大的时候,要管理每个文件之间的关系会变得很困难,这个时候我们就需要使用CMake这个工具。我们使用了CMake工具之后,我们就可以将我们的文件管理的井井有条。比方说,把.h头文件放在include为名称的文件夹里面,将.cc的源文件放在src为名称的文件夹里面,将编译产生的.a /.so,库文件放在lib文件夹下,将可执行文件放在example文件下,总之我们可以随意控制我们的工程形式,十分方便,对于使用C++语言来说,CMake是必不可少的工具,是每一个人都应该掌握的。关于它的学习,你只需要边用边学就可以,没有必要把它弄懂了才去做实践。在这里我推荐给你一个文档,你边用边查,
《CMake实践》百度云链接链接: https://pan.baidu.com/s/15M-g5h1rNF4Hyvef1DgsKw 提取码: ektx
我建议你一开始,可以先采用我的模板,将你的工程都按照我的模板进行管理,先模仿然后你就会创造了,可以查考我另外一篇博客:
Cmake配置工程,管理src和include文件夹,构建最常见的工程目录结构
也许初学,你不知道每个命令的用法和意义,但是我保证你只需要照着葫芦画瓢,不需要很久你就懂了。


关于库这里面需要的知识也很多,但是不用担心,我们只要会用就行了。后面我们会学到矩阵Eigen库,图像OpenCV库,点云PCL库,非线性优化g2o库等等,切记不要去对库的所有内容花时间学习,我们用到什么内容就学什么内容,不然你会浪费很多时间。关于库你还需要知道,我们只要拿到了库的头文件和库文件,我们就可以调用库中的函数了,至于这其中奥秘,暂且就放一边把。而库的调用,在CMake中只需要三行代码就足够了,比方说OpenCV库:

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_labraries(xxxxxx ${OpenCV_LIBS})

调用OpenCV库,主要代码就这三行,第一行代码,找到OpenCV库,第二行包含它的头文件,第三行包含它的库文件。

不过你也别着急,我们还没有真正开始学习CMake,作者在后续的实践中,会一直使用CMake,你现在有个简单的了解就行,这里面你可能有很多疑问,但是请你先收藏你的疑惑,先大胆的去尝试,去使用。

IDE
IDE就是我们代码的开发环境。Linux上可以用的IDE非常多,有VS code,CLion,Kdevelop等等。我比较喜欢CLion,因为它的界面是深色的,很好看,代码补全,跳转,都特别好用,而且插件很多,如果你让我推荐,我推荐使用CLion。不过你选择哪一款都没问题。

又啰里啰嗦写了一大堆,也不知道对你是否有用,如果表达的不准确或者有错误的地方,请你要不吝赐教。

壮志与毅力是事业的双翼

你可能感兴趣的:(视觉SLAM十四讲,全书解读)