ubuntu18melodic环境安装orb_slam2,vins_mono,orb_slam3跑euroc数据集并使用evo评估

1 篇文章 0 订阅
1 篇文章 0 订阅

前言

最近使用高翔博士修改的orb_slam2生成稠密点云,然后用八叉树生成二维栅格地图用来导航,但是建出来的图效果不太行,漂移太严重。

左边是cartographer跑出来的图,右边是orb_slam2的。

效果这么差一方面是我点云处理的不好,因为生成的点云在八叉树中是倾斜的,我自己手动调的角度,可能不那么精确,另一方面就是生成的pcd它本身就漂移,这是跑出来的pcd文件

于是看了其他的一些算法,想对这些算法做一些评估,跑的是同一个euroc数据集MH01_easy。

三种算法的安装

因为orb_slam2使用的库和orb_slam3有冲突,所以用的是两台电脑,两台电脑都装了vins_mono。装orb_slam3的是新装的系统。

1.orb_slam2

使用的是高翔博士的修改版GitHub - gaoxiang12/ORBSLAM2_with_pointcloud_map

因为安装编译比较麻烦之后有时间再补

2.vins_mono

2.1 安装系统包

sudo apt install ros-melodic-cv-bridge ros-melodic-tf ros-melodic-message-filters ros-melodic-image-transport

2.2 安装ceres_solver

安装依赖

sudo apt-get install cmake
sudo apt-get install libgoogle-glog-dev libgflags-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libsuitesparse-dev

下载ceres_solver源码(注意版本兼容,选用1.14版本)

参考这篇文章

Ubuntu18.04安装Ceres1.14_ubuntu18安装ceres-CSDN博客

编译安装

mkdir build
cd build
cmake ..
make
make test
sudo make install

如果编译报错可能是cmake版本的问题,可以建立高版本的cmake软连接,一定不要使用automove,参见这篇

cmake升级、更新(ubuntu18.04)-CSDN博客

2.3 运行

roslaunch vins_estimator euroc.launch
roslaunch vins_estimator vins_rviz.launch
rosbag play --pause MH_01_easy.bag

数据集可以从这下载

kmavvisualinertialdatasets – ASL Datasets

3.orb_slam3

1. 安装库和依赖

Pangolin,opencv,eigen3,boost

pangolin同orb_slam2一样使用0.6版本,opencv和eigen3使用自带的就可以

boost

Boost Downloads        下载boost_1_77_0.tar.gz版本

tar -xvf boost_1_77_0.tar.gz
cd ./boost_1_77_0
./bootstrap.sh
sudo ./b2 install

rosdep           因为官网更新下载很容易失败,这里使用鱼香ros的rosdepc

sudo pip install rosdepc
//找不到pip就试试pip3
sudo pip3 install rosdepc
//如果还是没有就先执行下面的然后重复上面的
sudo apt-get install python3-pip

sudo rosdepc init
rosdepc update

之前屡试不爽但是新系统不知道为什么连不上网站,这里是用小鱼的一键安装

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

2. 编译

代码

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

编译

build.sh编译比较简单,先给build_sh赋一下权限

sudo chmod +x build.sh

我们opencv版本不对应,以及c++版本,在Cmakelists中改两处

1.找到

find_package(OpenCV 4.4)

改为

find_package(OpenCV 3 REQUIRED)

2.找到

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

改为

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")

编译过程中如果出现interial段错误改build.sh中的make -j8把-j8全删掉就可以了。

如果编译没通过,需要删除ORB_SlAM3下的build和lib文件夹阿,以及Thirdparty下DBoW2和g2o里面的build和lib文件夹,Sophus下的build文件夹。不删除下次编译会报错,上述文件如果有些没有,那就是上次编译还没编译到那一步。

build_ros.sh编译多几步

首先和上面一样Cmakelists要改一下,还有一些

include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/../../../
${PROJECT_SOURCE_DIR}/../../../include
${PROJECT_SOURCE_DIR}/../../../include/CameraModels
${Pangolin_INCLUDE_DIRS}
#加上下面这些,其中catkin一行不知道到底需不需要,都加上吧省得要重新编译(复制完后这一行删了)
${EIGEN3_INCLUDE_DIR}
${catkin_INCLUDE_DIRS}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus
)

