SLAM 精度的評估有兩個最重要的指標,即絕對軌跡誤差(ATE)和相對位姿誤差(RPE)的
均方根誤差(RMSE):
絕對軌跡誤差:直接計算相機位姿的真實值與 SLAM 系統的估計值之間的差值,首先將真實
值與估計值的時間戳對齊,然后計算每對位姿之間的差值,適合于評估 SLAM 系統的性能。
相對位姿誤差:用于計算兩個相同時間戳上相機位姿的真實值與 SLAM 算法的估計值之間每
隔一段時間位姿變化量之間的差值,也可以理解為位姿真實值與與估計值的實時比較。該標
準適合于估計系統的漂移。
端到端誤差(回環誤差):一段存在回環的軌跡里,SLAM 算法估算的軌跡起點與終點之間
的距離差值。
二 評估工具
evo是一款用于視覺里程計和 slam 問題的軌跡評估工具。核心功能是能夠繪制相機的軌跡,
或評估估計軌跡與真值的誤差。支持多種數據集的軌跡格式(TUM、KITTI、EuRoC MAV、
ROS 的 bag),同時支持這些數據格式之間進行相互轉換。在此僅對其基本功能做簡要介紹。
1.evo 安裝方法
該工具目前被托管在 github 上了,其項目地址為 https://github.com/MichaelGrupp/evo。
作者提供了兩種安裝方法。推薦使用 pip 工具進行安裝,只需要一行代碼即可,將如下代碼
復制到你的終端中運行
pip install evo --upgrade --no-binary evo
2.evo 使用方法
evo 工具主要有如下六個命令:
evo_ape - 用于評估絕對軌跡誤差;
evo_rpe- 用于評估相對位姿誤差;
46
cvlife.net evo_traj - 這個主要是用來畫軌跡、輸出軌跡文件、轉換數據格式等功能;
evo_config - 這個主要用于 evo 工具全局設置和配置文件操作;
evo_res- 比較來自 evo_ape 或 evo_rpe 生成的一個或多個結果文件的工具;
evo_fig - 用于重新打開序列化圖(使用–serialize_plot 保存);
2.1 evo_ape 用法
該命令用于評估兩條軌跡的絕對位姿誤差,最簡單的使用方法為:
evo_ape kitti a.txt b.txt
解釋:如上命令的意思是,比較 kitti 數據集格式的 a.txt 和 b.txt 文件的絕對誤差精度。如果
你要比較的數據集格式為 euroc,那么此時可以使用如下命令:
evo_ape euroc a.csv b.csv
evo 共支持 kitti、tum、euroc 這三個公開數據集格式。
需要注意兩個待比較的數據文件必須格式一致,都為 kitti、tum 或者 euroc
當你使用上面的命令之后,會在你的終端中產生如下類型的結果:

其中:
max:表示最大誤差;
mean:平均誤差;
median:誤差中位數;
min:最小誤差;
rmse:均方根誤差;
sse:和方差、誤差平方和;
std:標準差。
evo_ape 命令后面可以添加的參數有很多,使用如下命令查看參數解析:
evo_ape kitti -h
同樣的是你還可以使用:
evo_ape tum -h
下面示范一個常用的用法,當我們獲得單目 SLAM 生成的軌跡文件時,此時我們需要和真實
軌跡進行對比,但是我們知道單目 SLAM 是沒有尺度的,所以兩個軌跡一定不會一樣大,所
以我們需要對軌跡進行 sim(3)相似變換,那么 evo 就會自動的對軌跡的位移、旋轉、尺度進
行對齊,完成這個任務的代碼如下:
evo_ape tum data.tum CameraTrajectory.txt -aps
解釋:參數-a、-s、-p 即為選擇的參數,分別表示進行軌跡的對齊和尺度修正,以及-p 表
示畫圖誤差的圖和兩個軌跡的圖。
2.2 evo_rpe 用法
該命令用于比較兩個軌跡之間的相對軌跡誤差,也就是兩個時間戳相同時刻的軌跡軌跡誤
47
cvlife.net 差,更具體來說,兩組軌跡持續時間相同,但是采樣頻率不同,那么之間就會有一些少量的
相同時間戳,那么這些相同的時間戳就可以進行一對一比較誤差。同樣的這些誤差也會有平
均誤差、最大、最小誤差等等結果。命令使用方法如下:
evo_rpe xxx a.txt b.txt
evo_rpe 命令依然可以添加一些可選參數項,你同樣可以使用如下命令查看可選參數的具體
介紹和用法:
evo_rpe xxx -h
解釋:其中 xxx 為 tum、kitti、euroc、rosbag 中的一種
2.3 evo_traj 用法
該命令 evo_traj 命令十分有用,它主要用于畫軌跡圖、表格,轉換數據格式等等操作。
下面我們來看一個簡單的用法:
evo_traj tum a.txt
輸出為:

