【视觉SLAM】从安装Ubuntu18.04开始

前言

说明

本文将从在虚拟机中安装Ubuntu18.04开始,逐步记录视觉SLAM的学习过程。

工作环境

  1. 硬件
    CPU:AMD Ryzen 5 1500X Quad-Core Processor 3.49GHz
    GPU:NVIDIA GeForce GTX 750 Ti
    内存大小:16GB
  2. 软件
    操作系统:Windows 10 专业版 21H1
    虚拟机:VMware Workstation 15 Pro 15.5.6 build-16341506

需要准备的东西

  1. 微批恩
    Windows系统下,我用的是htt【防封】ps://wuji【防封】ev2ray.to【防封】p/auth/login
    购买之后可以得到一个订阅地址,网站里有详细的使用说明
    Linux系统下,我用的是htt【防封】ps://qv2【防封】ray.net/【防封】getting-start【防封】ed/step2.html#down【防封】load-v2ray-core-files的方法,订阅地址与Windows端的可通用
    为了方便,将Linux的微批恩传到百度网盘上了,使用方法也有。htt【防封】ps://【防封】pa【防封】n.ba【防封】idu.com/s/12cM【防封】ZDyIulSTj_Bxm【防封】ALFIxQ,密码:6666,解压密码:RayShark
  2. Ubuntu 18.04镜像文件
    我是去官网(http://releases.ubuntu.com/18.04/)下载,下载Desktop image版本,建议开微批恩下载。如果觉得浏览器自带的下载慢,就复制下载链接到迅雷中下载。最后得到一个.iso格式文件。
  3. 已经安装好的VMware Workstation 15 Pro虚拟机
    虚拟机安装过程略。
    建议关闭Windows的自动更新,否则安装Ubuntu之后运行时,主系统可能会蓝屏,蓝屏代码:PAGE_FAULT_IN_NONPAGED AREA,猜测是因为Windows版本太新。

安装Ubuntu 18.04

现在硬盘的适当位置新建一个文件夹Ubuntu,之后会将Ubuntu 18.04安装在这个文件夹下;
打开VMware Workstation的“主页”,“创建新的虚拟机”,选择“自定义”;硬件兼容性就默认的选项。
点“稍后安装操作系统”;
稍后安装操作系统
上面选择“Linux”,下面选择“Ubuntu 64位
安装何种操作系统
虚拟机名字可以随便取一个,位置选择刚刚新建的“Ubuntu”文件夹。
命名虚拟机
分配处理机数量,根据CPU的核心数适当选择。
处理机配置
根据物理内存大小,适当分配虚拟机内存,这里分配10GB(注意要换算成MB)
分配虚拟机内存
选择“使用网络地址转换NAT”、“LSI Logic”、“SCSI”、“创建新虚拟磁盘
分配容量决定了Ubuntu中磁盘的大小,根据主机磁盘容量适当分配大小,这里分配100GB(以这里为准,图片仅做参考)并且勾选立即分配
制定磁盘容量
“指定磁盘文件”默认就行。
“自定义硬件”处,点击“自定义硬件”,“处理器”勾选两个虚拟化,“新CD/DVD”点“使用ISO映像文件”并选择之前下载的Ubuntu 18.04镜像(.iso格式)。点击“关闭”、“完成”。等待创建磁盘完成
处理器设置
CD/DVD设置
之后在Ubuntu界面,开启虚拟机。
开启虚拟机
欢迎界面,翻到最下面选择简体中文,点击“安装Ubuntu
“继续”,选择“正常安装”和“安装第三方软件”,不下载更新。“继续”
清除整个磁盘并安装Ubuntu”,“现在安装”,“继续”,“继续”,输入姓名、计算机名等等。
安装其他软件
安装类型
之后就等待安装完成如果语言包下载太久或者软件包下载太久,可以点击文字左边的黑色小箭头,展开详细情况再点Skip跳过。
安装完成后点击现在重启,如果出现"Please remove the installation medium",则点击VMware上方工具栏的“虚拟机”、“电源”、“重新启动客户机”。

进入到系统后,在虚拟机左边”中,右键Ubuntu,选择“VMware Tools"安装。之后在Ubuntu中进入挂载的VMware Tools,将里面的文件复制到一个合适的地方,解压.tar.gz格式文件,进入解压后的文件夹,找到.pl格式文件所在的文件夹,右键,在此处打开终端,输入以下命令安装VMware Tools,按照提示安装(注意第一次输入要输入"yes")

sudo ./vmware-install.pl

安装完成后,Ubuntu界面应该就是全屏的了,也支持主机与虚拟机之间文件的复制粘贴。
点击右上角按钮,重启。
在Ubuntu 18中配置微批恩
打开“软件和更新”,勾选“源代码”,服务器选择“主服务器”,设置如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击“关闭”、“重新载入”,等待更新缓存
打开“软件更新器”,因为是安装系统后第一次更新,点击“立即安装”。
更新完成后再次重启。
依次在控制台执行以下命令(建议挂微批恩)

sudo apt update
sudo apt install build-essential
sudo apt install git
sudo apt-get install cmake

安装ORB-SLAM3

安装Pangolin

依次在控制台执行以下命令

sudo apt-get install libglew-dev
sudo apt-get install libpython2.7-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
sudo apt-get install libdc1394-22-dev libraw1394-dev
sudo apt-get install libjpeg-dev libpng12-dev libtiff5-dev libopenexr-dev

git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
sudo make install

安装OpenCV 3.2.0

去官网下载OpenCV 3.2.0的源代码(建议挂微批恩):https://opencv.org/releases/page/5
下载完成后解压到合适目录。
依次在控制台执行以下命令

sudo apt-get install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

sudo apt-get install libgtk-3-dev
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

在OpenCV 3.2.0的目录下,依次在控制台执行以下命令(挂微批恩)

mkdir build
cd build
cmake -D ENABLE_PRECOMPILED_HEADERS=OFF -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make -j4
sudo make install

然后执行以下命令,在打开的文件中添加"/usr/local/lib"

sudo gedit /etc/ld.so.conf.d/opencv.conf

执行以下命令

sudo gedit ~/.profile

在打开的文件末尾添加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

安装ROS Melodic

依次在控制台执行以下命令(建议挂微批恩)

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update
sudo apt install ros-melodic-desktop-full
sudo apt-get install ros-melodic-rqt*
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
sudo apt install python-rosdep

之后执行

sudo gedit /etc/hosts

在打开的文件末尾添加"199.232.68.133 raw.githubusercontent.com"
关掉文件后,再执行以下命令,若出现网络连接的错误则开微批恩多运行几次。

sudo rosdep init
rosdep update
source /opt/ros/melodic/setup.bash

测试:打开3个终端,分别执行以下指令:

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

若可以出现一只乌龟的界面而且可以用方向键操控,则安装成功!
之后创建并初始化ROS工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

安装Eigen3.3.4

首先从网址https://gitlab.com/libeigen/eigen/-/archive/3.3.4/eigen-3.3.4.tar.gz
下载Eigen3.3.4的源代码,.tar.gz格式的压缩包暂时不要解压,放在适当的目录下,在该目录打开终端,执行以下命令:

sudo tar -xzvf eigen-3.3.4.tar.gz -C /usr/local/include
sudo mv /usr/local/include/eigen-3.3.4 /usr/local/include/eigen3
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include 
sudo cp -r /usr/local/include/eigen3/Eigen /usr/include 
sudo cp -r /usr/local/include/eigen3 /usr/include

编译ORB-SLAM3

因为需要对源代码做一定修改,将ORB-SLAM3修改后的源代码存放在百度网盘上了:
链接:htt【防封】ps://pa【防封】n.ba【防封】idu.com/s/1Kan【防封】DhZ6UHzlo【防封】1C_3bKvbBQ
密码:6666
解压密码:RayShark
下载后,解压在~/catkin_ws/src目录下,在 ~/catkin_ws/src/ORB_SLAM3目录下打开终端,执行以下命令:

chmod +x build.sh
./build.sh

如果不出意外,应该不会出现编译错误,会出现很多warning,不用管。

测试ORB-SLAM3

EuRoC数据集的测试

首先需要下载EuRoC数据集。

可以从官网下载:EuRoC数据集官网
EuRoC数据集包含11个序列(最后的Calibration Dataset不用管),MH场景有5个,ViconRoom场景有6个。每个场景都提供了ROS bag格式(.bag后缀,对应下图左边红框)和ASL格式(是一个文件夹,对应下图右边红框)。
如果下载很慢,可以开微批恩复制链接到迅雷中下载。
EuRoC数据集
我也将EuRoC数据集全部序列传到百度网盘上了
链接:htt【防封】ps://p【防封】an.ba【防封】idu.co【防封】m/s/1q7R【防封】UaAtX7_U【防封】hMIV0FB【防封】jM9A
提取码:6666

注意:测试ORB-SLAM3用到的是ASL格式的EuRoC数据集,即以MH01为例,用到的是MH_01_easy文件夹,而不是MH_01_easy.bag。
在主目录下新建Datasets文件夹,再在其中新建EuRoC文件夹,将EuRoC数据集各序列放在该文件夹下。以下测试都以MH01序列为例!

测试单目模式

cd ~/catkin_ws/src/ORB_SLAM3
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ~/Datasets/EuRoC/MH_01_easy ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt MH01-Mono

测试双目模式

cd ~/catkin_ws/src/ORB_SLAM3
./Examples/Stereo/stereo_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo/EuRoC.yaml ~/Datasets/EuRoC/MH_01_easy ./Examples/Stereo/EuRoC_TimeStamps/MH01.txt MH01-Stereo

测试单目+IMU模式

cd ~/catkin_ws/src/ORB_SLAM3
./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml ~/Datasets/EuRoC/MH_01_easy ./Examples/Monocular-Inertial/EuRoC_TimeStamps/MH01.txt MH01-MonoInertial

测试双目+IMU模式

cd ~/catkin_ws/src/ORB_SLAM3
./Examples/Stereo-Inertial/stereo_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo-Inertial/EuRoC.yaml ~/Datasets/EuRoC/MH_01_easy ./Examples/Stereo-Inertial/EuRoC_TimeStamps/MH01.txt MH01-StereoInertial

运行界面:
ORB-SLAM3运行EuRoC
不管哪种模式,运行完成之后,终端都会给出输出结果

Saving trajectory to f_MH01-StereoInertial.txt ...
End of saving trajectory to f_MH01-StereoInertial.txt ...
Saving keyframe trajectory to kf_MH01-StereoInertial.txt ...
The Time is:690 s

比如这里的“f_MH01-StereoInertial.txt”表示相机轨迹文件,“kf_MH01-StereoInertial.txt”表示关键帧轨迹文件,这两个文件都在~/catkin_ws/src/ORB_SLAM3目录下。"690 s"是运行时间

KITTI数据集的测试

首先需要下载KITTI数据集。

可以从官网下载:KITTI数据集官网
在这里插入图片描述

它包含gray类型(第一个箭头:灰度影像、22GB)、color类型(第二个箭头:彩色影像、65GB)。我用到的是color类型。每一类型都有00~21共22个序列。
此外,还要下载地面真值数据(第五个箭头:4MB)
点击对应的链接后,输入邮箱,等一会儿就会收到一个下载链接,推荐开微批恩到迅雷中下载。

我已将KITTI数据集的gray类型数据、color类型数据、地面真值数据上传到我的百度网盘上。
链接:htt【防封】ps://pa【防封】n.ba【防封】idu.c【防封】om/s/1Z【防封】xWqd【防封】qDVD【防封】aHZ-Npkxlj【防封】OoQ
提取码:6666
其中gray类型数据就是VisualOdometry文件夹下的odometry_dataset_grayscale,color类型数据就是VisualOdometry文件夹下的data_odometry_color,地面真值数据就是VisualOdometry文件夹下的data_odometry_poses。

注意:如果是使用color类型数据,原序列中的文件夹名都是image_2和image_3,需要分别重命名为image_0和image_1。即将image_2重命名为image_0,将image_3重命名为image_1。否则会运行出错!

以下测试都以运行color类型数据的00序列为例。
将KITTI数据集整个文件夹放在~/Datasets目录下,即保证: ~/Datasets/KITTI/VisualOdometry/data_odometry_color/sequences/00/image_0目录是存在的。
测试单目模式

cd ~/catkin_ws/src/ORB_SLAM3
./Examples/Monocular/mono_kitti ./Vocabulary/ORBvoc.txt ./Examples/Monocular/KITTI00-02.yaml ~/Datasets/KITTI/VisualOdometry/data_odometry_color/sequences/00

测试双目模式

cd ~/catkin_ws/src/ORB_SLAM3
./Examples/Stereo/stereo_kitti ./Vocabulary/ORBvoc.txt ./Examples/Stereo/KITTI00-02.yaml ~/Datasets/KITTI/VisualOdometry/data_odometry_color/sequences/00

运行界面:
ORB-SLAM3运行KITTI
不管哪种模式,运行完成之后,终端都会给出输出结果

Saving camera trajectory to CameraTrajectory.txt ...
The Time is:1381 s

同样地输出了"CameraTrajectory.txt"相机轨迹文件运行时间。CameraTrajectory.txt在~/catkin_ws/src/ORB_SLAM3目录下。

TUM RGB-D数据集的测试

首先需要下载TUM RGB-D数据集。

可以从官网下载:TUM RGB-D数据集官网
这里使用Testing and Debugging类别的fr1/xyz序列。
下载TUM RGB-D数据集
确保下载到的rgbd_dataset_freiburg1_xyz文件夹放在~/Datasets/TUM/RGB-D/Testing and Debugging目录下!
测试:

cd ~/catkin_ws/src/ORB_SLAM3
./Examples/RGB-D/rgbd_tum ./Vocabulary/ORBvoc.txt ./Examples/RGB-D/TUM1.yaml ~/Datasets/TUM/RGB-D/"Testing and Debugging"/rgbd_dataset_freiburg1_xyz ./Examples/RGB-D/associations/fr1_xyz.txt

运行界面:
ORB-SLAM3运行TUM-RGB-D
运行完之后,终端会给出输出结果:

median tracking time: 0.0272287
mean tracking time: 0.0287242
Saving camera trajectory to CameraTrajectory.txt ...
Saving keyframe trajectory to KeyFrameTrajectory.txt ...

输出了中值跟踪时间均值跟踪时间相机轨迹文件关键帧轨迹文件

安装VINS-Fusion

安装ceres-solver 1.14.0

在github中下载ceres-solver 1.14.0源代码
下载ceres-solver 1.14.0
下载完后解压到合适目录。在ceres-solver-1.14.0目录下,打开终端,执行以下命令:

sudo apt-get install libgoogle-glog-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libsuitesparse-dev
mkdir build
cd build
cmake ..
make -j4
sudo make install

编译VINS-Fusion

因为需要对源代码做一定修改,将VINS-Fusion修改后的源代码存放在百度网盘上了:
链接:htt【防封】ps://p【防封】an.ba【防封】idu.co【防封】m/s/1gMr【防封】XmATvnt8zM【防封】_on3le【防封】ALg
提取码:6666
解压密码:RayShark

将解压后的VINS-Fusion文件夹放在~/catkin_ws/src目录下。
在主目录下新建VINS_Output文件夹,用来存放VINS-Fusion的输出结果。

依次打开VINS-Fusion文件夹下的以下文件,搜索"rayshark"全部替换成自己的用户名

global_fusion/src/globalOptNode.cpp
vins_estimator/src/utility/visualization.cpp
loop_fusion/src/pose_graph.cpp
config/euroc/euroc_stereo_imu_config.yaml
config/euroc/euroc_mono_imu_config.yaml
config/kitti_raw/kitti_09_30_config.yaml
config/kitti_raw/kitti_10_03_config.yaml
config/kitti_odom/kitti_config04-12.yaml
config/kitti_odom/kitti_config13-21.yaml
config/kitti_odom/kitti_config00-02.yaml
config/kitti_odom/kitti_config03.yaml

打开终端,执行以下命令:

cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

测试VINS-Fusion

EuRoC数据集的测试

VINS-Fusion用到EuRoC数据集的ROS bag格式(.bag后缀)数据。
以下测试都以MH01序列为例!

测试单目+IMU模式:
打开4个终端,分别执行以下命令

source ~/catkin_ws/devel/setup.bash
roslaunch vins vins_rviz.launch
source ~/catkin_ws/devel/setup.bash
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
source ~/catkin_ws/devel/setup.bash
rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
source ~/catkin_ws/devel/setup.bash
rosbag play ~/Datasets/EuRoC/MH_01_easy.bag

运行界面:
VINS-Fusion单目IMU模式运行EuRoC
测试双目模式:
打开4个终端,分别执行以下命令

source ~/catkin_ws/devel/setup.bash
roslaunch vins vins_rviz.launch
source ~/catkin_ws/devel/setup.bash
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml
source ~/catkin_ws/devel/setup.bash
rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml
source ~/catkin_ws/devel/setup.bash
rosbag play ~/Datasets/EuRoC/MH_01_easy.bag

测试双目+IMU模式:
打开4个终端,分别执行以下命令

source ~/catkin_ws/devel/setup.bash
roslaunch vins vins_rviz.launch
source ~/catkin_ws/devel/setup.bash
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
source ~/catkin_ws/devel/setup.bash
rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
source ~/catkin_ws/devel/setup.bash
rosbag play ~/Datasets/EuRoC/MH_01_easy.bag

运行界面:
VINS-Fusion双目IMU模式运行EuRoC
不管哪种模式,运行完成后,可以在~/VINS_Output目录中看到输出的四个文件pose_graph.txt、pose_graph_node.txt、vio.csv、visualization.txt
这四个文件分别是源代码中pose_graph.cpp、pose_graph_node.cpp、parameters.cpp、visualization.cpp的输出。

KITTI数据集的测试

首先测试KITTI数据集color类型00序列
打开3个终端,分别执行以下命令

source ~/catkin_ws/devel/setup.bash
roslaunch vins vins_rviz.launch
source ~/catkin_ws/devel/setup.bash
rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml
source ~/catkin_ws/devel/setup.bash
rosrun vins kitti_odom_test ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml ~/Datasets/KITTI/VisualOdometry/data_odometry_color/sequences/00

再测试KITTI数据集RawData类型2011_10_03_drive_0027_sync序列
RawData类型的序列可以用官网下载:RawData下载
前边给过的KITTI数据集的百度网盘链接中也可以下载!

这里使用其中的2011_10_03_drive_0027_sync序列
打开3个终端,分别执行以下命令

source ~/catkin_ws/devel/setup.bash
roslaunch vins vins_rviz.launch
source ~/catkin_ws/devel/setup.bash
rosrun global_fusion global_fusion_node
source ~/catkin_ws/devel/setup.bash
rosrun vins kitti_gps_test ~/catkin_ws/src/VINS-Fusion/config/kitti_raw/kitti_10_03_config.yaml ~/Datasets/KITTI/RawData/2011_10_03_drive_0027_sync

安装evo

evo是一个对SLAM结果的测评工具,可以根据时间戳将轨迹进行对齐,同时可以将不同尺度的轨迹按照标准轨迹进行拉伸对齐,并计算绝对误差、相对误差等。
注意:evo需要Python 3.7环境,而Ubuntu 18默认的环境是Python 2。

安装Python 3.7

sudo apt-get install python3.7
sudo apt install python-pip
sudo apt-get install aptitude
sudo aptitude install python3-tk
sudo aptitude install tk-dev

将当前Python环境调整为Python 3.7:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2

注意:因为Ubuntu 18默认的环境是Python 2而此时切换成了Python 3.7,可以发现此时按快捷键Ctrl + Alt + T无法呼出终端,稍后解决!先暂时在桌面右键打开终端。

此时终端执行"python"命令,应该可以显示python 3.7

配置evo

去evo官网下载:evo官网
下载源代码后,解压到适当位置,在evo目录下打开终端,执行以下命令:

pip install --editable . --upgrade --no-binary evo
sudo python setup.py develop
pip install --upgrade setuptools
pip install . --user --upgrade
pip install --user PyQt5

测试evo

在evo目录下打开终端,执行以下命令:

cd test/data
evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xyz

Python环境切换

仅当需要使用evo时,执行以下命令,切换到Python3环境。此时ORB-SLAM3和VINS-Fusion可能不能正常运行。

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2

evo使用完成后,再执行以下命令,切换到常规Python环境:

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 150

使用evo

对ORB-SLAM3结果的评估

ORB-SLAM3运行结束后,会得到相机轨迹文件CameraTrajectory.txt。

(1)评估运行EuRoC数据集的MH01序列:

将CameraTrajectory.txt复制到合适目录下重命名为"MH01.txt",将相机的真实轨迹文件~/Datasets/EuRoC/MH_01_easy/mav0/state_groundtruth_estimate0/data.csv也复制到该目录下。
下面需要将data.csv转换为8列的TUM数据格式,在当前目录下打开终端,执行:

evo_traj euroc data.csv --save_as_tum

就会生成data.tum文件。

之后为了对齐时间戳,在当前目录下新建"Align.py",写入以下内容:

from evo.tools import file_interface
traj = file_interface.read_tum_trajectory_file("MH01.txt")
traj.timestamps = traj.timestamps / 1e9
file_interface.write_tum_trajectory_file("MH01_clean.txt", traj)

在当前目录下打开终端,执行"python Align.py",就会得到"MH01_clean.txt"
之后执行以下命令计算绝对误差(注意:相机的真实轨迹文件在前,计算得到的轨迹文件在后)

evo_ape tum data.tum MH01_clean.txt -va --plot --plot_mode xyz

绝对误差
一般取RMSE值,即这里的绝对误差为:4.4424厘米

执行以下命令计算相对误差

evo_rpe tum data.tum MH01_clean.txt -va --plot --plot_mode xyz

(2)评估运行KITTI数据集的01序列:

将ORB-SLAM3运行KITTI数据集生成的相机轨迹文件"CameraTrajectory.txt"复制到合适目录下重命名为"01.txt"。

在KITTI数据集目录下的"VisualOdometry\data_odometry_poses\poses"处找到相机的真实轨迹文件"01.txt",复制到相同的目录下重命名为"01_gt.txt"。

执行以下命令计算绝对误差(注意:相机的真实轨迹文件在前,计算得到的轨迹文件在后)

evo_ape kitti 01_gt.txt 01.txt -va --plot --plot_mode xyz

绝对误差
这里的绝对误差为:7.53米

执行以下命令计算相对误差

evo_rpe kitti 01_gt.txt 01.txt -va --plot --plot_mode xyz

对VINS-Fusion结果的评估

(1)评估运行EuRoC数据集的MH01序列:

将"~/VINS_Output/pose_graph_node.txt"复制到合适位置,重命名为"MH01.txt"。

用Ubuntu自带的gedit打开"MH01.txt",利用查找和替换功能,勾选"正则表达式",查找" $"(空格+’$’),点击"全部替换",就可以将每一行末尾带的空格都给去掉。记得点击"保存"。
查找和替换
相机的真实轨迹文件~/Datasets/EuRoC/MH_01_easy/mav0/state_groundtruth_estimate0/data.csv也复制到该目录下。
下面需要将data.csv转换为8列的TUM数据格式,在当前目录下打开终端,执行:

evo_traj euroc data.csv --save_as_tum

就会生成data.tum文件。
执行以下命令计算绝对误差

evo_ape tum data.tum MH01.txt -va --plot --plot_mode xyz

执行以下命令计算相对误差

evo_rpe tum data.tum MH01.txt -va --plot --plot_mode xyz

(2)评估运行KITTI数据集的01序列:

将"~/VINS_Output/vio.txt"复制到合适位置,重命名为"01.txt"。

在KITTI数据集目录下的"VisualOdometry\data_odometry_poses\poses"处找到相机的真实轨迹文件"01.txt",复制到相同的目录下重命名为"01_gt.txt"。
执行以下命令计算绝对误差

evo_ape kitti 01_gt.txt 01.txt -va --plot --plot_mode xyz

执行以下命令计算相对误差

evo_rpe kitti 01_gt.txt 01.txt -va --plot --plot_mode xyz
  • 5
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RayShark1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值