Skip to content

Commit aa261bc

Browse files
committed
Feat: Complete refactor (update imports, docs, new README)
1 parent 13b7dad commit aa261bc

11 files changed

Lines changed: 397 additions & 240 deletions

File tree

README.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
\# SE(3) Manifold Optimization \& Benchmarks
2+
3+
4+
5+
This repository contains a collection of algorithms and benchmarks for optimization on the SE(3) manifold, focusing on \*\*Geometric Dual Quaternions (GeoDQ)\*\*, \*\*Principal Geodesic Analysis (PGA)\*\*, and other geometric fusion methods.
6+
7+
8+
9+
Designed for Computer Vision, Robotics, and Navigation tasks.
10+
11+
12+
13+
\## 📚 Algorithms Collection
14+
15+
16+
17+
| Project / Algorithm | Description | Code \& Benchmarks | Documentation |
18+
19+
| :--- | :--- | :--- | :--- |
20+
21+
| \*\*GeoDQ-Bench\*\* | \*\*Geometric State Fusion\*\* using Dual Quaternion Observer. Comparative analysis with Kalman Filters (ESKF, UKFM). | \[Code](/algorithms/geodq) <br> \[Benchmark](/benchmarks/ronin\_geodq\_analysis.ipynb) | \[Read details](/docs/geodq.md) |
22+
23+
| \*\*ESKF / UKFM\*\* | Error-State and Unscented Kalman Filter implementations for SE(3) navigation tasks. | \[Code](/algorithms/filters) | \[Read details](/docs/geodq.md) |
24+
25+
| \*\*PGA-Bench\*\* \*(WIP)\* | Principal Geodesic Analysis on Riemannian manifolds. | \*Coming soon\* | \*Coming soon\* |
26+
27+
28+
29+
\## 🛠️ Setup \& Usage
30+
31+
32+
33+
\### Installation
34+
35+
```bash
36+
37+
git clone https://github.com/afanasyspb/SE3-Manifold-Lib.git
38+
39+
cd SE3-Manifold-Lib
40+
41+
pip install -r requirements.txt
42+

algorithms/__init__.py

Whitespace-only changes.

algorithms/filters/__init__.py

Whitespace-only changes.

algorithms/geodq/__init__.py

Whitespace-only changes.

benchmarks/ronin_geodq_analysis.ipynb

Lines changed: 308 additions & 203 deletions
Large diffs are not rendered by default.
413 KB
Loading
431 KB
Loading

docs/geodq.md

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@
66
<sup>1</sup>Innopolis University, Innopolis, Russia <br>
77
<sup>2</sup>Saint Petersburg Electrotechnical University "LETI", St. Petersburg, Russia
88

9-
<a href="INSERT_ARXIV_LINK_HERE"><img src='https://img.shields.io/badge/arXiv-Geometric%20State%20Fusion-red' alt='Paper PDF'></a>
10-
<a href='INSERT_GITHUB_LINK_HERE'><img src='https://img.shields.io/badge/Code-GeoDQ%20Benchmark-yellow' alt='Benchmark'></a>
11-
<a href='INSERT_DATA_LINK_HERE'><img src='https://img.shields.io/badge/Data-RoNIN%20Dataset-blue' alt='Dataset'></a>
9+
<!-- Placeholders for future links -->
10+
<a href="#"><img src='https://img.shields.io/badge/arXiv-Geometric%20State%20Fusion-red' alt='Paper PDF'></a>
11+
<a href='#'><img src='https://img.shields.io/badge/Code-GeoDQ%20Benchmark-yellow' alt='Benchmark'></a>
12+
<a href='#'><img src='https://img.shields.io/badge/Data-RoNIN%20Dataset-blue' alt='Dataset'></a>
1213

1314
</div>
1415

@@ -37,36 +38,36 @@ We evaluated the algorithms on 35 distinct trajectories. The table below summari
3738
3839
### Global Robustness Analysis
3940

40-
![robustness](assets/global_robustness.png)
41+
![robustness](assets/geodq_bench/global_robustness.png)
4142

4243
*Global Robustness Analysis averaged over all 35 RoNIN trajectories. The plot illustrates the degradation of RMSE (Log Scale) as the position update interval increases (simulating VO/GPS outages). The **GeoDQ observer** (Red/Dashed) maintains sub-meter accuracy and structural stability even when updates are decimated to 7 Hz (Interval ~30). In contrast, Kalman Filter variants (ESKF, UKF) exhibit exponential error growth much earlier, confirming the observer's superior handling of non-linear error dynamics.*
4344

4445
### Qualitative Tracking Performance
4546

46-
![trajectory](assets/a000_11_result.png)
47+
![trajectory](assets/geodq_bench/a000_11_result.png)
4748

4849
*Example of trajectory tracking on sequence `a000_11`. The 3D trajectory (top-left) and Top-Down projection (top-right) illustrate the tracking path of ESKF (Purple), UKF-M (Blue), and the proposed GeoDQ (Red/Green dashed) against Ground Truth (Black).*
4950

5051
## Repository Structure
5152

52-
This repository contains the implementation of three sensor fusion architectures (ESKF, UKF, GeoDQ) along with their JIT-optimized variants.
53+
This project is part of the `SE3-Manifold-Lib` collection.
5354

5455
### 1. Benchmarking & Analysis
55-
* **`RoNIN_Batch_Analysis_GeoDQ_JIT.ipynb`**: **(Main Entry Point)** The primary notebook that runs the full benchmark. It loads the filters, processes trajectories, calculates metrics (RMSE, ATE), performs the robustness test, and generates the plots/tables used in the paper.
56-
* **`RoNIN_Dataset_Batch_Processing.ipynb`**: Data preparation utility. Converts the raw RoNIN dataset (HDF5) into the standardized CSV format required by the benchmark pipeline.
56+
* **[`benchmarks/ronin_geodq_analysis.ipynb`](../benchmarks/ronin_geodq_analysis.ipynb)**: **(Main Entry Point)** The primary notebook that runs the full benchmark. It loads the filters, processes trajectories, calculates metrics (RMSE, ATE), performs the robustness test, and generates the plots/tables used in the paper.
57+
* **[`tools/ronin_processor.ipynb`](../tools/ronin_processor.ipynb)**: Data preparation utility. Converts the raw RoNIN dataset (HDF5) into the standardized CSV format required by the benchmark pipeline.
5758

5859
### 2. Filter Implementations (Kernels)
59-
The core logic is decoupled into standalone Python modules. Each method has a standard version (for reference/debugging) and a Numba-optimized version (for performance benchmarking).
60+
The core logic is decoupled into standalone Python modules located in the `algorithms/` directory.
6061

6162
| Method | Standard Implementation | JIT-Optimized Implementation | Description |
6263
| :--- | :--- | :--- | :--- |
63-
| **GeoDQ** | `GeoDQ_SCLERP.py` | `GeoDQ_SCLERP_JIT.py` | **(Proposed)** Dual Quaternion Geometric Observer using SCLERP. |
64-
| **UKF-M** | `UKFM_INS.py` | `UKFM_INS_JIT.py` | Manifold Unscented Kalman Filter on $SO(3) \times \mathbb{R}^3$. |
65-
| **ESKF** | `ESKF_INS.py` | `ESKF_INS_JIT.py` | Error-State Kalman Filter (Baseline). |
64+
| **GeoDQ** | [`algorithms/geodq/geodq_sclerp.py`](../algorithms/geodq/geodq_sclerp.py) | [`algorithms/geodq/geodq_sclerp_jit.py`](../algorithms/geodq/geodq_sclerp_jit.py) | **(Proposed)** Dual Quaternion Geometric Observer using SCLERP. |
65+
| **UKF-M** | [`algorithms/filters/ukfm.py`](../algorithms/filters/ukfm.py) | [`algorithms/filters/ukfm_jit.py`](../algorithms/filters/ukfm_jit.py) | Manifold Unscented Kalman Filter on $SO(3) \times \mathbb{R}^3$. |
66+
| **ESKF** | [`algorithms/filters/eskf.py`](../algorithms/filters/eskf.py) | [`algorithms/filters/eskf_jit.py`](../algorithms/filters/eskf_jit.py) | Error-State Kalman Filter (Baseline). |
6667

6768
### 3. Misc
6869
* **`requirements.txt`**: List of Python dependencies required to run the code.
69-
* **`assets/`**: Contains plots and visualization results.
70+
* **`docs/assets/`**: Contains plots and visualization results.
7071

7172
## Citation
7273

docs/index.md

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
¹ Innopolis University, Innopolis, Russia
66
² Saint Petersburg Electrotechnical University "LETI", St. Petersburg, Russia
77

8-
[arXiv Paper](INSERT_ARXIV_LINK_HERE) | [GitHub Code](INSERT_GITHUB_LINK_HERE) | [RoNIN Dataset](INSERT_DATA_LINK_HERE)
8+
[arXiv Paper](INSERT_ARXIV_LINK_HERE) | [GitHub Code](https://github.com/afanasyspb/SE3-Manifold-Lib) | [RoNIN Dataset](INSERT_DATA_LINK_HERE)
99

1010

1111
## Abstract
@@ -22,58 +22,65 @@ We evaluated the algorithms on 35 distinct trajectories. The table below summari
2222

2323
| Method | RMSE [m] (Mean ± Std) | Execution [ms] |
2424
| :--- | :--- | :--- |
25-
| **ESKF (Standard)** | 0.1409 ± 0.0213 | 9166.1 |
26-
| **ESKF (JIT)** | 0.1409 ± 0.0213 | 2807.8 |
27-
| **UKF-M (Standard)** | 0.2329 ± 0.0382 | 38362.3 |
28-
| **UKF-M (JIT)** | 0.2312 ± 0.0378 | 12773.8 |
29-
| **GeoDQ (Standard)** | **0.0377 ± 0.0081** | 18654.2 |
30-
| **GeoDQ (JIT)** | **0.0377 ± 0.0081** | **2430.3** |
25+
| **ESKF (Standard)** | 0.1409 ± 0.0213 | 10242.8 |
26+
| **ESKF (JIT)** | 0.1409 ± 0.0213 | 3189.2 |
27+
| **UKF-M (Standard)** | 0.2329 ± 0.0382 | 41492.6 |
28+
| **UKF-M (JIT)** | 0.2312 ± 0.0378 | 14624.7 |
29+
| **GeoDQ (Standard)** | **0.0377 ± 0.0081** | 21054.7 |
30+
| **GeoDQ (JIT)** | **0.0377 ± 0.0081** | **2813.6** |
3131

3232
> **Key Finding:** The proposed **GeoDQ (JIT)** architecture achieves the lowest tracking error while maintaining the fastest execution time. Notably, the **standard deviation** for GeoDQ is significantly lower ($\pm 0.0081$) compared to ESKF ($\pm 0.0213$) and UKF-M ($\pm 0.0382$). This indicates that the Geometric Observer provides the most consistent and predictable performance across diverse motion patterns, minimizing outliers where filter-based methods tend to diverge.
3333
3434
### Global Robustness Analysis
3535

36-
![robustness](assets/global_robustness.png)
36+
![robustness](assets/geodq_bench/global_robustness.png)
3737

3838
*Global Robustness Analysis averaged over all 35 RoNIN trajectories. The plot illustrates the degradation of RMSE (Log Scale) as the position update interval increases (simulating VO/GPS outages). The **GeoDQ observer** (Red/Dashed) maintains sub-meter accuracy and structural stability even when updates are decimated to 7 Hz (Interval ~30). In contrast, Kalman Filter variants (ESKF, UKF) exhibit exponential error growth much earlier, confirming the observer's superior handling of non-linear error dynamics.*
3939

4040
### Qualitative Tracking Performance
4141

42-
![trajectory](assets/a000_11_result.png)
43-
42+
![trajectory_a000_11](assets/geodq_bench/a000_11_result.png)
4443
*Example of trajectory tracking on sequence `a000_11`. The 3D trajectory (top-left) and Top-Down projection (top-right) illustrate the tracking path of ESKF (Purple), UKF-M (Blue), and the proposed GeoDQ (Red/Green dashed) against Ground Truth (Black).*
4544

45+
<br>
46+
47+
![trajectory_a025_2](assets/geodq_bench/a025_2_result.png)
48+
*Example of trajectory tracking on sequence `a025_2`. Comparison of estimated paths against ground truth, highlighting drift reduction by the Geometric Observer.*
49+
50+
<br>
51+
52+
![trajectory_a043_3](assets/geodq_bench/a043_3_result.png)
53+
*Example of trajectory tracking on sequence `a043_3`. The GeoDQ observer maintains tighter convergence to the ground truth path compared to filter-based approaches.*
54+
4655
## Repository Structure
4756

48-
This repository contains the implementation of three sensor fusion architectures (ESKF, UKF, GeoDQ) along with their JIT-optimized variants.
57+
This project is hosted in the `SE3-Manifold-Lib` repository.
4958

5059
### 1. Benchmarking & Analysis
51-
* **`RoNIN_Batch_Analysis_GeoDQ_JIT.ipynb`**: **(Main Entry Point)** The primary notebook that runs the full benchmark. It loads the filters, processes trajectories, calculates metrics (RMSE, ATE), performs the robustness test, and generates the plots/tables used in the paper.
52-
* **`RoNIN_Dataset_Batch_Processing.ipynb`**: Data preparation utility. Converts the raw RoNIN dataset (HDF5) into the standardized CSV format required by the benchmark pipeline.
60+
* **[`benchmarks/ronin_geodq_analysis.ipynb`](https://github.com/afanasyspb/SE3-Manifold-Lib/blob/main/benchmarks/ronin_geodq_analysis.ipynb)**: **(Main Entry Point)** The primary notebook that runs the full benchmark. It loads the filters, processes trajectories, calculates metrics (RMSE, ATE), performs the robustness test, and generates the plots/tables used in the paper.
61+
* **[`tools/ronin_processor.ipynb`](https://github.com/afanasyspb/SE3-Manifold-Lib/blob/main/tools/ronin_processor.ipynb)**: Data preparation utility. Converts the raw RoNIN dataset (HDF5) into the standardized CSV format required by the benchmark pipeline.
5362

5463
### 2. Filter Implementations (Kernels)
55-
The core logic is decoupled into standalone Python modules. Each method has a standard version (for reference/debugging) and a Numba-optimized version (for performance benchmarking).
64+
The core logic is decoupled into standalone Python modules located in the `algorithms/` directory.
5665

5766
| Method | Standard Implementation | JIT-Optimized Implementation | Description |
5867
| :--- | :--- | :--- | :--- |
59-
| **GeoDQ** | `GeoDQ_SCLERP.py` | `GeoDQ_SCLERP_JIT.py` | **(Proposed)** Dual Quaternion Geometric Observer using SCLERP. |
60-
| **UKF-M** | `UKFM_INS.py` | `UKFM_INS_JIT.py` | Manifold Unscented Kalman Filter on $SO(3) \times \mathbb{R}^3$. |
61-
| **ESKF** | `ESKF_INS.py` | `ESKF_INS_JIT.py` | Error-State Kalman Filter (Baseline). |
68+
| **GeoDQ** | [`algorithms/geodq/geodq_sclerp.py`](https://github.com/afanasyspb/SE3-Manifold-Lib/blob/main/algorithms/geodq/geodq_sclerp.py) | [`algorithms/geodq/geodq_sclerp_jit.py`](https://github.com/afanasyspb/SE3-Manifold-Lib/blob/main/algorithms/geodq/geodq_sclerp_jit.py) | **(Proposed)** Dual Quaternion Geometric Observer using SCLERP. |
69+
| **UKF-M** | [`algorithms/filters/ukfm.py`](https://github.com/afanasyspb/SE3-Manifold-Lib/blob/main/algorithms/filters/ukfm.py) | [`algorithms/filters/ukfm_jit.py`](https://github.com/afanasyspb/SE3-Manifold-Lib/blob/main/algorithms/filters/ukfm_jit.py) | Manifold Unscented Kalman Filter on $SO(3) \times \mathbb{R}^3$. |
70+
| **ESKF** | [`algorithms/filters/eskf.py`](https://github.com/afanasyspb/SE3-Manifold-Lib/blob/main/algorithms/filters/eskf.py) | [`algorithms/filters/eskf_jit.py`](https://github.com/afanasyspb/SE3-Manifold-Lib/blob/main/algorithms/filters/eskf_jit.py) | Error-State Kalman Filter (Baseline). |
6271

6372
### 3. Misc
6473
* **`requirements.txt`**: List of Python dependencies required to run the code.
65-
* **`assets/`**: Contains plots and visualization results.
74+
* **`docs/assets/`**: Contains plots and visualization results.
6675

6776
## Citation
6877

6978
If you find this project useful, please consider citing:
7079

71-
```
72-
bibtex
80+
```bibtex
7381
@inproceedings{afanasyev2026geometric,
7482
title={Geometric State Fusion for Autonomous Agents: A Comparative Analysis of Dual Quaternion Observer and Kalman Filters},
7583
author={Afanasyev, Ilya},
7684
booktitle={Proceedings of the 25th International Conference on Autonomous Agents and Multiagent Systems (AAMAS 2026)},
7785
year={2026}
78-
}
79-
```
86+
}

requirements.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@ matplotlib>=3.5.0
44
numba>=0.55.0
55
tqdm>=4.64.0
66
h5py>=3.6.0
7-
scipy>=1.7.0
7+
scipy>=1.7.0
8+
scikit-learn>=1.0.0
9+
pymap3d>=2.9.0

0 commit comments

Comments
 (0)