Skip to content

SenseRoboticsLab/CURL-SLAM

Repository files navigation

CURL-SLAM

CURL-SLAM: Continuous and Compact LiDAR Mapping (T-RO 2025)

CURL-SLAM is a real-time, CPU-based LiDAR mapping system that utilizes spherical harmonics to generate an ultracompact, globally consistent, and continuously reconstructible 3D map.

Paper: https://ieeexplore.ieee.org/document/11078155/

Continuous Reconstruction


Table of Contents


System Requirements

Host (recommended)

GPU (optional)


Quick Start (Docker)

1) Clone

git clone https://github.com/SenseRoboticsLab/CURL-SLAM.git
cd CURL-SLAM

2) X11 (GUI) setup on the host (RViz, etc.)

xhost +si:localuser:root

If echo $DISPLAY changes, re-run the same docker compose -f ... down and up command you used to start the container.


Docker (CPU/GPU)

CPU/GPU (replace cpu with gpu if needed):

sudo -E HOME=$HOME docker compose -f docker/docker-compose.cpu.yaml up --build -d

# Terminal 1
sudo docker compose -f docker/docker-compose.cpu.yaml exec curl_slam /bin/bash

# Terminal 2
sudo docker compose -f docker/docker-compose.cpu.yaml exec curl_slam /bin/bash

If you run Docker without sudo, drop sudo -E HOME=$HOME. The HOME=$HOME part keeps the correct host .Xauthority when using sudo.

Note: the Dockerfiles build from a fresh repository clone inside the image and check out the branch specified in the Dockerfile, rather than using the current local workspace contents directly.

Optional data mount (edit docker/.env first):

HOST_DATA_DIR=/path/on/host  # optional

--env-file is only needed for up/build. exec does not require it.

sudo -E HOME=$HOME docker compose --env-file docker/.env \
  -f docker/docker-compose.cpu.yaml -f docker/docker-compose.cpu.data.yaml up --build -d

# Terminal 1
sudo docker compose -f docker/docker-compose.cpu.yaml exec curl_slam /bin/bash

# Terminal 2
sudo docker compose -f docker/docker-compose.cpu.yaml exec curl_slam /bin/bash

Stop (Run this after you finish the demo to stop and remove the container.):

sudo docker compose -f docker/docker-compose.cpu.yaml down

Run Demos

Mapping Demo

Terminal 1 (mapping):

roslaunch curl_slam curl_slam.launch

Terminal 2 (play bag):

rosbag play <PATH_TO_BAG>

After mapping finishes, load the saved map and adjust resolution:

roslaunch curl_slam curl_map_load.launch

rqt_reconfigure parameters

GUI for adjusting reconstruction parameters in real time.

Dynamic parameters (rqt_reconfigure):

  • w: patch image resolution; higher = denser.
  • SH_degree: spherical harmonics degree; higher = more detail.
  • IQR_factor: IQR-based cutoff used when is_fix_length_threshold is false.
  • length_thres: fixed continuity threshold; gaps larger than this are treated as holes and removed when is_fix_length_threshold is true.
  • open3d_speed: visualization rotation speed; display only.
  • is_fix_length_threshold: toggle fixed length_thres vs. IQR thresholding.
  • is_save_pcd: save reconstructed map point cloud to results_dir/final_map.
  • is_save_curlmap: save curl map to results_dir/final_map.

Datasets

Sample Newer College rosbags (multi-cam): https://ori-drs.github.io/newer-college-dataset/multi-cam/

Quick download with gdown (inside container):

gdown --id 1wRnRSni9bcBRauJEJ80sxHIaJaonrC3C
gdown --id 1ORkYwGpQNvD48WRXICDDecbweg8MxYA8

These are rosbags, so you can play them directly:

ls *.bag
rosbag play ./<bag_file>.bag

Configuration

Primary YAML configs live in:

  • config/config.yaml
  • config/config_small.yaml
  • config/config_middle.yaml
  • config/config_challenge.yaml
  • config/config_light.yaml

Results

Results

Citation

@ARTICLE{11078155,
  author = {Zhang, Kaicheng and Xu, Shida and Ding, Yining and Kong, Xianwen and Wang, Sen},
  journal = {IEEE Transactions on Robotics},
  title = {CURL-SLAM: Continuous and Compact LiDAR Mapping},
  year = {2025},
  volume = {41},
  pages = {4538-4556},
  doi = {10.1109/TRO.2025.3588442}
}

License

This project is licensed under GPL-3.0. See LICENSE. Third-party notices are listed in THIRD_PARTY_NOTICES.md.


Acknowledgements

This project builds on Patchwork++, PCL, Ceres Solver, Open3D, Sophus, CGAL, and other open-source components. See THIRD_PARTY_NOTICES.md for bundled third-party code and licenses.


Appendix: Common compose commands

# replace cpu with gpu if needed
sudo -E HOME=$HOME docker compose -f docker/docker-compose.cpu.yaml up --build -d
sudo -E HOME=$HOME docker compose -f docker/docker-compose.cpu.yaml exec curl_slam /bin/bash
sudo docker compose -f docker/docker-compose.cpu.yaml logs -f
sudo docker compose -f docker/docker-compose.cpu.yaml ps
sudo docker compose -f docker/docker-compose.cpu.yaml stop
sudo docker compose -f docker/docker-compose.cpu.yaml start
sudo docker compose -f docker/docker-compose.cpu.yaml down

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors