视觉SLAM学习第一讲——学习心得

前传:研一小猿一只,第一次在博客上写文章,之前都是记录有道云。在博客上写一来为了巩固知识,二来也为了结交更多志同道合的小伙伴。话不多说,现在进入正题。
今天主要谈谈个人对vSLAM的一点小见解,并班门弄斧引入大牛们的学习经验。小猿是跟着高博的《视觉SLAM十四讲》学习的,说错地方还望大家多多指教!
下附高博十四讲课程目录:视觉SLAM学习第一讲——学习心得_第1张图片

1、SLAM是什么?
SLAM主要解决两大问题:
①我在什么地方?——定位
②周围环境是什么样子?——建图
SLAM(Simultaneous Localization and Mapping)即时定位与地图构建,是为了解决如何建立目标物体周围的场景3D模型,同时定位自身的空间位置还原出相机的运动轨迹的问题。视觉SLAM根据相机的不同,可分为单目、双目和深度。而目前代表性的单目V-SLAM系统包括基于滤波器、基于关键帧BA和基于直接跟踪的vSLAM,前期主要学习基于关键帧BA的ORB-SLAM2。
视觉SLAM学习第一讲——学习心得_第2张图片
2、SLAM应用前景
SLAM应用前景广阔,包括:

  1. 手持设备定位
  2. 自动驾驶定位建图
  3. AR
  4. 室内机器人——扫地机器人
  5. 无人机
    等等都会用到定位与建图。

3、预备知识
预备知识与课程使用的环境
数学:高等数学、线性代数(矩阵论)、概率论
编程:C++、Linux,了解语法和基本命令即可
英语:文献、文档阅读能力
环境:Ubuntu 16.04

4、资源
教材:视觉SLAM十四讲:从理论到实践
参考书:多视图几何 状态估计
博客:https://www.cnblogs.com/gaoxiang12/tag/视觉SLAM/
资料ORB_SLAM2:https://github.com/raulmur/ORB_SLAM2
例程:https://github.com/gaoxiang12/slambook
综述文献:
a) 1986 SLAM 的提出
R.C. Smith and P. Cheeseman, “On the representation and estimation of spatial
uncertainty”, International Journal of Robotics Research, vol.5,4,pp.56-68,1986.4 / 151
b) 2015 OKVIS: 基于紧耦合和优化的 VI-SLAM 系统框架
Stefan Leutenegger, Simon Lynen, Michael Bosse,等. Keyframe-based visual-inertial
odometry using nonlinear optimization[J]. International Journal of Robotics Research,
2015, 34(3):314-334.
c) 2017 Maplab: SLAM 领域第一个开源协作 SLAM 框架
T. Schneider, M. Dymczyk, M. Fehr, K. Egger, S. Lynen, I. Gilitchenski, and R. Siegwart,
“maplab: An open framework for research in visual-inertial mapping and localization
(in review),” ICRA, 2018

5、CMake练习
cmake 是⼀种常⽤、⽅便的,⽤于组织 Linux 下 C++ 程序的⼯具。有许多库,例如 OpenCV、 g2o、
Ceres 等,都⽤ cmake 组织它们的⼯程。所以,不管是使⽤别⼈的库,还是编写⾃⼰的库,都需要掌握
⼀些 cmake 的基本知识。
书写⼀个由 cmake 组织的 C++ ⼯程,要求如下:

  1. include/hello.h 和 src/hello.c 构成了 libhello.so 库。 hello.c 中提供⼀个函数 sayHello(),调⽤此函
    数时往屏幕输出⼀⾏“Hello SLAM”。我们已经为你准备了 hello.h 和 hello.c 这两个⽂件,见“code/”
    ⽬录下。
  2. ⽂件 useHello.c 中含有⼀个 main 函数,它可以编译成⼀个可执⾏⽂件,名为“sayhello”。
  3. 默认⽤ Release 模式编译这个⼯程。
  4. 如果⽤户使⽤ sudo make install,那么将 hello.h 放⾄/usr/local/include/下,将 libhello.so 放
    ⾄/usr/local/lib/下。

操作如下:
创建目录ch1_lib,目录中含有一下文件,libhello存放库函数hello.h和hello,c,src为主函数,build存储CMake编译生成的中间文件。
在这里插入图片描述
src的useHello.cpp主文件

#include "hello.h"

int main( int argc, char** argv ) {
  sayHello();
  return 0;
}

libhello中
hello.h

#pragma once
void sayHello();

hello.c

#include "hello.h"
#include 

void sayHello() {std::cout<<"Hello SLAM"<

顶层CMakeLists.txt文件

cmake_minimum_required(VERSION 3.13)
PROJECT(hello)

ADD_SUBDIRECTORY(libhello)
ADD_SUBDIRECTORY(src)

SET(CMAKE_BUILD_TYPE "Release")

#INSTALL(TARGETS libhello LIBRARY DESTINATION /usr/local/lib)
#INSTALL(./libhello/hello.h /usr/local/include)                                                                                                                                                     

libhello的CMakeLists.txt

SET(LIB_SRC hello.cpp)

ADD_DEFINITIONS("-DLIBHELLO_BUILD")

ADD_LIBRARY(libhello SHARED ${LIB_SRC})

SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

SET_TARGET_PROPERTIES(libhello PROPERTIES OUTPUT_NAME "sayHello")

INSTALL(TARGETS libhello LIBRARY DESTINATION /usr/local/lib)
INSTALL(FILES "hello.h" DESTINATION /usr/loacl/include)
~                                                                                                                                                                  

src的CMakeLists.txt

LINK_DIRECTORIES(${PROJECT_SOURCE_DIR})
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/libhello)

SET(APP_SRC useHello.cpp)
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

ADD_EXECUTABLE(sayHello ${APP_SRC})

TARGET_LINK_LIBRARIES(sayHello libhello)

进入build目录,运行结果如下:
视觉SLAM学习第一讲——学习心得_第3张图片
make一般适用于应用程序,应用程序一般使用一些系统资源,而不修改系统的资源;
sudo make install 用于将库安装到文件中,针对的是库文件。
注:sudo make install在后期李群李代数的学习中经常应用,需掌握。

今天就分享这么多,欢迎有兴趣的同学一起交流,共同成长!如有侵权,或内容不符,望告知。

你可能感兴趣的:(视觉SLAM学习第一讲——学习心得)