configuration
evo_config 是一個小工具,可以用於更改全局設置或者生成自定義配置文件。
自定義配置文件
有時,將實驗的參數存儲在專用文件中,而不是每次都手動輸入作爲命令行的參數是非常有用的。evo大多數命令行工具都可以用-c或者–config參數加載.json配置文件。
示例
假設要運行下面這條命令計算位置的相對誤差
evo_rpe tum groundtruth.txt estimate.txt --pose_relation angle_deg --delta 1 --delta_unit m --verbose --plot
evo_config generate 命令可以將任意的命令的參數轉換爲.json文件,在–out的選項下。
evo_config generate --pose_relation angle_deg --delta 1 --delta_unit m --verbose --plot --out rep_config.json
輸出文件rpe_config.json內包含如下內容
{
"delta":1.0,
"delta_unit":"m",
"plot":true,
"pose_relation":"angle_deg",
"verbose":true
}
當下一次我們希望運行evo_rep命令並指定這些參數時我們只需要運行如下命令
evo_rpe groundtruth.txt estimate2.txt -c rpe_config.json
全局設置
可以顯示、更改、重置存儲在settings.json 文件內的evo全局設置
evo_config show
運行這條命令將打印settings.json文件內容,如果使用–brief選項的話
將會顯示參數內容的簡要信息。
evo_config set
使用這條命令設置單個或多個參數值,被設置的參數將在默認情況下被使用,除非運行命令時採用-c/–config指定了其他配置文件。
示例
如果你的配置文件如下所示
{
"logfile_enabled":false,
"plot_export_format":"pdf",
"plot_figsize":[
8,
8
]
}
運行
evo_config set plot_export_format png logfile_enabled true plot_figsize 10 9
將會被設置成
{
"logfile_enabled":true,
"plot_export_format":"png",
"plot_figsize":[
10,
9
]
}
每次運行時都會返回true或者false表明設置參數操作是否成功。
evo_reset
該命令將evo設置爲默認的全局參數
evo_traj
evo_traj 是處理多條軌跡的主要工具,主要功能有
- 顯示一些信息
- 畫圖
- 驗證數據是否合法
- 轉換數據到其他格式
- 數據變換
基礎用法
evo_traj 可以打開你所需要的所有軌跡數據,通過參數指定的數據結構(tum、euroc、kitti等)。例如:
evo_traj tum traj_1.txt traj_2.txt traj_3.txt
對如ros數據包,需要指定.bag文件以及需要打開的軌跡數據的topic名稱,例如:
evo_traj bag ROS_example.bag groundtruth ORB-SLAM S-PTAM
你也可以用–all_topic 選項來加載ros包中所有的軌跡信息。
在這些軌跡中,可以使用–ref 選項將其中一個標記爲參考軌跡。
evo_traj bag ROS_example.bag ORB-SLAM S-PTAM --ref groundtruth
如果你想要使用對齊的功能則必須要指定一條軌跡爲參考軌跡。
檢查軌跡數據
默認情況下,evo只會打印一些如下所示的重要信息。
name: groundtruth
infos: 12765 poses,304.207m path length,889.019s duration
使用-v/–verbose選項將會改變輸出格式,改變後輸出信息如下
name: groundtruth
infos
duration (s) 889.01894474
nr. of poses 12765
path length (m) 304.206897009
pos_end (m) [ -3.32159757 -4.64051651 32.7839329 ]
pos_start (m) [-0.00489994 -0.01775981 -0.01375532]
t_end (s) 1502793459.3
t_start (s) 1502792570.28
使用–full_check選項將會得到最詳細的輸出信息,並且會對一些數學和邏輯上的問題進行檢查。比如四元數有沒有歸一化、時間戳是不是遞增的,具體輸出格式如下:
name: groundtruth
infos
duration (s) 889.01894474
nr. of poses 12765
path length (m) 304.206897009
pos_end (m) [ -3.32159757 -4.64051651 32.7839329 ]
pos_start (m) [-0.00489994 -0.01775981 -0.01375532]
t_end (s) 1502793459.3
t_start (s) 1502792570.28
checks
SE(3) conform yes
array shapes ok
nr. of stamps ok
quaternions ok
timestamps ok
stats
v_avg (km/h) 1.411572
v_avg (m/s) 0.392103
v_max (km/h) 3.038775
v_max (m/s) 0.844104
v_min (km/h) 0.001567
v_min (m/s) 0.000435
畫圖
添加-p或–plot選項可以將軌跡繪製出來。你可以通過–plot_mode來指定繪製軌跡的格式,如–plot_mode xz 便是x和z軸構成的二維視圖,而–plot_mode xyz則是三維視圖。當然無論在任何模式下,tab3的頁面中都會將x,y,z軸數據獨立的繪製出來,tab3中則會把roll、pitch、yaw數據獨立的繪製出來。
對齊和變換
幾何對齊
如果你採用–ref選項指定了一條參考軌跡,你可以採用如下的方法將其他軌跡和參考軌跡進行對齊。
- –align 或 -a = SE3變換對齊(旋轉+平移)
- –align --correct_scale 或 -as = Sim3變換(旋轉+平移+尺度)
- –corrent_scale 或 -s = 僅有尺度矯正
alignment_demo.py腳本展示了不同腳本之間的區別。此外還支持對齊
前n個路徑的位姿,通過--n_to_align
選項,如 --n_to_align 100
注意:在v1.5.0以上的版本中,提供了一個簡單的原點對齊的方法,可以通過--align_origin
來調用。
時間對齊
通過搜索參考軌跡和其他軌跡間的最佳匹配時間戳來完成時間對齊。所有的軌跡都會變換爲最佳匹配的時間戳,如果找不到匹配項則會引發錯誤,可以使用如下選項完成功能。
--t_offset
:添加恆定的時間戳偏移-默認0.0s--t_max_diff
:數據關聯的最大時間戳誤差-默認0.01s
所有的幾何對齊的命令執行中都會自動進行進行實踐對齊,若想僅僅進行時間對齊則使用選項 --sync
變換
你也可以變換軌跡位姿通過自動的三維變換,爲此你需要一個.json文件,其中包含旋轉和平移信息,格式如下:
{
"x": 0.0,
"y": 0.0,
"z": 0.0,
"qx": 0.0,
"qy": 0.0,
"qz": 0.0,
"qw": 1.0
}
如果變換操作是在世界座標系下的使用選項 --transform_left<json file>
,如果變換操作是在局部座標系下的使用選項 --transform_right<json file>
。
數據格式
軌跡
程序支持從不同格式的文件中加載軌跡信息。你可以指定希望使用哪一種格式解析文件。例如:evo_traj tum ...
或evo_traj kitti ...
。
技巧:如果你不知道在你的算法中應該使用什麼格式,推薦使用TUM格式的數據,應該該格式較爲簡單且容易轉換成其他格式並且不需要ROS的支持
ROS數據包
注意:需要安裝ROS
支持讀取bag包中格式爲 geometry_msgs/PoseStamped
, geometry_msgs/TransformStamped
,geometry_msgs/PoseWithCovarianceStamped
和nav_msgs/Odometry
的數據。evo只會讀取位姿數據,協方差等數據是不會被使用的。
更多請參考:
- http://wiki.ros.org/Bags
- http://docs.ros.org/api/geometry_msgs/html/msg/PoseStamped.html
- http://docs.ros.org/api/geometry_msgs/html/msg/PoseWithCovarianceStamped.html
- http://docs.ros.org/api/geometry_msgs/html/msg/TransformStamped.html
- http://docs.ros.org/api/nav_msgs/html/msg/Odometry.html
euroc -EuRoC MAV 數據集格式
EuRoC數據集內的每一個序列都有一個.csv文件,裏面存儲了變量的真實信息。對我們來說,只有第一列的軌跡信息是重要的(時間戳、位置信息、旋轉信息)
你可以在序列文件夾中的如下位置找到該文件:
<sequence>/mav0/state_groundtruth_estimate0/data.csv
由於文件中存在許多不需要的信息,因此如果使用EuRoC數據集,通常需要轉換成其他格式如TUM保存軌跡。
更多內容參閱:http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets#the_euroc_mav_dataset
kitti -KITTI 數據集格式
實際上這不是真正意義上的軌跡格式,因爲它沒有時間戳,僅包含位姿信息。
這意味着你必須小心當你想要比較兩個文件在這種格式與一個指標,因爲位姿的數量必須是完全相同的。
該文件包含齊次變換矩陣的前三行,例如對於如下的齊次變換矩陣
a b c d
e f g h
i j k l
0 0 0 1
將會在文件中以以下的形式表達:
a b c d e f g h i j k l
更多內容參閱:http://www.cvlibs.net/datasets/kitti/eval_odometry.php
tum -TUM RGB-D數據集軌跡格式
每一行有8個數據,包括了時間戳、位置、四元數形式的角度數據。
timestamp x y z q_x q_y q_z q_w
更多信息參閱:https://vision.in.tum.de/data/datasets/rgbd-dataset/file_formats
保存或導出成其他格式
使用evo_traj
命令和--save_as_<other_format>
選項進行格式轉換。
下面的轉換組合是可行的:
–save_as_bag | –save_as_kitti | –save_as_tum | |
---|---|---|---|
bag | yes | yes | yes |
euroc | yes | yes | yes |
kitti | no | yes | no |
tum | yes | yes | yes |
例子:
# export a EuRoC groundtruth file to a TUM trajectory
evo_traj euroc data.csv --save_as_tum
# (will be saved as data.tum)
# export TUM trajectories to KITTI format
evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_kitti
# (will be saved as *.kitti)
# export TUM trajectories to ROS bagfile
evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_bag
# (will be saved as <timestamp>.bag with topics traj_1, traj_2 and traj_3)
# and so on...
沒有--save_as_euroc
選項是因爲該格式包含了很多其他用不到的信息。
指標
下面的內置命令行可以用於評估軌跡和參考軌跡的指標。
- evo_ape
- evo_rpe
從概念上講,命令行的語法規則如下:
command format reference-trajectory estimated-trajectory [options]
對於ros包文件,命令行格式有一點點不同
command bag bagfile-path reference-topic estimated-topic [options]
更多的信息可以通過evo_rpe euroc --help命令獲得。
教程
有一個較好的交互式的教程幫助理解程序內的內容,你可以從這裏找到它。這是用jupyter寫的,需要配置一下對應的環境。
evo_ape
絕對位姿誤差,常用於絕對軌跡誤差。給出了姿態關係,直接比較了估計和參考的相應姿態。然後,對整個軌跡進行統計計算。這對於測試軌跡的全局一致性是有用的。
evo_rpe
相對位姿誤差不是直接比較絕對位姿,而是比較動作(“位姿增量”)。這個度量給出了關於局部精度的見解,即偏移。例如,可以計算每米的平移或旋轉漂移:
evo_rpe tum reference.txt estimate.txt --pose_relation angle_deg --delta 1 --delta_unit m
畫圖
evo提供幾種設置使得用戶能夠更改繪圖的外觀。
在命令行中可以使用 --plot
或--plot_mode
來設置繪圖參數,但是更加通用的方法是通過evo_config set
來進行設置,可以通過evo_config show
命令來顯示當前的配置參數。
下面是一個練習例子,展示瞭如何通過改變繪圖參數設置來提高圖片的質量。
1.設置繪圖背景及柵格
默認繪製圖片設置爲黑色的背景,這在顯示器上看上去較好但是不適合打印。你可以通過改變參數來設置成白色背景加柵格的形式,如
evo_config set plot_seaborn_style whitegrid
2.設置字體格式和大小
默認的字體並不適合於論文,程序中默認採用等線字體。我們可以通過下面的命令改變字體格式和大小。
evo_config set plot_fontfamily serif plot_fontscale 1.2
爲了匹配字體,我們還可以設置線寬
evo_config set plot_linewidth 1.0
還可以更改其他的一些東西,如參考軌跡的線形
evo_config set plot_reference_linestyle -
3.設置默認圖片大小
你也可以調整默認的輸出圖片大小,例如設置圖片的寬度爲5、高度爲4.5
evo_config set plot_figsize 5 4.5
4.使用latex渲染器
因爲我們使用latex編寫代碼,我們同時希望採用Latex來渲染字體。
evo_config set plot_usetex
5.重置默認設置
evo_config reset
座標軸標記
座標軸的尺度縮放
evo_config set plot_axis_marker_scale 0.1