SLAM 十四讲第二章

1、SLAM 框架

1.传感器读入数据:相机、激光雷达等
2.视觉里程计VO(前端)
估算相邻图像间的相机运动,以及局部地图的样子。
只关心相邻图像间的运动,和再往前的信息没有关联,可能会出现累计漂移问题
3.后端优化
处理噪声,接受不同时刻的视觉里程计测量的相机位姿信息,以及回环检测的信息,并优化,得到全局一致的轨迹和地图。
前端和计算机视觉更相关,后端则主要是滤波和非线性优化。
4.回环检测
检测相机位姿是否与之前某一时刻重合,如果检测到回环,则可将相应信息用来优化建图,减少误差和误匹配。
解决位置估计随着时间漂移的问题,让机器人有识别到过的场景的能力。可以利用图像间的相似性来完成回环检测。
5.建图:根据估计的轨迹,建立与任务要求对应的地图。
度量地图:强调精确的表示地图中物体的位置关系,通常用稀疏和稠密对其分类。
拓扑地图:强调地图元素之间的关系,由节点、边组成,只考虑节点间的连通性。

2.cmake实践

先编写一个简单的程序:helloSLAM .cpp

#include <iostream>

using namespace std;

int main(int argc,char**argv){
	cout<<"hello SLAM !"<<endl;
	return 0;
}

然后编写CmakeLists.txt

#声明要求的cmake最低版本
cmake_minimum_required(VERSION 2.8)
#创建一个项目,名字叫:HelloSLAM
project(HelloSLAM)
#添加一个可执行程序:add_executable(程序名字 源代码文件名字)
add_executable(helloSLAM helloSLAM.cpp)

然后新建一个build文件夹,并在该文件夹下编译,用来存放cmake产生的中间文件,与源代码分开

mkdir build
cd build
cmake ..
make
./helloSLAM

按照上述命令依次操作即可在命令行看到输出

使用库:
只有带main函数的文件才会生成可执行程序,另外一些代码打包成一个库,供其他程序调用
如:libHelloSLAM.cpp

#include <iostream>

using namespace std;

void printHello(){
	cout<<"Hello Word"<<endl;
}

此时需要在CmakeLists.txt添加语句:

#注意语法的使用   分静态库和共享库  SHARED表示共享库
add_library(hello_shared SHARED libHelloSLAM.cpp)

要使用一个库还需要头文件,拿到头文件和库文件就能调用一个库了
头文件:libHelloSLAM.h

#ifndef LIBHELLOSLAM_H_
#define LIBHELLOSLAM_H_
void printHello();
#endif

再编写一个调用程序:

#include "libHelloSLAM.h"

int main(){
	printHello();
	return 0;
}

最后还需要在CmakeListe.txt文件中添加语句:

#添加可执行程序
add_executable(useHello useHello.cpp)
#添加链接,链接到库上
target_link_libraries(useHello hello_shared)
#如果不添加这个链接编译会报错:CMakeFiles/useHello.dir/useHello.cpp.o:在函数‘main’中:useHello.cpp:(.text+0x5):对‘printHello()’未定义的引用

//报错:CMakeFiles/useHello.dir/useHello.cpp.o:在函数‘main’中:useHello.cpp:(.text+0x5):对‘printHello()’未定义的引用

最后camke 编译运行执行即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值