Yuetao Li1,2* · Zijia Kuang2* · Ting Li2 · Qun Hao1 · Zike Yan2† · Guyue Zhou2 · Shaohui Zhang1†
1Beijing Institute of Technology, 2AIR, Tsinghua University
ActiveSplat enables the agent to explore the environment autonomously to build a 3D map on the fly. The integration of a Gaussian map and a Voronoi graph assures efficient and complete exploration with high-fidelity reconstruction results.
- [16 June 2025] 🎉 Our paper ActiveSplat has been officially published by IEEE RA-L 2025!
- [27 May 2025] Our paper ActiveSplat has been accepted to IEEE RA-L 2025!
- [25 Feb 2025] 🚀 The source code of ActiveSplat is now publicly available!
Our environment has been tested on Ubuntu 20.04 with CUDA 11.8.
Clone the repository and create the conda environment:
mkdir -p ~/Workspace/activesplat_ws/src
git clone git@github.com:Li-Yuetao/ActiveSplat.git ~/Workspace/activesplat_ws/src/ActiveSplat && cd ~/Workspace/activesplat_ws/src/ActiveSplat
git submodule update --init --progress
conda env create -f environment.yaml
conda activate ActiveSplatInstall pytorch by following the instructions. For torch 2.0.1 with CUDA version 11.8:
pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txtInstall diff-gaussian-rasterization (Note: You should be on CUDA version: 11.8)
cd ~/Workspace/activesplat_ws/src/ActiveSplat/submodules/diff-gaussian-rasterization
python setup.py install
pip install .Habitat-lab and habitat-sim need to be installed for simulation. We use v0.2.3 (git checkout tags/v0.2.3) for habitat-sim & habitat-lab and install the habitat-sim with the flag --with-cuda.
cd ~/Workspace/activesplat_ws/src/ActiveSplat/submodules/habitat/habitat-lab && git checkout tags/v0.2.3
pip install -e habitat-lab
pip install -e habitat-baselines
cd ~/Workspace/activesplat_ws/src/ActiveSplat/submodules/habitat/habitat-sim && git checkout tags/v0.2.3
# if you have bad network, you can use the following command to speed up
sed -i 's/https:\/\/github.com\//git@github.com:/g' .gitmodules # use `sed -i 's/git@github.com:/https:\/\/github.com\//g' .gitmodules` to restore
git submodule update --init --progress --recursive
python setup.py install --with-cudacd ~/Workspace/activesplat_ws/ && catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
echo "source ~/Workspace/activesplat_ws/devel/setup.bash" >> ~/.bashrcCopy the user_config.json file from the config/.templates folder to the config folder, and set the paths for the Gibson and MP3D datasets in user_config.json.
[Datasets folder structure (click to expand)]
datasets_folder
├── gibson_habitat
│ ├── gibson
│ │ ├── Adrian.glb
│ │ └── ...
│ └── ...
├── matterport
│ ├── v1
│ │ ├── scans
│ │ └── tasks
│ | ├── 1LXtFkjw3qL
│ | | ├── 1LXtFkjw3qL.glb
│ | | └── ...
│ | └── ...
│ ├── v2
| └── ...
└── ...
# If you want to save runtime data, you can add the `save_runtime_data:=1` flag
# e.g. Gibson-Denmark
roslaunch activesplat habitat.launch config:=config/datasets/gibson.json scene_id:=Denmark
# e.g. MP3D-pLe4wQe7qrG
roslaunch activesplat habitat.launch config:=config/datasets/mp3d.json scene_id:=pLe4wQe7qrG[Result folder structure (click to expand)]
2025-04-13_22-34-21_gibson_Eudora
├── gaussians_data
│ ├── depth
│ ├── keyframes
│ ├── rgb
│ ├── config.py
│ ├── params.npz
│ └── transforms.json
├── render_rgbd # save_runtime_data:=1
├── runtime_data # save_runtime_data:=1
├── subregion_map # save_runtime_data:=1
├── subregion_map # save_runtime_data:=1
├── topdown_map # save_runtime_data:=1
├── actions.txt
├── config.json
├── gt_mesh.json
├── topdown_free_map.png
└── visited_map.pngHere the system will run active mapping on 13 scenes (gibson_small.txt, gibson_big.txt, mp3d_small.txt, mp3d_big.txt) in the Gibson & MP3D datasets. The results will be saved in the results folder.
bash scripts/batch/run_batch_scenes.shEvaluate actions, this will read the actions from the actions.txt file in the result folder and evaluate them to generate the actions_error.txt file.
result_name="2025-02-25_11-43-48_gibson_Denmark"
python scripts/judges/eval_actions.py --save_path results/$result_name/actions_error.txt --config results/$result_name/config.json --user_config config/user_config.json --actions results/$result_name/actions.txt --gpu_id 0# If you want to force re-evaluation, you can add the `--force` flag
python scripts/batch/eval_results_actions.py --results_dir ./results --gpu_id 0Our implementation is built upon ANM-S. We would also like to thank the authors of the following open-source repositories:
If you find these works helpful, please consider citing them as well.
If you find our code/work useful in your research, please consider citing the following:
@article{li2025activesplat,
title={Activesplat: High-fidelity scene reconstruction through active gaussian splatting},
author={Li, Yuetao and Kuang, Zijia and Li, Ting and Hao, Qun and Yan, Zike and Zhou, Guyue and Zhang, Shaohui},
journal={IEEE Robotics and Automation Letters},
year={2025},
publisher={IEEE}
}