开源SLAM方案评价与比较:ORB-SLAM2,VIORB,VINS-MONO
一、简介
网上开源框架较多,本篇博客选择为人熟知的三个框架,orb-slam2,viorb(清华大学王京版本),vins-mono。在自己的笔记本上运行Euroc数据集,并采用evo和matlab来评价他们的性能。
- orb-slam2网址:https://github.com/raulmur/ORB_SLAM2
- viorb网址:https://github.com/jingpang/LearnVIORB
- vins-mono网址:https://github.com/HKUST-Aerial-Robotics/VINS-Mono
- Euroc数据集网址:https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
- evo网址:https://github.com/MichaelGrupp/evo
注:
- 数据集选择 MH_01_easy ,MH_03_medium,MH_05_difficult
- 运行环境为ubuntu16.04 ros Kinetic
- 处理器为Intel®Core™ i5-4210U CPU @1.7GHz
- 内存容量为16G
二、EVO安装及测试
2.1 安装evo(可根据以上链接参考官网教程)
终端输入如下指令:
Sudo apt install python-pip
Pip install evo --upgrade --no-binary evo --user
2.2 测试
在数据集目录下打开终端,或
cd /media/chengjun/Passport/Eurocdaset/MH_01_easy/mav0/state_groundtruth_estimate0(这是我移动硬盘中MH_01_easy 数据集的路径)
终端输入如下指令:
evo_traj euroc data.csv –plot
其中data.csv为参考系统采集的数据
成功运行截图如下:
三、运行数据集
3.1 ORB-SLAM2
在ROS环境下分别将MH_01_easy , MH_03_medium, MH_05_difficult数据集送入orb-slam2方案中,分别在三个终端运行如下命令。
roscore
rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml true
rosbag play --pause /media/chengjun/Passport/Eurocdaset/XX.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw
运行截图如下:
运行完之后会生成FrameTrajectory_KITTI_Format.txt , FrameTrajectory_TUM_Format.txt , KeyFrameTrajectory_TUM_Format.txt文件,本文选择 FrameTrajectory_TUM_Format.txt进行评价。
3.2 VIORB
分别将MH_01_easy ,MH_03_medium,MH_05_difficult数据集送入viorb方案中,分别在两个终端下运行如下命令。
roslaunch Examples/ROS/ORB_VIO/launch/testeuroc.launch
rosbag play /media/chengjun/Passport/Eurocdaset/MH_01_easy.bag
运行截图如下:
viorb输出的轨迹和oeb-slam2不同,它并非标准的tum格式文件,这里我用matlab做了一下处理,按照tum格式提取出“timestamp tx ty tz qx qy qz qw”几列数据。
之后在用evo评价的过程当中,出现以下报错:(被这个问题困扰了一段时间)
[ERROR] TUM trajectory files must have 8 entries per row and no trailing delimiter at the end of the rows (space)
应该是每行数据结尾或开头存在空格,导致evo报错。(可参考本人上一篇博客)终端输入如下命令即可解决此问题:
cat results.txt | tr -s [:space:] > results_new.txt
VINS-MONO
分别将MH_01_easy ,MH_03_medium,MH_05_difficult数据集送入Vins-mono方案中,分别打开三个终端。
roslaunch vins_estimator euroc.launch
roslaunch vins_estimator vins_rviz.launch
rosbag play /media/chengjun/Passport/Eurocdaset/MH_01_easy.bag
原始的vins_mono输出轨迹是无法用evo评价的,还是因为格式不对,我在源码中做了改动,将pose_graph.cpp中的if(SAVE_LOOP_PATH){…}改动如下。
原版本
if (SAVE_LOOP_PATH)
{
ofstream loop_path_file(VINS_RESULT_PATH, ios::app);
loop_path_file.setf(ios::fixed, ios::floatfield);
loop_path_file.precision(0);
loop_path_file << (*it)->time_stamp * 1e9 << " ";
loop_path_file.precision(5);
loop_path_file << P.x() << ","
<< P.y() << ","
<< P.z() << ","
<< Q.w() << ","
<< Q.x() << ","
<< Q.y() << ","
<< Q.z() << ","
<< endl;
loop_path_file.close();
}
改版:
if (SAVE_LOOP_PATH)
{
ofstream loop_path_file(VINS_RESULT_PATH, ios::app);
loop_path_file.setf(ios::fixed, ios::floatfield);
loop_path_file.precision(6); //时间戳精度
loop_path_file << (*it)->time_stamp << " ";
loop_path_file.precision(9); //位姿精度
loop_path_file << P.x() << " "
<< P.y() << " "
<< P.z() << " "
<< Q.x() << " "
<< Q.y() << " "
<< Q.z() << " "
<< Q.w() << ""
<< endl;
loop_path_file.close();
}
四、APE,RPE计算并绘图
用EVO评价ATE(绝对位姿误差),RPE(相对位姿误差),首先将 EuRoC 数据集中 .csv 文件形式的 groundtruth 转换为 TUM 形式的轨迹文件。(如果格式不统一将无法评价,会出现各种错误)转换命令如下:
evo_traj euroc data.csv --save_as_tum
TUM 形式的轨迹文件格式:
每行8个数,用空格分隔,包含时间戳(单位:秒)、位置和旋转(四元素表示)
timestamp x y z q_x q_y q_z q_w
4.1 MH_01_easy数据集
4.1.1 ORB-SLAM2
1) APE
输入如下指令
evo_ape tum data.tum FrameTrajectory_TUM_Format.txt -va --plot --plot_mode xz --save_results results/orbslam_MH01.zip
终端打印结果:
max 1.113401
mean 0.353434
median 0.252514
min 0.035743
rmse 0.404936
sse 234.973862
std 0.197631
2) RPE
运行指令如下:
evo_rpe tum data.tum FrameTrajectory_TUM_Format.txt -r angle_deg --delta 1 --delta_unit m -va --plot --plot_mode xz --save_plot ./orbslam_MH01plot --save_results ./orbslam_MH01.zip
终端打印结果:
max 60.199544
mean 13.238829
median 7.799912
min 0.757630
rmse 18.165707
sse 27059.419543
std 12.438904
画图如下:
4.1.2 VIORB
1) APE
运行指令如下:
evo_ape tum data.tum result_new.txt -va --plot --plot_mode xz --save_results results/viorb_MH01.zip
终端打印结果:
max 0.189119
mean 0.087045
median 0.089040
min 0.017692
rmse 0.096279
sse 1.603644
std 0.041143
画图如下:
2) RPE
运行指令如下:
evo_rpe tum data.tum result_new.txt -r angle_deg --delta 1 --delta_unit m -va --plot --plot_mode xz --save_plot ./viorb_MH01plot --save_results ./viorb_MH01.zip
终端打印结果如下:
max 0.386955
mean 0.107066
median 0.100100
min 0.008053
rmse 0.132134
sse 0.907890
std 0.077436
画图如下:
4.1.3 Vins-mono
1) APE
运行指令:
evo_ape tum data.tum vins_result_loop.txt -va --plot --plot_mode xz --save_results results/vinsmono_MH01.zip
终端打印结果:
max 0.158527
mean 0.065242
median 0.061928
min 0.002101
rmse 0.072769
sse 4.162072
std 0.032230
画图如下:
2) RPE
运行指令:
evo_rpe tum data.tum vins_result_loop.txt -r angle_deg --delta 1 --delta_unit m -va --plot --plot_mode xz --save_plot ./vinsmono_MH01plot --save_results ./vinsmono_MH01.zip
终端打印结果:
max 1.021268
mean 0.176637
median 0.123731
min 0.011836
rmse 0.246504
sse 4.375030
std 0.171941
画图如下:
4.2 MH_03_medium数据集(运行指令和上述一样,但是要修改对应数据集的名称)
4.2.1 ORB-SLAM2
1) APE
终端打印结果:
max 1.061202
mean 0.111301
median 0.056120
min 0.009595
rmse 0.176068
sse 29.883937
std 0.136426
画图如下:
2)RPE
终端打印结果:
max 111.690464
mean 15.040676
median 10.132911
min 1.439042
rmse 22.873176
sse 53887.766924
std 17.232535
画图如下:
4.2.2 VIORB
1) APE
终端打印结果:
max 0.104126
mean 0.039126
median 0.039083
min 0.003429
rmse 0.043359
sse 0.259436
std 0.018685
画图如下:
2) RPE
终端打印结果:
max 0.316922
mean 0.083542
median 0.074673
min 0.013891
rmse 0.098279
sse 0.647133
std 0.051763
画图如下:
4.2.3 Vins-mono
1) APE
终端打印结果:
max 0.173256
mean 0.065392
median 0.057324
min 0.003779
rmse 0.073921
sse 3.885096
std 0.034470
画图如下:
2) RPE
终端打印结果
max 1.107526
mean 0.129639
median 0.100093
min 0.010756
rmse 0.182452
sse 3.794913
std 0.128384
画图如下:
4.3 MH_05_difficult数据集(运行指令和上述一样,但是要修改对应数据集的名称)
4.3.1 ORB-SLAM2
1)APE
终端打印结果:
max 0.394046
mean 0.226045
median 0.232689
min 0.042808
rmse 0.236454
sse 56.413871
std 0.069387
绘图显示如下:
2) RPE
终端打印结果:
max 55.212829
mean 9.444248
median 4.749272
min 0.081534
rmse 14.280667
sse 18354.370652
std 10.711845
画图如下:
4.3.2 VIORB
1) APE
终端打印结果:
max 0.280075
mean 0.164725
median 0.160054
min 0.042744
rmse 0.174695
sse 4.486188
std 0.058171
画图如下:
2) RPE
终端打印结果:
max 0.116591
mean 0.052993
median 0.048396
min 0.008256
rmse 0.059098
sse 0.220034
std 0.026160
画图如下:
4.3.3 Vins-mono
1) APE
终端打印结果:
max 0.403776
mean 0.176394
median 0.147831
min 0.014606
rmse 0.197973
sse 24.142979
std 0.089880
画图如下:
2) RPE
终端打印结果:
max 1.448455
mean 0.111824
median 0.069696
min 0.015246
rmse 0.204431
sse 3.594113
std 0.171136
画图如下:
五、evo_res 进行结果比较
进行ATE和RPE评价之后会产生.zip文件。我们将这些.zip文件放到同一级目录下,通过evo_res对三者结果进行比较评价。
运行指令如下:
1) APE
evo_res results/*.zip -p --save_table results/table.csv
结果如下:
1.1) MH_01_easy数据集
画图如下:
1.2) MH_03_medium数据集
画图如下:
1.3) MH_05_difficult数据集
画图如下:
2) RPE
evo_res results/*.zip -p --save_table results/table.csv
结果如下:
2.1) MH_01_easy数据集
2.2) MH_03_medium数据集
画图如下:
2.3) MH_05_difficult数据集
画图如下:
友情提示:代码下载需要C币,请事先判断是否对您有帮助,谨慎下载哦!!!
来源:CSDN
作者:尹扣扣
链接:https://blog.csdn.net/whut_chengjun/article/details/103938022