Skip to content

Performance improvement for temporal mapping #820

Performance improvement for temporal mapping

Performance improvement for temporal mapping #820

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
jobs:
# build_macos:
# runs-on: macos-latest
# steps:
# - uses: actions/checkout@v3
# - name: brew install
# run: |
# brew update
# brew upgrade
# brew install ccache pkg-config cmake git suite-sparse libomp eigen ffmpeg opencv yaml-cpp glog gflags glew protobuf clang-format
clang-format:
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v3
- uses: DoozyX/[email protected]
with:
source: "."
exclude: "./3rd"
extensions: "h,cc"
clangFormatVersion: 6
style: file
inplace: False
build_without_gui_cv3:
runs-on: ubuntu-latest
defaults:
run:
shell: bash
container:
image: ghcr.io/ymd-stella/stella-cv/stella_vslam:cv-3.x
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: cmake and make
run: |
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_TESTS=ON -DUSE_SSE_ORB=ON ..
make -j $(($(nproc) / 2))
- name: unit test
run: |
cd build
export BOW_VOCAB=/datasets/orb_vocab/orb_vocab.fbow
ctest -V
build:
runs-on: ubuntu-latest
defaults:
run:
shell: bash
container:
image: ghcr.io/ymd-stella/stella-cv/stella_vslam:cv-4.x
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Create artifact directory
run: |
mkdir -p artifact
- name: Save cpuinfo
run: |
cp /proc/cpuinfo artifact
- name: cmake and make library
run: |
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_TESTS=ON -DUSE_SSE_ORB=ON -DUSE_GTSAM=ON ..
make -j $(($(nproc) / 2))
make install
- uses: actions/checkout@v3
with:
repository: stella-cv/pangolin_viewer
path: pangolin_viewer
submodules: recursive
- name: cmake and make pangolin_viewer
run: |
mkdir -p pangolin_viewer/build
cd pangolin_viewer/build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
make -j $(($(nproc) / 2))
make install
- uses: actions/checkout@v3
with:
repository: stella-cv/stella_vslam_examples
path: stella_vslam_examples
submodules: recursive
- name: cmake and make examples
run: |
mkdir -p stella_vslam_examples/build
cd stella_vslam_examples/build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_STACK_TRACE_LOGGER=ON ..
make -j $(($(nproc) / 2))
- name: unit test
run: |
cd build
export BOW_VOCAB=/datasets/orb_vocab/orb_vocab.fbow
ctest -V
- name: Convert groundtruth to TUM format
run: |
python3 scripts/dataset_tools/compute_euroc_cam_tf.py > tf.json
evo_traj euroc --transform_right tf.json /datasets/EuRoC/MH_01/state_groundtruth_estimate0/data.csv --save_as_tum
mv data.tum MH_01.tum
evo_traj euroc --transform_right tf.json /datasets/EuRoC/MH_04/state_groundtruth_estimate0/data.csv --save_as_tum
mv data.tum MH_04.tum
- name: make config for gtsam backend
run: |
sed -e 's/backend: "g2o"/backend: "gtsam"/g' example/euroc/EuRoC_mono.yaml > EuRoC_mono_gtsam.yaml
sed -e 's/backend: "g2o"/backend: "gtsam"/g' example/euroc/EuRoC_stereo.yaml > EuRoC_stereo_gtsam.yaml
- name: make config for temporal mapping
run: |
sed -e 's/erase_temporal_keyframes: false/erase_temporal_keyframes: true/g' -e 's/enable_temporal_keyframe_only_tracking: false/enable_temporal_keyframe_only_tracking: true/g' example/euroc/EuRoC_mono.yaml > EuRoC_mono_temporal_mapping.yaml
- name: make config for sqlite3 map format
run: |
sed -e 's/map_format: "msgpack"/map_format: "sqlite3"/g' example/euroc/EuRoC_mono.yaml > EuRoC_mono_sqlite3.yaml
- name: SLAM test (monocular) with EuRoC MAV dataset (MH_01)
run: |
cd build
../stella_vslam_examples/build/run_euroc_slam -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_01 -c ../example/euroc/EuRoC_mono.yaml --frame-skip 2 --no-sleep --log-level=debug --eval-log-dir . --map-db-out MH_01_mono.msg --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_MH_01_mono_slam.txt
mv track_times.txt ../artifact/track_times_MH_01_mono_slam.txt
../stella_vslam_examples/build/run_euroc_slam -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_01 -c ../EuRoC_mono_gtsam.yaml --frame-skip 2 --no-sleep --log-level=debug --eval-log-dir . --map-db-out MH_01_mono_gtsam.msg --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_MH_01_mono_gtsam_slam.txt
mv track_times.txt ../artifact/track_times_MH_01_mono_gtsam_slam.txt
../stella_vslam_examples/build/run_euroc_slam -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_01 -c ../EuRoC_mono_sqlite3.yaml --frame-skip 2 --no-sleep --log-level=debug --map-db-out MH_01_mono_sqlite3.db --viewer=none
- name: SLAM test (stereo) with EuRoC MAV dataset (MH_01)
run: |
cd build
../stella_vslam_examples/build/run_euroc_slam -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_01 -c ../example/euroc/EuRoC_stereo.yaml --frame-skip 2 --no-sleep --log-level=debug --eval-log-dir . --map-db-out MH_01_stereo.msg --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_MH_01_stereo_slam.txt
mv track_times.txt ../artifact/track_times_MH_01_stereo_slam.txt
../stella_vslam_examples/build/run_euroc_slam -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_01 -c ../EuRoC_stereo_gtsam.yaml --frame-skip 2 --no-sleep --log-level=debug --eval-log-dir . --map-db-out MH_01_stereo_gtsam.msg --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_MH_01_stereo_gtsam_slam.txt
mv track_times.txt ../artifact/track_times_MH_01_stereo_gtsam_slam.txt
- name: Localization test (monocular) with EuRoC MAV dataset (MH_01)
run: |
cd build
../stella_vslam_examples/build/run_euroc_slam --disable-mapping -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_01 -c ../example/euroc/EuRoC_mono.yaml --frame-skip 2 --no-sleep --log-level=debug --eval-log-dir . --map-db-in MH_01_mono.msg --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_MH_01_mono_localization.txt
mv track_times.txt ../artifact/track_times_MH_01_mono_localization.txt
../stella_vslam_examples/build/run_euroc_slam --temporal-mapping -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_01 -c ../EuRoC_mono_temporal_mapping.yaml --frame-skip 2 --no-sleep --log-level=debug --eval-log-dir . --map-db-in MH_01_mono.msg --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_MH_01_mono_localization_temporal_mapping.txt
mv track_times.txt ../artifact/track_times_MH_01_mono_localization_temporal_mapping.txt
../stella_vslam_examples/build/run_euroc_slam --disable-mapping -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_01 -c ../EuRoC_mono_sqlite3.yaml --frame-skip 2 --no-sleep --log-level=debug --map-db-in MH_01_mono_sqlite3.db --viewer=none
- name: SLAM test (monocular) with EuRoC MAV dataset (MH_04)
run: |
cd build
../stella_vslam_examples/build/run_euroc_slam -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_04 -c ../example/euroc/EuRoC_mono.yaml --frame-skip 2 --no-sleep --log-level=debug --eval-log-dir . --map-db-out MH_04_mono.msg --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_MH_04_mono_slam.txt
mv track_times.txt ../artifact/track_times_MH_04_mono_slam.txt
- name: SLAM test (stereo) with EuRoC MAV dataset (MH_04)
run: |
cd build
../stella_vslam_examples/build/run_euroc_slam -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_04 -c ../example/euroc/EuRoC_stereo.yaml --frame-skip 2 --no-sleep --log-level=debug --eval-log-dir . --map-db-out MH_04_stereo.msg --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_MH_04_stereo_slam.txt
mv track_times.txt ../artifact/track_times_MH_04_stereo_slam.txt
- name: Localization test (monocular) with EuRoC MAV dataset (MH_04)
run: |
cd build
../stella_vslam_examples/build/run_euroc_slam --disable-mapping -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_04 -c ../example/euroc/EuRoC_mono.yaml --frame-skip 2 --no-sleep --log-level=debug --eval-log-dir . --map-db-in MH_04_mono.msg --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_MH_04_mono_localization.txt
mv track_times.txt ../artifact/track_times_MH_04_mono_localization.txt
../stella_vslam_examples/build/run_euroc_slam --temporal-mapping -v /datasets/orb_vocab/orb_vocab.fbow -d /datasets/EuRoC/MH_04 -c ../EuRoC_mono_temporal_mapping.yaml --frame-skip 2 --no-sleep --log-level=debug --eval-log-dir . --map-db-in MH_04_mono.msg --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_MH_04_mono_localization_temporal_mapping.txt
mv track_times.txt ../artifact/track_times_MH_04_mono_localization_temporal_mapping.txt
- name: download openvslam_test_dataset
run: |
curl -sL "https://github.com/stella-cv/openvslam_test_dataset/raw/main/openvslam_test_dataset.zip" -o openvslam_test_dataset.zip
unzip openvslam_test_dataset.zip
rm openvslam_test_dataset.zip
- name: make config for openvslam_test_dataset
run: |
sed -e 's/fps: .*/fps: 24.0/g' example/aist/equirectangular.yaml > equirectangular.yaml
- name: make config for gtsam backend
run: |
sed -e 's/backend: "g2o"/backend: "gtsam"/g' equirectangular.yaml > equirectangular_gtsam.yaml
- name: SLAM test with equirectangular dataset (1)
run: |
cd build
../stella_vslam_examples/build/run_video_slam -v /datasets/orb_vocab/orb_vocab.fbow -m ../openvslam_test_dataset/1/equirectangular/video.mp4 -c ../equirectangular.yaml --no-sleep --log-level=debug --eval-log-dir . --map-db-out equirectangular_map.msg -t 0.0 --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_equirectangular_1.txt
mv track_times.txt ../artifact/track_times_equirectangular_1.txt
../stella_vslam_examples/build/run_video_slam -v /datasets/orb_vocab/orb_vocab.fbow -m ../openvslam_test_dataset/1/equirectangular/video.mp4 -c ../equirectangular_gtsam.yaml --no-sleep --log-level=debug --eval-log-dir . --map-db-out equirectangular_gtsam_map.msg -t 0.0 --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_equirectangular_gtsam_1.txt
mv track_times.txt ../artifact/track_times_equirectangular_gtsam_1.txt
- name: SLAM test with equirectangular dataset (2)
run: |
cd build
../stella_vslam_examples/build/run_video_slam -v /datasets/orb_vocab/orb_vocab.fbow -m ../openvslam_test_dataset/2/equirectangular/video.mp4 -c ../equirectangular.yaml --no-sleep --log-level=debug --eval-log-dir . --map-db-out equirectangular_map.msg -t 0.0 --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_equirectangular_2.txt
mv track_times.txt ../artifact/track_times_equirectangular_2.txt
- name: SLAM test with equirectangular dataset (3)
run: |
cd build
../stella_vslam_examples/build/run_video_slam -v /datasets/orb_vocab/orb_vocab.fbow -m ../openvslam_test_dataset/3/equirectangular/video.mp4 -c ../equirectangular.yaml --no-sleep --log-level=debug --eval-log-dir . --map-db-out equirectangular_map.msg -t 0.0 --viewer=none
mv frame_trajectory.txt ../artifact/frame_trajectory_equirectangular_3.txt
mv track_times.txt ../artifact/track_times_equirectangular_3.txt
- name: Evaluation
run: |
cp scripts/workflows/* .
(
echo '<details>'
echo '<summary>Track time and Relative pose error</summary>'
echo
echo '|dataset|track_time<br>(mean)|track_time<br>(median)|track_time<br>(max)|RPE<br>(mean)|RPE<br>(median)|RPE<br>(max)|RPE<br>(rmse)|RPE<br>(sse)|RPE<br>(std)|'
echo '|---|---|---|---|---|---|---|---|---|---|'
echo -n '| EuRoC MH_01 (SLAM, perspective, mono)'
bash track_time_print_row.bash artifact/track_times_MH_01_mono_slam.txt
bash evo_rpe_print_row.bash tum MH_01.tum artifact/frame_trajectory_MH_01_mono_slam.txt -as
echo '|'
echo -n '| EuRoC MH_01 (SLAM, perspective, mono, gtsam)'
bash track_time_print_row.bash artifact/track_times_MH_01_mono_gtsam_slam.txt
bash evo_rpe_print_row.bash tum MH_01.tum artifact/frame_trajectory_MH_01_mono_gtsam_slam.txt -as
echo '|'
echo -n '| EuRoC MH_01 (SLAM, perspective, stereo)'
bash track_time_print_row.bash artifact/track_times_MH_01_stereo_slam.txt
bash evo_rpe_print_row.bash tum MH_01.tum artifact/frame_trajectory_MH_01_stereo_slam.txt -a
echo '|'
echo -n '| EuRoC MH_01 (SLAM, perspective, stereo, gtsam)'
bash track_time_print_row.bash artifact/track_times_MH_01_stereo_gtsam_slam.txt
bash evo_rpe_print_row.bash tum MH_01.tum artifact/frame_trajectory_MH_01_stereo_gtsam_slam.txt -a
echo '|'
echo -n '| EuRoC MH_01 (Localization, perspective, mono)'
bash track_time_print_row.bash artifact/track_times_MH_01_mono_localization.txt
bash evo_rpe_print_row.bash tum MH_01.tum artifact/frame_trajectory_MH_01_mono_localization.txt -as
echo '|'
echo -n '| EuRoC MH_01 (Localization, perspective, mono, temporal mapping)'
bash track_time_print_row.bash artifact/track_times_MH_01_mono_localization_temporal_mapping.txt
bash evo_rpe_print_row.bash tum MH_01.tum artifact/frame_trajectory_MH_01_mono_localization_temporal_mapping.txt -as
echo '|'
echo -n '| EuRoC MH_04 (SLAM, perspective, mono)'
bash track_time_print_row.bash artifact/track_times_MH_04_mono_slam.txt
bash evo_rpe_print_row.bash tum MH_04.tum artifact/frame_trajectory_MH_04_mono_slam.txt -as
echo '|'
echo -n '| EuRoC MH_04 (SLAM, perspective, stereo)'
bash track_time_print_row.bash artifact/track_times_MH_04_stereo_slam.txt
bash evo_rpe_print_row.bash tum MH_04.tum artifact/frame_trajectory_MH_04_stereo_slam.txt -a
echo '|'
echo -n '| EuRoC MH_04 (Localization, perspective, mono)'
bash track_time_print_row.bash artifact/track_times_MH_04_mono_localization.txt
bash evo_rpe_print_row.bash tum MH_04.tum artifact/frame_trajectory_MH_04_mono_localization.txt -as
echo '|'
echo -n '| EuRoC MH_04 (Localization, perspective, mono, temporal mapping)'
bash track_time_print_row.bash artifact/track_times_MH_04_mono_localization_temporal_mapping.txt
bash evo_rpe_print_row.bash tum MH_04.tum artifact/frame_trajectory_MH_04_mono_localization_temporal_mapping.txt -as
echo '|'
echo -n '| openvslam_test_dataset 1 (SLAM, equirectangular, mono)'
bash track_time_print_row.bash artifact/track_times_equirectangular_1.txt
bash evo_rpe_print_row.bash tum openvslam_test_dataset/1/gt.tum artifact/frame_trajectory_equirectangular_1.txt -as
echo '|'
echo -n '| openvslam_test_dataset 1 (SLAM, equirectangular, mono, gtsam)'
bash track_time_print_row.bash artifact/track_times_equirectangular_gtsam_1.txt
bash evo_rpe_print_row.bash tum openvslam_test_dataset/1/gt.tum artifact/frame_trajectory_equirectangular_gtsam_1.txt -as
echo '|'
echo -n '| openvslam_test_dataset 2 (SLAM, equirectangular, mono)'
bash track_time_print_row.bash artifact/track_times_equirectangular_2.txt
bash evo_rpe_print_row.bash tum openvslam_test_dataset/2/gt.tum artifact/frame_trajectory_equirectangular_2.txt -as
echo '|'
echo -n '| openvslam_test_dataset 3 (SLAM, equirectangular, mono)'
bash track_time_print_row.bash artifact/track_times_equirectangular_3.txt
bash evo_rpe_print_row.bash tum openvslam_test_dataset/3/gt.tum artifact/frame_trajectory_equirectangular_3.txt -as
echo '|'
echo '</details>'
) >> artifact/result.md
- uses: actions/upload-artifact@v3
with:
name: artifact
path: artifact
build_tutorial:
runs-on: ubuntu-latest
defaults:
run:
shell: bash
container:
image: ghcr.io/ymd-stella/stella-cv/stella_vslam:cv-4.x
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: cmake and make library
run: |
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTS=ON -DUSE_OPENMP=OFF ..
make -j $(($(nproc) / 2))
make install
- uses: actions/checkout@v3
with:
repository: stella-cv/stella_vslam_examples
path: stella_vslam_examples
submodules: recursive
- name: cmake and make examples
run: |
mkdir -p stella_vslam_examples/build
cd stella_vslam_examples/build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_STACK_TRACE_LOGGER=ON ..
make -j $(($(nproc) / 2))
- name: download a dataset
run: |
cd build
gdown "https://drive.google.com/uc?id=1TXjREzkht3iRz__qVx4oYRW1GXsv37ct" -q
unzip video_for_ci_1.zip
rm video_for_ci_1.zip
- name: mapping test with the tutorial
run: |
cd build
../stella_vslam_examples/build/run_video_slam -v /datasets/orb_vocab/orb_vocab.fbow -m ./video_for_ci_1/video.mp4 -c ../example/aist/equirectangular.yaml --frame-skip 3 --no-sleep --log-level=debug --eval-log-dir . --map-db-out map.msg --viewer=none
- name: localization test with the tutorial
run: |
cd build
../stella_vslam_examples/build/run_video_slam --disable-mapping -v /datasets/orb_vocab/orb_vocab.fbow -m ./video_for_ci_1/video.mp4 -c ../example/aist/equirectangular.yaml --frame-skip 3 --no-sleep --log-level=debug --eval-log-dir . --map-db-in map.msg --viewer=none
rosdep_humble:
runs-on: ubuntu-latest
defaults:
run:
shell: bash
container:
image: ghcr.io/ymd-stella/stella-cv/ros:humble-ros-base
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: build ros2 packages
run: |
mkdir -p /ros_ws/src
cp -r . /ros_ws/src/stella_vslam
cd /ros_ws/
rosdep update
apt update
rosdep install -y -i --from-paths src
export MAKEFLAGS="-j $(($(nproc) / 2))"
(source /opt/ros/${ROS_DISTRO}/setup.bash && colcon build --parallel-workers 1)