安装ORB-SLAM3教程
一、ROS一键安装(首次学ROS的话)
wget http://fishros.com/install -O fishros &&. fishros
输入1,就根据提示一步一步来
二、ORB_SLAM3所依赖的包有pangolin,EIGEN3,OPENCV,DBoW2 和 g2o
1、安装工具
sudoapt update
sudoaptinstallgit cmake gcc g++
2、安装EIGEN3.3.4
直接源码安装
sudoapt-getinstall libeigen3-dev
3.安装pangolin0.6
(1)安装依赖
sudoaptinstall libglew-dev libpython2.7-dev
(2)获得pangolin的稳定版本安装包
(pangolin0.6版本下载) (0.6版本下载)选择Source code(tar.gz)
(安装出错参考) pangolin安装出错解决
(3)编译安装
mkdir build
cd build
cmake ..makesudomakeinstall
//安装后pangolin将在 /usr/local/include/中找到
(4)报错
可能会是缺少依赖:
sudoaptinstall libgl1-mesa-dev
sudoaptinstall libglew-dev
sudoaptinstall libpython2.7-dev
sudoaptinstall pkg-config
sudoaptinstall libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
(5)测试
在你所放置的Pangolin文件下
cd build/examples/HelloPangolin
./HelloPangolin
运行此示例,效果显示是一个红绿蓝立方体,表示即为安装成功
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
2.编译
打开ORB_SLAM3中build.sh可以看到5个需要编译的第三方库
直接执行以下命令,可一次性编译这5个文档,一次成功是最省事了,但报错不易查找问题
cd ORB_SLAM3
chmod +x build.sh
./build.sh
故建议单独进行编译
(1)编译Thirdparty/DBoW2
在ORB_SLAM3文件夹下打开终端
cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
(2)编译Thirdparty/g2o
在/ORB_SLAM3下开终端
cd Thirdparty/g2o
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
(3)编译Thirdparty/Sophus
在/ORB_SLAM3下开终端
cd Thirdparty/ Sophus
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
(4)解压/ORB_SLAM3/Vocabulary/ORBvoc.txt.tar.gz
在/ORB_SLAM3下开终端
cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd..
(5)编译ORB_SLAM3
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
(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
3.评估:评估脚本euroc_eval_examples.sh,也在第五点的网址https://github.com/j4mf/ORB_SLAM3中可以得到
./euroc_examples.sh
五、运行相机(我用的是 Intel D455)
1.相机安装
sudoapt-getinstall ros-melodic-realsense2-camera
(先硬件连接好后,测试摄像头能否正常打开,启动)
roslaunch realsense_camera rs_rgbd.launch
2.修改参数文件
修改相机启动文件路径:/opt/ros/melodic/share/realsense2_camera/launch/rs_rgbd.launch
在此路径下/opt/ros/melodic/share/realsense2_camera/launch/打开终端
sudo gedit rs_rgbd.launch
改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
这是连接相机进行实际环境的显示情况
六、ROS部分编译
原作者将ROS部分放到了/ORB_SLAM3/Examples_old位置,后续编译是进入old中
1.添加环境变量
打开bashrc,执行
sudo gedit ~/.bashrc
在~/.bashrc中添加环境变量,将以下复制粘贴到最后一行:
exportROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples_old/ROS
(绿色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
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
再次编译
报错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);
(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);
(3)还是ViewerAR.cc文件:
将532行的
cv::Mat Xw = pMP→GetWorldPos();
替换为:
cv::Mat Xw;
cv::eigen2cv(pMP->GetWorldPos(), Xw);
重新编译
报错3:
解决:加头文件
在/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR/ViewerAR.h中加入如下:
#include<Eigen/Dense>#include<opencv2/core/eigen.hpp>#include<opencv2/opencv.hpp>
再次重新编译,可算ok了
七、ROS运行
1.开启三个终端
roscore
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
(第一个参数为系统的主程序执行文件 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
出现问题:
运行显示如下,无法跟踪上,是话题没同步还是哪里对应上
原因:上面的命令是启动双目的配置,但文件中缺少左右摄像头标定的内参,所以无法跟踪,需要的话就标了放进去编译启动,下面是以现有参数,启动单目,表明能运行成功就好
解决:
路径/home/nj/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/ros_mono_inertial.cc源码中查看订阅话题/camera/image_raw,100
开启三个终端
1.
roscore
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
rosbag play --pause MH_01_easy.bag /cam0/image_raw:=/camera/image_raw /imu0:=/imu
结束
版权归原作者 陌柠>-< 所有, 如有侵权,请联系我们删除。