目录
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文章来源:https://www.toymoban.com/news/detail-840047.html
原因:在安装完Pangolin之后,需要运行一下以下命令文章来源地址https://www.toymoban.com/news/detail-840047.html
sudo ldconfig
到了这里,关于Ubuntu20.04在ROS下运行ORB-SLAM3的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!