# superxslam/superodom architecture

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

- Interactive diagram: https://gitdiagram.com/superxslam/superodom
- Repository: https://github.com/superxslam/superodom

## Overview

SuperOdometry is a ROS 2 LiDAR and IMU odometry/mapping system. Its principal workflow accepts sensor streams, extracts LiDAR features, estimates LiDAR motion against a local map, and combines LiDAR constraints with IMU preintegration to produce odometry; IMU predictions also seed LiDAR registration. Mapping/localization and degeneracy awareness are documented capabilities. The source index and README support the main components and fusion relationships, but sampled excerpts do not show all runtime topic wiring, so uncertain links are omitted.

Main entry points: [`super_odometry/src/LaserMapping/laserMapping.cpp`](https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LaserMapping/laserMapping.cpp) (LiDAR Mapping Node), [`super_odometry/src/LidarProcess/LidarSlam.cpp`](https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LidarProcess/LidarSlam.cpp) (LiDAR SLAM), [`super_odometry/src/ImuPreintegration/imuPreintegration.cpp`](https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/ImuPreintegration/imuPreintegration.cpp) (IMU Preintegration), [`super_odometry/src/FeatureExtraction/featureExtraction.cpp`](https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/FeatureExtraction/featureExtraction.cpp) (Feature Extraction)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Sensor Ingestion"]
  node_launch_profiles["Sensor Launch Profiles"]
  node_lidar_input(("LiDAR Stream"))
  node_imu_input(("IMU Stream"))
  node_feature_extraction["Feature Extraction"]
end

subgraph group_estimation["Odometry Estimation"]
  node_lidar_mapping_node["LiDAR Mapping Node<br/>[laserMapping.cpp]"]
  node_lidar_slam["LiDAR SLAM<br/>[LidarSlam.cpp]"]
  node_imu_preintegration["IMU Preintegration"]
  node_odometry_result(("Odometry Output"))
end

subgraph group_mapping["Mapping And Risk"]
  node_local_map["Local Map<br/>[LocalMap.h]"]
  node_point_search["Point Search<br/>[octree.h]"]
  node_lidar_optimization["Lidar Optimization"]
  node_pose_factor["Pose Factor"]
  node_degeneracy_awareness["Degeneracy Awareness<br/>[LidarSlam.cpp]"]
  node_localization_mode["Localization Mode<br/>[laserMapping.cpp]"]
end

subgraph group_configviz["Configuration And Views"]
  node_configuration["Parameters And Calibration<br/>[parameter.cpp]"]
  node_rerun_visualization["Rerun Visualization"]
  node_rviz_visualization["RViz Visualization"]
end

node_operator(("Operator"))

node_operator -->|"launches"| node_launch_profiles
node_lidar_input -.->|"supplies scans"| node_feature_extraction
node_imu_input -.->|"supplies measurements"| node_imu_preintegration
node_feature_extraction -.->|"provides features"| node_lidar_mapping_node
node_lidar_mapping_node -->|"delegates SLAM"| node_lidar_slam
node_lidar_slam -->|"uses map"| node_local_map
node_local_map -->|"builds index"| node_point_search
node_lidar_slam -->|"uses optimizer"| node_lidar_optimization
node_lidar_slam -->|"uses factor"| node_pose_factor
node_lidar_mapping_node -->|"provides pose constraints"| node_imu_preintegration
node_imu_preintegration -->|"provides pose predictions"| node_lidar_mapping_node
node_lidar_mapping_node -.->|"publishes odometry"| node_odometry_result
node_lidar_slam -.->|"estimates risk"| node_degeneracy_awareness
node_lidar_mapping_node -.->|"supports mode"| node_localization_mode
node_operator -.->|"views results"| node_rerun_visualization
node_operator -->|"views results"| node_rviz_visualization
node_configuration -.->|"configures"| node_lidar_mapping_node

click node_launch_profiles "https://github.com/superxslam/superodom/tree/ros2/super_odometry/launch"
click node_feature_extraction "https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/FeatureExtraction/featureExtraction.cpp"
click node_lidar_mapping_node "https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LaserMapping/laserMapping.cpp"
click node_lidar_slam "https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LidarProcess/LidarSlam.cpp"
click node_imu_preintegration "https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/ImuPreintegration/imuPreintegration.cpp"
click node_local_map "https://github.com/superxslam/superodom/blob/ros2/super_odometry/include/super_odometry/LidarProcess/LocalMap.h"
click node_point_search "https://github.com/superxslam/superodom/blob/ros2/super_odometry/include/super_odometry/flann/octree.h"
click node_lidar_optimization "https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LaserMapping/lidarOptimization.cpp"
click node_pose_factor "https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LidarProcess/SE3AbsolutatePoseFactor.cpp"
click node_configuration "https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/parameter/parameter.cpp"
click node_degeneracy_awareness "https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LidarProcess/LidarSlam.cpp"
click node_localization_mode "https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LaserMapping/laserMapping.cpp"
click node_rerun_visualization "https://github.com/superxslam/superodom/blob/ros2/script/visualizers/rerun_visualizer.py"

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_launch_profiles,node_lidar_input,node_imu_input,node_feature_extraction toneBlue
class node_lidar_mapping_node,node_lidar_slam,node_imu_preintegration,node_odometry_result toneAmber
class node_local_map,node_point_search,node_lidar_optimization,node_pose_factor,node_degeneracy_awareness,node_localization_mode toneMint
class node_configuration,node_rerun_visualization,node_rviz_visualization toneRose
class node_operator toneIndigo
```

## Components

### Sensor Ingestion

- [Sensor Launch Profiles](https://github.com/superxslam/superodom/tree/ros2/super_odometry/launch): `super_odometry/launch`
- **LiDAR Stream**
- **IMU Stream**
- [Feature Extraction](https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/FeatureExtraction/featureExtraction.cpp): `super_odometry/src/FeatureExtraction/featureExtraction.cpp`

### Odometry Estimation

- [LiDAR Mapping Node](https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LaserMapping/laserMapping.cpp): `super_odometry/src/LaserMapping/laserMapping.cpp`
- [LiDAR SLAM](https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LidarProcess/LidarSlam.cpp): `super_odometry/src/LidarProcess/LidarSlam.cpp`
- [IMU Preintegration](https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/ImuPreintegration/imuPreintegration.cpp): `super_odometry/src/ImuPreintegration/imuPreintegration.cpp`
- **Odometry Output**

### Mapping And Risk

- [Local Map](https://github.com/superxslam/superodom/blob/ros2/super_odometry/include/super_odometry/LidarProcess/LocalMap.h): `super_odometry/include/super_odometry/LidarProcess/LocalMap.h`
- [Point Search](https://github.com/superxslam/superodom/blob/ros2/super_odometry/include/super_odometry/flann/octree.h): `super_odometry/include/super_odometry/flann/octree.h`
- [Lidar Optimization](https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LaserMapping/lidarOptimization.cpp): `super_odometry/src/LaserMapping/lidarOptimization.cpp`
- [Pose Factor](https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LidarProcess/SE3AbsolutatePoseFactor.cpp): `super_odometry/src/LidarProcess/SE3AbsolutatePoseFactor.cpp`
- [Degeneracy Awareness](https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LidarProcess/LidarSlam.cpp): `super_odometry/src/LidarProcess/LidarSlam.cpp`
- [Localization Mode](https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/LaserMapping/laserMapping.cpp): `super_odometry/src/LaserMapping/laserMapping.cpp`

### Configuration And Views

- [Parameters And Calibration](https://github.com/superxslam/superodom/blob/ros2/super_odometry/src/parameter/parameter.cpp): `super_odometry/src/parameter/parameter.cpp`
- [Rerun Visualization](https://github.com/superxslam/superodom/blob/ros2/script/visualizers/rerun_visualizer.py): `script/visualizers/rerun_visualizer.py`
- **RViz Visualization**

### Other components

- **Operator**

## Connections

- Operator → Sensor Launch Profiles: launches
- LiDAR Stream → Feature Extraction: supplies scans
- IMU Stream → IMU Preintegration: supplies measurements
- Feature Extraction → LiDAR Mapping Node: provides features
- LiDAR Mapping Node → LiDAR SLAM: delegates SLAM
- LiDAR SLAM → Local Map: uses map
- Local Map → Point Search: builds index (evidence: `super_odometry/include/super_odometry/LidarProcess/LocalMap.h`)
- LiDAR SLAM → Lidar Optimization: uses optimizer
- LiDAR SLAM → Pose Factor: uses factor
- LiDAR Mapping Node → IMU Preintegration: provides pose constraints
- IMU Preintegration → LiDAR Mapping Node: provides pose predictions
- LiDAR Mapping Node → Odometry Output: publishes odometry
- LiDAR SLAM → Degeneracy Awareness: estimates risk (evidence: `super_odometry/src/LidarProcess/LidarSlam.cpp`)
- LiDAR Mapping Node → Localization Mode: supports mode (evidence: `super_odometry/src/LaserMapping/laserMapping.cpp`)
- Operator → Rerun Visualization: views results
- Operator → RViz Visualization: views results
- Parameters And Calibration → LiDAR Mapping Node: configures
