Skip to content

Repository files navigation

GaussianFlow SLAM

Dong-Uk Seo · Jinwoo Jeon · Eungchang Mason Lee · Hyun Myung

IEEE RA-L 2026

TUM fr1/desk EuRoC MH05

Given a monocular video sequence, GaussianFlow SLAM tracks the camera trajectory and reconstructs a photorealistic 3DGS map by leveraging optical flow as geometric supervision, without any depth measurements.

Getting Started

Installation

git clone --recursive https://github.com/url-kaist/gaussianflow-slam.git
cd gaussianflow-slam

System packages:

sudo apt install build-essential libeigen3-dev libopencv-dev python3-tk \
    libgl1 libglib2.0-0 libsm6 libxext6 libxrender1

Python environment:

python3 -m venv .venv
source .venv/bin/activate

pip install -r requirements.txt

Adjust the torch, torchvision, torchaudio versions and the --extra-index-url in requirements.txt to match your CUDA version.

CUDA extensions (built locally from thirdparty/ and src/):

pip install thirdparty/lietorch
pip install thirdparty/pytorch_scatter
pip install thirdparty/simple-knn
pip install -e thirdparty/diff-gaussian-rasterization \
    --use-pep517 --no-build-isolation --force-reinstall
pip install -e .

Pre-trained weights:

./tools/download_model.sh

Reference environment: Ubuntu 20.04, Python 3.10, CUDA 11.8, PyTorch 2.1.2+cu118.

Downloading Datasets

EuRoC MAV

Download the ASL-format sequences from the EuRoC MAV page and convert the ground truth to TUM format (gt_converted/<seq>_gt.txt).

TUM-RGBD

./tools/download_tum.sh

Run

SLAM mode

./tools/run_gaussianflow_slam.sh V101          # GUI
./tools/run_gaussianflow_slam_nogui.sh V101    # headless

Mapping-only mode

./tools/run_gaussianflow_mapping_only.sh V101          # GUI
./tools/run_gaussianflow_mapping_only_nogui.sh V101    # headless

Sequences: V101, MH01, fr1/desk, fr2, fr3. Options and environment variables: tools/run_gaussianflow_modes.sh --help.

Dataset scripts

Edit DATA_PATH at the top of each script to point to your local dataset, then:

./tools/run_euroc_gsflow.sh     # EuRoC
./tools/run_tum_gsflow.sh       # TUM-RGBD

Extra demo.py flags can be appended to the script call, e.g.:

./tools/run_euroc_gsflow.sh --t1=600 --stride=2

Custom data

You only need (1) a folder of RGB frames named so they sort in capture order and (2) a one-line calibration file fx fy cx cy [k1 k2 p1 p2 [k3 [k4 k5 k6]]]. Then:

python3 demo.py --imagedir=<path/to/rgb> --calib=<calib.txt> \
    --gsconfig_path=configs/mono_slam.yaml --upsample --disable_vis \
    --output=results/<run>/

Evaluation

Passing --gt_path makes demo.py report ATE and write traj_full.txt / traj_kf.txt to the output directory. To recompute ATE from a finished run:

python3 tools/compute_ate.py results/<run>/traj_full.txt <gt.txt>

Acknowledgement

This work builds on many open-source projects. We extend our gratitude to the authors:

License

GaussianFlow SLAM is released under the GPL-3.0 License. For a list of code dependencies which are not property of the authors of GaussianFlow SLAM, please check Dependencies.md.

Citation

If you found this work useful in your own research, please consider citing:

@article{seo2026gaussianflow,
  title={GaussianFlow SLAM: Monocular Gaussian Splatting SLAM Guided by GaussianFlow},
  author={Seo, Dong-Uk and Jeon, Jinwoo and Lee, Eungchang Mason and Myung, Hyun},
  journal={IEEE Robotics and Automation Letters},
  year={2026},
  publisher={IEEE}
}

About

[RA-L 26] GaussianFlow SLAM: Monocular Gaussian Splatting SLAM Guided by GaussianFlow

Resources

Stars

17 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages