Ubuntu18.04 编译 ORB-SLAM2(./build.sh + ./build_ros.sh)完整流程,各种报错处理(踩坑总结)

2023-05-16

文章目录

  • 前言
    • 系统版本
  • 一、准备工作
    • 1.确定是否安装了 C++11 或者 C++0x 编译器
    • 2.安装 Pangolin 库
    • 3.安装 OpenCV 库
    • 4.安装 Eigen3 库
    • 5.ROS环境
    • 6.下载 ORB-SLAM2 源码
  • 二、编译 ./build.sh
    • 1.错误1
    • 2.错误2
    • 3.错误3
    • 4.错误4
    • 5. ./build.sh 编译成功
  • 三、编译 ./build_ros.sh
    • 1.错误1
    • 2.错误2
    • 3.错误3
    • 4 ./build_ros.sh 编译成功


前言

本文写于2022年4月12日,编译ORB-SLAM2花了我好长时间,在此记录一下。
ORB-SLAM2源码地址

系统版本

Ubuntu18.04 + ROS melodic


一、准备工作

参考https://github.com/raulmur/ORB_SLAM2
以下有安装过的可以跳过

1.确定是否安装了 C++11 或者 C++0x 编译器

没有安装的,可以用命令:
1.更新包列表
打开终端输入

sudo apt update

2.安装 build-essential 软件包
打开终端输入

sudo apt install build-essential

3.验证gcc编译器是否成功安装
打开终端输入

gcc --version

在这里插入图片描述注:下面pangolin,opencv,eigen3的安装参考这篇博客

2.安装 Pangolin 库

建议安装pangolin0.5版本,直接使用git clone https://github.com/stevenlovegrove/Pangolin.git下载源码,得到的pangolin是0.6版本的,可能会报错Pangolin could not be found because dependency Eigen3 could not be found.详见 二、编译 ./build.sh -> 2.错误2
1.下载pangolin0.5
链接: https://pan.baidu.com/s/1cGfqsVXw4pxYKyjGmN9Afw 提取码: kftv 复制这段内容后打开百度网盘手机App,操作更方便哦。
2.解压文件夹
下载得到 Pangolin_v0.5.zip 文件,打开终端输入

unzip Pangolin_v0.5.zip

3.编译 安装
打开终端输入

cd Pangolin
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make
sudo make install

3.安装 OpenCV 库

1.安装依赖项

打开终端输入

sudo apt-get install build-essential
sudo apt-get install libgtk2.0-dev
sudo apt-get install libvtk6-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libtiff5-dev
sudo apt-get install libjasper-dev

此处报错

errorE: unable to locate libjasper-dev

打开终端输入

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

成功的解决了问题,其中libjasper1libjasper-dev 的依赖包

下面继续安装依赖项,打开终端输入

sudo apt-get install libopenexr-dev
sudo apt-get install libtbb-dev

2.下载 OpenCV 源码

1)下载链接 https://opencv.org/releases/

在这里插入图片描述我下载的是 OpenCV-3.4.15 ,点击 Sources 进行下载,得到 opencv-3.4.15.zip 压缩文件

2)解压

打开 opencv-3.4.15.zip 所在的文件夹,打开终端输入

unzip opencv-3.4.15.zip

解压成功得到 opencv-3.4.15 文件夹,将它放到合适的地方
3)编译 安装

cd opencv-3.4.15
mkdir build && cd build
cmake ..
make -j4
sudo make install

4.安装 Eigen3 库

参考此篇博客
建议安装 Eigen3.2.1 版本,Eigen官方主页
1.下载 Eigen
在这里插入图片描述点击 other downloads ,找到 Eigen 3.2.1
在这里插入图片描述
点击 Source code (zip) 下载得到 eigen-3.2.1.zip 文件
2.解压
打开终端输入

unzip eigen-3.2.1.zip

得到 eigen-3.2.1 文件夹
3.安装
参考此篇博客
切换到 eigen-3.2.1 文件夹下,打开终端输入

mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr

注:cmake ..默认安装到 /usr/local/include/eigen3 路径下,使用上述命令就可以将安装路径设置为 /usr/include/eigen3

sudo make install

5.ROS环境

如果没有安装 Ros Melodic ,参考Ubuntu18.04安装Ros Melodic 以及测试rviz
如果安装了 Ros Melodic ,没有创建ROS空间,参考此篇博客

6.下载 ORB-SLAM2 源码

ORB-SLAM2 源码下载到 ~/catkin_ws/src 目录下面
打开终端输入

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

二、编译 ./build.sh

进入 ORB-SLAM2 文件夹

cd ORB_SLAM2

build.sh 文件权限

chmod +x build.sh

编译 build.sh 文件

./build.sh

报错
(注意:出现了对应的错误则修改,如果没有出现则不修改。每次改动后将 ORB_SLAM2 文件夹下面的 build 文件夹删掉,还有 ORB_SLAM2/Thirdparty/DBoW2 && g2o 文件夹下面的 build 文件夹删掉,之后再执行上面的指令重新编译看看是否有错)

1.错误1

/usr/local/include/sigslot/signal.hpp:109:79: error: ‘decay_t’ is not a member of ‘std’
/usr/local/include/sigslot/signal.hpp:109:79: note: suggested alternative: ‘decay’
 constexpr bool is_weak_ptr_compatible_v = detail::is_weak_ptr_compatible<std::decay_t<P>>::value;
                                                                               ^~~~~~~
                                                                               decay
/usr/local/include/sigslot/signal.hpp:109:87: error: template argument 1 is invalid
 constexpr bool is_weak_ptr_compatible_v = detail::is_weak_ptr_compatible<std::decay_t<P>>::value;
                                                                                       ^
/usr/local/include/sigslot/signal.hpp:109:92: error: ‘::value’ has not been declared
 constexpr bool is_weak_ptr_compatible_v = detail::is_weak_ptr_compatible<std::decay_t<P>>::value;
                                                                                            ^~~~~
/usr/local/include/sigslot/signal.hpp:109:92: note: suggested alternative: ‘valloc’
 constexpr bool is_weak_ptr_compatible_v = detail::is_weak_ptr_compatible<std::decay_t<P>>::value;
                                                                                            ^~~~~
                                                                                            valloc

在这里插入图片描述从github上面找到了解决方法,点我
在这里插入图片描述使用#[[ ]]可以注释 CMakeLists.txt 里的多行文字,打开 ORB_SLAM2/CMakeLists.txt ,注释掉下面这段
在这里插入图片描述然后添加

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_EXTENSIONS OFF)

在这里插入图片描述

2.错误2

Build type: Debug
CMake Error at CMakeLists.txt:45 (find_package):
  Found package configuration file:

    /usr/local/lib/cmake/Pangolin/PangolinConfig.cmake

  but it set Pangolin_FOUND to FALSE so package "Pangolin" is considered to
  be NOT FOUND.  Reason given by package:

  Pangolin could not be found because dependency Eigen3 could not be found.

在这里插入图片描述参考此篇博客
是因为之前从源码下载安装的 pangolin 是0.6版本,需要重新安装 0.5 版本的pangolin。
1.删除 /usr/local/include 下的 pangolin 文件夹
打开终端输入

cd /usr/local/include
sudo rm -r pangolin

2.删除 pangolin 原文件夹
切换到相应的文件夹下,删除 pangolin 文件夹即可
3.下载 pangolin 0.5 版本
链接: https://pan.baidu.com/s/1cGfqsVXw4pxYKyjGmN9Afw 提取码: kftv 复制这段内容后打开百度网盘手机App,操作更方便哦。
4.编译 安装
打开终端输入

cd Pangolin
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make
sudo make install

3.错误3

/home/d/catkin_ws/src/ORB_SLAM2/src/LoopClosing.cc:84:9: error: ‘usleep’ was not declared in this scope

在这里插入图片描述参考此篇博客
在所有报错的文件头部加入

#include <unistd.h>

一般有以下几个文件(视情况而定)
Examples/Monocular/mono_euroc.cc
Examples/Monocular/mono_kitti.cc
Examples/Monocular/mono_tum.cc
Examples/RGB-D/rgbd_tum.cc
Examples/Stereo/stereo_euroc.cc
Examples/Stereo/stereo_kitti.cc
src/LocalMapping.cc
src/LoopClosing.cc
src/System.cc
src/Tracking.cc
src/Viewer.cc

4.错误4

出现下面错误

In file included from /home/d/catkin_ws/src/ORB_SLAM2/src/Optimizer.cc:25:0:
/home/d/catkin_ws/src/ORB_SLAM2/Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h: In member function ‘bool g2o::LinearSolverEigen<MatrixType>::solve(const g2o::SparseBlockMatrix<MatrixType>&, double*, double*)’:
/home/d/catkin_ws/src/ORB_SLAM2/Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h:114:7: error: ‘VectorXD’ has not been declared
       VectorXD::MapType xx(x, _sparseMatrix.cols());
       ^~~~~~~~
/home/d/catkin_ws/src/ORB_SLAM2/Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h:115:7: error: ‘VectorXD’ has not been declared
       VectorXD::ConstMapType bb(b, _sparseMatrix.cols());
       ^~~~~~~~
/home/d/catkin_ws/src/ORB_SLAM2/Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h:116:7: error: ‘xx’ was not declared in this scope
       xx = _cholesky.solve(bb);
       ^~
/home/d/catkin_ws/src/ORB_SLAM2/Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h:116:7: note: suggested alternative: ‘x’
       xx = _cholesky.solve(bb);
       ^~
       x
/home/d/catkin_ws/src/ORB_SLAM2/Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h:116:28: error: ‘bb’ was not declared in this scope
       xx = _cholesky.solve(bb);
                            ^~
/home/d/catkin_ws/src/ORB_SLAM2/Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h:116:28: note: suggested alternative: ‘b’
       xx = _cholesky.solve(bb);
                            ^~
                            b

在这里插入图片描述
参考此篇博客
在这里插入图片描述
定位到 ORB_SLAM2/Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h 文件

typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic> PermutationMatrix;变成typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, int> PermutationMatrix;如图:
在这里插入图片描述(最后这个错误卡了好久,做了此改动之后还是报同样的错误最后是将 二、编译 ./build.sh -> 1.错误1 的改动还原之后编译成功了,就很玄学)

5. ./build.sh 编译成功

在这里插入图片描述


三、编译 ./build_ros.sh

1.将该工程添加至 ROS_PACKAGE_PATH
打开终端输入

sudo gedit ~/.bashrc

在最后一行插入

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/ORB_SLAM2/Examples/ROS

注: ~/catkin_ws/src/ 为我 ORB_SLAM2 的路径,需要改成自己的文件路径

刷新 bash

source ~/.bashrc

检验 ROS path 是否被识别

echo $ROS_PACKAGE_PATH

在这里插入图片描述显示了刚刚加入的路径,说明ROS路径配置成功了

2.编译
进入 ORB-SLAM2 文件夹

cd ORB_SLAM2

build_ros.sh 文件权限

chmod +x build_ros.sh

编译 build_ros.sh 文件

./build_ros.sh

报错
(注意:出现了对应的错误则修改,如果没有出现则不修改。每次改动后将 ORB_SLAM2/Examples/ROS/ORB_SLAM2/ 文件夹下面的 build 文件夹删掉,之后再执行上面的指令重新编译看看是否有错)

1.错误1

/usr/local/include/pangolin/gl/gl.h:40:10: fatal error: Eigen/Core: 没有那个文件或目录  #include <Eigen/Core>

在这里插入图片描述貌似 Pangolin 某个文件定位不到 <Eigen/Core> ,解决办法重装 Pangolin

1.删除 /usr/local/include 下的 pangolin 文件夹
打开终端输入

cd /usr/local/include
sudo rm -r pangolin

2.删除 pangolin 下的 build 文件夹
切换到相应的文件夹下,删除 build 文件夹即可

3.编译 安装
打开终端输入

cd Pangolin
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make
sudo make install

2.错误2

/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/usr/lib/x86_64-linux-gnu/libboost_system.so: 无法添加符号: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/RGBD.dir/build.make:194: recipe for target '../RGBD' failed
make[2]: *** [../RGBD] Error 1
CMakeFiles/Makefile2:158: recipe for target 'CMakeFiles/RGBD.dir/all' failed
make[1]: *** [CMakeFiles/RGBD.dir/all] Error 2
make[1]: *** 正在等待未完成的任务....
/usr/bin/ld: CMakeFiles/Stereo.dir/src/ros_stereo.cc.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/usr/lib/x86_64-linux-gnu/libboost_system.so: 无法添加符号: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/Stereo.dir/build.make:194: recipe for target '../Stereo' failed
make[2]: *** [../Stereo] Error 1
CMakeFiles/Makefile2:184: recipe for target 'CMakeFiles/Stereo.dir/all' failed
make[1]: *** [CMakeFiles/Stereo.dir/all] Error 2
Makefile:135: recipe for target 'all' failed
make: *** [all] Error 2

在这里插入图片描述参考此篇博客

在这里插入图片描述定位到到 ORB_SLAM2/Examples/ROS/ORB-SLAM2/CMakeLists.txt 文件加上-lboost_system

如图:
在这里插入图片描述

3.错误3

在这里插入图片描述
参考链接
ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/AR/ViewerAR.cc文件里添加头文件#include<unistd.h>

4 ./build_ros.sh 编译成功

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18.04 编译 ORB-SLAM2(./build.sh + ./build_ros.sh)完整流程,各种报错处理(踩坑总结) 的相关文章

  • 1-5 Linux学习路线规划

    文章目录 前言第1章 Linux简介第2章 Linux安装第3章 Linux文件和目录管理第4章 Linux打包 xff08 归档 xff09 和压缩第5章 Vim文本编辑器第6章 Linux文本处理 xff08 Linux三剑客 xff0
  • Shell常用实例,查看IP,创建用户,安装应用等。

    文章目录 前言查看IPnet tools与iproute2全部已激活连接的IP查看连接互联网的IP 创建用户批量创建用户 安装应用一个脚本搞定一键安装一键还原 前言 Shell 是一个用 C 语言编写的程序 xff0c 它是用户使用 Lin
  • ROS | 机器人操作系统简介

    ROS 机器人操作系统简介 1 ROS基本概念2 ROS架构2 1 OS层2 2 中间层2 3 应用层 3 通信机制4 计算图4 1 节点 xff08 Node xff09 4 2 节点管理器 xff08 Master xff09 4 3
  • 3-1 图文并茂说明raid0,raid1, raid10, raid01, raid5等原理

    文章目录 简介RAID类型RAID0RAID1RAID5RAID6RAID10RAID01 RAID对比图 简介 一 RAID 是什么 xff1f RAID xff08 Redundant Array of Independent Disk
  • 3-2至3-8 创建一个至少有两个PV组成的大小为20G的名为testvg的VG

    文章目录 1 在vmware添加多块20G的硬盘 xff0c 并创建分区2 创建一个至少有两个PV组成的大小为20G的名为testvg的VG xff0c 要求PE大小为16M xff0c 而后在卷组中创建大小为5G的逻辑卷testlv 挂载
  • 3-9 静态配置网卡IP,centos/ubuntu实现

    文章目录 centos配置IPubuntu配置IP centos配置IP span class token comment 显示当前IP地址 xff0c 为DHCP获取 span span class token function host
  • 3-10 图文并茂解释TCP/IP 3次握手4次断开

    文章目录 前言TCP报文首部TCP数据传输3次握手4次断开 前言 TCP IP传输协议 xff0c 即传输控制 网络协议 xff0c 也叫作网络通讯协议 它是在网络的使用中的最基本的通信协议 TCP IP传输协议对互联网中各部分进行通信的标
  • 3-11 网卡绑定bond0的实现

    文章目录 前言centos网卡绑定ubuntu网卡绑定故障测试 前言 网卡绑定bond又称多网卡 bonding xff0c 是将多块网卡绑定同一IP地址对外提供服务 xff0c 可以实现高可用或者负载均衡 然而直接给两块网卡设置同一IP地
  • 3-12 使用expect登陆远程主机并安装应用

    文章目录 前言一键脚本脚本验证免密登陆安装mysql安装apache退出 前言 实现免密登陆脚本 expect登陆远程主机 xff0c 将生成的密钥写入到目标主机 expect测试远程登陆 1 xff09 通过shift读取脚本参数 2 x
  • 4-1 定时任务的示例10个

    文章目录 前言基本命令与格式示例 前言 Linux crontab 是用来定期执行程序的命令 当安装完成操作系统之后 xff0c 默认都已经安装 xff0c 并启动此任务调度命令 crond 命令每分钟会定期检查是否有要执行的工作 xff0
  • 4-2 Linux进程和内存概念

    文章目录 前言进程状态进程优先级内存模型进程内存关系 前言 进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源 一般来说 xff0c Linux系统会在进程之间共享程序代码和系统函数库 xff0c 所以在任何时刻内存中都
  • 4-3 Linux启动流程

    文章目录 前言经典启动流程1 按下电源2 开机自检 BIOS 3 MBR引导4 GRUB菜单5 加载内核6 运行init进程7 读取 etc inittab8 读取 etc rc sysinit初始化系统9 运行 etc rc d rcN
  • pixhawk光流,思码光thone-flow的使用

    测试硬件 xff1a Holybro pixhawk FMU V5 测试固件 xff1a V1 13 测试光流 xff1a thone flow 这此从淘宝店家 xff08 玩物励志科技 xff09 购买了迷你光流传感器 xff0c 也就是
  • ROS | 工作空间及功能包的创建

    ROS 工作空间及功能包的创建 1 创建工作空间2 创建功能包 1 创建工作空间 工作空间是一个存放工程开发相关文件的文件夹 xff0c 创建工作空间首先在Linux系统中打开一个新的终端 xff0c 并按照以下步骤输入指令 mkdir p
  • Spring-Aop的使用

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 Aoc的相关术语二 aop使用步骤三 aop中获取切面的一些信息三 aop中设置切面的优先级 前言 Spring两大核心
  • 步骤二:Ubantu18.04中Realsense的安装(T265)

    1 安装realsense SDK git clone https ghproxy com https github com IntelRealSense librealsense 此处参考上一篇jetsonnano安装ros的文章 xff
  • 步骤四:T265和Mavros通讯

    阿木的volans项目连接t265与px4是在2022年暑假实验的 但是随后在九月初再试实验时 由于一些暂时不知明的原因 无法联机 于是 我们改用了官网的连接方法 下面附上官网链接 T265 Intel Realsense Tracking
  • PX4报错问题整理

    1 装好机能够正常解锁 xff0c mannual模式 xff0c 能够起飞 xff0c 但飞行大幅摇晃 xff0c 最后侧翻 常见解答 xff0c 电调校准 xff0c 加速度计校准 但我们是因为电机的kv值不同 xff0c 出了乌龙 2
  • 步骤六: Jetson nano平台部署TensorRT加速Yolo4-Tiny网络

    在无人机飞行任务中需要识别特定的物体 所以神经网络的部署非常重要 而jetson自带的tensorrt技术能够很好的优化我们的网络 提升识别速度 步骤1 了解环境 非必要 确定TensorRT的python库所在的环境 已经其他的必须库所在
  • Android NDK 实现视音频播放器源码

    目录 xff1a CMake配置环境项目 xff0c gradle代码块 xff1a 项目流程图 xff1a ffmpeg解封装解码流程API概况 xff1a activity main xml 搭建C 43 43 上层 xff1a Jav

随机推荐