# chineseljh/mid360_quad_slam architecture

> Architecture diagram of the GitHub repository chineseljh/mid360_quad_slam, 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/chineseljh/mid360_quad_slam
- Repository: https://github.com/chineseljh/mid360_quad_slam

## Overview

This ROS 2 stack turns LiDAR and IMU data into odometry and maps, then supports global relocalization, pose-graph optimization, map refinement, and delivery of pose data over serial to a robot controller. The README documents FAST-LIO2 and Point-LIO as alternative front ends. Edges reflect the sampled callbacks and explicit launch remappings; some module internals and topic wiring are not shown in the excerpts.

Main entry points: [`src/lidar_slam_modules/fastlio2/src/lio_node.cpp`](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/fastlio2/src/lio_node.cpp) (FAST-LIO2 Node), [`src/lidar_slam_modules/point_lio_ros2/src/laserMapping.cpp`](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/point_lio_ros2/src/laserMapping.cpp) (Point-LIO Mapping), [`src/lidar_slam_modules/localizer/src/localizer_node.cpp`](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/localizer/src/localizer_node.cpp) (ICP Localizer), [`src/lidar_slam_modules/hba/src/hba/hba.cpp`](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/hba/src/hba/hba.cpp) (Map Adjustment)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontends["Odometry Front Ends"]
  node_fastlio["FAST-LIO2 Node<br/>[lio_node.cpp]"]
  node_fastlio_builder["Map Builder<br/>[map_builder.cpp]"]
  node_pointlio["Point-LIO Mapping<br/>[laserMapping.cpp]"]
  node_pointlio_preprocess["Cloud Preprocessing<br/>[preprocess.cpp]"]
end

subgraph group_mapping["Mapping And Refinement"]
  node_hba_node["HBA Services<br/>[hba_node.cpp]"]
  node_hba["Map Adjustment<br/>[hba.cpp]"]
  node_blam["Voxel Plane Model<br/>[blam.cpp]"]
end

subgraph group_localization["Localization And Optimization"]
  node_localizer["ICP Localizer<br/>[localizer_node.cpp]"]
  node_icp["ICP Matching<br/>[icp_localizer.cpp]"]
  node_pgo_node["PGO Node<br/>[pgo_node.cpp]"]
  node_simple_pgo["Pose Graph<br/>[simple_pgo.cpp]"]
end

subgraph group_robot_io["Robot Communications"]
  node_pose_listener["Pose Listener<br/>[tf_to_serial.py]"]
  node_serial_tools["Serial Pose Sender<br/>[odom_to_serial.py]"]
  node_uart_sender["Jetson UART Sender"]
end

node_sensors(("LiDAR And IMU"))
node_lio_outputs(("Odometry And Clouds"))
node_map_asset["Global Map File"]
node_controller(("Robot Controller"))

node_sensors -->|"supplies measurements"| node_fastlio
node_fastlio -->|"updates map"| node_fastlio_builder
node_fastlio -->|"publishes odometry and clouds"| node_lio_outputs
node_sensors -->|"supplies measurements"| node_pointlio
node_pointlio -->|"processes LiDAR scans"| node_pointlio_preprocess
node_pointlio -->|"publishes odometry and clouds"| node_lio_outputs
node_lio_outputs -->|"provides cloud and odometry"| node_localizer
node_localizer -->|"loads map"| node_map_asset
node_localizer -->|"matches scans"| node_icp
node_lio_outputs -->|"provides cloud and odometry"| node_pgo_node
node_pgo_node -->|"optimizes poses"| node_simple_pgo
node_hba_node -->|"inserts map data"| node_hba
node_hba -->|"uses voxel plane model"| node_blam
node_pose_listener -->|"sends filtered pose"| node_controller
node_uart_sender -.->|"sends pose over UART"| node_controller
node_serial_tools -.->|"sends serial data"| node_controller