新版的ORB_SLAM3中Examples里没有ROS文件夹,把Eamples_old里面的复制过来就行了,然后需要将包的路径添加到bash文件中

sudo gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/cr/ORB_SLAM3/Examples/ROS

将上面的代码复制进去,注意,一定要在放在source路径的后面不然后面不会显示,保险起见放在最后就好了。接下来看看输出的路径里有没有

echo ${ROS_PACKAGE_PATH}

代码也需要修改

在~/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc中

加上头文件
#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
 //vPoints.push_back(pMP->GetWorldPos());
注释掉上面的,改成下面的
cv::Mat WorldPos;
cv::eigen2cv(pMP->GetWorldPos(), WorldPos);
vPoints.push_back(WorldPos);
//cv::Mat Xw = pMP->GetWorldPos();
注释掉上面的,改成下面的
cv::Mat Xw;
cv::eigen2cv(pMP->GetWorldPos(), Xw);

在~/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc中

加上头文件
#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
//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);

最后输入下面命令更新一下共享库就可以编译了,同样的记得先给build_ros赋一下权限

sudo ldconfig

3.3 运行

./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml /home/**********/MH_01_easy ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt

*****换成自己的路径,注意这里的跑的不是bag包,而是数据集,因为后续评估需要数据集中的一个文件。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

如果跑一半或者刚开始就闪退报错核心已转储,修改上面代码中yaml文件的

ORBextractor.nFeatures: 2000

改为3000,如果再不行就往上加,这个问题在之前跑orb_slam2时卡了很久,经过测试最终数值相差不大,下面的内容会给出结果

evo安装与评估

1. evo安装

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ evo --upgrade --no-binary evo

之后终端输入evo   tap键补全会出现其他命令,那就是安装成功了,没有也不要着急,重启一下电脑就好了。

sudo apt-get install python-tk
sudo apt-get install python3-tk

2. vins_mono测试

vins_mono生成的轨迹无法直接用于测试,所以要修改一下代码

Ubuntu 18.04 ——— VINS-Mono运行与EVO的评测与使用_vins-mono实现 ubuntu18.04-CSDN博客

参考这篇文章

修改完成后会有一个文件vins_result_loop.txt,这个就是要评估的文件,在我们上述下的数据集,也就是orb_slam3跑的数据集中,MH_01_easy/mav0/state_groundtruth_estimate0/data.csv这个文件是euroc格式,需要转成tum格式

evo_traj euroc data.csv --save_as_tum

再然后将vins_result_loop.txt和data.tum放到同一个目录下,执行下面的代码就可以出结果了

evo_ape tum data.tum  vins_result_loop.txt -p --plot_mode=xyz -a --correct_scale --save_results ./test.zip

最后保存的结果的压缩包随便起个名就好

这里有可能会报错ModuleNotFoundError:No module named '_tkinter'

安装一下就好了

sudo apt-get install python-tk
sudo apt-get install python3-tk

再次执行就能看到结果了

3. ORB_SLAM3测试

ORB_SLAM2的跑出来的文件是可以直接用的,注意要评估的文件不是KeyFrameTrajectory.txt而是CameraTrajectory.txt

同样的和data.tum放到同一个目录下执行代码就可以看到结果

evo_ape tum data.tum CameraTrajectory.txt -p --plot_mode=xyz -a --correct_scale --save_results ./test.zip

结果对比和后续想法

orb_slam2

vin_mono

ORB_SLAM3_3000(修改了yaml文件)

ORB_SLAM3_2000(我跑了七八成核心转储了,不过轨迹文件也能用)

分析,虽然只跑了一个数据集但是数据很直观了,ORB_SLAM3的效果很棒,然后修改了yaml文件两组数据相差很小,之后会对ORBextractor.nFeatures的不同值测试多组数据集。

但是总归来说还是想建出一个合格的地图,任重道远,共勉共勉。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值