ORB_SLAM3 の構成ファイル

自分用の覚え書きです。

実行ファイル(ソースコード)のディレクトリ

成果物を含まないソースコードのみの場合は、公式の Github リポジトリを見る方が早い。

  • build/ … ビルド用の一時ファイル
  • evaluation/ … “単眼VO / SLAMの最適な倍率を自動的に計算”
  • Examples/
    • Monocular/ … 単眼カメラ
      • mono_euroc
      • mono_kitti
      • mono_tum
      • mono_tum_vi
    • Monocular-Inertial/ … 単眼カメラ&IMU情報
    • RGB-D/ … RGB&深度カメラ(LiDAR などハード側にて取得済の深度データ入り)
    • ROS/ … ROS 向けサンプル
    • Stereo/ … 複眼カメラ
    • Stereo-Inertial/ … 複眼カメラ&IMU情報
    • euroc_examples.sh … EuRoC を用いたサンプル
    • tum_vi_examples.sh … TUM を用いたサンプル
  • include/
  • lib/ … Examples 配下のバイナリを実行する際はここをライブラリパスに指定する。
    • libORB_SLAM3.so … ORB_SLAM3 本体ライブラリ
  • src/
  • Thirdparty/
    • DBoW2/
    • g2o/
  • Vocabulary/
    • ORBvoc.txt … 138.5 MiB
  • build.sh
  • build_ros.sh
  • Changelog.md
  • CMakeLists.txt
  • Dependencies.md
  • LICENSE
  • README.md

euro_examples.sh

下記は抜粋。全文は Github 参照。

まず、冒頭部分でデータセットのルートディレクトリパスを指定。

#!/bin/bash
pathDatasetEuroc='/Datasets/EuRoC'
#Example, it is necesary to change it by the dataset path

単眼カメラサンプル

#------------------------------------
# Monocular Examples
echo "Launching MH01 with Monocular sensor"
./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml \
"$pathDatasetEuroc"/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt \
dataset-MH01_mono
# 中略
# MultiSession Monocular Examples
echo "Launching Machine Hall with Monocular sensor"
./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml \
"$pathDatasetEuroc"/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt \
"$pathDatasetEuroc"/MH02 ./Monocular/EuRoC_TimeStamps/MH02.txt \
"$pathDatasetEuroc"/MH03 ./Monocular/EuRoC_TimeStamps/MH03.txt \
"$pathDatasetEuroc"/MH04 ./Monocular/EuRoC_TimeStamps/MH04.txt \
"$pathDatasetEuroc"/MH05 ./Monocular/EuRoC_TimeStamps/MH05.txt \
dataset-MH01_to_MH05_mono

Example バイナリのコマンドライン引数は次のように見える。

  • ボキャブラリーファイルパス
  • 設定ファイル
  • サンプルデータセットディレクトリパス
  • タイムスタンプファイルパス
  • プロジェクト名?

最後の「プロジェクト名?」の部分は、任意の文字列を渡しても実行に支障はなかった。解析実行時の一時ディレクトリ名に利用されるとかそういう識別子的な何かか?

その他サンプル

構成は「単眼カメラサンプル」と同じで、複眼カメラ、単眼カメラ&IMU、複眼カメラ&IMU の呼び出しサンプルがある。

ボキャブラリーファイル

100MB 超のファイル。内容はテキストベースの空白・改行区切りの数字の列。特徴量検出用の学習モデルかな。元はTAR ボールなので展開して用いる。(cmake 時に自動展開?)

設定ファイル

このほか、Examples/*/TUM*.yamlExamples/*/KITTI*.yaml などがある。

タイムスタンプファイル

次のようなエポックナノ秒のファイル。この1行が1つの画像ファイルに対応する。

1403636579763555584
1403636579813555456
1403636579863555584
1403636579913555456
1403636579963555584
1403636580013555456
1403636580063555584
1403636580113555456
1403636580163555584
1403636580213555456
...

サンプルデータセット

ソースは kmavvisualinertialdatasets – ASL Datasets にある。

  • MH01 〜 MH04 … 機械室(Machine Hall)内での MAV フライトデータ。
  • V101 〜 V103 … Vocon Room。
  • V201 〜 V203 … 同じ。

数字が小さいほど easy で、大きくなるほど difficult になる。難易度アップ。

platform.jpg
https://projects.asl.ethz.ch/datasets/lib/exe/detail.php?id=kmavvisualinertialdatasets&media=platform.jpg

データセットを作成した MAV は上の写真。用語と座標軸の参考。

EuRoC Example ターゲット

場所は例えば /DataSets/EuRoC/MH01 など。 euroc_examples.sh で指定されているディレクトリ配下だが書き換えればどこでも良い。Monocular なら cam0 のみ、Setereo なら cam0 + cam1 を利用する。

  • mav0/ … MAV 単位でこのディレクトリを作る模様。(データセットはすべて mav0 のみ)
    • cam0/ … カメラ0。左目。
      • data/ … 撮影画像ファイル群。
        • 001.png
        • 002.png
      • data.csv … タイムスタンプ(ナノ秒)とファイル名のリスト(後述)
      • sensor.yaml … センサー情報(後述)
    • cam1/ … カメラ1。右目。配下は cam0 と同様。
    • imu0/ … IMU情報。
      • data.csv
      • sensor.yaml
    • leica0/ … レーザー測距機(ライカNova MS50)の地対空3次元計測データ。配下は imu0 と同様。
    • body.yaml … 「comment: Astec Firefly MAV」とだけ書かれたファイル。MAV 情報。

ORB_SLAM3 はほぼほぼデータセットの配布構造どおりに使っているようだが、タイムスタンプ情報・センサー情報については ORB_SLAM3 側が準備したファイルを用いてる模様。ソースコード要検証。

cam*/data.csv

タイムスタンプ(ナノ秒)とファイル名のリスト。

#timestamp [ns],filename
1403636579763555584,1403636579763555584.png
1403636579813555456,1403636579813555456.png
1403636579863555584,1403636579863555584.png
1403636579913555456,1403636579913555456.png
...

コマンドライン引数を見る限り、ORB_SLAM3 ではデータセット側のこいつではなく Examples/Monocular/EuRoC_TimeStamps/*.txt を使ってる模様。これらのファイル内容は次のように、タイムスタンプしか記載されていない。

1403636579763555584
1403636579813555456
1403636579863555584
1403636579913555456
1403636579963555584
...

同名のファイルを見つけにいく仕様?

cam*/sensor.yaml
# General sensor definitions.
sensor_type: camera
comment: VI-Sensor cam0 (MT9M034)
# Sensor extrinsics wrt. the body-frame.
T_BS:
  cols: 4
  rows: 4
  data: [0.0148655429818, -0.999880929698, 0.00414029679422, -0.0216401454975,
         0.999557249008, 0.0149672133247, 0.025715529948, -0.064676986768,
        -0.0257744366974, 0.00375618835797, 0.999660727178, 0.00981073058949,
         0.0, 0.0, 0.0, 1.0]
# Camera specific definitions.
rate_hz: 20
resolution: [752, 480]
camera_model: pinhole
intrinsics: [458.654, 457.296, 367.215, 248.375] #fu, fv, cu, cv
distortion_model: radial-tangential
distortion_coefficients: [-0.28340811, 0.07395907, 0.00019359, 1.76187114e-05]

こちらもタイムスタンプ同様、ORB_SLAM3 の Example では読み込んでないと思われる。オリジナルのデータセットを作成した当初、こちらばかり修正していて結果が反映されない罠にはまった。

構成ファイルはおおかた、このような感じ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください