# je310/eskf architecture

> Architecture diagram of the GitHub repository je310/eskf, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/je310/eskf
- Repository: https://github.com/je310/eskf

## Overview

This repository is an Error State Kalman Filter pose estimator: inertial readings drive a 6DOF state estimate, which can be corrected with motion-capture or other absolute-position measurements. The visible application replays parsed data through filter instances and publishes pose transforms; the README also describes intended embedded-device use. The filter implementation and parser internals were not sampled, so their detailed internal call wiring is omitted. Eigen is included as the numerical layer, but its internal algorithms are not mapped in detail.

Main entry points: [`src/ESKF.cpp`](https://github.com/je310/eskf/blob/master/src/ESKF.cpp) (ESKF implementation), [`src/main.cpp`](https://github.com/je310/eskf/blob/master/src/main.cpp) (Replay application), [`src/parseDataFiles.cpp`](https://github.com/je310/eskf/blob/master/src/parseDataFiles.cpp) (Data-file parser), [`include/ESKF.h`](https://github.com/je310/eskf/blob/master/include/ESKF.h) (ESKF interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Data ingestion"]
  node_application["Replay application<br/>[main.cpp]"]
  node_parser["Data-file parser<br/>[parseDataFiles.cpp]"]
end

subgraph group_estimate["State estimation"]
  node_filterapi["ESKF interface<br/>[ESKF.h]"]
  node_filterimpl["ESKF implementation<br/>[ESKF.cpp]"]
  node_propagation["Inertial propagation<br/>[ESKF.cpp]"]
  node_correction["Absolute correction<br/>[ESKF.cpp]"]
  node_covariance["Covariance propagation<br/>[unrolledFPFt.h]"]
end

subgraph group_math["Numerical foundation"]
  node_mathcore["Matrix and vector core<br/>[Core.h]"]
  node_geometry["Rotation and transforms<br/>[Geometry.h]"]
end

subgraph group_output["Pose output"]
  node_posebroadcast["Pose broadcasting<br/>[main.cpp]"]
end

node_inputdata(("IMU and absolute data"))
node_ros(("ROS transform system"))

node_inputdata -->|"provides files"| node_parser
node_parser -->|"returns readings"| node_application
node_application -->|"feeds measurements"| node_filterapi
node_filterapi -->|"implemented by"| node_filterimpl
node_filterimpl -->|"estimates motion"| node_propagation
node_filterimpl -->|"applies updates"| node_correction
node_filterimpl -->|"propagates covariance"| node_covariance
node_application -->|"requests pose output"| node_posebroadcast
node_posebroadcast -->|"publishes transforms"| node_ros
node_filterimpl -->|"uses"| node_mathcore
node_filterimpl -->|"uses"| node_geometry

click node_application "https://github.com/je310/eskf/blob/master/src/main.cpp"
click node_parser "https://github.com/je310/eskf/blob/master/src/parseDataFiles.cpp"
click node_filterapi "https://github.com/je310/eskf/blob/master/include/ESKF.h"
click node_filterimpl "https://github.com/je310/eskf/blob/master/src/ESKF.cpp"
click node_propagation "https://github.com/je310/eskf/blob/master/src/ESKF.cpp"
click node_correction "https://github.com/je310/eskf/blob/master/src/ESKF.cpp"
click node_covariance "https://github.com/je310/eskf/blob/master/include/unrolledFPFt.h"
click node_mathcore "https://github.com/je310/eskf/blob/master/eigen/Core.h"
click node_geometry "https://github.com/je310/eskf/blob/master/eigen/Geometry.h"
click node_posebroadcast "https://github.com/je310/eskf/blob/master/src/main.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_application,node_parser toneBlue
class node_filterapi,node_filterimpl,node_propagation,node_correction,node_covariance toneAmber
class node_mathcore,node_geometry toneMint
class node_posebroadcast toneRose
class node_inputdata,node_ros toneIndigo
```

## Components

### Data ingestion

- [Replay application](https://github.com/je310/eskf/blob/master/src/main.cpp): `src/main.cpp`
- [Data-file parser](https://github.com/je310/eskf/blob/master/src/parseDataFiles.cpp): `src/parseDataFiles.cpp`

### State estimation

- [ESKF interface](https://github.com/je310/eskf/blob/master/include/ESKF.h): `include/ESKF.h`
- [ESKF implementation](https://github.com/je310/eskf/blob/master/src/ESKF.cpp): `src/ESKF.cpp`
- [Inertial propagation](https://github.com/je310/eskf/blob/master/src/ESKF.cpp): `src/ESKF.cpp`
- [Absolute correction](https://github.com/je310/eskf/blob/master/src/ESKF.cpp): `src/ESKF.cpp`
- [Covariance propagation](https://github.com/je310/eskf/blob/master/include/unrolledFPFt.h): `include/unrolledFPFt.h`

### Numerical foundation

- [Matrix and vector core](https://github.com/je310/eskf/blob/master/eigen/Core.h): `eigen/Core.h`
- [Rotation and transforms](https://github.com/je310/eskf/blob/master/eigen/Geometry.h): `eigen/Geometry.h`

### Pose output

- [Pose broadcasting](https://github.com/je310/eskf/blob/master/src/main.cpp): `src/main.cpp`

### Other components

- **IMU and absolute data**
- **ROS transform system**

## Connections

- IMU and absolute data → Data-file parser: provides files
- Data-file parser → Replay application: returns readings
- Replay application → ESKF interface: feeds measurements
- ESKF interface → ESKF implementation: implemented by
- ESKF implementation → Inertial propagation: estimates motion
- ESKF implementation → Absolute correction: applies updates
- ESKF implementation → Covariance propagation: propagates covariance
- Replay application → Pose broadcasting: requests pose output
- Pose broadcasting → ROS transform system: publishes transforms
- ESKF implementation → Matrix and vector core: uses
- ESKF implementation → Rotation and transforms: uses
