文章目錄
- evo參數設置
- evo_traj
- 指標度量
- evo_ape
- evo_rpe
- 結果比較
evo工具主要有如下六個常用命令:
- evo_ape - 用于評估絕對位姿誤差;
- evo_rpe- 用于評估相對位姿誤差;
- evo_traj - 這個主要是用來畫軌跡、輸出軌跡文件、轉換數據格式等功能;
- evo_res- 比較來自evo_ape或evo_rpe生成的一個或多個結果文件的工具;
- evo_fig - (實驗)工具,用于重新打開序列化圖(使用
–serialize_plot
保存); - evo_config - 這個主要用于evo工具全局設置和配置文件操作。
evo參數設置
#改變背景為白色背景的網格
evo_config set plot_seaborn_style whitegrid
#設置字體類型和比例
evo_config set plot_fontfamily serif plot_fontscale 1.3
#設置軌跡線寬
evo_config set plot_linewidth 1.2
#改變參考軌跡的線條樣式:
evo_config set plot_reference_linestyle -
#設置參考線顏色為紅色
evo_config set plot_reference_color red
#使用 LaTeX 渲染器,因為我們使用 LaTeX 來寫論文,所以我們也想使用 LaTeX 來渲染圖中的字體:
evo_config set plot_usetex
#您可能需要將 plot texsystem 參數更改為機器上安裝的 LaTeX 系統,如果這在第一次嘗試時不起作用。
evo_config set plot_texsystem pdflatex
#設置畫圖的圖像大小為寬10 高9
evo_config set plot_figsize 10 9
evo_traj
evo_traj命令十分有用,它主要用于畫軌跡圖、表格,轉換數據格式等等操作。
讀取bag軌跡
evo_traj bag data.bag /odom /tf:map.base_link --ref /groundtruth
將bag格式的數據導出為tum格式
evo_traj bag .bag --all_topics --save_as_tum
將所有軌跡畫到一個圖里并保存
evo_traj tum --sync -p --plot_mode xy --save_plot SAVE_PLOT --ref REF traj_file ...
--sync
associate trajectories via matching timestamps , requires --ref--ref REF
trajectory that will be marked/used as the reference-p, --plot
show plot window--plot_mode {xy,xz,yx,yz,zx,zy,xyz}
the axes for plot projection--save_plot SAVE_PLOT
path to save plo
指標度量
這些內置的命令行應用程序可以讓你根據參考(groundtruth)評估估計的軌跡
evo_ape
evo_rpe
command format reference-trajectory estimated-trajectory [options]
command:
evo_ape
evo_rpe
format:
- kitti
- tum
- euroc
- bag
- bag2
evo_ape
用于評估兩條軌跡的絕對位姿誤差
對于SLAM系統, 估計軌跡的全局一致性是重要度量,如何評估全局一致性? 就是通過比較被估計值和真值軌跡之間的絕對距離來得到。
首先將兩條軌跡對齊。記P1:nP_{1:n}P1:n?代表軌跡的估計,Q1:nQ_{1:n}Q1:n?代表真值軌跡,則時間戳iii處的絕對估計誤差為:
Fi=Qi?1SPiF_i=Q_i^{-1}SP_iFi?=Qi?1?SPi?
則針對所有時刻定義平移分量的 均方根誤差(RMSE)、和方差(SSE):
RMSE(F1:n):=(∑i=1n∥Trans(Fi)∥2)1/2SSE:=∑i=1n∥Trans(Fi)∥2\begin{gathered} RMSE(F_{1:n}) :=\left(\sum\limits_{i=1}^n\|{\rm Trans}(F_i)\|^2\right)^{1/2} \\ SSE :=\sum\limits_{i=1}^n\|{\rm Trans}(F_i)\|^2 \end{gathered} RMSE(F1:n?):=(i=1∑n?∥Trans(Fi?)∥2)1/2SSE:=i=1∑n?∥Trans(Fi?)∥2?
evo_ape tum -a -p --save_plot SAVE_PLOT --plot_mode xy --save_results SAVE_RESULTS ref_file est_file
-a, --align
alignment with Umeyama’s method (no scale)-p, --plot
show plot window--plot_mode {xy,xz,yx,yz,zx,zy,xyz}
the axes for plot projection--save_plot SAVE_PLOT
path to save plot--save_results SAVE_RESULTS
.zip file path to store results
evo_rpe
相對位姿誤差測量了軌跡在一個固定的時間區間 Δ\DeltaΔ內的局部準確度。 因此,相對位姿誤差對應軌跡的漂移。
Ei:=(Qi?1Qi+Δ)?1(Pi?1Pi+Δ)E_i:=(Q_i^{-1}Q_{i+\Delta})^{-1}(P_i^{-1}P_{i+\Delta})Ei?:=(Qi?1?Qi+Δ?)?1(Pi?1?Pi+Δ?)
根據上式,對于一個有n個相機位姿的序列中,我們獲得m=n?Δm=n?\Deltam=n?Δ 個獨立的沿著序列的相對位姿誤差。則可以定義平移分量的的所有時刻的均方根誤差RMSE:
RMSE(E1:n,Δ):=(1m∑i=1m∥Trans(Ei)∥2)1/2RMSE(E_{1:n},\Delta):=\bigg(\frac{1}{m}\sum\limits_{i=1}^{m}\|\rm Trans(E_i)\|^2\bigg)^{1/2} RMSE(E1:n?,Δ):=(m1?i=1∑m?∥Trans(Ei?)∥2)1/2
上式中的 (Pi?1Pi+Δ)(P_i^{-1}P_{i+\Delta})(Pi?1?Pi+Δ?) 是估計的(Qi?1Qi+Δ)(Q_i^{-1}Q_{i+\Delta})(Qi?1?Qi+Δ?),計算 (Qi?1Qi+Δ)?1(Pi?1Pi+Δ)(Q_i^{-1}Q_{i+\Delta})^{-1} (P_i^{-1}P_{i+\Delta})(Qi?1?Qi+Δ?)?1(Pi?1?Pi+Δ?) 可以直觀的得到兩條軌跡的差值;
此處計算的是EiE_iEi?的平移分量,旋轉誤差也可以被估計,但一般平移誤差就足夠了(因為旋轉誤差會隨著平移誤差的上升而增加)。時間參數 Δ\DeltaΔ對于幀速較快的相同,如30Hz的傳感器,可選擇Δ=30\Delta=30Δ=30以得到每秒的漂移。
結果比較
evo_res --use_rel_time --use_filenames -p --save_plot SAVE_PLOT --save_table SAVE_TABLE result_files [result_files ...]
--use_rel_time
use relative timestamps if available--use_filenames
use the filenames to label the data-p, --plot
show plot window--save_plot SAVE_PLOT
path to save plot--save_table SAVE_TABLE
path to a file to save the results in a table
參考鏈接
github wiki