# ddiannelos/autonomous-racing-fsd architecture

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

- Interactive diagram: https://gitdiagram.com/ddiannelos/autonomous-racing-fsd
- Repository: https://github.com/ddiannelos/autonomous-racing-fsd

## Overview

This is a ROS 2 Formula Student autonomous-racing stack, with CARLA as its documented simulator. Its user-to-result workflow detects cones, fuses camera and LiDAR observations, localizes and maps the track, then switches from exploration-lap planning and control to optimized racing-line control. Offline YOLO training and simulator setup support the runtime stack. The README documents the broad subsystem flow; sampled source confirms several internal calls, while unsampled launch and node wiring is not inferred.

Main entry points: [`src/path_planning/src/planning/exploration_planner.hpp`](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/planning/exploration_planner.hpp) (Exploration Planner), [`src/path_planning/src/planning/optimization_planner.hpp`](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/planning/optimization_planner.hpp) (Optimization Planner), [`src/localization/src/graph_slam_node.cpp`](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/localization/src/graph_slam_node.cpp) (GraphSLAM Node), [`src/path_planning/src/state_machine_node.cpp`](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/state_machine_node.cpp) (Race State Machine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_perception["Perception"]
  node_camera_detector["Camera Detection"]
  node_lidar_detector["LiDAR Detection"]
  node_cone_messages["Cone Messages<br/>[ConeArray.msg]"]
  node_sensor_fusion["Sensor Fusion"]
end

subgraph group_localization["Localization and Mapping"]
  node_ekf["IMU-GNSS EKF<br/>[ekf_node.cpp]"]
  node_graph_slam_node["GraphSLAM Node"]
  node_graph_slam_engine["GraphSLAM Engine<br/>[graphslam.hpp]"]
  node_slam_viz["SLAM Visualization"]
end

subgraph group_navigation["Planning and Control"]
  node_state_machine["Race State Machine"]
  node_exploration["Exploration Planner"]
  node_delaunay["Delaunay Triangulation<br/>[delaunay.hpp]"]
  node_bspline["B-Spline Smoothing<br/>[bspline.hpp]"]
  node_pure_pursuit["Pure Pursuit<br/>[pure_pursuit.hpp]"]
  node_pid["PID Control<br/>[pid_controller.hpp]"]
  node_optimization["Optimization Planner"]
  node_line_optimizer["Racing Line Optimizer<br/>[line_optimizer.hpp]"]
  node_velocity_profiler["Velocity Profiler"]
  node_mpc["MPC Controller<br/>[mpc_controller.hpp]"]
end

subgraph group_support["Simulation and Model Support"]
  node_carla(("CARLA Simulator"))
  node_carla_setup["CARLA Setup<br/>[objects.json]"]
  node_yolo_training["YOLO Training<br/>[train.py]"]
end

node_vehicle_sensors(("Vehicle Sensors"))

node_vehicle_sensors -->|"provides images"| node_camera_detector
node_vehicle_sensors -->|"provides point clouds"| node_lidar_detector
node_camera_detector -->|"provides detections"| node_sensor_fusion
node_lidar_detector -->|"provides centroids"| node_sensor_fusion
node_sensor_fusion -->|"publishes cones"| node_cone_messages
node_cone_messages -->|"supplies observations"| node_graph_slam_node
node_ekf -->|"provides odometry"| node_graph_slam_node
node_graph_slam_node -->|"processes observations"| node_graph_slam_engine
node_graph_slam_node -->|"publishes map"| node_cone_messages
node_graph_slam_node -->|"publishes map data"| node_slam_viz
node_cone_messages -->|"supplies cone map"| node_state_machine
node_state_machine -->|"runs exploration"| node_exploration
node_state_machine -->|"runs optimization"| node_optimization
node_exploration -->|"triangulates cones"| node_delaunay
node_exploration -->|"smooths centerline"| node_bspline
node_exploration -->|"computes steering"| node_pure_pursuit
node_exploration -->|"controls speed"| node_pid
node_optimization -->|"optimizes racing line"| node_line_optimizer
node_optimization -->|"profiles speed"| node_velocity_profiler
node_optimization -->|"smooths path"| node_bspline
node_optimization -->|"solves control"| node_mpc
node_state_machine -->|"sends vehicle commands"| node_carla
node_carla_setup -->|"configures sensors"| node_carla
node_yolo_training -->|"provides trained model"| node_camera_detector

click node_camera_detector "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/camera_detection/camera_detection/camera_detector_node.py"
click node_lidar_detector "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/lidar_perception/src/lidar_detector_node.cpp"
click node_cone_messages "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/interfaces/msg/ConeArray.msg"
click node_sensor_fusion "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/sensor_fusion/sensor_fusion/sensor_fusion_node.py"
click node_ekf "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/localization/src/ekf_node.cpp"
click node_graph_slam_node "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/localization/src/graph_slam_node.cpp"
click node_graph_slam_engine "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/localization/src/graphslam.hpp"
click node_slam_viz "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/localization/src/slam_visualization.cpp"
click node_state_machine "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/state_machine_node.cpp"
click node_exploration "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/planning/exploration_planner.hpp"
click node_delaunay "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/math/delaunay.hpp"
click node_bspline "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/math/bspline.hpp"
click node_pure_pursuit "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/control/pure_pursuit.hpp"
click node_pid "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/control/pid_controller.hpp"
click node_optimization "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/planning/optimization_planner.hpp"
click node_line_optimizer "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/planning/line_optimizer.hpp"
click node_velocity_profiler "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/planning/velocity_profiler.hpp"
click node_mpc "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/control/mpc_controller.hpp"
click node_carla_setup "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/carla_setup/objects.json"
click node_yolo_training "https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/offline_training/train.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_camera_detector,node_lidar_detector,node_cone_messages,node_sensor_fusion toneBlue
class node_ekf,node_graph_slam_node,node_graph_slam_engine,node_slam_viz toneAmber
class node_state_machine,node_exploration,node_delaunay,node_bspline,node_pure_pursuit,node_pid,node_optimization,node_line_optimizer,node_velocity_profiler,node_mpc toneMint
class node_carla,node_carla_setup,node_yolo_training toneRose
class node_vehicle_sensors toneIndigo
```

## Components

### Perception

- [Camera Detection](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/camera_detection/camera_detection/camera_detector_node.py): `src/camera_detection/camera_detection/camera_detector_node.py`
- [LiDAR Detection](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/lidar_perception/src/lidar_detector_node.cpp): `src/lidar_perception/src/lidar_detector_node.cpp`
- [Cone Messages](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/interfaces/msg/ConeArray.msg): `src/interfaces/msg/ConeArray.msg`
- [Sensor Fusion](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/sensor_fusion/sensor_fusion/sensor_fusion_node.py): `src/sensor_fusion/sensor_fusion/sensor_fusion_node.py`

### Localization and Mapping

- [IMU-GNSS EKF](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/localization/src/ekf_node.cpp): `src/localization/src/ekf_node.cpp`
- [GraphSLAM Node](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/localization/src/graph_slam_node.cpp): `src/localization/src/graph_slam_node.cpp`
- [GraphSLAM Engine](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/localization/src/graphslam.hpp): `src/localization/src/graphslam.hpp`
- [SLAM Visualization](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/localization/src/slam_visualization.cpp): `src/localization/src/slam_visualization.cpp`

### Planning and Control

- [Race State Machine](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/state_machine_node.cpp): `src/path_planning/src/state_machine_node.cpp`
- [Exploration Planner](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/planning/exploration_planner.hpp): `src/path_planning/src/planning/exploration_planner.hpp`
- [Delaunay Triangulation](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/math/delaunay.hpp): `src/path_planning/src/math/delaunay.hpp`
- [B-Spline Smoothing](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/math/bspline.hpp): `src/path_planning/src/math/bspline.hpp`
- [Pure Pursuit](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/control/pure_pursuit.hpp): `src/path_planning/src/control/pure_pursuit.hpp`
- [PID Control](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/control/pid_controller.hpp): `src/path_planning/src/control/pid_controller.hpp`
- [Optimization Planner](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/planning/optimization_planner.hpp): `src/path_planning/src/planning/optimization_planner.hpp`
- [Racing Line Optimizer](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/planning/line_optimizer.hpp): `src/path_planning/src/planning/line_optimizer.hpp`
- [Velocity Profiler](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/planning/velocity_profiler.hpp): `src/path_planning/src/planning/velocity_profiler.hpp`
- [MPC Controller](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/src/path_planning/src/control/mpc_controller.hpp): `src/path_planning/src/control/mpc_controller.hpp`

### Simulation and Model Support

- **CARLA Simulator**
- [CARLA Setup](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/carla_setup/objects.json): `carla_setup/objects.json`
- [YOLO Training](https://github.com/ddiannelos/autonomous-racing-fsd/blob/main/offline_training/train.py): `offline_training/train.py`

### Other components

- **Vehicle Sensors**

## Connections

- Vehicle Sensors → Camera Detection: provides images (evidence: `README.md`)
- Vehicle Sensors → LiDAR Detection: provides point clouds (evidence: `README.md`)
- Camera Detection → Sensor Fusion: provides detections (evidence: `README.md`)
- LiDAR Detection → Sensor Fusion: provides centroids (evidence: `README.md`)
- Sensor Fusion → Cone Messages: publishes cones (evidence: `README.md`)
- Cone Messages → GraphSLAM Node: supplies observations (evidence: `src/localization/src/graph_slam_node.cpp`)
- IMU-GNSS EKF → GraphSLAM Node: provides odometry (evidence: `README.md`)
- GraphSLAM Node → GraphSLAM Engine: processes observations (evidence: `src/localization/src/graph_slam_node.cpp`)
- GraphSLAM Node → Cone Messages: publishes map (evidence: `src/localization/src/graph_slam_node.cpp`)
- GraphSLAM Node → SLAM Visualization: publishes map data (evidence: `README.md`)
- Cone Messages → Race State Machine: supplies cone map (evidence: `src/path_planning/src/state_machine_node.cpp`)
- Race State Machine → Exploration Planner: runs exploration (evidence: `src/path_planning/src/state_machine_node.cpp`)
- Race State Machine → Optimization Planner: runs optimization (evidence: `src/path_planning/src/state_machine_node.cpp`)
- Exploration Planner → Delaunay Triangulation: triangulates cones (evidence: `src/path_planning/src/planning/exploration_planner.hpp`)
- Exploration Planner → B-Spline Smoothing: smooths centerline (evidence: `src/path_planning/src/planning/exploration_planner.hpp`)
- Exploration Planner → Pure Pursuit: computes steering (evidence: `src/path_planning/src/planning/exploration_planner.hpp`)
- Exploration Planner → PID Control: controls speed (evidence: `src/path_planning/src/planning/exploration_planner.hpp`)
- Optimization Planner → Racing Line Optimizer: optimizes racing line (evidence: `src/path_planning/src/planning/optimization_planner.hpp`)
- Optimization Planner → Velocity Profiler: profiles speed (evidence: `src/path_planning/src/planning/optimization_planner.hpp`)
- Optimization Planner → B-Spline Smoothing: smooths path (evidence: `src/path_planning/src/planning/optimization_planner.hpp`)
- Optimization Planner → MPC Controller: solves control (evidence: `src/path_planning/src/planning/optimization_planner.hpp`)
- Race State Machine → CARLA Simulator: sends vehicle commands (evidence: `README.md`)
- CARLA Setup → CARLA Simulator: configures sensors (evidence: `README.md`)
- YOLO Training → Camera Detection: provides trained model (evidence: `README.md`)
