系统要求

Ubuntu18.04,未安装ros_melodic,opencv版本为4.5.1
若opencv版本不需要更改,则参考另一篇文章快速安装ORB_SLAM3

非ROS安装流程

ORB_SLAM3源码地址https://github.com/UZ-SLAMLab/ORB_SLAM3
前置需求Pangolin,OpenCV,Eigen3,DBoW2 and g2o (Included in Thirdparty folder),Python,ROS (optional)

Pangolin下载与编译

在 ORB_SLAM3 github 网站中,作者对Pangolin的安装有以下说明:

We use Pangolin for visualization and user interface. Dowload and install instructions can be found at: https://github.com/stevenlovegrove/Pangolin.

按照 Pangolin github网站的指示安装即可。

Eigen3下载与编译

在 ORB_SLAM3 github 网站中,作者对Eigen3的安装有以下说明:

Required by g2o (see below). Download and install instructions can be found at: http://eigen.tuxfamily.org. Required at least 3.1.0.

按照网站右侧提示下载,下载后解压,找到INSTALL文件并根据提示进行安装。

Let’s call this directory ‘source_dir’ (where this INSTALL file is).
Before starting, create another directory which we will call ‘build_dir’.
Do:
cd build_dir
cmake source_dir
make install

简化版本为:

tar -zxvf eien-3.3.9.tar.gz
cd eigen-3.3.9
mkdir build
cmake ..
sudo make install

DBoW2 and g2o下载与编译

在 ORB_SLAM3 github 网站中,作者对DBoW2 and g2o的安装有以下说明:

We use modified versions of the DBoW2 library to perform place recognition and g2o library to perform non-linear optimizations. Both modified libraries (which are BSD) are included in the Thirdparty folder.

在下载的ORB_SLAM3源码中包含了 DBoW2 and g2o 两个库,并且在./build.sh文件中包含了对这两个库的编译的脚本。

OPENCV下载与编译

在 ORB_SLAM3 github 网站中,作者对opencv的安装有以下说明:

We use OpenCV to manipulate images and features. Dowload and install instructions can be found at: http://opencv.org. Required at leat 3.0. Tested with OpenCV 3.2.0.

作者使用的为opencv3.2.0,但是我在使用opencv3.2.0编译时会出现一些问题,故安装了opencv4.5.1版本。以下为一些安装建议。
从 https://github.com/opencv/opencv/releases找到opencv4.5.1版本,下载源码并解压。
https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html.按照教程安装,化简后的步骤如下:

cd opencv-4.5.1
mkdir build
cd build
cmake ..
sudo make install

默认安装地址为/usr/local,若需要改变安装地址,则需要将cmake内条语句改为。

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/opencv_4.5.1 ..

若需要多核编译,则需要把make内条语句改为:(在电脑配置不好的情况下可能会死机,j后面加上数字可以指定几个线程编译)

make install -j

更多配置信息可参考https://docs.opencv.org/master/db/d05/tutorial_config_reference.html。
在其他地址安装完opencv4.5.1之后需要更改系统路径,防止在程序运行时出现寻找不到链接库的错误。

libopencv_imgproc.so.4.5: cannot open shared object file: No such file or directory

问题解决方法参考
https://blog.csdn.net/innocent_sheld/article/details/80509651
https://blog.csdn.net/jay463261929/article/details/53860593
https://blog.csdn.net/BeeGreen/article/details/104397348

ORB_SLAM3的下载与编译

在安装完前置要求之后,开始ORB_SLAM3的编译。从https://github.com/UZ-SLAMLab/ORB_SLAM3下载源码。运行目录下的build.sh文件。

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
cd ORB_SLAM3
chmod +x ./build.sh
./build.sh

由于安装的是opencv4.5.1,需要更改根目录下的 CMakeLists.txt 以便 cmake 编译器找到opencv的库文件。

//36行至42行
find_package(OpenCV 4.0)
if(NOT OpenCV_FOUND)find_package(OpenCV 3.0)if(NOT OpenCV_FOUND)message(FATAL_ERROR "OpenCV > 3.0 not found.")endif()
endif()//改为
find_package(OpenCV 4.0)

