网上开源框架较多,本篇博客选择为人熟知的三个框架,orb-slam2,viorb(清华大学王京版本),vins-mono。在自己的笔记本上运行Euroc数据集,并采用evo和matlab来评价他们的性能。
注:
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();
}
用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
运行指令如下:
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
运行指令如下:
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
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
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
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
max 0.316922
mean 0.083542
median 0.074673
min 0.013891
rmse 0.098279
sse 0.647133
std 0.051763
1) APE
终端打印结果:
max 0.173256
mean 0.065392
median 0.057324
min 0.003779
rmse 0.073921
sse 3.885096
std 0.034470
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
max 55.212829
mean 9.444248
median 4.749272
min 0.081534
rmse 14.280667
sse 18354.370652
std 10.711845
1) APE
终端打印结果:
max 0.280075
mean 0.164725
median 0.160054
min 0.042744
rmse 0.174695
sse 4.486188
std 0.058171
max 0.116591
mean 0.052993
median 0.048396
min 0.008256
rmse 0.059098
sse 0.220034
std 0.026160
1) APE
终端打印结果:
max 0.403776
mean 0.176394
median 0.147831
min 0.014606
rmse 0.197973
sse 24.142979
std 0.089880
max 1.448455
mean 0.111824
median 0.069696
min 0.015246
rmse 0.204431
sse 3.594113
std 0.171136
进行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.2) MH_03_medium数据集
画图如下:
2.3) MH_05_difficult数据集
画图如下:
友情提示:代码下载需要C币,请事先判断是否对您有帮助,谨慎下载哦!!!