evo是一款用於視覺里程計和slam問題的軌跡評估工具。核心功能是能夠繪製相機的軌跡,或評估估計軌跡與真值的誤差。支持多種數據集的軌跡格式(TUM、KITTI、EuRoC MAV、ROS的bag),同時支持這些數據格式之間進行相互轉換。在此僅對其基本功能做簡要介紹。
evo工具github地址:https://github.com/MichaelGrupp/evo/wiki
一、安裝
安裝方式極其簡單,採用pip安裝:
pip install evo --upgrade --no-binary evo
或者通過github下載源碼後(https://github.com/MichaelGrupp/evo),使用源碼安裝:
pip install --editable . --upgrade --no-binary evo
安裝時會自動安裝相關依賴項。
安裝完畢後,在命令行輸入evo,若顯示了相關信息,則表明安裝成功。若提示"command not found"也不用驚慌,很多人遇到這種問題,重啓電腦即可找到evo相應指令。
二、繪製軌跡
1. 基礎指令
evo繪製軌跡的指令爲:evo_traj,後跟必要參數有:數據的格式(tum/kitti/bag/euroc等)+ 軌跡文件。軌跡文件可以有多個,例如:
evo_traj tum traj1.txt traj2.txt
這個指令只是顯示軌跡的基本信息,若要繪製軌跡,則增加可選參數 -p 或 --plot
evo_traj tum traj1.txt –p
2. 軌跡對齊
我們時常需要將估計軌跡與真實軌跡同時繪製,可採用指令:
evo_traj tum realTraj.txt estTraj.txt -p
然而存儲時軌跡多爲相對位置變化,所以繪製出的軌跡在初始位置上存在一定的位置和角度偏移,出現以下情況。
(如圖所示,左圖爲繪製的兩條曲線,通過調整可以發現兩個曲線形狀大體相同,但沒有對齊,從而具有較大的誤差)
這時我們採用對齊指令將兩條軌跡進行對齊。爲此我們需要通過--ref參數指定參考軌跡,並增加參數-a(或--align)進行對齊(旋轉與平移)
evo_traj tum estTraj.txt --ref realTraj.txt -p -a
3. 軌跡尺度縮放
單目相機會存在尺度的不確定性,evo_traj 支持使用-s(或 --correct_scale)參數進行Sim(3)上的對齊(旋轉、平移與尺度縮放)
(圖片從左到右:兩條未對齊曲線、曲線對齊後繪製結果、曲線通過尺度縮放後結果)
三、軌跡評估
evo可以評估兩條軌跡的誤差,主要有兩個命令:
evo_ape:計算絕對位姿誤差(absolute pose error),用於整體評估整條軌跡的全局一致性;
evo_rpe:計算相對位姿誤差(relative pose error),用於評價軌跡局部的準確性。
這兩個指令也支持evo_traj的可選參數,軌跡對齊-a與尺度縮放-s。完整指令如下:
evo_ape tum realTraj.txt estTraj.txt -a –s
此時將顯示軌跡誤差相關結果。
若增加可選參數-p,可以繪製誤差相關曲線:
注意:在進行評估時,若經過了縮放,在命令行中應將真實軌跡(參考軌跡)放在估計軌跡(計算軌跡)前方,避免在縮放時參考軌跡錯誤而造成誤差被錯誤縮放。
四、格式互相轉換
五、進階學習
這裏只介紹了evo的基本操作,除此之外evo可以進行數據格式轉化、曲線顏色配置、軌跡導出等多種功能,詳細請參考evo在github上的wiki:
https://github.com/MichaelGrupp/evo/wiki
同時,可以在命令行通過-h參數查看當前evo指令的參數及相關說明。例如:
evo_traj tum –h
注意一定要輸入完整的evo指令(evo_traj, evo_ape等),與必選參數,即數據格式(tum/kitti/euroc/bag)