数据集下载

在 ORB_SLAM3 github 网站中,作者对opencv的安装有以下说明:

EuRoC dataset was recorded with two pinhole cameras and an inertial sensor. We provide an example script to launch EuRoC sequences in all the sensor configurations.
Download a sequence (ASL format) from http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
Open the script “euroc_examples.sh” in the root of the project. Change pathDatasetEuroc variable to point to the directory where the dataset has been uncompressed.

从http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets下载ASL Dataset Format数据集,并把数据集解压到名为MH01的文件夹内。再将euroc_examples.sh中数据集的地址更改为解压后数据集的绝对地址。

cd ~
wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_01_easy/MH_01_easy.zip
unzip MH_01_easy.zip
mv -rf ./mav0 ~/datasets/MH01

将euroc_examples.sh的第二行进行修改:

pathDatasetEuroc='/home/s/datasets' #Example, it is necesary to change it by the dataset path

运行exampls目录下的euroc_examples.sh即可看到ORB_SLAM3的输出。

ROS安装流程

ROS_melodic的安装

roswiki中有详细的安装步骤http://wiki.ros.org/melodic/Installation/Ubuntu
其中有几点需要注意:

  1. 在更换软件源的时候可以选择中国的源,详情可见http://wiki.ros.org/ROS/Installation/UbuntuMirrors
  2. 在添加环境的环节,注意当前使用的是bash还是zsh,从而选择在.bashrc还是.zshrc中添加source
  3. 在执行sudo rosdep init时,可能需要科学上网
  4. 最重要的一点,ROS的安装教程要选择英文版而不是中文版的,中文版的安装教程并没有英文版的全面,在sudo rosdep init之前要先执行sudo apt install python-rosdep才不会报错

cv_bridge的安装

详细安装方法参考
https://zhuanlan.zhihu.com/p/347455336
https://blog.csdn.net/wakingking88/article/details/104648636

由于ROS_melodic自带opencv版本为3,故需要重新编译cv_bridge才能使得ros与opencv4.5.1兼容。

对于已经安装好 ros-melodic-desktop-full 的计算机,在执行sudo apt remove ros-melodic-cv-bridge时会导致卸载掉额外的软件包,这是我们不希望看到的。
故我们不选则执行sudo apt remove ros-melodic-cv-bridge,而是在编译好cv_bridge软件包之后需要人工把/opt/ros/melodic文件夹下的各个库文件替换掉。以下为详细步骤:

  1. 首先需要下载cv_bridge的软件包
git clone https://github.com/ros-perception/vision_opencv.git
  1. 将下载好的软件包放入工作空间中,或者重新开辟一个工作空间
//开辟工作空间
cd ~
mkdir -p catkin_ws/src
cd catkin_ws
catkin_make//将代码放入工作空间内
cd ~/catkin_make/src
git clone https://github.com/ros-perception/vision_opencv.git
  1. 修改vision_opencv/cv_bridge/CMakeLists.txt
//由于我使用的ubuntu版本只能使用boost库1.6.5版本,python_boost库版本为3.6,故注释掉以下部分
if(NOT ANDROID)find_package(PythonLibs)
#  if(PYTHONLIBS_VERSION_STRING VERSION_LESS "3.8")# Debian Buster
#    find_package(Boost REQUIRED python37)
#  else()# Ubuntu Focalfind_package(Boost REQUIRED python)
#  endif()
#else()
find_package(Boost REQUIRED)
endif()//由于使用的是opencv4.5.1,故注释掉以下部分
set(_opencv_version 4)
find_package(OpenCV 4 QUIET)
#if(NOT OpenCV_FOUND)
#   message(STATUS “Did not find OpenCV 4, trying OpenCV 3”)
#   set(_opencv_version 3)
#endif()
  1. 修改/home/s/catkin_ws/src/vision_opencv/cv_bridge/src/module.hpp(根据自己的位置)
//将最后一段(36~40)行改为
static void do_numpy_import( )
{import_array( );
}
  1. 编译cv_bridge并安装库文件到/usr/local中
