视觉slam第二讲笔记
视觉SLAM第二讲笔记
slam: Simultaneous Localization and Mapping:同时定位与地图构建
slam框架:
- 传感器信息读取:相机图像信息的读取和预处理
- 视觉里程计VO:估算相邻图像间相继的运动和局部地图的样子
- 后端优化:接收不同时刻VO测量的相机位姿和回环检测信息并优化,得到全局一致的轨迹和地图
- 回环检测:判断是否到达过先前的位置
- 建图:建立地图
SLAM问题描述
- 运动:从
k
−
1
k-1
k−1 时刻到
k
k
k 时刻,机器人的位置
x
x
x 如何变化,
x k = f ( x k − 1 , u k , w k ) x_{k}=f(x_{k-1},u_{k},w_{k}) xk=f(xk−1,uk,wk)
其中, u k u_{k} uk:传感器读数, w k w_{k} wk:噪声,则 - 观测:
k
k
k 时刻
x
k
x_{k}
xk 位置处检测到路标
y
j
y_{j}
yj ,
z k , j = h ( y j , x k , v k , j ) z_{k,j}=h(y_{j},x_{k},v_{k,j}) zk,j=h(yj,xk,vk,j)
其中, z k , j z_{k,j} zk,j:观测数据, v k , j v_{k,j} vk,j: 观测噪声
编程工具
1. g++
源:hello.cpp --> 编译:g++ hello.cpp --> 执行:./a.out
2.cmake
创建工程执行编译
首先,创建 CMakeLists.txt,内容如下:
cmake_minimum_required( VERSION 2.8)
project( projectname)
add_executable(projectname helloSLAM)
然后,创建build目录, 将Cmake文件、cpp文件、build目录放在同一文件夹下,
mkdir build
cd build
cmake ..
make
./projectname
生成库
创建库文件libfile.cpp–>创建头文件libfile.h–>调用库hello.cpp—>修改CMakeLists.txt->在build下编译
#include <iostream>
using namespace std;
void printHello()
{
cout << "Hello World"<<endl;
}
#ifndef LIBFILE_H_
#define LIBFILE_H_
void printHello();
#endif
#include "libfile.h"
int main(int argc,char ** argv)
{
printHello();
return 0;
}
cmake_minimum_required( VERSION 2.8)
project( projectname )
add_library( libname SHARED libfile.cpp )
add_executable( projectname hello.cpp )
target_link_libraries( projectname libname )
3.IDE:CLION
[1]: Xiang Gao, Tao Zhang, Yi Liu, Qinrui Yan, 14 Lectures on Visual SLAM: From Theory to Practice, Publishing House of Electronics Industry, 2017.