This Docker environment reproduces the results from the paper: "Challenges of SLAM in Extremely Unstructured Environments: The DLR Planetary Stereo, Solid-State LiDAR, Inertial Dataset" by Giubilato et al., IEEE RA-L 2022
The S3LI dataset was recorded on Mt. Etna, Sicily, a planetary analogous environment with:
- 7 sequences covering over 4 kilometers
- Stereo camera (AVT Mako, 688×512 pixels, 30 Hz)
- Solid-State LiDAR (Blickfeld Cube-1, 70°H × 30°V FOV, 4.7 Hz)
- IMU (XSens MTi-G 10, 400 Hz)
- D-GNSS ground truth (centimeter-level accuracy)
Dataset URL: https://datasets.arches-projekt.de/s3li_dataset/
chmod +x run_s3li_evaluation.sh
./run_s3li_evaluation.shThis will:
- Build the Docker image with all SLAM systems
- Start a persistent container (won't close, maintains static ID)
- Mount directories for dataset and results
- Enable X11 forwarding for viewer-based SLAM runs
If you plan to use the ORB-SLAM3 viewer, allow local X11 access on the host:
xhost +local:rootIf you are on a remote host, ensure DISPLAY is set correctly before running the container:
echo $DISPLAYFor headless/limited OpenGL environments, force software rendering:
export LIBGL_ALWAYS_SOFTWARE=1
export QT_X11_NO_MITSHM=1If you encounter free(): invalid pointer crashes during optimization, rebuild the image. The Dockerfile pins Eigen alignment settings for stability in g2o:
-DEIGEN_DONT_ALIGN_STATICALLY -DEIGEN_DONT_VECTORIZE
docker exec -it s3li_slam_eval bashInside the container:
bash /workspace/scripts/download_dataset.shYou can select individual sequences or download all (~50GB total).
bash /workspace/scripts/run_evaluation.shThis will:
- Run all SLAM algorithms on selected sequences
- Compute normalized RMSE and completion ratios
- Generate Table III comparison from the paper
The Docker image now builds Pangolin from source and relaxes strict warning flags so ORB-SLAM3 compiles reliably with OpenCV 4.2 on Ubuntu 20.04.
If you need to rebuild ORB-SLAM3 inside the container (for example after changing configs), run:
cd /workspace/ORB_SLAM3
./build.shIf the build fails with PangolinConfig.cmake not found, it means Pangolin was not installed correctly in the image. Rebuild the Docker image from the host to restore Pangolin and ORB-SLAM3:
docker build -t s3li_slam:latest .The following SLAM systems are pre-built in the container:
- ORB-SLAM3 (Stereo & Stereo-Inertial)
- VINS-Fusion (Stereo & Stereo-Inertial)
- OpenVINS (Stereo-Inertial)
- BASALT (Stereo-Inertial)
| Sequence | Length | Description |
|---|---|---|
| s3li_traverse_1 | 371 m | Ash slope traverse, severe visual aliasing |
| s3li_traverse_2 | 300 m | Short traverse with panning motions |
| s3li_crater | 1010 m | Long traverse around crater rim |
| s3li_loops | 587 m | Loop closure opportunities on rocky ridges |
| s3li_crater_inout | 1338 m | Long traverse in/out of crater |
| s3li_mapping | 242 m | Dense mapping area |
| s3li_landmarks | 482 m | Traverses between rock formations |
/workspace/
├── dataset/ # Dataset storage
│ ├── s3li_traverse_1/
│ ├── s3li_traverse_2/
│ └── ...
├── results/ # Evaluation results
│ ├── orbslam3_stereo/
│ ├── vins_fusion_stereo/
│ └── ...
├── scripts/ # Evaluation scripts
│ ├── download_dataset.sh
│ ├── run_evaluation.sh
│ ├── evaluate_trajectory.py
│ └── generate_table.py
├── configs/ # SLAM configuration files
├── ORB_SLAM3/ # ORB-SLAM3 source
├── catkin_ws/ # ROS workspace (VINS, OpenVINS)
└── basalt/ # BASALT source
After running evaluations, results are saved to /workspace/results/:
evaluation_<sequence>.csv- Per-sequence resultstable_iii_comparison.csv- Main comparison tabletable_iii_comparison_detailed.csv- Detailed statistics<system>/<sequence>/trajectory.txt- Estimated trajectories<system>/<sequence>/output.log- System logs
To reproduce Table III from the paper:
# Inside container
bash /workspace/scripts/run_evaluation.sh
# Select option: Run all sequences (option 8)
# Wait for completion (may take several hours)
# Results will be in:
cat /workspace/results/table_iii_comparison.csvTo run individual SLAM systems manually:
python3 /workspace/scripts/rosbag_to_euroc.py \
--bag /workspace/dataset/HiDrive/Bagfiles/s3li_traverse_1.bag \
--left /stereo/left/image_rect \
--right /stereo/right/image_rect \
--out /workspace/dataset/converted/s3li_traverse_1python3 /workspace/scripts/generate_orbslam_config_from_bag.py \
--bag /workspace/dataset/HiDrive/Bagfiles/s3li_traverse_1.bag \
--left-info /stereo/left/camera_info \
--right-info /stereo/right/camera_info \
--fps 30 \
--out /workspace/configs/orbslam_config_headless.yaml \
--viewer 0bash /workspace/scripts/run_orbslam3_stereo.sh \
--seq-dir /workspace/dataset/converted/s3li_traverse_1 \
--mode headless \
--output-dir /workspace/results/orbslam3_s3li_traverse_1If you want the GUI viewer, run inside the container without xvfb-run and set Viewer: 1 in the config. Note that some setups crash during viewer teardown; results are still written to disk.
For GUI mode with host X11:
bash /workspace/scripts/run_orbslam3_stereo.sh \
--seq-dir /workspace/dataset/converted/s3li_traverse_1 \
--mode gui \
--output-dir /workspace/results/orbslam3_s3li_traverse_1run_s3li_evaluation.sh now auto-configures:
xhost +SI:localuser:root(best effort)- host
.Xauthoritymount into the container (when available)
This prevents the common runtime error:
Authorization required, but no authorization protocol specified
After ORB-SLAM3 finishes, evaluate trajectory error with:
For s3li_traverse_1, ground truth is located at:
/workspace/dataset/HiDrive/GT/s3li_traverse_1/baseline_xyz.pos/workspace/dataset/HiDrive/GT/s3li_traverse_1/global_lle.pos
Convert baseline_xyz.pos to TUM first:
python3 /workspace/scripts/pos_to_tum.py \
--in-pos /workspace/dataset/HiDrive/GT/s3li_traverse_1/baseline_xyz.pos \
--out-tum /workspace/results/s3li_traverse_1_gt_tum.txt \
--mode baseline_xyzbash /workspace/scripts/evaluate_orbslam_vs_gt.sh \
--gt /workspace/results/s3li_traverse_1_gt_tum.txt \
--est /workspace/results/orbslam3_s3li_traverse_1/CameraTrajectory.txt \
--format tum \
--t-max-diff 0.05 \
--out-root /workspace/resultsNote: evaluate_orbslam_vs_gt.sh now auto-normalizes TUM timestamps from nanoseconds to seconds (common in ORB-SLAM3 outputs) before running evo.
To generate visual PDFs (ape_plot.pdf, rpe_plot.pdf, traj_overlay.pdf) in headless mode:
bash /workspace/scripts/evaluate_orbslam_vs_gt.sh \
--gt /workspace/results/s3li_traverse_1_gt_tum.txt \
--est /workspace/results/orbslam3_s3li_traverse_1/CameraTrajectory.txt \
--format tum \
--t-max-diff 0.05 \
--plot \
--plot-backend Agg \
--out-root /workspace/resultsThis generates a timestamped folder in /workspace/results/ with:
ape.zip,rpe.zipandsummary.jsonape_plot.pdf,rpe_plot.pdf,traj_overlay.pdf- console logs for reproducibility
If evo fails with ModuleNotFoundError: No module named 'packaging' or NumPy/SciPy compatibility warnings, rebuild the Docker image. The Dockerfile now pins compatible Python 3.8 scientific packages and installs packaging.
Use the ablation runner to test ORB/stereo parameter variants across one or more sequences with automatic evaluation:
bash /workspace/scripts/run_orb_ablation.sh \
--variant-name a1_feat3000_fast15 \
--nfeatures 3000 \
--ini-fast 15 \
--min-fast 5 \
--seqs s3li_traverse_1,s3li_traverse_2 \
--t-max-diff 0.05 \
--t-offset 0.0Outputs:
- run folder:
/workspace/results/orbslam3_orb_ablation_<timestamp>_<variant>/ - per-sequence ORB trajectories:
orb_<seq>/CameraTrajectory.txt - per-sequence evaluation artifacts:
eval_<seq>_<variant>/ - compact table:
summary.csv
Notes:
- If ORB-SLAM3 exits with a late segmentation fault after writing
CameraTrajectory.txt, the script continues and still evaluates that sequence. - Keep
t-max-diffandt-offsetfixed while tuning ORB params to isolate tracking effects.
cd /workspace/catkin_ws
source devel/setup.bash
roslaunch vins vins_rviz.launch
# In another terminal: play datasetcd /workspace/catkin_ws
source devel/setup.bash
roslaunch ov_msckf pgeneva_ros_eth.launchcd /workspace/basalt/build
./basalt_vio \
--dataset-path /workspace/dataset/s3li_traverse_1 \
--config-path /workspace/configs/basalt_config.json \
--save-trajectorydocker stop s3li_slam_evaldocker start s3li_slam_eval
docker exec -it s3li_slam_eval bashdocker logs -f s3li_slam_evaldocker ps -qf "name=s3li_slam_eval"The container is configured with --restart unless-stopped, ensuring it maintains a static ID and survives system reboots.
docker stop s3li_slam_eval
docker rm s3li_slam_evaldocker rmi s3li_slam:latestConfiguration files for each SLAM system are in /workspace/configs/.
Adjust these to modify algorithm parameters:
orbslam3_config.yaml- ORB-SLAM3 parametersvins_config.yaml- VINS-Fusion parametersopenvins_config.yaml- OpenVINS parametersbasalt_config.json- BASALT parameters
As described in the paper, the evaluation computes:
-
Normalized RMSE: RMSE / trajectory_length
- Accounts for different trajectory lengths
- Lower is better
-
Completion Ratio: estimated_length / groundtruth_length
- Indicates how much of the sequence was successfully processed
- Higher is better (100% = complete sequence)
Results are formatted as: RMSE (Completion%)
The paper demonstrates that:
- Severe visual aliasing challenges place recognition
- Lack of structural features limits LiDAR-only SLAM
- Stereo-inertial systems show best overall performance
- ORB-SLAM3 struggles with feature-poor environments
- OpenVINS and BASALT are more robust to aliasing
- Check network connectivity
- Verify dataset URL is accessible
- Try downloading individual sequences
- Check system logs in
results/<system>/<sequence>/output.log - Verify sufficient memory (8GB+ recommended)
- Adjust parameters in config files
source /opt/ros/noetic/setup.bash
source /workspace/catkin_ws/devel/setup.bashContainer includes pre-built systems, but to rebuild:
cd /workspace/ORB_SLAM3
./build.sh
cd /workspace/catkin_ws
catkin_makeIf you use this dataset or code, please cite:
@article{giubilato2022challenges,
title={Challenges of SLAM in Extremely Unstructured Environments: The DLR Planetary Stereo, Solid-State LiDAR, Inertial Dataset},
author={Giubilato, Riccardo and St{\"u}rzl, Wolfgang and Wedler, Armin and Triebel, Rudolph},
journal={IEEE Robotics and Automation Letters},
volume={7},
number={4},
pages={8721--8728},
year={2022},
publisher={IEEE}
}For dataset issues: https://rmc.dlr.de/s3li_dataset For paper questions: riccardo.giubilato@dlr.de
Dataset and code are provided for research purposes. See individual SLAM system licenses for their respective terms.