evo在視覺SLAM中是一個極爲有用的工具,對於論文黨、科研黨、工程黨都非常有幫助,它可以用於評估SLAM輸出的軌跡的精度,可以自動生成均值、方差、軌跡等等信息的圖或者表,總之評估SLAM精度用它足以。
它目前支持的公開數據集格式有:“TUM”、“KITTI”、“EuRoC MAV"以及"ROS bagfile”。如果你使用的數據集格式爲這些中的某一種,那麼你無須額外的數據格式處理,就可以直接使用evo進行精度相關內容評估。
1.evo安裝方法
該工具目前被託管在github上了,其項目地址爲https://github.com/MichaelGrupp/evo。
作者提供了兩種安裝方法,這裏我推薦使用pip工具進行安裝,非常方便,只需要一行代碼即可,將如下代碼複製到你的終端中運行
pip install evo --upgrade --no-binary evo
注意:如果一直提示下載失敗,或者出現下載速度過慢等問題,那是因爲pip工具默認的下載地址爲國外的服務器,你需要將源地址改爲國內,具體操作方法可以參考我的這篇博客《解決Linux,Ubuntu下使用python包管理工具pip命令安裝和下載包速度很慢、失敗或者connection timeout等問題》,修改源之後基本上就可以毫無問題的安裝好了。
沒有報錯,則evo就算安裝成功了,此時你打開終端輸入evo
,然後按Tab鍵就可以出現如下命令:
2.evo使用方法
evo工具主要有如下六個常用命令:
evo_ape
- 用於評估絕對位姿誤差;evo_rpe
- 用於評估相對位姿誤差;evo_traj
- 這個主要是用來畫軌跡、輸出軌跡文件、轉換數據格式等功能;evo_res
- 比較來自evo_ape或evo_rpe生成的一個或多個結果文件的工具;evo_fig
- (實驗)工具,用於重新打開序列化圖(使用–serialize_plot保存);evo_config
- 這個主要用於evo工具全局設置和配置文件操作。
2.1 evo_ape用法
下面讓我們來看第一個命令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
的最簡單用法,命令還可以添加一些參數,從而完成不同的功能:
evo_ape
命令後面可以添加的參數有很多,你可以使用如下命令進行查看:
evo_ape kitti -h
解釋:該命令就是表示evo_ape
命令在kitti數據集下,可以選擇的參數介紹,介紹的還是很詳細的,我感覺你直接就能看懂。
同樣的是你還可以使用:
evo_ape tum -h
下面示範一個常用的用法,當我們獲得單目SLAM生成的軌跡文件時,此時我們需要和真實軌跡進行對比,但是我們知道單目SLAM是沒有尺度的,所以兩個軌跡一定不會一樣大,所以我們需要對軌跡進行sim(3)相似變換,那麼evo就會自動的對軌跡的位移、旋轉、尺度進行對齊,完成這個任務的代碼如下:
evo_ape tum data.tum CameraTrajectory.txt -a -p -s
解釋:參數-a
、-s
、-p
即爲選擇的參數,分別表示進行軌跡的匹配和尺度修正,以及-p
表示畫圖誤差的圖和兩個軌跡的圖。
2.2 evo_rpe用法
該命令用於比較兩個軌跡之間的相對軌跡誤差,也就是兩個時間戳相同時刻的軌跡軌跡誤差,更具體來說,兩組軌跡持續時間相同,但是採樣頻率不同,那麼之間就會有一些少量的相同時間戳,那麼這些相同的時間戳就可以進行一對一比較誤差。同樣的這些誤差也會有平均誤差、最大、最小誤差等等結果。命令使用方法如下:
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
效果如下:
進一步當我們想要畫兩個或者兩個以上的軌跡時:
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默認的一些系統參數設置:
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"
],
"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
3.evo在ORB-SLAM2中的用法演示
下面演示一個真實使用場景。
其實用法很簡單,ORB-SLAM2產生的軌跡文件爲CameraTrajectory.txt
,我們要想對它進行軌跡精度評估,第一步首先需要確定軌跡的數據格式,可以很容易發現它保存的數據格式與tum一致,如果想要評估精度ORB-SLAM2精度,就需要先將真實軌跡轉換成tum格式,實際操作過程爲:
例如,如果我們使用EuRoc數據做SLAM:
1.首先,將EuRoc數據集的真實軌跡轉換成tum格式,使用如下命令:
evo_traj euroc data.csv --save_as_tum
2.然後,將ORB-SLAM2生成的軌跡和轉換格式之後的EuRoc軌跡進行誤差對比:
evo_traj tum data.tum CameraTrajectory.txt -p --ref=data.tum -a
效果如下:
參考資料
- https://github.com/MichaelGrupp/evo/wiki(這個是evo的權威資料)