ORB-SLAM2实验结果评估

目录

O、ORB-SLAM2

一、KITTI数据集上的评估:

1.运行单目ORB-SLAM2算法:

2.运行双目ORB-SLAM2算法

1)生成估计轨迹:

2)查看生成轨迹:

3)真值轨迹转换:

4)轨迹格式互相转换:

5)误差显示:(生成结果图片)

二、EuRoC数据集上的评估:

1.运行单目SLAM算法:

2.运行双目ORB-SLAM2算法

1)生成估计轨迹:

2)数据集中自带的真值和ORB-SLAM2生成的文件(tum格式)不同,把数据集中的真值数据转换为tum格式:

3)比较关键帧轨迹和相机轨迹区别:

4)误差显示:

5)将输出结果保存到.txt文件中:

三、TUM

1.数据集:

2.运行:

1)显示生成估计轨迹:

2)显示真实轨迹和估计轨迹的比较:

3)显示绝对误差估计:

4)生成稠密点云:

四、时间对比:

五、森林数据集:FinnForestDataset


 


O、ORB-SLAM2

ORB-SLAM2源代码下载地址:https://github.com/raulmur/ORB_SLAM2

代码文件夹放在:/home/lexiaoxia/Codes/20210401/ORB_SLAM2

一、KITTI数据集上的评估:

KITTI数据集下载地址:http://www.cvlibs.net/datasets/kitti/eval_odometry.php

 

1.运行单目ORB-SLAM2算法:

./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00-02.yaml /home/lexiaoxia/Datasets/hjydataset/kitti/data_odometry_gray/dataset/sequences/00

2.运行双目ORB-SLAM2算法

1)生成估计轨迹:

ORBSLAM2文件夹下的相对路径:
./Examples/Stereo/stereo_kitti Vocabulary/ORBvoc.txt Examples/Stereo/KITTI00-02.yaml /home/lexiaoxia/Datasets/hjydataset/kitti/data_odometry_gray/dataset/sequences/00

./Examples/Stereo/stereo_kitti Vocabulary/ORBvoc.txt Examples/Stereo/KITTI03.yaml /home/lexiaoxia/Datasets/hjydataset/kitti/data_odometry_gray/dataset/sequences/03

./Examples/Stereo/stereo_kitti Vocabulary/ORBvoc.txt Examples/Stereo/KITTI04-12.yaml /home/lexiaoxia/Datasets/hjydataset/kitti/data_odometry_gray/dataset/sequences/04

CLION下运行stereo_kitti.cc
/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Vocabulary/ORBvoc.txt
/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Examples/Stereo/KITTI00-02.yaml /home/lexiaoxia/Datasets/hjydataset/kitti/data_odometry_gray/dataset/sequences/00

2)查看生成轨迹:

evo_traj kitti CameraTrajectory_K00.txt -p --plot_mode xz
生成的估计轨迹是kitti格式的

3)真值轨迹转换:

数据集文件夹放在: /home/lexiaoxia/Datasets/hjydataset/kitti/data_odometry_gray

真值文件夹在:/home/lexiaoxia/Datasets/hjydataset/kitti/data_odometry_calib    和      /home/lexiaoxia/Datasets/hjydataset/kitti/data_odometry_poses

一个是位姿、一个是相对应的时间和校准参数 对应的data_odometry_calib/times.txt和data_odometry_poses/00.txt

KITTI真值中没有时间戳,需要将KITTI数据集的ground truth加上时间戳,转换为TUM数据格式进行评估:

打开安装的EVO文件夹下面有contrib文件夹下的kitti_poses_and_timestamps_to_trajectory.py,将对应的时间和校准参数拷贝到该目录:

只有序列00-10有校准参数可以进行轨迹格式转换:

python2 kitti_poses_and_timestamps_to_trajectory.py 00.txt times.txt kitti_00_tum.txt

4)轨迹格式互相转换:

KITTI pose files must have 12 entries per row and no trailing delimiter at the end of the rows (space)
TUM trajectory files must have 8 entries per row and no trailing delimiter at the end of the rows (space)
估计轨迹是KITTI格式,真值轨迹是TUM格式
# export TUM trajectories to KITTI format
evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_kitti
# (will be saved as *.kitti)

