当前位置:   article > 正文

安装ORB-SLAM3教程_orbslam3 安装

orbslam3 安装

一、ROS一键安装(首次学ROS的话)

wget http://fishros.com/install -O fishros && . fishros
  • 1

输入1,就根据提示一步一步来

二、ORB_SLAM3所依赖的包有pangolin,EIGEN3,OPENCV,DBoW2 和 g2o

1、安装工具

sudo apt update
sudo apt install git cmake gcc g++
  • 1
  • 2

2、安装EIGEN3.3.4

直接源码安装

sudo apt-get install libeigen3-dev
  • 1

3.安装pangolin0.6

(1)安装依赖

sudo apt install libglew-dev libpython2.7-dev
  • 1

(2)获得pangolin的稳定版本安装包

(pangolin0.6版本下载) (0.6版本下载)选择Source code(tar.gz)
(安装出错参考) pangolin安装出错解决

(3)编译安装

mkdir build
cd build
cmake ..
make
sudo make install	
//安装后pangolin将在  /usr/local/include/中找到
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(4)报错

可能会是缺少依赖:

sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
sudo apt install libpython2.7-dev
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
  • 1
  • 2
  • 3
  • 4
  • 5

(5)测试

在你所放置的Pangolin文件下

cd build/examples/HelloPangolin
./HelloPangolin
  • 1
  • 2

运行此示例,效果显示是一个红绿蓝立方体,表示即为安装成功

4.安装opencv3.4.2

教程一: ubuntu16.04+Opencv3.4.3+opencv_contrib3.4.3安装编译全过程
教程二:ubuntu18.04中安装opencv3.2

5.DBoW2 和 g2o

DBoW2 和 g2o 在源码的第三方库中,无需下载,后面直接编译即可。

三、(非ROS)编译ORB_slam3

1.下载源码

ORB_SLAM3官网下载

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git
  • 1

2.编译

打开ORB_SLAM3中build.sh可以看到5个需要编译的第三方库
直接执行以下命令,可一次性编译这5个文档,一次成功是最省事了,但报错不易查找问题

cd ORB_SLAM3
chmod +x build.sh
./build.sh
  • 1
  • 2
  • 3

故建议单独进行编译

(1)编译Thirdparty/DBoW2

在ORB_SLAM3文件夹下打开终端

cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
  • 1
  • 2
  • 3
  • 4
  • 5

(2)编译Thirdparty/g2o

在/ORB_SLAM3下开终端

cd Thirdparty/g2o
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
  • 1
  • 2
  • 3
  • 4
  • 5

(3)编译Thirdparty/Sophus

在/ORB_SLAM3下开终端

cd Thirdparty/ Sophus
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
  • 1
  • 2
  • 3
  • 4
  • 5

(4)解压/ORB_SLAM3/Vocabulary/ORBvoc.txt.tar.gz

在/ORB_SLAM3下开终端

cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..
  • 1
  • 2
  • 3

(5)编译ORB_SLAM3

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
  • 1
  • 2
  • 3
  • 4

(6)报错

报错1:Could not find a configuration file for package “OpenCV” that is compatible
with requested version “4.4”.
原因:此处我安装的是opencv3.4.2
解决:将/ORB_SLAM3/CMakeLists.txt中第33行
find_package(OpenCV 4.4)
此处的4.4改为3.4.2即可,即
find_package(OpenCV 3.4.2)
再次编译
报错2:realsense2config.cmake
解决:sudo apt-get install ros-melodic-realsense2-camera

四、数据集下载及运行,评估

1.下载:EuRoC 数据集下载序列(ASL 格式)

EuRoC 数据集下载
如图,Downloads下的ASL Dataset Format,点击任意link下载即可
/ORB_SLAM3下新建Datasets,将下载好的文件MH_01_easy(就是图中第一个Machine Hall 01)放入Datasets,并改名为MH01
ROS bag也下载一个
在这里插入图片描述

2.运行:以下网址中ORB_SLAM3/euroc_examples.sh 脚本内有各个数据集执行命令

另一个ORB_SLAM3
找到MH01对应sensor的命令运行即可,如:

 ./Examples/Stereo/stereo_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo/EuRoC.yaml /home/nj/ORB_SLAM3/Datasets/MH01 ./Examples/Stereo/EuRoC_TimeStamps/MH01.txt dataset-MH01_stereo
  • 1

在这里插入图片描述

3.评估:评估脚本euroc_eval_examples.sh,也在第五点的网址https://github.com/j4mf/ORB_SLAM3中可以得到

./euroc_examples.sh
  • 1

五、运行相机(我用的是 Intel D455)

1.相机安装

sudo apt-get install ros-melodic-realsense2-camera
  • 1

(先硬件连接好后,测试摄像头能否正常打开,启动)

roslaunch realsense_camera rs_rgbd.launch
  • 1

2.修改参数文件

修改相机启动文件路径:/opt/ros/melodic/share/realsense2_camera/launch/rs_rgbd.launch
在此路径下/opt/ros/melodic/share/realsense2_camera/launch/打开终端

sudo gedit rs_rgbd.launch
  • 1

改1:第78行,第79行改false为true


改2:图像大小改为640*480


保存
在路径/ORB_SLAM3/Examples/Stereo-Inertial下RealSense_D435i.yaml文件内参等配置按需要进行修改
运行脚本开始运行ORB-SLAM3:

./Examples/Stereo-Inertial/stereo_inertial_realsense_D435i Vocabulary/ORBvoc.txt ./Examples/Stereo-Inertial/RealSense_D435i.yaml
  • 1

这是连接相机进行实际环境的显示情况
在这里插入图片描述

六、ROS部分编译

原作者将ROS部分放到了/ORB_SLAM3/Examples_old位置,后续编译是进入old中

1.添加环境变量

打开bashrc,执行

sudo gedit ~/.bashrc
  • 1

在~/.bashrc中添加环境变量,将以下复制粘贴到最后一行:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples_old/ROS
  • 1

(绿色PATH改为自己的路径,如我的是:/home/nj/ORB_SLAM3/Examples_old/ROS)

2.ROS下编译

cd Examples_old/ROS/ORB_SLAM3
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make -j4
  • 1
  • 2
  • 3
  • 4
  • 5

3.报错

报错1:/home/nj/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/…/…/…/include/ImuTypes.h:29:10: fatal error: sophus/se3.hpp: 没有那个文件或目录
#include <sophus/se3.hpp>
解决1:找到ORB_SLAM3/Examples_old/ROS/ORB_SLAM3下的CMakeLists.txt 修改它,include_directories中添加

 ${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus 
  • 1

再次编译
报错2:
(1)
在这里插入图片描述

(2)
在这里插入图片描述

(3)
在这里插入图片描述

解决:
(1)找到ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR下的ros_mono_ar.cc文件:
将第151行的 cv::Mat Tcw = mpSLAM→TrackMonocular(cv_ptr→image,cv_ptr→header.stamp.toSec());
替换为:

 cv::Mat Tcw;
 Sophus::SE3f  Tcw_SE3f = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());
 Eigen::Matrix4f Tcw_Matrix = Tcw_SE3f.matrix();
 cv::eigen2cv(Tcw_Matrix, Tcw);
  • 1
  • 2
  • 3
  • 4

(2)找到ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR下的ViewerAR.cc文件:
将第405行的vPoints.push_back(pMP→GetWorldPos());
替换为:

cv::Mat WorldPos;
cv::eigen2cv(pMP->GetWorldPos(), WorldPos);
vPoints.push_back(WorldPos);
  • 1
  • 2
  • 3

(3)还是ViewerAR.cc文件:
将532行的cv::Mat Xw = pMP→GetWorldPos();
替换为:

cv::Mat Xw;
cv::eigen2cv(pMP->GetWorldPos(), Xw);
  • 1
  • 2

重新编译
报错3:
在这里插入图片描述

解决:加头文件
在/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR/ViewerAR.h中加入如下:

#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
#include <opencv2/opencv.hpp>
  • 1
  • 2
  • 3

再次重新编译,可算ok了

七、ROS运行

1.开启三个终端

roscore
  • 1

2.在ORB_SLAM3下打开终端(每开一次都要source)

source /home/nj/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/build/devel/setup.bash
rosrun ORB_SLAM3 Stereo Vocabulary/ORBvoc.txt Examples_old/Stereo/EuRoC.yaml /home/nj/下载/MH_01_easy.bag
  • 1
  • 2

(第一个参数为系统的主程序执行文件 Stereo

第二个参数为特征词典 Vocabulary/ORBvoc.txt

第三个参数为相机参数 Examples_old/Stereo/EuRoC.yaml
后续如果要使用自己的数据集,是需要修改这个文件的。而这个地方,也需要注意你下载的数据集和相机参数文件对应

第四个参数为数据集路径 /home/nj/下载/MH_01_easy.bag)
3.跑包

 rosbag play --pause –clock MH_01_easy.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw /imu0:=/imu
  • 1

出现问题:
运行显示如下,无法跟踪上,是话题没同步还是哪里对应上
在这里插入图片描述

原因:上面的命令是启动双目的配置,但文件中缺少左右摄像头标定的内参,所以无法跟踪,需要的话就标了放进去编译启动,下面是以现有参数,启动单目,表明能运行成功就好
解决:
路径/home/nj/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/ros_mono_inertial.cc源码中查看订阅话题/camera/image_raw,100
在这里插入图片描述

开启三个终端
1.

roscore
  • 1

2.在ORB_SLAM3下打开终端(每开一次都要source)

source /home/nj/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/build/devel/setup.bash

rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples_old/Monocular-Inertial/EuRoC.yaml
  • 1
  • 2
  • 3
 rosbag play --pause MH_01_easy.bag /cam0/image_raw:=/camera/image_raw /imu0:=/imu
  • 1

在这里插入图片描述

结束

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/646946
推荐阅读
相关标签
  

闽ICP备14008679号