Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
673 commits
Select commit Hold shift + click to select a range
75834f0
fix
nushakrishnan Sep 28, 2025
210f55e
naming
nushakrishnan Sep 28, 2025
0b45d8f
rm dummy imu params
nushakrishnan Sep 28, 2025
7ecafcb
upd init
nushakrishnan Sep 28, 2025
1cff2ed
colmap links
nushakrishnan Sep 28, 2025
8fbeab2
delete files from folder
nushakrishnan Sep 28, 2025
4c74190
unused func
nushakrishnan Sep 28, 2025
e5e949f
ruff
nushakrishnan Sep 28, 2025
522bb5c
clear unused fn
nushakrishnan Sep 28, 2025
1e31dc5
ruff
nushakrishnan Sep 28, 2025
3a581ad
mv extraction
nushakrishnan Sep 28, 2025
8ba0a6a
mv
nushakrishnan Sep 28, 2025
bfa8070
vrs
nushakrishnan Sep 28, 2025
beab16b
extract fix
nushakrishnan Sep 28, 2025
1185f6a
del
nushakrishnan Sep 28, 2025
05fa8ca
sync
nushakrishnan Sep 28, 2025
1e80750
importing sync
nushakrishnan Sep 28, 2025
4e1d10b
estimate loading
nushakrishnan Sep 28, 2025
46c3abe
estimate
nushakrishnan Sep 28, 2025
f0341a1
revert
nushakrishnan Sep 28, 2025
4447fb5
estimate class upd
nushakrishnan Sep 28, 2025
a634047
init recon from calib file
nushakrishnan Sep 28, 2025
590f680
sparse eval
nushakrishnan Sep 28, 2025
9f3d8e0
est upd
nushakrishnan Sep 28, 2025
4567c4f
estimate
nushakrishnan Sep 28, 2025
010a108
undistort asl add cameras rm
nushakrishnan Sep 28, 2025
fdb763b
util fn init recon from claib
nushakrishnan Sep 28, 2025
21dbae5
sparse eval
nushakrishnan Sep 28, 2025
5817d5a
ruff
nushakrishnan Sep 28, 2025
73f14b0
est upd
nushakrishnan Sep 28, 2025
04aeab9
ruff
nushakrishnan Sep 28, 2025
d319d94
edits
nushakrishnan Sep 28, 2025
806d9de
lamaria recons
nushakrishnan Sep 28, 2025
59da348
vi recons
nushakrishnan Sep 28, 2025
2677fa1
vi recons
nushakrishnan Sep 28, 2025
3aa6150
renaming
nushakrishnan Sep 28, 2025
df103b4
virecons
nushakrishnan Sep 28, 2025
720559b
vi reconstruction
nushakrishnan Sep 28, 2025
475c500
keyframe selection
nushakrishnan Sep 28, 2025
d36f209
vi recon naming upd
nushakrishnan Sep 28, 2025
acb9932
vi recon
nushakrishnan Sep 28, 2025
6647ab0
run pipeline
nushakrishnan Sep 28, 2025
cdb9af0
mv control point
nushakrishnan Sep 28, 2025
3111204
structs cps
nushakrishnan Sep 28, 2025
9f3175b
mv
nushakrishnan Sep 28, 2025
7579168
fix circular import
nushakrishnan Sep 28, 2025
71ffb66
to vi
nushakrishnan Sep 28, 2025
a31a17b
fix
nushakrishnan Sep 28, 2025
533b10a
vi opt
nushakrishnan Sep 28, 2025
f2b4756
ruff
nushakrishnan Sep 28, 2025
aeba49d
timestamps
nushakrishnan Sep 28, 2025
61b5a6d
timestamps
nushakrishnan Sep 28, 2025
6480840
func
nushakrishnan Sep 28, 2025
67d052f
estimate upd
nushakrishnan Sep 28, 2025
71e881b
timestamp naming
nushakrishnan Sep 28, 2025
ff08e45
cps struct
nushakrishnan Sep 28, 2025
e11c88a
ruff
nushakrishnan Sep 28, 2025
1fcd1fa
sparse eval variables
nushakrishnan Sep 28, 2025
1370755
cleaner sparse eval
nushakrishnan Sep 28, 2025
67524f6
init recon with cameras
nushakrishnan Sep 29, 2025
7e05703
aria
nushakrishnan Sep 29, 2025
0633595
updating est
nushakrishnan Sep 29, 2025
161cae2
naming
nushakrishnan Sep 29, 2025
cc3de83
naming
nushakrishnan Sep 29, 2025
2a160f7
fixes
nushakrishnan Sep 29, 2025
fdb0515
renmaing
nushakrishnan Sep 29, 2025
13af9cd
fixes
nushakrishnan Sep 29, 2025
164c0ae
fixes
nushakrishnan Sep 29, 2025
4b374bb
cp
nushakrishnan Sep 29, 2025
4185886
structs for sparse eval
nushakrishnan Sep 29, 2025
35e2077
result
nushakrishnan Sep 29, 2025
8ba62a3
fix
nushakrishnan Sep 29, 2025
f036160
fixes
nushakrishnan Sep 29, 2025
a63f8ba
fixes
nushakrishnan Sep 29, 2025
b49a0d3
fix
nushakrishnan Sep 29, 2025
73b2989
eval
nushakrishnan Sep 29, 2025
a07d713
add load fn for result
nushakrishnan Sep 29, 2025
7b69dc9
load from file
nushakrishnan Sep 29, 2025
edbfbe0
fix loading
nushakrishnan Sep 29, 2025
e87ff5f
return type
nushakrishnan Sep 29, 2025
9f101e9
return
nushakrishnan Sep 29, 2025
4846d6a
todo
nushakrishnan Sep 29, 2025
9e398f5
readme init
nushakrishnan Sep 29, 2025
1d5e77d
ruff
nushakrishnan Sep 29, 2025
e3d7623
readme
nushakrishnan Sep 29, 2025
2dabcbd
read
nushakrishnan Sep 29, 2025
76b9d9b
readme init, assets
nushakrishnan Sep 29, 2025
1492095
spacing
nushakrishnan Sep 29, 2025
3d212d6
quickstart shell
nushakrishnan Sep 29, 2025
93279f6
req.txt
nushakrishnan Sep 29, 2025
b50c539
proj aria tools
nushakrishnan Sep 29, 2025
abad621
pgt nd traj association
nushakrishnan Sep 29, 2025
38f8469
ts
nushakrishnan Sep 29, 2025
e739267
ruff
nushakrishnan Sep 29, 2025
7de41da
argparser
nushakrishnan Sep 29, 2025
5ae7582
req
nushakrishnan Sep 29, 2025
77dca6a
pr
nushakrishnan Sep 29, 2025
4579c20
op path desc
nushakrishnan Sep 29, 2025
b557af6
fix requirements.txt
B1ueber2y Sep 29, 2025
a16b097
useless str in sensoroptions
nushakrishnan Sep 29, 2025
ae305f5
aria upd
nushakrishnan Sep 29, 2025
e7ba58b
rm stream id
nushakrishnan Sep 29, 2025
d96f919
streamid intro in vrs to asl
nushakrishnan Sep 29, 2025
5f26deb
streamid
nushakrishnan Sep 29, 2025
be0edee
sparse eval result naming
nushakrishnan Sep 29, 2025
d307b53
rm cp reproj std
nushakrishnan Sep 29, 2025
bd0d6a4
sparse
nushakrishnan Sep 29, 2025
084ab39
rm cp reproj std
nushakrishnan Sep 29, 2025
e9cf2dc
Merge branch 'dev' of github.com:cvg/lamaria into dev
nushakrishnan Sep 29, 2025
5706ef6
imu camera
nushakrishnan Sep 29, 2025
c24e3ac
aria imu dummy camera
nushakrishnan Sep 29, 2025
d48c76f
return reconstruction instead of path
nushakrishnan Sep 29, 2025
85ef4bd
init recons
nushakrishnan Sep 29, 2025
5f80383
types
nushakrishnan Sep 29, 2025
5e3f9e3
return
nushakrishnan Sep 29, 2025
7e86ed4
init recons
nushakrishnan Sep 29, 2025
2ede45d
aria
nushakrishnan Sep 29, 2025
3cea488
data input
nushakrishnan Sep 29, 2025
b32f97c
renaming
nushakrishnan Sep 29, 2025
d42622c
upd control point
nushakrishnan Sep 29, 2025
d020ee9
comment
nushakrishnan Sep 29, 2025
9c49ecc
comms
nushakrishnan Sep 29, 2025
6cf98e4
fix
nushakrishnan Sep 29, 2025
1d44bbc
cp
nushakrishnan Sep 29, 2025
e897285
ssparse
nushakrishnan Sep 29, 2025
2bd2787
eval
nushakrishnan Sep 29, 2025
a1039f8
sparse
nushakrishnan Sep 29, 2025
c1d95a2
ruff
nushakrishnan Sep 29, 2025
fef2a95
ruff
nushakrishnan Sep 29, 2025
6e01271
cp tri
nushakrishnan Sep 29, 2025
4893e65
cp
nushakrishnan Sep 29, 2025
5f85c29
cp trii
nushakrishnan Sep 29, 2025
a3ae3d6
fix
nushakrishnan Sep 29, 2025
a1a05d0
ruff
nushakrishnan Sep 29, 2025
a3e2e7a
ruff
nushakrishnan Sep 29, 2025
5067f03
cp summary
nushakrishnan Sep 29, 2025
046586a
abstract TimedReconstruction and refactor I/O.
B1ueber2y Sep 29, 2025
ddda41d
ev
nushakrishnan Sep 29, 2025
826d410
sparse eval
nushakrishnan Sep 29, 2025
a775626
Merge branch 'dev' into shaohui/dev
B1ueber2y Sep 29, 2025
adadd29
format and fix.
B1ueber2y Sep 29, 2025
05fcc3b
format
B1ueber2y Sep 29, 2025
a57e41b
f
nushakrishnan Sep 29, 2025
2fc7835
metrics
nushakrishnan Sep 29, 2025
3d34855
evo eval against mps
nushakrishnan Sep 29, 2025
7b02733
unused import
nushakrishnan Sep 29, 2025
5cec9ed
traj
nushakrishnan Sep 29, 2025
39a8423
traj
nushakrishnan Sep 29, 2025
54c3bb9
eval wrt mps
nushakrishnan Sep 29, 2025
9c8ca1a
evo eval
nushakrishnan Sep 29, 2025
c82690d
ate rmse
nushakrishnan Sep 29, 2025
abc13a2
ruff
nushakrishnan Sep 29, 2025
c625bf4
ruff
nushakrishnan Sep 29, 2025
abd86dd
fix
nushakrishnan Sep 29, 2025
e687790
split estimate and mps in the data init.
B1ueber2y Sep 29, 2025
811e9f7
fix and format
B1ueber2y Sep 29, 2025
80be58d
fix
B1ueber2y Sep 29, 2025
4d34a8b
format
B1ueber2y Sep 29, 2025
41f5f9b
Merge branch 'dev' into shaohui/dev
B1ueber2y Sep 29, 2025
4e74cb1
installation readme
nushakrishnan Sep 29, 2025
f371eeb
minor
B1ueber2y Sep 29, 2025
163f194
vrs installation tools
nushakrishnan Sep 29, 2025
cfaea93
Merge pull request #3 from cvg/shaohui/dev
nushakrishnan Sep 29, 2025
c8b8327
Merge branch 'dev' of github.com:cvg/lamaria into dev
nushakrishnan Sep 29, 2025
db93e99
fix broken impl
B1ueber2y Sep 29, 2025
0b12d3b
format
B1ueber2y Sep 29, 2025
a7bed5f
RGB CAMERA STREAM ID
nushakrishnan Sep 29, 2025
4a52e36
Merge branch 'dev' of github.com:cvg/lamaria into dev
nushakrishnan Sep 29, 2025
5305ca8
mv into pipeline
nushakrishnan Sep 29, 2025
5513115
pyproject toml
nushakrishnan Sep 29, 2025
c4280bf
ruff
nushakrishnan Sep 29, 2025
f6f6eae
readme
nushakrishnan Sep 29, 2025
8001bde
download lamaria
nushakrishnan Sep 29, 2025
0e8aaa7
Download section
nushakrishnan Sep 29, 2025
336961f
more readme
nushakrishnan Sep 29, 2025
995136b
download dataset
nushakrishnan Sep 29, 2025
8340dac
download
nushakrishnan Sep 29, 2025
e9df9ff
readme
nushakrishnan Sep 29, 2025
c15be65
demo data folder
nushakrishnan Sep 29, 2025
6e2d3e9
toml
nushakrishnan Sep 29, 2025
dec0aa8
quick start
nushakrishnan Sep 29, 2025
eb55944
ruff
nushakrishnan Sep 29, 2025
2de021e
read
nushakrishnan Sep 29, 2025
1ba9277
evo fix
nushakrishnan Sep 29, 2025
cdf01f7
readme
nushakrishnan Sep 30, 2025
1d1ab11
fix
nushakrishnan Sep 30, 2025
a7b7b0b
pose recall
nushakrishnan Sep 30, 2025
450f7c1
pgt
nushakrishnan Sep 30, 2025
f6308f7
no need for op path
nushakrishnan Sep 30, 2025
01529bb
space
nushakrishnan Sep 30, 2025
4a3eeb1
array
nushakrishnan Sep 30, 2025
0c0b87b
readme
nushakrishnan Sep 30, 2025
20e2862
pgt
nushakrishnan Sep 30, 2025
6755bb0
ruff
nushakrishnan Sep 30, 2025
d2b735d
Readme
nushakrishnan Sep 30, 2025
f35fd6e
readme
nushakrishnan Sep 30, 2025
c07c27e
readme
nushakrishnan Sep 30, 2025
e07ab9d
readme
nushakrishnan Sep 30, 2025
f83e525
readme
nushakrishnan Sep 30, 2025
11f7638
logo
nushakrishnan Sep 30, 2025
d41aba6
readne
nushakrishnan Sep 30, 2025
4b07bdb
tools
nushakrishnan Sep 30, 2025
f334909
naming consistency
nushakrishnan Sep 30, 2025
66fe2eb
readme
nushakrishnan Sep 30, 2025
d9bf622
fix
nushakrishnan Sep 30, 2025
3d11031
ros1bag
nushakrishnan Sep 30, 2025
2671380
read
nushakrishnan Sep 30, 2025
3333a69
readme
nushakrishnan Sep 30, 2025
42826a4
readme
nushakrishnan Sep 30, 2025
b7b637f
evo bagpy and cvbridge
nushakrishnan Sep 30, 2025
ea77454
llaalalaa
nushakrishnan Sep 30, 2025
0b10ca7
download
nushakrishnan Sep 30, 2025
916b388
readme changes
nushakrishnan Sep 30, 2025
60de167
sizes
nushakrishnan Sep 30, 2025
4de2fbf
fix
nushakrishnan Sep 30, 2025
5da1c3d
collapsed
nushakrishnan Sep 30, 2025
145987c
read
nushakrishnan Sep 30, 2025
eb52368
better
nushakrishnan Sep 30, 2025
c3065d7
train test split
nushakrishnan Sep 30, 2025
0c67fd9
readme
nushakrishnan Sep 30, 2025
871c9fa
readme comments without viz
nushakrishnan Sep 30, 2025
6dc8c33
mps estimate trajec
nushakrishnan Sep 30, 2025
3e91c34
readme
nushakrishnan Sep 30, 2025
aee915a
removing the rudeness from readme
nushakrishnan Sep 30, 2025
748ac9d
rm mps
nushakrishnan Sep 30, 2025
46bf992
mps ocal rm
nushakrishnan Sep 30, 2025
e6a118d
rm mps
nushakrishnan Sep 30, 2025
100cbe3
use mps
nushakrishnan Sep 30, 2025
48b8025
rm mps
nushakrishnan Sep 30, 2025
9460a87
rm has slam drops
nushakrishnan Sep 30, 2025
066035c
make output_dir mandatory.
B1ueber2y Sep 30, 2025
1093ed2
fix.
B1ueber2y Sep 30, 2025
4e7b35b
change example to lighter sequences.
B1ueber2y Sep 30, 2025
de29d77
adapt file structure
B1ueber2y Sep 30, 2025
59604b4
rename pseudo_dense and sparse into pGT and control_points.
B1ueber2y Sep 30, 2025
5289efe
fix readme
B1ueber2y Sep 30, 2025
414af60
update readme
B1ueber2y Sep 30, 2025
21d6227
update demo paths
B1ueber2y Sep 30, 2025
0377cd6
update vi optim
B1ueber2y Sep 30, 2025
262d4f6
update
B1ueber2y Sep 30, 2025
9a99605
update
B1ueber2y Sep 30, 2025
3405124
update
B1ueber2y Sep 30, 2025
5800ec9
add note on imu bottleneck. add ruff==0.12.7 to requirements.txt
B1ueber2y Sep 30, 2025
1e8885a
format
B1ueber2y Sep 30, 2025
b82fbd1
fix
B1ueber2y Sep 30, 2025
88b51af
SE3 type hint.
B1ueber2y Sep 30, 2025
c10748c
optimized
nushakrishnan Sep 30, 2025
aa9c1da
resukt
nushakrishnan Sep 30, 2025
ae3a5be
red
nushakrishnan Sep 30, 2025
f7746b7
fix vi demo script and remove figure.
B1ueber2y Sep 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
**/__pycache__/
.DS_Store
lamaria_data/
demo/
demo_outputs/
260 changes: 259 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,259 @@
# lamaria
<p align="center">
<h1 align="center"><ins>The LaMAria Dataset</ins> <br>Benchmarking Egocentric Visual-Inertial SLAM at City Scale</h1>
<h4 align="center">
<a href="https://github.com/nushakrishnan" target="_blank" rel="noopener noreferrer">Anusha&nbsp;Krishnan</a><sup>*</sup>,
<a href="https://github.com/B1ueber2y" target="_blank" rel="noopener noreferrer">Shaohui&nbsp;Liu</a><sup>*</sup>,
<a href="https://github.com/sarlinpe" target="_blank" rel="noopener noreferrer">Paul-Edouard&nbsp;Sarlin</a><sup>*</sup>,
Oscar&nbsp;Gentilhomme,<br>
David&nbsp;Caruso,
Maurizio&nbsp;Monge,
Richard&nbsp;Newcombe,
Jakob&nbsp;Engel,
Marc&nbsp;Pollefeys
</h4>
<p align="center">
<sup>*</sup>Equal contribution
</p>
<p align="center">
<img src="assets/iccv_logo.png" width="160"/><br/>
</p>
</p>
<h3 align="center">
<a href="https://lamaria.ethz.ch" target="_blank" rel="noopener noreferrer">Website</a> |
<a href="" target="_blank" rel="noopener noreferrer">Paper</a>
</h3>


We present **LaMAria**, an egocentric, city-scale benchmark for **visual-inertial SLAM**, featuring
~ **22 hours / 70 km** of trajectories with survey-grade control points providing **centimeter-accurate ground truth**.

Using **LaMAria**, you can:
- Evaluate SLAM systems under real-world egocentric setup: low light, moving platforms, exposure changes, time-varying sensor calibrations.
- Benchmark against highly accurate ground truths.

This dataset offers 23 training sequences and 63 test sequences.

<p align="center">
<img src="assets/teaser_final.png" alt="Overview of LaMAria" width="900"/><br/>
<em>Figure 1: Overview of the LaMAria dataset and benchmark.</em>
</p>

To learn more about the dataset, please refer to our main dataset website or our paper.

## Table of Contents
- [Installation](#installation)
- [Downloading the Dataset](#downloading-the-dataset)
- [Evaluation](#evaluation)
- [Evaluation w.r.t. Control Points](#evaluation-wrt-control-points)
- [Evaluation w.r.t. Pseudo-GT](#evaluation-wrt-pseudo-gt)
- [EVO Evaluation w.r.t. MPS](#evo-evaluation-wrt-mps)
- [Converting VRS to ASL/ROSbag format](#converting-vrs-to-aslrosbag-format)
- [Example Visual-Inertial Optimization](#example-visual-inertial-optimization)
- [BibTeX Citation](#bibtex-citation)


## Installation

Create an environment:
```bash
python3 -m venv lamaria_env
source lamaria_env/bin/activate
```

Install the package:
```bash
git clone git@github.com:cvg/lamaria.git
cd lamaria
python -m pip install -r requirements.txt
python -m pip install -e .
```

## Downloading the dataset
Our dataset is fully hosted via the archive <a href="https://cvg-data.inf.ethz.ch/lamaria/" target="_blank" rel="noopener noreferrer">here</a>.

```bash
python -m tools.download_lamaria --help
```

We provide a downloading script [here](tools/download_lamaria.py), which can be used to download:
- Specific sequences or entire sets (training/test).
- Specific types:
- Raw - Downloads raw `.vrs` files and Aria calibration file.
- ASL - Downloads ASL folder and pinhole calibration file.
- ROSbag - Downloads ROS1 bag and pinhole calibration file.
- All - Downloads both raw and pinhole data.

Ground truth files are automatically downloaded for the training sequences.

### Data sizes
- Raw data (vrs + aria_calibrations): ~890G (training: ~117G + test: ~773G)
- ASL folder + pinhole_calibrations: ~1.1T (training: ~170G + test: ~884G)
- ROSbag + pinhole_calibrations: ~1.5T (training: ~247G + test: ~1.3T)

### Some example commands

To download the raw data of a specific sequence (e.g., `R_01_easy`):
```bash
python -m tools.download_lamaria --output_dir ./lamaria_data \
--sequences R_01_easy --type raw
```
To download 3 custom sequences in rosbag format:
```bash
python -m tools.download_lamaria --output_dir ./lamaria_data \
--sequences R_01_easy R_02_easy R_03_easy --type rosbag
```
To download 3 custom sequences in asl format:
```bash
python -m tools.download_lamaria --output_dir ./lamaria_data \
--sequences R_01_easy R_02_easy R_03_easy --type asl
```
To download all training sequences in both raw and pinhole formats:
```bash
python -m tools.download_lamaria --output_dir ./lamaria_data \
--set training --type all
```

The downloaded raw data is stored in the following way:
```
output_dir/
├── training/
│ ├── R_01_easy/
│ │ ├── aria_calibrations/
│ │ │ └── R_01_easy.json
│ │ ├── ground_truth/
│ │ │ ├── pGT/
│ │ │ │ └── R_01_easy.txt
│ │ │ └── control_points/
│ │ │ └── # if sequence has CPs
│ │ ├── raw_data/
│ │ │ └── R_01_easy.vrs
│ └── ...
└── test/ # no ground truth
└── sequence_1_1
```

For more information about the training and test sequences, refer to the <a href="https://lamaria.ethz.ch/slam_datasets" target="_blank" rel="noopener noreferrer">dataset details</a>. To learn more about the various data formats, calibration files and ground-truths, visit our <a href="https://lamaria.ethz.ch/slam_documentation" target="_blank" rel="noopener noreferrer">documentation</a>.

## Evaluation
Our training and test sequences are categorized into varying challenges. To evaluate your SLAM results on our data, we provide two main ways:
1. **Evaluation via the website**: Upload your results on our <a href="https://lamaria.ethz.ch/login" target="_blank" rel="noopener noreferrer">website</a> to get evaluation results. **All sequences can be submitted via our website.** Results on test sequences are displayed on the public [leaderboard](https://www.lamaria.ethz.ch/leaderboard).
2. **Standalone evaluation**: Run the evaluation scripts locally using the provided `lamaria` package. These scripts can be run only on the training sequences (since ground truth is required).

### Input format
The input pose estimate file must be a text file where each line corresponds to a timestamped pose in the following format:
```
timestamp tx ty tz qx qy qz qw
```
The timestamp must be in nanoseconds.

### Download demo data
We provide a small script `quickstart.sh` that downloads demo data from the archive. The standalone evaluations and example visual-inertial optimization can be run on the downloaded data.

```bash
chmod +x quickstart.sh
./quickstart.sh
```

The first sequence of the controlled experimental set (R_01_easy) and additional set (sequence_1_19) are stored in the `demo/` folder.

### Evaluation w.r.t. Control Points
Three sequences in the controlled experimental set and the additional set sequences can be evaluated w.r.t. control points. This script computes the score and control point recall based on the alignment of the estimated trajectory to the control points.

To perform the evaluation on the downloaded demo data:
```bash
python -m evaluate_wrt_control_points --estimate demo/estimate/sequence_1_19.txt \
--cp_json_file demo/sequence_1_19/ground_truth/control_points/sequence_1_19.json \
--device_calibration_json demo/sequence_1_19/aria_calibrations/sequence_1_19.json \
--corresponding_sensor imu \
--output_path demo_outputs/eval_cp
```

*This command evaluates the provided estimate w.r.t. control points and stores the results in `demo/eval_cp`. The `--corresponding_sensor` flag indicates which sensor the poses are expressed in (e.g., `imu` or `cam0`).*

To learn more about the control points and sparse evaluation, refer to Section 4.1 and 4.2 of our paper.

### Evaluation w.r.t Pseudo-GT
This script evaluates the estimated trajectory w.r.t. the pseudo-dense ground truth from our ground-truthing pipeline. It requires the alignment obtained from the sparse evaluation (w.r.t. control points). The script computes the pose recall @ 1m and @ 5m, after aligning the estimated trajectory to the pseudo-ground truth.

To perform the evaluation on the downloaded demo data:
```bash
python -m evaluate_wrt_pgt --estimate demo/estimate/sequence_1_19.txt \
--gt_estimate demo/sequence_1_19/ground_truth/pGT/sequence_1_19.txt \
--sparse_eval_result demo_outputs/eval_cp/sparse_eval_result.npy
```

### EVO Evaluation w.r.t MPS
This script evaluates the estimated trajectory w.r.t. the pseudo-dense ground truth from Machine Perception Services (MPS). It computes the Absolute Trajectory Error (ATE) RMSE between the two trajectories.

To perform the evaluation on the downloaded demo data:
```bash
python -m evaluate_wrt_mps --estimate demo/estimate/R_01_easy.txt \
--gt_estimate demo/R_01_easy/ground_truth/pGT/R_01_easy.txt
```

This method is used to evaluate results on the controlled experimental set, where the gt estimate file is built directly from the MPS estimated trajectory.

## Converting VRS to ASL/ROSbag format

We provide some utility scripts in the `tools/` folder to convert between different data formats used in our dataset.

<details>
<summary>Click to expand commands</summary>
<br>

1. Converting from `.vrs` to ASL folder format:
```bash
python -m tools.vrs_to_asl_folder --vrs_file path/to/sequence.vrs --output_asl_folder path/to/output_asl_folder
```

2. Converting from ASL folder to ROS1 bag:
```bash
python -m tools.asl_folder_to_rosbag --input_asl_folder path/to/asl_folder --output_rosbag path/to/output.bag
```

3. Undistorting ASL folder images to PINHOLE format:
```bash
python -m tools.undistort_asl_folder --calibration_file path/to/calibration.json --asl_folder path/to/asl_folder --output_asl_folder path/to/output_undistorted_asl_folder
```
*Note: The undistortion script requires COLMAP to be installed from source. Please follow the instructions [here](https://colmap.github.io/install.html) to install the library.*

<!-- 4. Rotating ASL folder upright:
```bash
python -m tools.rotate_asl_folder --asl_folder path/to/asl_folder --output_asl_folder path/to/output_upright_asl_folder
``` -->
</details>

## Example Visual-Inertial Optimization

As a byproduct of our groundtruthing pipeline, we provide an example visual-inertial optimization pipeline built within the `lamaria` package. This pipeline takes as input a pose estimate file (in the format described below) and `.vrs`, performs keyframing and triangulation, and optimizes the trajectory using visual and inertial residuals.

The input pose estimate file must follow the same format as described in the [input format](#input-format) section above.

### Additional Installation
To extract images from a `.vrs` file, it is required to install the [VRS Command Line Tools](https://facebookresearch.github.io/vrs/docs/VrsCliTool/). Please follow the instructions [here](https://github.com/facebookresearch/vrs?tab=readme-ov-file#instructions-macos-and-ubuntu-and-container) to install the library from source.

### Running the example
To run an example visual-inertial optimization on the demo data downloaded following [download demo data](#download-demo-data) (Here the intitial estimation file in the demo is from a run of [OpenVINS](https://docs.openvins.com/)):
```bash
python -m example_vi_optimization --output demo_outputs/vi_optim \
--vrs demo/sequence_1_18/raw_data/sequence_1_18.vrs \
--estimate demo/estimate/sequence_1_18.txt
```

## BibTeX citation
```bibtex
@InProceedings{Krishnan_2025_ICCV,
author = {Krishnan, Anusha and
Liu, Shaohui and
Sarlin, Paul-Edouard and
Gentilhomme, Oscar and
Caruso, David and
Monge, Maurizio and
Newcombe, Richard and
Engel, Jakob and
Pollefeys, Marc},
title = {Benchmarking Egocentric Visual-Inertial SLAM at City Scale},
booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},
year = {2025}
}
```
Binary file added assets/iccv_logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/teaser_final.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
45 changes: 45 additions & 0 deletions defaults.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Default configuration for run_pipeline.py
keyframing:
max_rotation: 20.0
max_distance: 1.0
max_elapsed: 1e9 # 1 second in ns

triangulation:
feature_conf: aliked-n16
matcher_conf: aliked+lightglue
retrieval_conf: netvlad
num_retrieval_matches: 5

# relaxed triangulation
# https://github.com/colmap/colmap/tree/3.12.6/src/colmap/sfm/incremental_triangulator.h
merge_max_reproj_error: 15.0
complete_max_reproj_error: 15.0
min_angle: 1.0

# https://github.com/colmap/colmap/tree/3.12.6/src/colmap/sfm/incremental_mapper.h
filter_max_reproj_error: 15.0
filter_min_tri_angle: 1.0

optimization:
general:
use_callback: true
max_num_iterations: 10
normalize_reconstruction: false
minimizer_progress_to_stdout: true
update_state_every_iteration: true

cam:
feature_std: 1.0
optimize_focal_length: false
optimize_principal_point: false
optimize_extra_params: false
optimize_cam_from_rig: false

imu:
optimize_scale: false
optimize_gravity: false
optimize_imu_from_rig: false
optimize_bias: true
gyro_infl: 1.0
acc_infl: 1.0
integration_noise_density: 0.05
Loading