VINS跑TUM的Visual-Inertial Dataset數據集並使用evo評估


  介紹:Visual-Inertial Dataset是TUM在2018年發布的數據集,由實驗人員手持設備進行拍攝,用於視覺慣性里程計的評估,提供了標定序列和數據集序列,而且同一序列提供了不同分辨率,分布為512x512和1024x1024,有圖片文件夾(tar壓縮格式)和適合ros的bag格式。

  官方下載及說明網址為https://vision.in.tum.de/data/datasets/visual-inertial-dataset

  論文:https://vision.in.tum.de/_media/spezial/bib/schubert2018vidataset.pdf

分為DATASET SEQUENCE(數據集序列),CALIBRATION (標定序列),RAW DATA(原始數據)。

 

 

  使用的傳感器設備型號:

 

 

  標定數據總共提供四種:

  1.calib-cam1~8:相機標定,本質矩陣以及兩個相機之間的姿態變換

  2.calib-imu1~4:IMU標定,找到相機和IMU之間的最優姿態變換

  3.calib-vignette2~3:光暈標定??

  4.calib-imu-static2:IMU標定,只包含IMU數據,用於估計IMU噪聲和隨機游走。格式timestamp, gyro_x, gyro_y, gyro_z, accel_x, accel_y, accel_z, temperature

   數據集序列總共5種:

  1.corridor1~5(走廊):在走廊和幾個辦公室拍攝,只在開始和結束有真實值。

  2.magistrale1~6(大廳):在校園內的一個大廳拍攝,只在開始和結束有真實值。

  3.outdoors1~8(戶外):在校園內的室外場景拍攝,只在開始和結束有真實值。

  4.room1~6(室內):對應有5個圖像序列,整個過程都帶有運動捕捉系統提高的真實值。

  5.slides1~3(滑梯):在大廳中拍攝,包含一段光照極差的路程,只在開始和結束有真實值。

 

  真實值:由運動捕捉系統OptiTrack Flex13提供,並使用中值濾波去除了外點,以IMU幀形式提供。

  

  VINS:VINS中提供了Visual-Inertial Dataset對應config文件和launch文件,推薦下在room1~6進行評估,因為這些序列中提供了整個過程的真實值,其他數據集序列只提供了開始和結尾的真實值。

  EVO:下載完數據集后需要使用EVO進行評估,直接通過pip3安裝evo即可。

  評估:我評估了帶有回環檢測的VINS的結果,主要需要修改三個地方。

  1.config文件

  想要得到帶有回環檢測的結果需要修改tum_config.yaml文件,首先修改輸出路徑,有兩個地方可以改成同一個路徑,第6行的output_path修改為自己指定的路徑,然后第70行pose_graph_save_path修改為指定路徑,然后開啟回環檢測,第67行loop_closure改為1,這樣才會輸出帶回環檢測的結果。

  2.VINS輸出結果修改為tum格式

  直接輸出的結果格式並不能用EVO工具進行評估,需要修改代碼,將其輸出格式改為tum格式:

  首先修改VINS-Mono-master\vins_estimator\src\utility\中的visualization.cpp,從156行開始修改為以下形式:

  

ofstream foutC(VINS_RESULT_PATH, ios::app);
        foutC.setf(ios::fixed, ios::floatfield);
        foutC.precision(0);
        foutC << header.stamp.toSec() << " ";
        foutC.precision(5);
        foutC << estimator.Ps[WINDOW_SIZE].x() << " "
              << estimator.Ps[WINDOW_SIZE].y() << " "
              << estimator.Ps[WINDOW_SIZE].z() << " "
              << tmp_Q.x() << " "
              << tmp_Q.y() << " "
              << tmp_Q.z() << " "
              << tmp_Q.w() << endl;

  然后修改VINS-Mono-master\pose_graph\src中的pose_graph.cpp中的addKeyFrame函數,在153行,修改為以下形式:

  

ofstream loop_path_file(VINS_RESULT_PATH, ios::app);
        loop_path_file.setf(ios::fixed, ios::floatfield);
        loop_path_file.precision(0);
        loop_path_file << cur_kf->time_stamp << " ";
        loop_path_file.precision(5);
        loop_path_file  << P.x() << " "
                        << P.y() << " "
                        << P.z() << " "
                        << Q.x() << " "
                        << Q.y() << " "
                        << Q.z() << " "
                        << Q.w() << endl;

 

  還是在VINS-Mono-master\pose_graph\src中的pose_graph.cpp中,updatePath函數中的內容也要修改,在630行。

  

ofstream loop_path_file(VINS_RESULT_PATH, ios::app);
            loop_path_file.setf(ios::fixed, ios::floatfield);
            loop_path_file.precision(0);
            loop_path_file << (*it)->time_stamp << " ";
            loop_path_file.precision(5);
            loop_path_file  << P.x() << " "
                            << P.y() << " "
                            << P.z() << " "
                            << Q.x() << " "
                            << Q.y() << " "
                            << Q.z() << " "
                            << Q.w() << endl;

  最后修改VINS-Mono-master\pose_graph\src中的pose_graph_node.cpp中的main函數,506行,將csv格式改為txt格式:

  

VINS_RESULT_PATH = VINS_RESULT_PATH + "/vins_result_loop.txt";

  到此,VINS輸出結果的格式更改完成,接下去修改真實值的格式。

  3.真實值修改為tum格式

  真實值為對應的.tar文件中的gt_imu.csv文件,由於EVO並不支持這種格式,需要先進行格式轉換,轉換成.tum文件再和VINS運行的結果進行比較。

