前传:研一小猿一只,第一次在博客上写文章,之前都是记录有道云。在博客上写一来为了巩固知识,二来也为了结交更多志同道合的小伙伴。话不多说,现在进入正题。
今天主要谈谈个人对vSLAM的一点小见解,并班门弄斧引入大牛们的学习经验。小猿是跟着高博的《视觉SLAM十四讲》学习的,说错地方还望大家多多指教!
下附高博十四讲课程目录:
1、SLAM是什么?
SLAM主要解决两大问题:
①我在什么地方?——定位
②周围环境是什么样子?——建图
SLAM(Simultaneous Localization and Mapping)即时定位与地图构建,是为了解决如何建立目标物体周围的场景3D模型,同时定位自身的空间位置还原出相机的运动轨迹的问题。视觉SLAM根据相机的不同,可分为单目、双目和深度。而目前代表性的单目V-SLAM系统包括基于滤波器、基于关键帧BA和基于直接跟踪的vSLAM,前期主要学习基于关键帧BA的ORB-SLAM2。
2、SLAM应用前景
SLAM应用前景广阔,包括:
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++ ⼯程,要求如下:
操作如下:
创建目录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目录,运行结果如下:
make一般适用于应用程序,应用程序一般使用一些系统资源,而不修改系统的资源;
sudo make install 用于将库安装到文件中,针对的是库文件。
注:sudo make install在后期李群李代数的学习中经常应用,需掌握。
今天就分享这么多,欢迎有兴趣的同学一起交流,共同成长!如有侵权,或内容不符,望告知。