You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# SPICE-HL3: Single-Photon, Inertial, and Stereo Camera dataset for Exploration of High-Latitude Lunar Landscapes <!-- omit in toc -->
2
+
This repository contains all the suplementary material used during the acquisition and proecessing of the [SPICE-HL3 dataset](https://zenodo.org/records/13970078?preview=1).
3
+
4
+
All the details about this dataset can be found in the associated manuscript.
- David Rodríguez Martínez [](https://orcid.org/0000-0003-4817-9225)
15
+
- Dave van der Meer [](https://orcid.org/0000-0002-7892-9704)
16
+
- Junlin Song [](https://orcid.org/0000-0001-9690-7253)
17
+
- Abishek Bera [](https://orcid.org/0000-0002-0196-5969)
18
+
- C.J Pérez del Pulgar [](https://orcid.org/0000-0001-5819-8310)
19
+
- Miguel Angel Olivares-Mendez [](https://orcid.org/0000-0001-8824-3231)
20
+
21
+
Cite this dataset:
22
+
> Rodríguez-Martínez, D., van der Meer, D., Song, J., Abishek, B., Pérez del Pulgar, C.J., Olivares-Mendez, M.A. (2025). SPICE-HL3: Single-Photon, Inertial, and Stereo Camera dataset for Exploration of High-Latitude Lunar Landscapes. *in review*.
23
+
24
+
```
25
+
@article{rodriguez2025spicehl3,
26
+
title={{SPICE}-{HL3}: Single-Photon, Inertial, and Stereo Camera dataset for Exploration of High-Latitude Lunar Landscapes},
27
+
author={Rodríguez-Martínez, David and van der Meer, Dave and Song, Junlin and Bera, Abishek and Pérez del Pulgar, C.J. and Olivares-Mendez, Miguel Angel},
28
+
journal={in review},
29
+
volume={},
30
+
number={},
31
+
pages={},
32
+
year={2025}
33
+
}
34
+
```
35
+
36
+
## Updates <!-- omit in toc -->
37
+
38
+
- (2025-Jul-01) Leaderboard created.
39
+
- (2025-Jun-16) Public release of dataset repository.
40
+
- (2024-Dec-01) Dataset uploaded to Zenodo in restricted mode.
41
+
- (2024-Sep-10) Lunalab testing campaign.
42
+
43
+
## Contents <!-- omit in toc -->
44
+
-[SPAD512S Data Acquisition](#spad512s-data-acquisition)
45
+
-[SPAD512S Data Reader](#spad512s-data-reader)
46
+
-[Data structure](#data-structure)
47
+
-[Compatibility](#compatibility)
48
+
-[Fixing ROS2 and HW-sync issues](#fixing-ros2-and-hw-sync-issues)
49
+
-[Data processing and evaluation](#data-processing-and-evaluation)
50
+
-[Using ORB-SLAM3 on SPICE-HL3 data](#using-orb-slam3-on-spice-hl3-data)
51
+
-[Leaderboard](#leaderboard)
52
+
-[Submitting your results](#submitting-your-results)
53
+
-[References](#references)
54
+
-[Licensing](#licensing)
55
+
56
+
## SPAD512S Data Acquisition
57
+
58
+
As the SPAD512S GUI lacks native support for setting a fixed frame rate (i.e., capture X number of frames every Y ms), we developed a series of scripts to programmatically enable this functionality.
59
+
60
+
In particular, the scripts used were:
61
+
-[*SPAD_1bit_capture.py*](/spad512-acquisition/SPAD_1bit_capture.py): capture a predefined number of frames at a given batch rate.
62
+
-[*SPAD_1bit_cont.py*](/spad512-acquisition/SPAD_1bit_cont.py): capture a continuous stream of binary frames at a given batch rate.
63
+
-[*multiexposure_launcher_SPAD.bat*](/spad512-acquisition/multiexposure_launcher_SPAD.bat): call the `SPAD_1bit_capture.py` script to acquire binary frames at five different exposure times (to be used on Windows).
64
+
65
+
## SPAD512S Data Reader
66
+
This section contains a series of MATLAB scripts designed to read and export data acquired with [Pi-Imaging SPAD512S](https://piimaging.com/spad-512/) single-photon camera. It contains the following scripts:
67
+
68
+
-[*export_spad_frames.m*](/spad512-reader/export_spad_frames.m): This function reads all the .BIN files saved during a single acquisition and extracts and exports each 1-bit frame acquired as individual .PNG images.
69
+
-[*digitize_from_1bit.m*](/spad512-reader/digitize_from_1bit.m): Once the 1-bit frames have been exported to PNG, this script can build up n-bit .PNG images out of those 1-bit frames. The required bit depth needs to be explicitly defined as an argument.
70
+
-[*digitize_from_4bit.m*](/spad512-reader/digitize_from_4bit.n): Similarly, this script can integrate 4-bit .PNG images to export images of a desired bit depth (always > 4bit).
71
+
-[*read_512Sbin.m*](/spad512-reader/read_512sbin.m): This is a function required by `export_spad_frames()`. This function contains the necessary code to extract and reconstruct the data from a .BIN file so that single 1-bit frames can be exported. This script is based on the `python_tcp_stream_binary_intensity1bit.py` file available in the SPAD512S system documentation[[1]](#references).
72
+
-[*remap.m*](/spad512-reader/remap.m): This is a simple MATLAB function meant to remap n-bit .PNG images into an 8-bit colormap.
73
+
74
+
75
+
>[!NOTE]
76
+
> For additional information on any of these funtions, simply run `help [function_name]` in the command window.
77
+
78
+
### Data structure
79
+
The previous scripts have been updated to work with any data structure given the appropriate updates (check function help text for more info). As is, however, the scripts are designed to work with the data structure created by default when images are recorded through Pi-Imaging's camera GUI.
80
+
81
+
> [!NOTE]
82
+
> The scripts associated with the SPAD512S Data Reader are meant to work based on 1-bit or 4-bit native frame acquisitions.
83
+
84
+
From the SPAD512S, data is saved by default based on the following directory structure:
85
+
```
86
+
> ...
87
+
> data
88
+
> intensity_images
89
+
> acq0000X
90
+
> RAW00000.bin
91
+
> RAW00001.bin
92
+
> ...
93
+
```
94
+
95
+
`RAW0000X.BIN` are binary files containing a maximum of 1000 1-bit frames (i.e., ~32MB). Multiple .BIN files will be saved during longer acquisitions.
96
+
97
+
The scripts are designed to work regardless of the number of .BIN files saved but always within single acquisitions (i.e., the file path to the `acq0000X` folder of choice needs to be passed as an argument to the function `export_spad_frames()`). The scripts will need to be updated for them to read data from multiple acquisitions at once (i.e., from multiple `acq0000X` folders).
98
+
99
+
### Compatibility
100
+
101
+
These scripts were tested on both MATLAB [R2023a](https://ch.mathworks.com/products/new_products/release2023a.html) and [R2024a](https://ch.mathworks.com/products/new_products/latest_features.html).
102
+
103
+
## Fixing ROS2 and HW-sync issues
104
+
105
+
Due to ROS2-related issues and potential hardware synchronization limitations, some raw captured data contained frames affected by partial delays or mismatched timestamps between the left and right cameras. To correct and clean the data, we used the following scripts, which we are sharing openly so that anyone can re-create the dataset from the raw data contained in the rosbags or to review how the data was processed prior to publication.
106
+
107
+
The raw data frames captured by the ZED2 stereo camera were processed following these steps:
108
+
109
+
1. Run the [*stereo_file_matching.m*](/data-cleaner/stereo_file_matching.m) script to remove all left-to-right mismatched frames, and viceversa. Just swap target and reference. Output `left/data` and `right/data` folders with equal number of frames.
110
+
2. Run the [*clean_delayed_frames.m*](/data-cleaner/clean_delayed_frames.m) script on the left and right data folders filter out all heavily delayed frames. Output data folders with sequentially timestampped frames.
111
+
3. Run the [*reID_frames.m*](/data-cleaner/reID_frames.m) script to, as the name suggest, reID all frames.
112
+
4. Finally, conduct a quality check with [*finalcheck_left_right_frames.m*](/data-cleaner/finalcheck_left_right_frames.m) to confirm all timestamps associated with left camera frames have matching right camera frames.
113
+
114
+
## Data processing and evaluation
115
+
116
+
-[*disparity.py*](/data-processing/disparity.py): computes disparity maps for multiple stereo image and saves the output as PNG images.
117
+
118
+
### Using ORB-SLAM3 on SPICE-HL3 data
119
+
120
+
For details on how to adapt and run this dataset through ORB-SLAM3, check this implementation [2](#references), specifically the [Adapting my own data](https://github.com/drodriguezSRL/ORBSLAM3_implementation/blob/main/HOW.md#phase-5-adapting-my-own-data) section of the implementation log book.
121
+
122
+
## Leaderboard
123
+
124
+
This is a public leaderboard showcasing the performance of various Visual Odometry and SLAM methods evaluated on different trajectories from the SPICE-HL3 dataset. The goal is to provide a centralized, transparent comparison of state-of-the-art approaches using consistent benchmarks.
125
+
126
+
### Submitting your results
127
+
128
+
To have your results included in the leaderboard, please open a new issue titled "_Leaderboard Submission_" and include the following details:
- Reference (arXiv, conference, or journal publication describing your method )
137
+
```
138
+
139
+
Once submitted, your entry will be reviewed and added to the leaderboard. We encourage reproducibility and transparency, feel free to include any links to code, pre-trained models, or logs. If the data provided with SPICE-HL3 has been preprocessed in any way, please include details as to the methods used.
140
+
141
+
>[!IMPORTANT]
142
+
> Note that ATE must be computed using alignment based on the initial estimated pose (no global SE(3) alignment such as Horn's).
143
+
144
+
> [!NOTE]
145
+
> To ensure fairness and comparability between methods evaluated on different subsets of the dataset, the ranking is based on a globally weighted average ATE, where each trajectory's contribution is weighted by its length. If a method fails to produce a valid estimated trajectory on a given sequence, a **penalty RMSE of 1 m and max ATE of 5 m** are applied for that trajectory, weighted by its length. This ensures that methods are fairly penalized for non-robust behavior.
146
+
147
+
### Fast Sequences SPICE-HL3 Leaderboard <!-- omit in toc -->
0 commit comments