第零章:绪论
建议:
1、第一次搭建环境先看《ORB-SLAM2源码解析》学习手册进行搭建
有了第一次搭建基础就好办了
2、有道云以及跨windows以及Ubuntu进行笔记传输:
3、Imagewatch能够实现对图片的像素查看
4、cvlife的课程注释(强烈要求代码注解,强烈建议买一套课程)
https://github.com/electech6/ORB_SLAM2_detailed_comments
5、闲扯
这里需要非常重要的说一嘴:SLAM是同步定位与构图,所以说SLAM是研究定位和绘图的代码如果只研究定位,以初始帧作为世界坐标系,其他帧到初始帧的变化就能解决这个问题。但是绘图,就需要格外仔细研究代码(似乎讲绘图这一块比较少,描绘地图点绘制出就可以了,甚至在ORB—SLAM里面都有为节约运行而关闭构图功能),构图是一环困难的任务,甚至有专门研究构图的。由于本讲关于建图不作为重要研究点,将会一笔带过。
ORB2—slam论文:
中文&&原文
ORB-SLAM2 论文全文翻译 - MingruiYu - 博客园
https://arxiv.org/abs/1610.06475v2
研究重点:
实话说视觉SLMA的代码很难,硕士研究生除非一开始就研究代码,否则在C++基础不好的情况下根本就不可能在短短几个月时间时间研究透ORB2全部(除非你只学这个,不考虑找工作了),最近SLAM工作要求资历越来越高了,建议学习代码的框架结构。能做出创新点毕业就可以了。真正找工作的还是C++高级知识点(建议流出大量的时间用来刷题)。有ORB-SLAM2学习经历了,可以说是锦上添花。至于难点,可以说在ORB-SLAM2上出现的问题基本上80%都是数据结构看不太懂。甚至可以说弄AI的基本上挺吃出身的(两重含义)。
所以这这博客只是大概和你闲扯一些ORB-SLAM2的难点和处理方法,重点的会指出,但是不会细究。
第一章:运行细则
源码下载:
参考博客配置环境
安装第三方库
在刚装好的 Ubuntu 16.04 系统上安装 ORB-SLAM2
Pangolin 、 OpenCV 、 Eigen 、 g2o 与 DBoW2 ( ORB-SLAM2 自带)
安装前的准备
安装 vim 、 cmake 、 git 、 gcc 、 g++
sudo apt-get install vim cmake
sudo apt-get install git
sudo apt-get install gcc g++
安装Pangolin (建议源码安装)
1) 安装依赖项
sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install libpython2.7-dev
2) 安装 Pangolin
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake -DCPP11_NO_BOOSR=1 ..
make -j
安装OpenCV3.4
(建议源码安装 安装时间较长 耐心等待 ) OpenCV3.4.5链接 提取码:slam
1). 安装依赖项
Ubuntu16
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev
sudo apt-get install libtiff4.dev libswscale-dev libjasper-dev
ubuntu18
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev
sudo apt-get install libtiff5.dev libswscale-dev
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
2). 安装
cd opencv-3.4.5
mkdir build
cd build
cmake ..
make -j2
sudo make install
3) 配置环境变量
sudo vim /etc/ld.so.conf.d/opencv.conf
在打开的空白文件中添加 /usr/local/lib
执行 sudo ldconfig ,使配置的环境变量生效
4) 配置 .bashrc ,末尾添加下面两行
//打开.bashrc
sudo vim /etc/bash.bashrc
//添加以下两行内容到.bashrc
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
5) source 与 update
source /etc/bash.bashrc
sudo updatedb
6) 测试是否正常安装 (成功会出现带 “hello opcv” 字样的窗口)
cd opencv-3.4.5/samples/cpp/example_cmake
cmake .
make
./opencv_example
安装Eigen3.3.7
(建议源码安装)
解压缩安装包
安装
cd eigen-git-mirror
mkdir build
cd build
cmake ..
sudo make install
#安装后 头文件安装在/usr/local/include/eigen3/
#移动头文件
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
备注:在很多程序中 include 时经常使用 #include <Eigen/Dense> 而不是使用 #include <eigen3/Eigen/Dense> 所以要做下处理
编译运行
运行ORB_SLAM2 (如果在ROS下 推荐工程目录: orbslam_ws/src )
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
./build.sh
1). 编译时如果有如下错误:在对应的头文件中加上 #include <unistd.h>
2). 如果有问题
“/xxx/xxx/ORB_SLAM2/Examples/Stereo/stereo_euroc.cc:169:13: error: ‘usleep’ was not declared in this scope”,“usleep((T-ttrack)*1e6);”;
“/home/qyz/ORB_SLAM2/Examples/Stereo/stereo_euroc.cc:169:13: error: ‘usleep’ was not declared in this scope”,“usleep((T-ttrack)*1e6);”
作者在多个文件中使用了usleep()这个函数,但是却好像忘了包含相关的头文件,只需在报错的文件中加入下面内容即可:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
3). 提示内存不足需要分配内存
虚拟机关机然后设置内存大一些即可
ORB2slam代码情况
一下是关于ORB-SLAM2代码情况,可以看出代码非常的规范(详细的看不太懂就对了)
首先应该阅读readme了解项目的一些情况。通过tree查看工作路径下的目录结构。
数据集测试
(快速下载快速下载TUM数据集_奈流云何的博客-CSDN博客_tum数据集下载
网页下载慢,所以用迅雷吧)
Ubuntu18.04 ORB_SLAM2的安装、配置、运行SLAM单目实例_君琴的博客-CSDN博客
编译完成后会在ORB_SLAM2/Examples文件夹下生成各种可执行文件。这里以单目情况为例,展示如何运行ORB_SLAM2程序。
(1)下载数据集
有TUM、KITTI、EuRoC三种数据集,这儿使用TUM数据集,从http://vision.in.tum.de/data/datasets/rgbd-dataset/download下载序列并解压缩。我下载的是第一个的,下载下来的文件名是:rgbd-dataset_freiburg_xyz。
(2)编译
官方给出的命令格式如下:
PATH_TO_SEQUENCE_FOLDER为数据集的存储路径。
tumx.yaml与数据集对应,比如TUM1.yaml、TUM2.yaml 、TUM3.yaml 分别对应 freiburg1、freiburg2 、 freiburg3。
数据集介绍
TUM数据集__YAO阿瑶的博客-CSDN博客_tum数据集
一起做RGB-D SLAM 第二季 (一) - 半闲居士 - 博客园
打开几个文本文件会发现3行都是文本
rgb和depth文件夹下存放着彩色图和深度图。图像的文件名是以采集时间命名的。而rgb.txt和depth.txt则存储了所有图像的采集时间和文件名称,例如:
1305031910.765238 rgb/1305031910.765238.png
表示在机器时间1305031910.765238采集了一张RGB图像,存放于rgb/1305031910.765238.png中。
这种存储方式的一个特点是,没有直接的rgb-depth一一对应关系。由于采集时间的差异,几乎没有两张图像是同一个时刻采集的。然而,我们在处理图像时,需要把一个RGB和一个depth当成一对来处理。所以,我们需要一步预处理,找到rgb和depth图像的一一对应关系(自然单目不需要匹配深度信息,但是双目还有IGBD需要)。
TUM为我们提供了一个工具来做这件事,详细的说明请看:http://vision.in.tum.de/data/datasets/rgbd-dataset/tools 该网页整理了一些常用工具,包括时间配对,ground-truth误差比对、图像到点云的转换等。对于现在预处理这一步,我们需要的是一个 associate.py 文件,如下(你可以直接把内容拷下来,存成本地的associate.py文件):
具体操作看后面(RGBD)
单目
运行单目示例利用词典以及yaml文件跑数据集rgbd_dataset_freiburg1_xyz(一行指令)
./Examples/Monocular/mono_tum
Vocabulary/ORBvoc.txt
Examples/Monocular/TUM1.yaml /home/yu//ORB2/data/rgbd_dataset_freiburg1_xyz
注意修改代码的绝对路径
单目是最为复杂的
双目、RGBD
数据预处理
矫正与对齐
相机模型参数
关于相机模型参数的想法
ORBSLAM2中恰好有三个模型.yaml
对于前十个参数来说是由OPencv标定出来的
Camera.fx: 520.908620
Camera.fy: 521.007327
Camera.cx: 325.141442
Camera.cy: 249.701764
Camera.k1: 0.231222
Camera.k2: -0.784899
Camera.p1: -0.003257
Camera.p2: -0.000105
Camera.k3: 0.917205
那么这些参数有什么作用?
如果仔细研究的化还能够分析成像规律以及畸变规律(但就不细谈了)
(37条消息) 相机模型、参数和各个坐标系(世界坐标系、相机坐标系、归一化坐标系、图像坐标系、像素坐标系之间变换)_JiayuZ128的博客-CSDN博客_相机坐标系
(37条消息) ORB-SLAM3中yaml文件详解_木子雨舟的博客-CSDN博客