click node_fastlio "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/fastlio2/src/lio_node.cpp"
click node_fastlio_builder "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/fastlio2/src/map_builder/map_builder.cpp"
click node_pointlio "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/point_lio_ros2/src/laserMapping.cpp"
click node_pointlio_preprocess "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/point_lio_ros2/src/preprocess.cpp"
click node_localizer "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/localizer/src/localizer_node.cpp"
click node_icp "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/localizer/src/localizers/icp_localizer.cpp"
click node_pgo_node "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/pgo/src/pgo_node.cpp"
click node_simple_pgo "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/pgo/src/pgos/simple_pgo.cpp"
click node_hba_node "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/hba/src/hba_node.cpp"
click node_hba "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/hba/src/hba/hba.cpp"
click node_blam "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/hba/src/hba/blam.cpp"
click node_pose_listener "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/tf_to_serial.py"
click node_serial_tools "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/odom_to_serial.py"
click node_uart_sender "https://github.com/chineseljh/mid360_quad_slam/blob/main/src/tf_to_uart_jetson.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_fastlio,node_fastlio_builder,node_pointlio,node_pointlio_preprocess toneBlue
class node_hba_node,node_hba,node_blam toneAmber
class node_localizer,node_icp,node_pgo_node,node_simple_pgo toneMint
class node_pose_listener,node_serial_tools,node_uart_sender toneRose
class node_sensors,node_lio_outputs,node_map_asset,node_controller toneIndigo
```

## Components

### Odometry Front Ends

- [FAST-LIO2 Node](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/fastlio2/src/lio_node.cpp): `src/lidar_slam_modules/fastlio2/src/lio_node.cpp`
- [Map Builder](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/fastlio2/src/map_builder/map_builder.cpp): `src/lidar_slam_modules/fastlio2/src/map_builder/map_builder.cpp`
- [Point-LIO Mapping](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/point_lio_ros2/src/laserMapping.cpp): `src/lidar_slam_modules/point_lio_ros2/src/laserMapping.cpp`
- [Cloud Preprocessing](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/point_lio_ros2/src/preprocess.cpp): `src/lidar_slam_modules/point_lio_ros2/src/preprocess.cpp`

### Mapping And Refinement

- [HBA Services](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/hba/src/hba_node.cpp): `src/lidar_slam_modules/hba/src/hba_node.cpp`
- [Map Adjustment](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/hba/src/hba/hba.cpp): `src/lidar_slam_modules/hba/src/hba/hba.cpp`
- [Voxel Plane Model](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/hba/src/hba/blam.cpp): `src/lidar_slam_modules/hba/src/hba/blam.cpp`

### Localization And Optimization

- [ICP Localizer](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/localizer/src/localizer_node.cpp): `src/lidar_slam_modules/localizer/src/localizer_node.cpp`
- [ICP Matching](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/localizer/src/localizers/icp_localizer.cpp): `src/lidar_slam_modules/localizer/src/localizers/icp_localizer.cpp`
- [PGO Node](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/pgo/src/pgo_node.cpp): `src/lidar_slam_modules/pgo/src/pgo_node.cpp`
- [Pose Graph](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/lidar_slam_modules/pgo/src/pgos/simple_pgo.cpp): `src/lidar_slam_modules/pgo/src/pgos/simple_pgo.cpp`

### Robot Communications

- [Pose Listener](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/tf_to_serial.py): `src/tf_to_serial.py`
- [Serial Pose Sender](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/odom_to_serial.py): `src/odom_to_serial.py`
- [Jetson UART Sender](https://github.com/chineseljh/mid360_quad_slam/blob/main/src/tf_to_uart_jetson.py): `src/tf_to_uart_jetson.py`

### Other components

- **LiDAR And IMU**
- **Odometry And Clouds**
- **Global Map File**
- **Robot Controller**

## Connections

- LiDAR And IMU → FAST-LIO2 Node: supplies measurements
- FAST-LIO2 Node → Map Builder: updates map
- FAST-LIO2 Node → Odometry And Clouds: publishes odometry and clouds
- LiDAR And IMU → Point-LIO Mapping: supplies measurements
- Point-LIO Mapping → Cloud Preprocessing: processes LiDAR scans
- Point-LIO Mapping → Odometry And Clouds: publishes odometry and clouds
- Odometry And Clouds → ICP Localizer: provides cloud and odometry
- ICP Localizer → Global Map File: loads map
- ICP Localizer → ICP Matching: matches scans
- Odometry And Clouds → PGO Node: provides cloud and odometry
- PGO Node → Pose Graph: optimizes poses
- HBA Services → Map Adjustment: inserts map data
- Map Adjustment → Voxel Plane Model: uses voxel plane model
- Pose Listener → Robot Controller: sends filtered pose
- Jetson UART Sender → Robot Controller: sends pose over UART
- Serial Pose Sender → Robot Controller: sends serial data
