ORB-SLAM2 学习阶段性总结——单目代码总结(一)

第零章:绪论

建议:

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的难点和处理方法,重点的会指出,但是不会细究。

第一章:运行细则

源码下载:

GitHub - electech6/ORB_SLAM2_detailed_comments: Detailed comments for ORB-SLAM2 with trouble-shooting, key formula derivation, and diagrammatic drawing

参考博客配置环境

主要是:《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博客

​​​​​​​

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SLAM地图构建与定位算法,含有卡尔曼滤波和粒子滤波器的程序 SLAM算法的技术文档合集(含37篇文档) slam算法的MATLAB源代码,国外的代码 基于角点检测的单目视觉SLAM程序,开发平台VS2003 本程序包设计了一个利用Visual C++编写的基于EKF的SLAM仿真器 Slam Algorithm with data association Joan Solà编写6自由度扩展卡尔曼滤波slam算法工具包 实时定位与建图(SLAM),用激光传感器采集周围环境信息 概率机器人基于卡尔曼滤波器实现实时定位和地图创建(SLAM)算法 机器人地图创建新算法,DP-SLAM源程序 利用Matlab编写的基于EKF的SLAM仿真器源码 机器人定位中的EKF-SLAM算法,实现同时定位和地图构建 基于直线特征的slam机器人定位算法实现和优化 SLAM工具箱,很多有价值的SLAM算法 EKF-SLAM算法对运动机器人和周围环境进行同步定位和环境识别仿真 SLAM using Monocular Vision RT-SLAM机器人摄像头定位,运用多种图像处理的算法 slam(simultaneous localization and mapping)仿真很好的入门 SLAM自定位导航的一个小程序,适合初学者以及入门者使用 slam算法仿真 slam仿真工具箱:含slam的matlab仿真源程序以及slam学习程序 移动机器人栅格地图创建,SLAM方法,可以采用多种地图进行创建 SLAM算法程序,来自悉尼大学的作品,主要功能是实现SLAM算法 对SLAM算法中的EKF-SLAM算法进行改进,并实现仿真程序 SLAM的讲解资料,机器人导航热门方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值