基于Ubuntu的ORB-SLAM2项目环境搭建过程
关于ORB-SLAM2
- 机器人所研究SLAM的学长介绍,ORB-SLAM2是双目SLAM的很成熟的一个算法
- 由于项目需要双目摄像头测的距离来调节摄像头焦距,以及后期的实景AR加入,所以从双目视频流,得到每一帧图像上每一点,对应实际的摄像头到实际物体间的空间距离,和摄像头所在实景的三维空间数据,是项目采用ORB-SLAM2算法的原因
- 相关博客会记录,ORB-SLAM2环境搭建,ORB-SLAM2代码原理和实际测试,双目SLAM测出距离对应焦距调节(后两个,之后完成补上链接)
环境搭建
- 环境搭建总体参考上节中GitHub链接,以及ORB-SLAM2搭建详细过程
- 记录如下原因,
- 一是为针对本项目需要(双目视频流实时测距)的环境搭建提供提醒和参考
- 二是第一次接触CV工程化代码,希望自己除了乖乖的听话的搭建环境之外,了解工程化代码的依赖、链接...等关系,也为之后项目系统搭建、降低时延优化,夯实基础。
- 三是虽然环境搭建已经有前车之鉴,但是在计算机学院的诸多环境配置中,博客总结终究纸上得来,无法应对复杂的环境变化;而且博客上的方法,很多还是不如官方库、GitHub - Readme中的方法,下文完全遵循各GitHub - Readme,加之自己bug的补充,或许能提供更舒适的用户体验~
已有环境
- 没有如下软件或环境,最好先行安装;检查是否有该环境的最好方式应该是查看
--version了~- Ubuntu16.04
- apt 1.2.29 (amd64)
- git 2.7.4
- gcc 5.4.0
- python 2.7.12
创建环境
新建项目目录
- 目录
SLAM(我取的项目名,随意即可~)
安装Pangolin
- GitHub for Pangolin,在Readme中已经有一个安装说明,补充一个参考ubuntu Pangolin 从源码安装
- What is pangolin? 穿山甲hhh~从CV角度,阅读过上小段中GitHub -
Readme中的简介,概述可以说是加快3D可视化和UI交互的OpenGL库 - Pangolin
git clone之后,安装Pangolin必须的依赖- OpenGL
sudo apt install libgl1-mesa-dev - Glew
sudo apt install libglew-dev,也是OpenGL的库 - CMake
sudo apt install cmake,CMake就要好好介绍介绍了~在openCV下载与MacOS系统下的cLion配置一文中,我已经粗浅的接触到C与C++编译环境的配置,此处又涉及而且刚刚结束的一学期OS课程中粗浅地学习了链接等知识,故而在CMake & Make——链接初探一文中看看CMake & Make~
- OpenGL
- Pangolin推荐的和选择性的依赖,下面我会逐一将探索得到的相关软件信息记录,并判断是否有利于项目,决定是否安装
- Wayland
sudo apt install pkg-config&sudo apt install pkg-config
按照wiki上的说明,"Wayland是一个通信协议,规定了显示服务器与其客户机之间的通信方式。窗口管理器简化成显示管理服务,专门负责渲染那些屏幕上的程序。这比X Window System中的窗口管理器要更简单、高效。"考虑项目可能涉及阶段性的窗口视频显示来代替VR HMD显示,所以下载 - FFMPEG (For video decoding and image rescaling)
sudo apt install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev项目涉及硬件及软件编解码,FFMPEG也是编解码常用的平台,故下载 - DC1394 (For firewire input)
sudo apt install libdc1394-22-dev libraw1394-dev适用于firewire camera,项目仅涉及视频流层面,但为未涉及摄像头层面,故未下载 - libuvc (For cross-platform webcam video input via libusb)
git://github.com/ktossell/libuvc.git项目确实采用的是UVC camera,相关介绍可见libuvc与webcam的开发(一) - UVC协议,但是我么购买的是商家集成封装好的直接USB3.0接口导出视频流的摄像机,故此处不需。 - libjpeg, libpng, libtiff, libopenexr (For reading still-image sequences)
sudo apt install libjpeg-dev libpng12-dev libtiff5-dev libopenexr-dev
...GitHub上还有一些,但没有仔细介绍,而且和项目无关,故不写
- Wayland
- 搭环境(以下关于
cmake指令在“CMake & Make——链接初探“一文中也有介绍)- 在搭环境之前,对pangolin源码做一点修改,避免之后出现bug
- vim打开
Pangolin/src/display/device/display_x11.cpp,改变第110行的GLX_DOUBLEBUFFER , glx_doublebuffer ? True : False,为GLX_DOUBLEBUFFER , glx_doublebuffer ? False : False, - 搭环境:
// under the directory of SLAM (the dir of my project)
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
sudo make install # can not find in the Readme.md of Pangolin GitHub, but it is necessary to install in /usr/local/bin/
生成了一堆
.o可执行文件,pangolin配置完成

