Ubuntu20.04在ROS下运行ORB-SLAM3

本文详细描述了在Ubuntu20.04环境下配置和运行ORB-SLAM3视觉SLAM算法的过程,包括添加环境变量、修改配置文件、编译及运行中遇到的各种错误及其解决方案,重点介绍了如何处理Pangolin库错误和缺少库等问题。
摘要由CSDN通过智能技术生成

目录

1.前言:

2.总体配置:

3.数据集

4.配置ORB-SLAM3

(1)添加环境变量

(2)修改文件

5.编译&运行

(1)检查环境

(2)编译

6.运行

7.部分报错

(1)功能包未找到

(2)AR路径下文件的错误

(3)Pangolin库错误

(4)缺少库


1.前言:

        小白配置ORB-SLAM3的过程真的辛酸。。各种各样的弄,跑出来一堆bug,很多还搜不出来到处找原因。之前也没有配置过其他视觉SLAM算法,从头开始的,以此记录一下。也希望对你配置ORB-SLAM3算法有所帮助,也作交流学习。

2.总体配置:

        源码链接:https://github.com/UZ-SLAMLab/ORB_SLAM3

       这个配置可是把我折腾了一番,很多配置都有限定的,这个一定要注意!(下面的配置可能和官网不一样,但是经过测试,肯定是可以使用的。)

        Pangolin-v0.6        链接为:https://github.com/stevenlovegrove/Pangolin/releases

        opencv-4.2.0        链接为:https://github.com/opencv/opencv/releases?page=3

        (Ubuntu20.04自带的opencv的版本就是4.2.0,如果使用的是Ubuntu20.04则不用更改)

        eigen-3.3.4        链接为:Eigen

        DBoW2、g2o和Sophus        这三个库在官方文件中就有给出,在Thirdparty文件夹中。

配置完毕后,可以分别使用下面命令进行编译,安装。

mkdir build
cd build
cmake ..
make -j8
sudo make install

        python安装

sudo apt install libpython2.7-dev

3.数据集

        博主测试的数据集为EuRoC数据集,链接为:kmavvisualinertialdatasets – ASL Datasets

        也可以使用百度网盘进行下载:

        链接: https://pan.baidu.com/s/1yJWnhsWvBbAZJXHRyrVLnw         提取码: e9rz

4.配置ORB-SLAM3

(1)添加环境变量

        下方命令记得修改为自己的地址

gedit ~/.bashrc
# 下方(PATH)为你自己的路径
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:(PATH)/ORB_SLAM3/Examples/ROS
# Ctrl+c保存,退出。
# 在当前终端输入
source ~/.bashrc

(2)修改文件

        配置路径基本上都在为(PATH)/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3或者在(PATH)/Thirdparty中(PATH为自己的路径,需要修改)。这个配置比较麻烦,我参考的链接为:Ubuntu20.04的ROS环境安装ORB-SLAM3详解_下载orbslam3是要在ros的工作空间下载吗-CSDN博客        按照上面的配置方法配置完毕后, 编译依旧会报错。。这个时候简直头皮发麻,不是一个很成熟的东西吗,怎么配置起来这么麻烦。。这个时候建议大家,深吸一口气告诉自己:今天天气真不错,等会一定一定要好好吃一顿

        相信大家缓过来一点了。那么继续吧。。。

        除了上面那些配置,在(PATH)/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt中的第2行添加

project(ORB_SLAM3)

        接下来是在(PATH)/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR下的ros_mono_ar.cc中的

第405行    vPoints.push_back(pMP->GetWorldPos());

替换为:        vPoints.push_back(ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos()));

第530行    cv::Mat Xw = pMP->GetWorldPos();

替换为:        cv::Mat Xw = ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos());

        换一个文件,文件为:ViewerAR.cc

第151行        cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());

替换为:        cv::Mat Tcw=ORB_SLAM3::Converter::toCvMat(mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec()).matrix());

5.编译&运行

        终于终于终于到编译啦,但是不要松懈哦,编译的问题可能会非常非常多。

(1)检查环境

        在编译之前,将Examples_old文件夹下的ROS文件夹整个复制到Examples路径下。然后可以输入以下命令,检查当前是否处于该环境下:

echo ${ROS_PACKAGE_PATH}

        经常使用Ubuntu的小伙伴,这个命令可能会报一长串结果。我们只需要看最后是不是PATH/ORB_SLAM3/Examples/ROS即可,如下:

         如果不正确的话,可以参照(1)添加环境变量中进行配置。

(2)解压部分文件

        啥?还要解压?没错,确实有个地方放的是压缩包,需要解压一下。目录路径为:(PATH)/ORB_SLAM3/Vocabulary中的ORBvoc.txt.tar.gz

(3)编译

        在编译前,还需要运行下面命令:(注意:博主在编译前更改了ORB-SLAM3节点收到的话题名称,如果不想修改则在播放ROS包的时候将话题重映射一下。

cd (PATH)/ORB_SLAM3 # 修改成自己的路径
chmod +x build_ros.sh
./build_ros.sh

        编译完成后,在(PATH)/ORB_SLAM3/Examples/ROS/ORB_SLAM3会产生一系列文件,如下:

6.运行

         博主使用EuRoC数据集分别跑了Monocular(单目)视觉算法和Monocular-Inertial(单目+IMU)视觉算法。使用的命令分别如下:

单目:

rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Stereo-Inertial/EuRoC.yaml true

运行结果:

单目+IMU:

rosrun ORB_SLAM3 Mono_Inertial Vocabulary/ORBvoc.txt Examples/Stereo-Inertial/EuRoC.yaml true

运行结果:

7.部分报错

(1)功能包未找到

        如:  'ORB_SLAM3' not found

        原因:多方面原因造成的。建议仔细按照上述来进行配置,编译完成后,在.../ROS/ORB-SLAM3路径下会生成一系列文件,如下:

(2)AR路径下文件的错误

        如:error: no matching function for call to ‘std::vectorcv::Mat::push_back(Eigen::Vector3f)’

error: conversion from ‘Eigen::Vector3f’ {aka ‘Eigen::Matrix<float, 3, 1>’} to non-scalar type ‘cv::Mat’ requested

error: conversion from ‘Sophus::SE3f’ {aka ‘Sophus::SE3’} to non-scalar type ‘cv::Mat’ requested

        原因:未配置正确,建议参照(2)修改文件中来进行修改。

(3)Pangolin库错误

        如:在运行后报错:terminate called after throwing an instance of 'pangolin::FactoryRegistry::NoMatchingSchemeException'

        原因:Pangolin版本不正确,可能是安装最新版的Pangolin造成的。

(4)缺少库

        如:Failed to load module "canberra-gtk-module"

        原因:未安装库。运行下面命令:

sudo apt-get install libcanberra-gtk-module

(5)ldconfig错误

        如:error while loading shared libraries: libpango_windowing.so: cannot open shared object file: No such file or directory

        原因:在安装完Pangolin之后,需要运行一下以下命令

sudo ldconfig

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值