自分用の覚え書きです。
実行ファイル(ソースコード)のディレクトリ
成果物を含まないソースコードのみの場合は、公式の 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 を用いたサンプル
- Monocular/ … 単眼カメラ
- 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/Monocular/EuRoC.yaml
- Examples/Monocular-Inertial/EuRoC.yaml
- Examples/Stereo/EuRoC.yaml
- Examples/Stereo-Inertial/EuRoC.yaml
このほか、Examples/*/TUM*.yaml
や Examples/*/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 になる。難易度アップ。
データセットを作成した 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 … センサー情報(後述)
- data/ … 撮影画像ファイル群。
- cam1/ … カメラ1。右目。配下は cam0 と同様。
- imu0/ … IMU情報。
- data.csv
- sensor.yaml
- leica0/ … レーザー測距機(ライカNova MS50)の地対空3次元計測データ。配下は imu0 と同様。
- body.yaml … 「comment: Astec Firefly MAV」とだけ書かれたファイル。MAV 情報。
- cam0/ … カメラ0。左目。
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 では読み込んでないと思われる。オリジナルのデータセットを作成した当初、こちらばかり修正していて結果が反映されない罠にはまった。
構成ファイルはおおかた、このような感じ。