测试安装是否成功,可以在
/usr/local/bin/include目录下查找。
安装OpenCV 3.2
- 在之前的视频流拼接学习中,发现OpenCV是一款好用的视频图像处理软件,应该也是入门Computer vision的路径之一,只是版本较多更新也很多,网上的源码openCV2、3都有,我之前下载最新版本4.1,无奈网站上的大多数源码都通不过编译,而刚刚入门openCV的本咸鱼还不很了解OpenCV,代码运行常有一筹莫展
- 所以,我的建议是,在熟练OpenCV之前,版本尽量和源码保持一致,此处GitHub显示ORB-SLAM2支持
2.4.3&2.4.11&3.2 - 下面说安装搭建OpenCV 3.2环境,部分参考ubuntu 16.04 OpenCV3.2.0完全编译安装(下文和这篇博客有不同的命令行使用习惯,建议完全按照一篇,勿混用)
- 下载OpenCV 3.2的.tar.gz版本到项目
SLAM目录下 - 解压
tar -zxvf [filename.tar.gz](Linux下的打包解压,随意搜索即得,至于tar之后参数的意义倒是非常好奇) - 安装一些官网上没说,但之后发现ORB - SLAM2必须要的依赖,安装libgtk2.0-dev
sudo adt-get install libgtk2.0-dev和 pkg-configsudo apt-get install pkg-config - CMake将分散的程序构建为可执行文件
- 下载OpenCV 3.2的.tar.gz版本到项目
cd opencv-3.2.0/
mkdir build
cd build
cmake ..
make # wait for several minutes
# a lot of guidance of this instruction is `make -j4`
# but i do not find out the meaning of parameter -j4, so i give up to use it
sudo make install # after compiling, install it to /usr/local/bin, so "sudo" higher permission is needed.
- 测试安装是否成功,也可以直接跑一个openCV的程序
- 输入
pkg-config --modversion opencv - 得到版本号
3.2.0
- 输入
- 初步认为安装成功
安装Eigen
- Eigen官网," is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms."
- 官网下载3.3.7版本到项目SLAM目录下
- 解压
tar -jxvf [filename.tar.bz2] - CMake & Make,同上面几个几乎一样的步骤
- 代码如下
cd [eigen] # file name of eigen dir
mkdir build
cd build
cmake ..
make
sudo make install
但在进行了第三行cmake时

发现有很多相关库没有装(有点困惑),所以尝试装了
BoostBLASLAPACK,一个基础库,两个和线性代数相关的库
sudo apt-get update
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install libblas-dev
sudo apt-get install liblapack-dev
然后再进行
cmake ..及其之后的指令操作这种方法,最终可用
/usr/local/include/eigen3/Eigen/src/Core/util$ vim Macros.h查看版本3.3.7,认为安装成功安装Eigen的另一种简单方法,在进行到第一次cmake之后,我在网上查了安装Eigen的步骤,ubuntu16.04+eigen3安装,但是上一种方法比较知根知底...
发现
sudo apt-get install libeigen3-dev,一条指令即可完成安装,之后cd /usr/include/eigen3/Eigen/src/Core/util/目录下的Macros.h查看版本号为3.2.92符合版本要求

DBoW2 and g2o (Included in Thirdparty folder)
- 最初以为这两个库也需要安装,但发现在下载的ORB-SLAM2的 GitHub中的
Thirdparty中有,而且build.sh文件里面也有想过安装,故不需要自己安装。
尝试运行
- 在项目目录SLAM下
cd ORB_SLAM2-master/ - 一系列cmake & make:给权限
chomd +x build.sh,运行./build.sh
- 点评一二,为什么此处的cmake和make,跟上面见到的诸多cmake make不同呢~个人以为这是非常优秀的工程化开发习惯。
- 输入
vim build.sh查看shell文件,发现在此文件中运行环境已经全部配置好 - 提醒,有说法
make -j使用多编译器,容易崩,本机运行也崩了一次,在vim中将所有make -j改为make
echo "Configuring and building Thirdparty/DBoW2 ..."
cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
cd ../../g2o
echo "Configuring and building Thirdparty/g2o ..."
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
cd ../../../
echo "Uncompress vocabulary ..."
cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..
echo "Configuring and building ORB_SLAM2 ..."
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
- Debug(回忆起了OS vim 干de bug的心酸经历...不过目前碰到的几个bug相对课上任务来说非常容易)
error: usleep is not declared in this scope,加入下面的头文件:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
这条error出现的非常频繁,我猜测可能是Ubuntu16.4和14.4环境不同的原因,假如搭建过程中Ubuntu14.4中没出现这个问题,那我的猜测才可能有几分道理。
也思考过把这三条头文件加入某个库函数比如
system.h但是未找到,故尚未实施最终得到可执行的“ libORB_SLAM2.so at lib folder and the executables mono_tum, mono_kitti, rgbd_tum, stereo_kitti, mono_euroc and stereo_euroc in Examples folder."
测试环境搭建是否成功
尝试数据集
- 下载Vicon Room 1 01到项目SLAM文件夹下,在ORB...文件夹下输入
/ORB_SLAM2-master$ ./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml ../mav0/cam0/data ../mav0/cam1/data ./Examples/Stereo/EuRoC_TimeStamps/V101.txt
出现一系列新bug
- 提醒:下文中所有的bug,均已在上文过程中修复
基于Ubuntu的ORB-SLAM2项目环境搭建过程的更多相关文章
- Ubuntu系统下arm-linux-gcc交叉编译环境搭建过程
搭建所需环境Linux版本:Ubuntu 14.10 交叉编译器版本:arm-linux-gcc-4.4.3资源链接 何为交叉编译环境搭建交叉编译环境,即安装.配置交叉编译工具链.在Ubuntu环境下 ...
- vue项目ide(vue项目环境搭建)
一.先介绍一下我接下来要做的项目 项目:ide可视化工具 技术应用: Vue2.0(js框架):https://cn.vuejs.org/ ElementUi(饿了吗ui框架基于vue的):http: ...
- react 开发 PC 端项目(一)项目环境搭建 及 处理 IE8 兼容问题
步骤一:项目环境搭建 首先,你不应该使用 React v15 或更高版本.使用仍然支持 IE8 的 React v0.14 即可. 技术选型: 1.react@0.14 2.bootstrap3 3. ...
- ubuntu下的c/c++环境搭建
原文地址:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274556.html ubuntu下的c/c++环境搭建是比较简单,因为有apt和新立得 ...
- 第一周博客之二---OA项目环境搭建及开发包部署
OA项目环境搭建 一个项目想要能够在开发人员打包好项目包之后进行测试,就必须进行项目测试环境的搭建,要根据开发工程师的开发环境采用不同的测试环境,以下只是浅谈下Java项目OA(办公自动化平台)的环境 ...
- mac OS X下Java项目环境搭建+IntelliJ IDEA Jrebel插件安装与破解+Office 2016破解版安装
一.mac OS X下Java项目环境搭建 因为某些原因新入手了台最新版的MacBook Pro,意味着今天要花一天时间安装各种软件以及项目环境搭建╮(╯▽╰)╭ 项目环境搭建步骤: 1.安装jdk ...
- Vue 项目环境搭建
Vue项目环境搭建 ''' 1) 安装node 官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/ 2) 换源安装cnpm >: npm install -g cnp ...
- Django项目: 项目环境搭建 ---- 一、创建django项目
项目环境搭建 一.创建django项目 1.创建python虚拟环境 在虚拟机上创建python虚拟环境,因为实际项目部署,实在linux mkvirtualenv -p /usr/bin/pytho ...
- React全家桶打造共享单车后台管理系统项目_第1篇_项目环境搭建_首页编写
1.项目介绍 项目github地址:https://github.com/replaceroot/React-manageSystem 项目整体架构: 课程大纲: 第一章:React基础知识 ...
随机推荐
- Ubuntu12.10下安装Python3
设置Python3.2为默认版本 ubuntu12.10下默认安装了Python2.7和Python3.2.3,并且设置了Python2.7为默认的版本,因此如果讨厌麻烦的话,可以直接将Python3 ...
- ionic2踩坑之兼容android4.3及以下版本
一个命令就行了 ionic plugin add cordova-plugin-crosswalk-webview --save 执行完之后重新打包. 但是如果要兼容4.0及以下的话.... 帮不了你 ...
- spring security之Remember Me
spring-security.xml配置 环境: spring版本:5.0.7.RELEASE spring-security.xml引入: http://www.springframework.o ...
- haproxy笔记之一:Haproxy基本安装配置(反向代理,类似Nginx,可以代理tcp的连接,不只是http)(注意iptables和selinux的问题)
1.安装haproxy yum -y install haproxy 2.配置文件 # this config needs haproxy- or haproxy- global log 127.0. ...
- 云服务器离线安装MariaDB安装步骤和解决办法
前面我写了tomcat的安装那么接下来我们来安装云服务的数据库服务 第一步:下载安装包 https://downloads.mariadb.org/ 按照上图所示操作就能完成在线安装,但由于国内的网络 ...
- python基础局部变量、全局变量
局部变量的作用域只作用与当前函数块(或代码块)中,对函数块(或代码块)之外的重名变量,没有任何影响. 在函数块(或代码块)中,局部变量可用通过global关键字声明变量来改变在函数块(或代码块)之外对 ...
- Laravel Study(使用 Laravel )
開始 伺服器及相關工具安裝自行建立,在伺服器跟目錄下 有兩種方式建立 Laravel 專案,這裡使用 composer 建立專案 使用 composer 要在 PHP 5.3.2 以上才能使用 com ...
- Blue的博客
整合其他ORM框架 使用Spring所提供的ORM整合方案, 可以获得许多好处: 方便基础设施的搭建 Spring中, 对不同的ORM框架, 首先, 始终可以采用相同的方式配置数据源; 其次, Spr ...
- (转)Linux设备驱动之HID驱动 源码分析
//Linux设备驱动之HID驱动 源码分析 http://blog.chinaunix.net/uid-20543183-id-1930836.html HID是Human Interface De ...
- Spring Boot2.x 动态数据源配置
原文链接: Spring Boot2.x 动态数据源配置 基于 Spring Boot 2.x.Spring Data JPA.druid.mysql 的动态数据源配置Demo,适合用于数据库的读写分 ...
- Ubuntu系统下arm-linux-gcc交叉编译环境搭建过程