SLAM軌跡精度評估工具evo安裝以及使用方法詳細介紹,以及如何用來評估ORB-SLAM2生成的軌跡精度

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共支持kittitumeuroc這三個公開數據集格式。

需要注意兩個待比較的數據文件必須格式一致,都爲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

效果如下:
在這裏插入圖片描述

參考資料

  1. https://github.com/MichaelGrupp/evo/wiki(這個是evo的權威資料)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章