再把真值转换为KITTI格式
evo_traj tum kitti_00_tum.txt --save_as_kitti

5)误差显示:(生成结果图片)

显示绝对误差:
evo_ape kitti kitti_00_tum.kitti CameraTrajectory_K00.txt -va --plot --plot_mode xz --correct_scale --align  

显示误差轨迹图:
evo_traj kitti CameraTrajectory_K00.txt --ref=kitti_00_tum.kitti -p --plot_mode=xz --correct_scale --align
--ref=[ground_truth]:该选项明确了轨迹可视化中所需使用的标称轨迹文件,使用该选项后,evo会以灰色虚线绘制标称轨迹
图片:EVO-TRAJ-KITTI00

显示相对误差:
evo_rpe kitti kitti_00_tum.kitti CameraTrajectory_K00.txt -va --plot --plot_mode xz
-r选择参数,不加默认是平移误差,单位是米
不添加-r/–pose_relation和可选项,则默认为trans_part。
–d/–delta表示相对位姿之间的增量,–u/–delta_unit表示增量的单位,可选参数为[f, d, r, m],分别表示[frames, deg, rad, meters]。–d/–delta -u/–delta_unit合起来表示衡量局部精度的单位,如每米,每弧度,每百米等。其中–delta_unit为f时,–delta的参数必须为整形,其余情况下可以为浮点型。–delta 默认为1,–delta_unit默认为f。

计算相对平移误差:delta设置为100,单位是100m,感觉是评价指标中的(%)
evo_rpe kitti kitti_00_tum.kitti CameraTrajectory_K00.txt -r trans_part --delta 100 --delta_unit m -va --plot --plot_mode xz
图片:EVO-RPE-TRANS-KITTI00

计算相对每100米的旋转误差(deg):
evo_rpe kitti kitti_00_tum.kitti CameraTrajectory_K00.txt -r angle_deg --delta 100 --delta_unit m -va --plot --plot_mode xz
图片:EVO-RPE-ROT-KITTI00

 

二、EuRoC数据集上的评估:

EuRoC数据集下载地址:https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets#downloads

数据集包括:MH1、MH2、MH3、MH4、MH5、V101、V102、V103、V201、V202、V203

MH_01_easy、MH_02_easy、MH_03_medium、MH_04_difficult、V1_01_easy、V1_02_medium、V1_03_difficult、V2_01_easy、V2_02_medium、V2_03_difficult

数据集文件夹放在:/home/lexiaoxia/Datasets/EuRoC

1.运行单目SLAM算法:

./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml /home/lexiaoxia/Datasets/hjydataset/EuRoC/MH_01_easy/mav0/cam0/data Examples/Monocular/EuRoC_TimeStamps/MH01.txt

./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml /home/lexiaoxia/Datasets/hjydataset/EuRoC/V1_01_easy/mav0/cam0/data Examples/Monocular/EuRoC_TimeStamps/V101.txt

2.运行双目ORB-SLAM2算法

1)生成估计轨迹:

CLION中运行stereo_euroc可执行文件
运行参数:
/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Vocabulary/ORBvoc.txt
/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Examples/Stereo/EuRoC.yaml
/home/lexiaoxia/Datasets/EuRoC/MH_01_easy/mav0/cam0/data
/home/lexiaoxia/Datasets/EuRoC/MH_01_easy/mav0/cam1/data
/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Examples/Stereo/EuRoC_TimeStamps/MH01.txt

MH_01_easy、MH_02_easy、MH_03_medium、MH_04_difficult、V1_01_easy、V1_02_medium、V1_03_difficult、V2_01_easy、V2_02_medium、V2_03_difficult

V101.txt V102.txt V103.txt V201.txt V202.txt V203.txt

/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Examples/Stereo/stereo_euroc.cc更改名字保存的地图路径,大概是187行左右的位置
SLAM.SaveTrajectoryTUM("CameraTrajectory_V203.txt");

 