轉換的命令為:

  

evo_traj euroc gt_imu.csv --save_as_tum

  tum文件格式為timestamp x y z q_x q_y q_z q_w,其中timestamp單位為秒,q是四元數表示。

  euroc文件格式為timestamp,px,py,pz,qw,qx,qy,qz,vx,vy,vz,bwx,bwy,bwz,bax,bay,baz 用逗號隔開,其中timestamp單位是納秒,bw為陀螺儀偏置,ba為加速度計偏置。

  得到的gt_imu.tum就是可以使用EVO和VINS結果進行比較的格式,我將其重命名為gt_room1.tum,對應room1序列的真實值。

 

  VINS運行:在catkin_ws目錄下打開四個終端,然后分別輸入以下命令,終端4的命令用來選擇不同數據集。

  終端1:

  

source ~/catkin_ws/devel/setup.bash
roscore

  終端2:

  

source ~/catkin_ws/devel/setup.bash
roslaunch vins_estimator tum.launch

  終端3:

  

source ~/catkin_ws/devel/setup.bash
roslaunch vins_estimator vins_rviz.launch

  終端4:

source ~/catkin_ws/devel/setup.bash
rosbag play ~/catkin_ws/Dataset/dataset-room1_512_16.bag

 

  運行完后會生成vins_result_loop.txt,然后使用以下命令進行評估APE或者RPE:

  

evo_ape tum gt_room1.tum vins_result_loop.txt -va --plot
evo_rpe tum gt_room1.tum vins_result_loop.txt -r angle_deg --delta_unit m -va --plot --plot_mode xyz

  得到的結果(僅展示終端部分):

  APE:

Loaded 16541 stamps and poses from: gt_room1.tum
Loaded 1358 stamps and poses from: vins_result_loop.txt
--------------------------------------------------------------------------------
Synchronizing trajectories...
Found 1308 of max. 1358 possible matching timestamps between...
    gt_room1.tum
and:    vins_result_loop.txt
..with max. time diff.: 0.01 (s) and time offset: 0.0 (s).
--------------------------------------------------------------------------------
Aligning using Umeyama's method...
Rotation of alignment:
[[ 0.99253067  0.12145606  0.01145834]
 [-0.12136259  0.99257159 -0.00853021]
 [-0.01240927  0.00707588  0.99989797]]
Translation of alignment:
[ 0.85930872 -0.34767327  1.33849877]
Scale correction: 1.0
--------------------------------------------------------------------------------
Compared 1308 absolute pose pairs.
Calculating APE for translation part pose relation...
--------------------------------------------------------------------------------
APE w.r.t. translation part (m)
(with SE(3) Umeyama alignment)

       max    1.261789
      mean    0.308258
    median    0.262709
       min    0.012484
      rmse    0.359546
       sse    169.089307
       std    0.185068

  RPE:

  

Loaded 16541 stamps and poses from: gt_room1.tum
Loaded 1358 stamps and poses from: vins_result_loop.txt
--------------------------------------------------------------------------------
Synchronizing trajectories...
Found 1308 of max. 1358 possible matching timestamps between...
    gt_room1.tum
and:    vins_result_loop.txt
..with max. time diff.: 0.01 (s) and time offset: 0.0 (s).
--------------------------------------------------------------------------------
Aligning using Umeyama's method...
Rotation of alignment:
[[ 0.99253067  0.12145606  0.01145834]
 [-0.12136259  0.99257159 -0.00853021]
 [-0.01240927  0.00707588  0.99989797]]
Translation of alignment:
[ 0.85930872 -0.34767327  1.33849877]
Scale correction: 1.0
--------------------------------------------------------------------------------
Found 133 pairs with delta 1 (m) among 1308 poses using consecutive pairs.
Compared 133 relative pose pairs, delta = 1 (m) with consecutive pairs.
Calculating RPE for rotation angle in degrees pose relation...
--------------------------------------------------------------------------------
RPE w.r.t. rotation angle in degrees (deg)
for delta = 1 (m) using consecutive pairs
(with SE(3) Umeyama alignment)

       max    102.691369
      mean    32.609766
    median    27.259453
       min    0.397103
      rmse    41.301337
       sse    226871.461814
       std    25.345682

  我還測試了room2~5的結果,這里不再展示,這個數據集沒有提供不同序列之間的差異(比如說速度、光照、紋理情況等,euroc提供了),以下是我自己的主觀感覺。

  room1速度較快,視角變化劇烈 光照變化明顯
  room2速度較快,視角變換一般 光照良好
  room3 速度極快,視角變換一般
  room4 光照和視角變換明顯,速度較慢
  room5 速度快, 視角變換劇烈
  room6 速度慢,視角變換一般

 

  主要參考的文檔有以下:

The TUM VI Benchmark for Evaluating Visual-Inertial Odometry論文部分翻譯:https://blog.csdn.net/qq_41839222/article/details/86180964

tumVI數據集簡單介紹:https://blog.csdn.net/weixin_39926594/article/details/105429925

vins格式修改:https://blog.csdn.net/Hanghang_/article/details/104535370

EVO相關,以及tum,euroc格式:https://github.com/MichaelGrupp/evo/wiki/Formats


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM