veo 學習筆記

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

pic

注意:在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/PoseWithCovarianceStampednav_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 

二維ROS地圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章