在终端运行:
MH系列数据集:
ORBSLAM2文件夹下的相对路径:
./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml /home/lexiaoxia/Datasets/hjydataset/EuRoC/MH_01_easy/mav0/cam0/data /home/lexiaoxia/Datasets/hjydataset/EuRoC/MH_01_easy/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/MH01.txt
./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml /home/lexiaoxia/Datasets/EuRoC/MH_01_easy/mav0/cam0/data /home//home/lexiaoxia/Datasets/EuRoC/MH_01_easy/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/MH01.txt
V系列数据集:
ORBSLAM2文件夹下的相对路径:
./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml /home/lexiaoxia/Datasets/hjydataset/EuRoC/V1_01_easy/mav0/cam0/data /home/lexiaoxia/Datasets/hjydataset/EuRoC/V1_01_easy/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/V101.txt
完整路径:
./home/lexiaoxia/Codes/20210401/ORB_SLAM2/Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt /home/lexiaoxia/Codes/20210401/ORB_SLAM2/Examples/Stereo/EuRoC.yaml /home/lexiaoxia/Datasets/hjydataset/EuRoC/V1_01_easy/mav0/cam0/data /home/lexiaoxia/Datasets/hjydataset/EuRoC/V1_01_easy/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/V101.txt

2)数据集中自带的真值和ORB-SLAM2生成的文件(tum格式)不同,把数据集中的真值数据转换为tum格式:

在真值文件夹下的相对路径:
evo_traj euroc data.csv --save_as_tum

绝对路径:
evo_traj euroc /home/lexiaoxia/Datasets/EuRoC/MH_01_easy/mav0/state_groundtruth_estimate0/data.csv --save_as_tum

MH_01_easy、MH_02_easy、MH_03_medium、MH_04_difficult、V1_01_easy、V1_02_medium、V1_03_difficult、V2_01_easy、V2_02_medium、V2_03_difficult

V101.txt V102.txt V103.txt V201.txt V202.txt V203.txt

evo_traj euroc /home/lexiaoxia/Datasets/EuRoC/V2_03_difficult/mav0/state_groundtruth_estimate0/data.csv --save_as_tum

3)比较关键帧轨迹和相机轨迹区别:

结果并不是很大,看上去是细节点的区别:预测轨迹(黑色)、地面真值groundtruth(红色)

只能用都生成的CameraTrajectory.txt来和真值比较啦:-p是绘制轨迹曲线;--ref是指定参考轨迹;-a是进行对齐(旋转和平移);-s(或 --correct_scale)是 参数进行Sim(3)上的对齐(旋转、平移与尺度缩放)

evo_traj tum /home/lexiaoxia/Codes/20210401/ORB_SLAM2/KeyFrameTrajectory.txt --ref=data.tum -p --plot_mode xyz -a --correct_scale

evo_traj tum /home/lexiaoxia/Codes/20210401/ORB_SLAM2/CameraTrajectory.txt --ref=data.tum -p --plot_mode xyz -a --correct_scale

都放在一个文件夹OUTPUT后,在文件夹路径下打开终端
XYZ坐标显示:
evo_traj tum CameraTrajectory_V102.txt --ref=data.tum -p --plot_mode xyz -a --correct_scale
XY坐标显示:
evo_traj tum CameraTrajectory_V202.txt --ref=data.tum -p --plot_mode xy -a --correct_scale

4)误差显示:

比较误差: -a,轨迹对齐;-s,尺度缩放;-p,可以绘制误差相关曲线

显示轨迹误差相关结果:若经过了缩放,在命令行中应将真实轨迹(参考轨迹)放在估计轨迹(计算轨迹)前方,避免在缩放时参考轨迹错误而造成误差被错误缩放。

evo_ape:计算绝对位姿误差(absolute pose error),用于整体评估整条轨迹的全局一致性

evo_ape tum realTraj.txt estTraj.txt -a

evo_ape tum data.tum CameraTrajectory_V202.txt -va --plot --save_results results.zip

测量绝对误差,这个才是大多数中论文的指标,保存到压缩包文件V2_02_sequence
evo_ape tum data.tum CameraTrajectory_V202.txt -va --align --plot --plot_mode xyz --save_results V2_02_sequence

