ubuntu18.04编译安装orb-slam3及ros下运行

1.下载orb-slam3

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

2.编译

cd ORB_SLAM3
chmod +x build.sh
./build.sh

3. 报错

报错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)
再次编译

4.编译ros环境

4.1.添加环境变量

打开bashrc,执行

sudo gedit ~/.bashrc

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

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/...自己的路径../catkin_ws/src/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM

然后保存运行

source ~/.bashrc

检查ros环境路径是否添加成功

xx@xxxxxxxxx:~$ echo $ROS_PACKAGE_PATH
/opt/ros/melodic/share:/home/cs/catkin_ws/src/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM

则成功!

4.2编译

cd Examples_old/ROS/ORB_SLAM3
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make -j4

5.报错 

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

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

再次编译
报错2:

ubuntu18.04编译安装orb-slam3及ros下运行_第1张图片 

解决:
(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 
#include 
#include 

再次重新编译,可算ok了

6.运行

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
 

你可能感兴趣的:(ubuntu,linux,运维)