GSAT: Geometric Traversability Estimation using Self-supervised Learning with Anomaly Detection for Diverse Terrains
[IEEE ICRA 26] This repository is the official code for GSAT: Geometric Traversability Estimation using Self-supervised Learning with Anomaly Detection for Diverse Terrains.
Dongjin Cho, Miryeong Park, Juhui Lee, Geonmo Yang, Younggun Cho
Spatial AI and Robotics Lab (SPARO), Inha University
GSAT learns robot-specific traversability from LiDAR point clouds — without human supervision. It builds a positive hypersphere in latent space using anomaly detection, addressing the positive-only learning problem.
cd docker
# Build
docker compose -f docker-compose-gui-nvidia.yaml build
# Start container
docker compose -f docker-compose-gui-nvidia.yaml up -d
# Open shell
docker exec -it gsat /bin/bashInside the container, build the ROS workspace once:
cd ~/gsat_ws
catkin build
echo "source ~/gsat_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrcBuild the CUDA voxelization op:
cd ~/gsat_ws/src/GSAT_Traversability/gsat
python3 setup.py build_ext --inplaceSee gsat_ros/README.md for topic configuration and output format.
# Terminal 1 — play rosbag
rosbag play <your_bag>.bag
# Terminal 2 — run collection node
roslaunch gsat_ros data_collection.launchOutput:
collect_data/gazebo/hill/original/
├── supervision.csv # pose + Travel_label
└── lidar/
└── <timestamp>.bin # float32 x, y, z, intensity
Edit config/data_preprocess.yaml (set data_folder and output_folder), then run:
cd ~/gsat_ws/src/GSAT_Traversability/gsat/data_tools
python3 data_preprocess.py --key {data_name}Output:
collect_data/gazebo/hill/process/
├── point/ # Leveled point clouds (*.bin)
└── label/ # Future trajectory + Travel_label (*.bin, K×4)
Edit config/data_split.yaml (set root_dir, preprocess_dir, save_dir, and split ratios), then run:
python3 data_split.py --key {data_name}Output:
collect_data/gazebo/hill/dataset/
├── train/ point/ label/
├── val/ point/ label/
└── test/ point/ label/
Edit gsat/config/train.yaml (set dataset_dir and save_dir), then run:
cd ~/gsat_ws/src/GSAT_Traversability/gsat
python3 train.py --key {data_name}Checkpoints are saved as epoch_*.pth and best_model_*.pth under save_dir.
Two demos are available:
- Anomaly Classification — inference the anomalous(dissimilar positive samples), normal sample(similar positive sample).
- Traversability Navigation — navigate using predicted traversability map.
🚧 Demo code coming soon...........
If you find this work useful, please cite:
@inproceedings{gsat2026,
title = {GSAT: Geometric Traversability Estimation using Self-supervised Learning with Anomaly Detection for Diverse Terrains},
author = {Cho, Dongjin and Park, Miryeong and Lee, Juhui and Yang, Geonmo and Cho, Younggun},
booktitle = {IEEE International Conference on Robotics and Automation (ICRA)},
year = {2026}
}

