Master thesis project that aims to evaluate and compare VI-SLAM methods for UAV-imagery at Maxar Technologies. This repository contains all the necessary steps to install and build ORB-SLAM3 and LDSO for usage with either TUM-VI/-MONO, KITTI and EuroC as well as your own drone data. The drone used for this thesis was a DJI Mavic 2 Enterprise Dual. If a different drone is used, be sure to update the respective camera parameters in DJI.yaml (for ORB-SLAM3) and the camera.txt (for LDSO).
git clone https://github.com/FredrikErikJohansson/VI-SLAM-UAV.git
cd VI-SLAM-UAV
git submodule update --init
sudo apt install libsuitesparse-dev \
libeigen3-dev \
libboost-all-dev \
libopencv-dev \
libgl1-mesa-dev \
libglew-dev \
cmake \
pkg-config \
zlib1g-dev \
libssl-dev \
libpython2.7-dev
chmod +x build.sh
./build.sh
LSDO provides examples for TUM-Mono, Kitti and EuRoC but the datasets can easily be extended in the examples
folder.
To run LDSO on your own footage you have to run the procLDSO.sh script from ./utils using
cd utils
./procLDSO.sh /absolute/path/to/dataset nameofmp4
The dataset folder should contain a .MP4 file and a sidecar .SRT file containing the timestamps and the exposure time. This script will extract all frames from the video, zip them and put them in the /images folder and also create a times.txt file containing image names, timestamps and exposure time.
Run the footage with LDSO using run_dso_tum_mono
with desired DSO options.
./bin/run_dso_tum_mono \
preset=0 \
mode=1 \
files=XXXXX/TUMmono/sequences/sequence_34/images.zip \
calib=XXXXX/TUMmono/sequences/sequence_34/camera.txt
To run AGZ some manual work is needed. The dataset is recorded on a GoPro Hero 4 but lacks a pcalib.txt file containing the calibrated inverse response function. This is generated by installing and following the instructions given in this repository using the given calibration images in ./MAV Images Calib/. In order to run the calibration, a camera.txt file, a times.txt (similar to the one described in the DJI section) and a zipped folder of all frames following the naming convention 00001.jpg - xxxxx.jpg. After the calibration, AGZ can be run using the same command from the below TUM-Mono section (without the vignette image).
To run LDSO on TUM-Mono dataset sequence 34, execute:
./bin/run_dso_tum_mono \
preset=0 \
files=XXXXX/TUMmono/sequences/sequence_34/images.zip \
vignette=XXXXX/TUMmono/sequences/sequence_34/vignette.png \
calib=XXXXX/TUMmono/sequences/sequence_34/camera.txt \
gamma=XXXXX/TUMmono/sequences/sequence_34/pcalib.txt
To run LDSO on Kitti dataset sequence 00, execute:
./bin/run_dso_kitti \
preset=0 \
files=XXXXX/Kitti/odometry/dataset/sequences/00/ \
calib=./examples/Kitti/Kitti00-02.txt
To run LDSO on EuRoC dataset sequence MH_01_easy, execute:
./bin/run_dso_euroc \
preset=0 \
files=XXXX/EuRoC/MH_01_easy/mav0/cam0/
ORB-SLAM3 provides examples for the EuRoC and TUM-VI and we have extended it to include AGZ and our own drone footage.
To run ORB-SLAM3 on your own footage you have to run the procORB
script from ./utils using
cd utils
./procORB.sh /absolute/path/to/dataset nameofmp4
The dataset folder should contain a .MP4 file and a sidecar .SRT file containing the timestamps. This script will extract all frames from the video, put them in the /images folder and also create a nameofmp4.txt file containing timestamps and image names separated by a comma.
Open the script DJI_examples.sh
and change pathDatasetDJI
to point to the directory where the dataset has been uncompressed. Change which sequences to process (default is set to all). Execute the following script:
./DJI_examples.sh
Open the script AGZ_examples.sh
and change pathDatasetAGZ
to point to the directory where the dataset has been uncompressed. Change which sequences to process (default is set to all). Execute the following script:
./AGZ_examples.sh
Open the script euroc_examples.sh
and change pathDatasetEuroc
to point to the directory where the dataset has been uncompressed. Change which sequences to process (default is set to all). Execute the following script:
./euroc_examples.sh
Execute the following script to process sequences and compute the RMS ATE:
./euroc_eval_examples.sh
Open the script tum_vi_examples.sh
and change pathDatasetTUM_VI
to point to the directory where the dataset has been uncompressed. Change which sequences to process (default is set to all). Execute the following script:
./tum_vi_examples
Execute the following script to process sequences and compute the RMS ATE:
./tum_vi_eval_examples