//传统编译方式
cd ~/catkin_ws/src/vision_opencv/cv_bridge
mkdir build
cd build
cmake ..
make
sudo make install//ros特有编译方式
cd ~/catkin_ws
catkin_make
  1. 将cv_bridge库文件转移到ros文件夹下
sudo rm -rf /opt/ros/melodic/include/cv_bridge
sudo rm -rf /opt/ros/melodic/share/cv_bridge
sudo rm -rf /opt/ros/melodic/lib/cv_bridge
sudo cp -rf /usr/local/include/cv_bridge /opt/ros/melodic/include/cv_bridge
sudo cp -rf /usr/local/share/cv_bridge /opt/ros/melodic/share/cv_bridge
sudo cp -rf /usr/local/lib/python2.7/dist-packages/cv_bridge /opt/ros/melodic/lib/cv_bridge

ORB_SLAM3中ROS软件包的编译

  1. 首先需要添加ros软件包路径
//打开bash环境配置文件
gedit ~/.bashrc
//在文件最下方插入下面这句话(其中PATH改为真实绝对路径)
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples/ROS
  1. 修改~/git/ORB_SLAM3/Examples/ROS/ORB_SLAM3/CMakeLists文件
//修改第33到39行代码,由于使用的是opencv4.5.1,故注释掉以下部分
find_package(OpenCV 4.0 QUIET)
#if(NOT OpenCV_FOUND)
#   find_package(OpenCV 2.4.3 QUIET)
#   if(NOT OpenCV_FOUND)
#      message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
#   endif()
#endif()
  1. 修改~/git/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_mono文件
//修改第62行中的rostopic话题名称为/cam0/image_raw,与数据集中topic话题名称统一ros::Subscriber sub = nodeHandler.subscribe("/cam0/image_raw", 1, &ImageGrabber::GrabImage,&igb);
  1. 编译ros文件夹中的源码
cd ~/git/ORB_SLAM3/Examples/ROS/ORB_SLAM3
mkdir build
cd build
cmake ..
make
  1. 下载ROS bag格式数据集并运行数据集
cd ~
wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_01_easy/MH_01_easy.bag
//终端1
roscore
//终端2
rosbag play ~/MH_01_easy.bag
//终端3
rosrun ORB_SLAM3 Mono /home/s/git/ORB_SLAM3/Vocabulary/ORBvoc.txt /home/s/git/ORB_SLAM3/Examples/ROS/ORB_SLAM3/Asus.yaml

运行成功示例

错误提示以及修正方案

  1. cv_bridge编译过程中出现错误
CMake Error at /usr/share/cmake-3.10/Modules/FindBoost.cmake:1947 (message):Unable to find the requested Boost libraries.Boost version: 1.65.1Boost include path: /usr/includeCould not find the following Boost libraries:boost_python37No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to thedirectory containing Boost libraries or BOOST_ROOT to the location ofBoost.
Call Stack (most recent call first):vision_opencv/cv_bridge/CMakeLists.txt:11 (find_package)

解决方法:参考cv_bridge的安装的第三步

  1. cv_bridge编译过程中出现错误,make 66%时出现错误
[ 66%] Building CXX object src/CMakeFiles/cv_bridge_boost.dir/module.cpp.o
In file included from /usr/include/python2.7/numpy/ndarrayobject.h:27:0,from /home/nano/catkin_ws/src/cv_bridge/src/module.hpp:26,from /home/nano/catkin_ws/src/cv_bridge/src/module.cpp:35:
/home/nano/catkin_ws/src/cv_bridge/src/module.hpp: In function ‘int do_numpy_import()’:
/usr/include/python2.7/numpy/__multiarray_api.h:1537:144: error: return-statement with no value, in function returning ‘int’ [-fpermissive]efine import_array() {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); return NUMPY_IMPORT_ARRAY_RETVAL; } }^
/usr/include/python2.7/numpy/__multiarray_api.h:1537:144: note: in definition of macro ‘import_array’efine import_array() {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); return NUMPY_IMPORT_ARRAY_RETVAL; } }^~~~~~
src/CMakeFiles/cv_bridge_boost.dir/build.make:62: recipe for target 'src/CMakeFiles/cv_bridge_boost.dir/module.cpp.o' failed
make[2]: *** [src/CMakeFiles/cv_bridge_boost.dir/module.cpp.o] Error 1
CMakeFiles/Makefile2:930: recipe for target 'src/CMakeFiles/cv_bridge_boost.dir/all' failed
make[1]: *** [src/CMakeFiles/cv_bridge_boost.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2

解决方法:参考cv_bridge的安装的第四步

  1. ORB_SLAM3运行过程中出现错误
Failed to load image at: /Datasets/MH01/mav0/cam0/data/1403636579763555584.png
./euroc_examples.sh: 行 7: 21285 段错误               (核心已转储)

解决方法:数据集地址出现错误,修改数据集地址即可

  1. ORB_SLAM3的ROS软件包编译过程中出现警告
usr/bin/ld: warning: libopencv_imgcodecs.so.3.2, needed by /opt/ros/melodic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.4.5

解决方法:重新安装cv_bridge并重新编译ROS软件包,参考cv_bridge的安装与ROS软件包的编译

  1. ORB_SLAM3的ROS软件包运行过程中出现错误
ORB-SLAM3 Copyright (C) 2017-2020 Carlos Campos, Richard Elvira, Juan J. Gómez, José M.M. Montiel and Juan D. Tardós, University of Zaragoza.
ORB-SLAM2 Copyright (C) 2014-2016 Raúl Mur-Artal, José M.M. Montiel and Juan D. Tardós, University of Zaragoza.
This program comes with ABSOLUTELY NO WARRANTY;
This is free software, and you are welcome to redistribute it
under certain conditions. See LICENSE.txt.Input sensor was set to: Monocular
段错误 (核心已转储)

解决方法:运行命令出错,重新检查命令
参考https://blog.csdn.net/qq_33591712/article/details/82918981

  1. ORB_SLAM3的ROS软件包运行过程中出现错误
ORB-SLAM3 Copyright (C) 2017-2020 Carlos Campos, Richard Elvira, Juan J. Gómez, José M.M. Montiel and Juan D. Tardós, University of Zaragoza.
ORB-SLAM2 Copyright (C) 2014-2016 Raúl Mur-Artal, José M.M. Montiel and Juan D. Tardós, University of Zaragoza.
This program comes with ABSOLUTELY NO WARRANTY;
This is free software, and you are welcome to redistribute it
under certain conditions. See LICENSE.txt.Input sensor was set to: MonocularLoading ORB Vocabulary. This could take a while...
Vocabulary loaded!Creation of new map with id: 0
Creation of new map with last KF id: 0
OpenCV Error: Bad argument (Invalid pointer to file storage) in cvGetFileNodeByName, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/persistence.cpp, line 863
terminate called after throwing an instance of 'cv::Exception'what():  /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/persistence.cpp:863: error: (-5) Invalid pointer to file storage in function cvGetFileNodeByName已放弃 (核心已转储)

解决方法:重新安装cv_bridge并重新编译ROS软件包,参考cv_bridge的安装与ROS软件包的编译

  1. 寻找不到链接库
libopencv_imgproc.so.4.5: cannot open shared object file: No such file or directory

解决方法:opencv地址没有添加到系统路径中,导致程序运行时刻找不到opencv库文件。需要将opencv安装路径设定在默认路径下或者更改系统路径,参考OPENCV的下载与编译。

从零开始的ORB_SLAM3运行相关推荐

  1. 从零开始搭建Pytorch运行环境Linux

    Linux从零开始搭建Pytorch运行环境 安装Miniconda Miniconda download 官网 选择合适版本的安装脚本,复制链接.(选择最新的3.9可能合适些) 下载安装脚本. wg ...

  2. 【ORB_SLAM3运行KITTI数据集报错的解决办法】

    ORB_SLAM3无法运行KITTI数据集解决办法 文章目录 问题分析 解决办法 文章目录 在使用KITTI数据集运行orb_slam3的单目和双目的例子时,出现运行不了直接中断程序的情况,这里提供了 ...

  3. vscode 在标签的src引入别名路径_从零开始 - VSCode 插件运行机制

    写这篇文章是因为最近一段时间的工作涉及到 Cloud Studio 插件这一块的内容,旧的插件系统在面向用户开放后暴露了安全性.扩展性等诸多问题.调研了几个不同架构下 IDE 的插件系统实现( The ...

  4. CEO亲自写代码登上热榜,从零开始打造“裸金属”树莓派

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI CEO亲 ...

  5. Android 性能优化---(8)APP启动时间优化指南

    本文可以帮助你优化应用的启动时间:首先描述应用启动过程的内部机制:然后讨论如何分析启动性能:最后,列举了一些常见的影响启动时间的问题,并就如何解决这些问题给出一些提示. 第 1 部分:启动过程内部机制 ...

  6. 【深度学习】学习深度学习的最好方法

    学习深度学习的最好方法 亲自实现,从零开始编写能运行的程序,一遍看源代码一边思考.只有这样才能正确理解深度学习,才能对那些看起来很高级的技术有完整的理解. 不依赖第三方库,从最基础的开始实现起,对于理 ...

  7. (七)Python绘图基础:Matplotlib绘图

    目录 Matplotlib绘图 折线图 绘制一组数据 绘制多组数据 散点图(scatter) 条形图(竖) 条形图(横) 饼图 Matplotlib属性 保存图片 色彩和样式 文字 其他属性 绘制子图 ...

  8. protues VSM 图形仿真帮助

    2.2 graphs tutorial 2.2.1 介绍 本教程的目的是通过简单的放大器电路向您展示如何使用Proteus VSM执行基于图形的仿真.它会逐步引导您完成以下任务: 放置图形,探针和生成 ...

  9. 高观点下的数学:自然数

    一直以来,可能我们绝大多数人都没有对自然数产生过疑问,自我们会说话起,长辈就教我们数数,1.2.3--直至上了小学,开始真正的学数学开始,也没有去思考与自然书有关的基础性质.在整个求学过程中,我们从自 ...

最新文章

  1. 文件系统_文件系统基础总结
  2. SCOM 常识概念—资源池介绍
  3. 逻辑回归实例--乳腺癌肿瘤预测
  4. 替换字符串中指定的字符--随手源码
  5. 17行html代码实现的将网页文本保存成本地文本文件
  6. 在Windows 7 Media Center中创建音乐播放列表
  7. CF407 E. k-d-sequence(线段树+单调栈)
  8. python2.7.10安装教程_Linux系统(CentOS)下python2.7.10安装
  9. -ms-flexbox_Flexbox的工作原理-用大尺寸,彩色动画gif进行解释
  10. [工具] CuteMarkEd
  11. UI自定义UITableView的右侧索引
  12. ac3168无线网卡驱动下载_70块的笔记本网卡,值不值得换
  13. 计算机安装win10配置,安装Win10系统配置的最低要求
  14. 5v继电器模块实物接线_继电器实物接线图
  15. 支持人脸识别的相册PhotoPrism
  16. nginx搭建mp4、flv流媒体服务器
  17. selenium学习指南
  18. C语言递归问题【青蛙跳台阶】和【汉诺塔】
  19. 神仙道人物属性基础知识普及
  20. 页面置换算法(FIFO、第二次机会、LRU)

热门文章

  1. 通过国家码切换默认输入法
  2. (生活篇)眼睛、驼背、TMJ、喉咙痛、二郎腿、打鼾、减肥等多种问题解决
  3. iphone 5s设置方法
  4. 三星Galaxy S21值不值得入手?看完这五点不再纠结
  5. 大数据开发和java的前景_Java大数据开发前景好吗?
  6. 新华网:软件工程师职业前景、薪水报酬及地位分析
  7. Day3——自制操作系统
  8. 前端实现每日签到功能,如果今天签了今天就不用在签到了
  9. win7系统配置时间服务器,win7系统配置ntp服务器地址
  10. Dex.top(大力士)关于上线Limo公告