該命令如果不添加任何參數項,那么就輸出軌跡的相關信息。
我們只要簡單的添加一個參數-p 或者--plot 即可看到軌跡的圖形,命令如下:
evo_traj tum a.txt -p
效果如下:

進一步當我們想要畫兩個或者兩個以上的軌跡時:
48
cvlife.net evo_traj tum a.txt b.txt c.txt -p
如果我們想要兩個軌跡匹配到同一個原點那么可以使用參數如下:
evo_traj tum a.txt b.txt c.txt -p --align_origin
又比如下面的命令:
evo_traj kitti 0.txt 1.txt --ref=0.txt -p --plot_mode=xz
解釋:上面命令中參數--ref 表示設置軌跡為參考,--plot_mode=xz 表示軌跡投影到 xz 軸
顯示。
還有一些額外的可選項,它們很有用,你可以通過-h 選項查看參數的介紹和用法。
2.4 evo_config 用法
evo_config 命令比較少用,多數情況下,我們使用默認配置即可。
你可以使用如下命令,查看 evo 默認的一些系統參數設置:
evo_config show --brief
運行上面的命令之后,你的終端上就可以輸出如下信息:
{
"console_logging_format": "%(message)s",
"euler_angle_sequence": "sxyz",
"global_logfile_enabled": false,
"plot_axis_marker_scale": 0.0,
"plot_backend": "Qt5Agg",
"plot_export_format": "pdf",
"plot_figsize": [
6,
6
],
"plot_fontfamily": "sans-serif",
"plot_fontscale": 1.0,
"plot_invert_xaxis": false,
"plot_invert_yaxis": false,
"plot_linewidth": 1.5,
"plot_multi_cmap": "none",
"plot_reference_alpha": 0.5,
"plot_reference_color": "black",
"plot_reference_linestyle": "--",
"plot_seaborn_palette": "deep6",
"plot_seaborn_style": "darkgrid",
"plot_split": false,
"plot_statistics": [
"rmse",
"median",
"mean",
"std",
"min",
"max"
49
cvlife.net ],
"plot_texsystem": "pdflatex",
"plot_trajectory_alpha": 0.75,
"plot_trajectory_cmap": "jet",
"plot_trajectory_linestyle": "-",
"plot_usetex": false,
"plot_xyz_realistic": true,
"ros_map_alpha_value": 1.0,
"ros_map_unknown_cell_value": 205,
"save_traj_in_zip": false,
"table_export_data": "stats",
"table_export_format": "csv",
"table_export_transpose": true
}
如果你想要對某一項參數進行修改,比如你想修改輸出的圖像格式,你可以使用如下命令:
evo_config set plot_export_format png
又比如你想做如下的操作:
1.將畫圖背景更改成白色網格
evo_config set plot_seaborn_style whitegrid
2.將字體改為襯線型并調為 1.2 倍大小
evo_config set plot_fontfamily serif plot_fontscale 1.2
3.將畫圖所使用的線型改為 -
evo_config set plot_reference_linestyle -
4.將所畫圖的圖像大小調整為 10 9(寬 高)
evo_config set plot_figsize 10 9
5.當你想要將配置還原為默認時,只需要使用命令:
evo_config reset
當你對 evo 的使用有一個大致的理解之后,我覺得你再摸索和使用就會方便很多,當你看完
本篇博客之后,如果你還想進一步了解它更細致的使用,你可以瀏覽的 evo 在 github 上的
wiki,網址為:https://github.com/MichaelGrupp/evo/wiki
參考 https://www.guyuehome.com/37988
https://blog.csdn.net/u011341856/article/details/104594392
https://blog.csdn.net/qq_42601453/article/details/121024209