evo_ape tum -h
evo_ape tum data.tum CameraTrajectory_V202.txt  -va --plot --plot_mode xy
evo_ape tum data.tum CameraTrajectory_V202.txt  -va --plot --plot_mode xyz

 evo_rpe:计算相对位姿误差(relative pose error),用于评价轨迹局部的准确性

evo_rpe tum data.tum CameraTrajectory_V202.txt  -va --plot --plot_mode xyz -s --save_results results/rpe.zi

evo_rpe tum data.tum CameraTrajectory_V202.txt  -va --plot --plot_mode xyz -s --save_results rpe.zip

evo_res rpe.zip -p --save_table table.csv

evo_rpe tum data.tum CameraTrajectory_V202.txt  -va --plot --plot_mode xy
evo_rpe tum data.tum CameraTrajectory_V202.txt  -va --plot --plot_mode xyz

5)将输出结果保存到.txt文件中:

保存到.txt文件中:
evo_ape tum data.tum CameraTrajectory_MH01.txt  -va --plot --plot_mode xy >output_mh01.txt
既显示在终端又保存到.txt文件中:
evo_ape tum data.tum CameraTrajectory_MH01.txt  -va --plot --plot_mode xy | tee output_mh01.txt
既显示在终端,追加到.txt文件中:
evo_ape tum data.tum CameraTrajectory_MH01.txt  -va --plot --plot_mode xy | tee -a output_mh01.txt

RMSE(Root Mean Square Error)均方根误差:衡量观测值与真实值之间的偏差。

max:最大误差
mean:误差均值
median:误差中位数
min:最小误差
rmse:均方根误差
sse:方差
std:标准差

MSE(Mean Square Error)均方误差:MSE是真实值与预测值的差值的平方然后求和平均。

MAE(Mean Absolute Error)平均绝对误差:是绝对误差的平均值。

 

三、TUM

创建一个新的函数 SaveTrajectory 用来保存成tum文件是8列包括(time, t x , t y , t z , q x , q y , q z , q w )。

TUM RGB-D下载地址:https://vision.in.tum.de/data/datasets/rgbd-dataset/download

1.数据集:

数据集文件夹:/home/lexiaoxia/Datasets/TUM RGBD/rgbd_dataset_freiburg1_desk
对数据集序列中进行操作:
python associate.py PATH_TO_SEQUENCE/rgb.txt PATH_TO_SEQUENCE/depth.txt > associations.txt

在对应序列文件夹打开:

python associate.py rgb.txt depth.txt > associations.txt

2.运行:

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE

Change TUMX.yaml to TUM1.yaml,TUM2.yaml or TUM3.yaml for freiburg1, freiburg2 and freiburg3 sequences respectively. Change PATH_TO_SEQUENCE_FOLDERto the uncompressed sequence folder. Change ASSOCIATIONS_FILE to the path to the corresponding associations file.

在主程序中设置生成名字:rgbd_tum.cc的第136行左右
// Save camera trajectory
SLAM.SaveTrajectoryTUM("CameraTrajectory_fr1_desk.txt");
SLAM.SaveKeyFrameTrajectoryTUM("KeyFrameTrajectory_fr1_desk.txt");
CLION中运行:
./Examples/RGB-D/rgbd_tum 
/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Vocabulary/ORBvoc.txt
/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Examples/RGB-D/TUM1.yaml
/home/lexiaoxia/Datasets/TUM_RGBD/rgbd_dataset_freiburg1_desk
/home/lexiaoxia/Datasets/TUM_RGBD/rgbd_dataset_freiburg1_desk/associations.txt

/home/lexiaoxia/Datasets/TUM_RGBD/rgbd_dataset_freiburg3_nostructure_notexture_near_withloop/associations.txt没有生成轨迹

1)显示生成估计轨迹:

evo_traj tum CameraTrajectory_fr1_desk.txt -p --plot_mode xy

2)显示真实轨迹和估计轨迹的比较:

evo_traj CameraTrajectory_fr1_desk.txt --ref=groundtruth.txt -p --plot_mode xy -a --correct_scale

3)显示绝对误差估计:

evo_ape tum groundtruth.txt CameraTrajectory_fr1_desk.txt -va --plot --plot_mode xy

4)生成稠密点云:

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml /home/lexiaoxia/Datasets/TUM_RGBD/rgbd_dataset_freiburg1_desk /home/lexiaoxia/Datasets/TUM_RGBD/rgbd_dataset_freiburg1_desk/associations.txt

由于ORB-SLAM2在构建的时候只在地图中保留了特征点,对于使用RGB-D相机的小伙伴而言,更希望得到一个点云地图。仅供参考,我并未实现。主要方向还是双目方向,所以不实现这个惹。

参考链接:https://blog.csdn.net/Night___Raid/article/details/104298423?ops_request_misc=&request_id=&biz_id=102&utm_term=ORB-SLAM2%E9%80%9A%E8%BF%87%E5%85%B3%E9%94%AE%E9%98%B5%E5%AD%90%E5%A4%AA%E9%A5%AD%E6%8A%95%E5%BD%B1%E4%BC%A0%E6%84%9F%E5%99%A8%E6%B7%B1%E5%BA%A6%E5%9B%BE%E4%BA%A7%E7%94%9F%E7%9A%84%E7%82%B9%E4%BA%91&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-3-104298423.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187
/home/lexiaoxia/Codes/20210401/ORBSLAM2_with_pointcloud_map-master/orbslam2_modified/ORB_SLAM2_modified

/home/lexiaoxia/Codes/20210401/ORBSLAM2_with_pointcloud_map-master/orbslam2_modified/ORB_SLAM2_modified/Vocabulary/ORBvoc.txt
/home/lexiaoxia/Codes/20210401/ORBSLAM2_with_pointcloud_map-master/orbslam2_modified/ORB_SLAM2_modified/Examples/RGB-D/TUM1.yaml
/home/lexiaoxia/Datasets/TUM_RGBD/rgbd_dataset_freiburg1_desk
/home/lexiaoxia/Datasets/TUM_RGBD/rgbd_dataset_freiburg1_desk/associations.txt

四、时间对比:

在对应函数下面加入计时器即可:计算的是每个操作的平均时间

对比了三个序列:

/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Vocabulary/ORBvoc.txt
/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Examples/Stereo/EuRoC.yaml
/home/lexiaoxia/Datasets/EuRoC/V2_02_medium/mav0/cam0/data
/home/lexiaoxia/Datasets/EuRoC/V2_02_medium/mav0/cam1/data
/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Examples/Stereo/EuRoC_TimeStamps/V202.txt


/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Vocabulary/ORBvoc.txt
/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Examples/Stereo/EuRoC.yaml
/home/lexiaoxia/Datasets/EuRoC/MH_01_easy/mav0/cam0/data
/home/lexiaoxia/Datasets/EuRoC/MH_01_easy/mav0/cam1/data
/home/lexiaoxia/Codes/20210401/ORB_SLAM2/Examples/Stereo/EuRoC_TimeStamps/MH01.txt

 

 

 

五、森林数据集:FinnForestDataset

8. Processing your own sequences
You will need to create a settings file with the calibration of your camera. See the settings file provided for the TUM and KITTI datasets for monocular, stereo and RGB-D cameras. We use the calibration model of OpenCV. See the examples to learn how to create a program that makes use of the ORB-SLAM2 library and how to pass images to the SLAM system. Stereo input must be synchronized and rectified. RGB-D input must be synchronized and depth registered.

9. SLAM and Localization Modes
You can change between the SLAM and Localization mode using the GUI of the map viewer.

SLAM Mode
This is the default mode. The system runs in parallal three threads: Tracking, Local Mapping and Loop Closing. The system localizes the camera, builds new map and tries to close loops.

Localization Mode
This mode can be used when you have a good map of your working area. In this mode the Local Mapping and Loop Closing are deactivated. The system localizes the camera in the map (which is no longer updated), using relocalization if needed.

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不做笔记的程序员不是好的码农

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

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

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

打赏作者

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

抵扣说明:

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

余额充值