# xuannn28/fyp-avs architecture

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

## Overview

This repository combines a Raspberry Pi cooperative-perception demonstration with a separate dataset-analysis strand. In the demo, an ego vehicle uses local detections and RSU detections to recover occluded objects or count a queue; camera alignment and confidence-based triggering support the cooperative result. The analysis strand evaluates scene coverage on OPV2V and DAIR-V2X, with a BEV semantic-processing prototype. The graph reflects documented capabilities and sampled calls; some demo wiring and analysis scripts are represented only at their documented subsystem level because their implementation was not sampled.

Main entry points: [`stat_analysis/CoopPerception/main.py`](https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/main.py) (BEV prototype), [`final_demo/mid-sem demo (pedestrain)/rsu.py`](https://github.com/xuannn28/fyp-avs/blob/main/final_demo/mid-sem%20demo%20(pedestrain)/rsu.py) (RSU perception), [`final_demo/mid-sem demo (pedestrain)/ego.py`](https://github.com/xuannn28/fyp-avs/blob/main/final_demo/mid-sem%20demo%20(pedestrain)/ego.py) (Ego perception), [`stat_analysis/CoopPerception/experiments/train.py`](https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/experiments/train.py) (Model training)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_demo["Hardware Demo"]
  node_ego["Ego perception<br/>[ego.py]"]
  node_rsu["RSU perception<br/>[rsu.py]"]
  node_v2x["V2X transport<br/>[ego_v2v.py]"]
  node_calibration["Camera calibration<br/>[calibrate.py]"]
  node_confidence["Confidence trigger<br/>[coop_perception.py]"]
  node_queue["Queue decision"]
  node_semantic["Semantic transmission"]
  node_bandwidth["JPEG trade-off"]
end

subgraph group_analysis["Dataset Analysis"]
  node_analysis_main["BEV prototype<br/>[main.py]"]
  node_dataset["OPV2V loader<br/>[opv2v_dataset.py]"]
  node_training["Model training<br/>[train.py]"]
end

subgraph group_models["BEV Processing"]
  node_encoder["BEV encoder<br/>[bev_encoder.py]"]
  node_segmentation["Segmentation head<br/>[seg_head.py]"]
  node_compression["Semantic encoding<br/>[compression.py]"]
  node_transform["Pose alignment<br/>[transform.py]"]
  node_fusion["BEV fusion<br/>[max_fusion.py]"]
end

subgraph group_evaluation["Evaluation"]
  node_metrics["Cooperation metrics<br/>[metrics.py]"]
  node_prove["OPV2V evaluation"]
  node_dair_analysis["Camera coverage analysis"]
end

node_driver(("Ego driver"))
node_cameras(("Vehicle cameras"))
node_opv2v[("OPV2V data")]
node_dair[("DAIR-V2X data")]

node_cameras -->|"capture frames"| node_ego
node_cameras -->|"capture frames"| node_rsu
node_rsu -->|"send detections"| node_v2x
node_v2x -->|"deliver detections"| node_ego
node_calibration -->|"provide homography"| node_ego
node_ego -->|"provide ego detections"| node_confidence
node_confidence -->|"present fusion result"| node_driver
node_driver -->|"request queue assessment"| node_queue
node_queue -->|"present overtake guidance"| node_driver
node_rsu -.->|"provide detections"| node_semantic
node_rsu -.->|"provide image"| node_bandwidth
node_opv2v -->|"load samples"| node_dataset
node_dataset -->|"supply samples"| node_analysis_main
node_analysis_main -->|"encode LiDAR"| node_encoder
node_analysis_main -->|"segment BEV"| node_segmentation
node_analysis_main -->|"quantize and encode"| node_compression
node_analysis_main -->|"align neighbors"| node_transform
node_analysis_main -->|"fuse maps"| node_fusion
node_training -.->|"load training data"| node_dataset
node_training -.->|"train model"| node_encoder
node_training -.->|"train model"| node_segmentation
node_prove -->|"compute metrics"| node_metrics
node_opv2v -->|"evaluate frames"| node_prove
node_dair -->|"evaluate pairs"| node_dair_analysis

click node_ego "https://github.com/xuannn28/fyp-avs/blob/main/final_demo/mid-sem%20demo%20(pedestrain)/ego.py"
click node_rsu "https://github.com/xuannn28/fyp-avs/blob/main/final_demo/mid-sem%20demo%20(pedestrain)/rsu.py"
click node_v2x "https://github.com/xuannn28/fyp-avs/blob/main/final_demo/mid-sem%20demo%20(pedestrain)/ego_v2v.py"
click node_calibration "https://github.com/xuannn28/fyp-avs/blob/main/final_demo/calibrate.py"
click node_confidence "https://github.com/xuannn28/fyp-avs/blob/main/final_demo/coop_perception.py"
click node_queue "https://github.com/xuannn28/fyp-avs/blob/main/final_demo/queue_perception.py"
click node_semantic "https://github.com/xuannn28/fyp-avs/blob/main/final_demo/semantic-summary/semantic_experiment.py"
click node_bandwidth "https://github.com/xuannn28/fyp-avs/blob/main/final_demo/bandwidth-summary/bandwidth_summary.py"
click node_analysis_main "https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/main.py"
click node_dataset "https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/data/opv2v_dataset.py"
click node_encoder "https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/models/bev_encoder.py"
click node_segmentation "https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/models/seg_head.py"
click node_compression "https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/utils/compression.py"
click node_transform "https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/utils/transform.py"
click node_fusion "https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/fusion/max_fusion.py"
click node_training "https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/experiments/train.py"
click node_metrics "https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/utils/metrics.py"
click node_prove "https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/experiments/prove_cooperation.py"
click node_dair_analysis "https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/dairv2x_camera_analysis.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_ego,node_rsu,node_v2x,node_calibration,node_confidence,node_queue,node_semantic,node_bandwidth toneBlue
class node_analysis_main,node_dataset,node_training,node_opv2v,node_dair toneAmber
class node_encoder,node_segmentation,node_compression,node_transform,node_fusion toneMint
class node_metrics,node_prove,node_dair_analysis toneRose
class node_driver,node_cameras toneIndigo
```

## Components

### Hardware Demo

- [Ego perception](https://github.com/xuannn28/fyp-avs/blob/main/final_demo/mid-sem%20demo%20(pedestrain)/ego.py): `final_demo/mid-sem demo (pedestrain)/ego.py`
- [RSU perception](https://github.com/xuannn28/fyp-avs/blob/main/final_demo/mid-sem%20demo%20(pedestrain)/rsu.py): `final_demo/mid-sem demo (pedestrain)/rsu.py`
- [V2X transport](https://github.com/xuannn28/fyp-avs/blob/main/final_demo/mid-sem%20demo%20(pedestrain)/ego_v2v.py): `final_demo/mid-sem demo (pedestrain)/ego_v2v.py`
- [Camera calibration](https://github.com/xuannn28/fyp-avs/blob/main/final_demo/calibrate.py): `final_demo/calibrate.py`
- [Confidence trigger](https://github.com/xuannn28/fyp-avs/blob/main/final_demo/coop_perception.py): `final_demo/coop_perception.py`
- [Queue decision](https://github.com/xuannn28/fyp-avs/blob/main/final_demo/queue_perception.py): `final_demo/queue_perception.py`
- [Semantic transmission](https://github.com/xuannn28/fyp-avs/blob/main/final_demo/semantic-summary/semantic_experiment.py): `final_demo/semantic-summary/semantic_experiment.py`
- [JPEG trade-off](https://github.com/xuannn28/fyp-avs/blob/main/final_demo/bandwidth-summary/bandwidth_summary.py): `final_demo/bandwidth-summary/bandwidth_summary.py`

### Dataset Analysis

- [BEV prototype](https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/main.py): `stat_analysis/CoopPerception/main.py`
- [OPV2V loader](https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/data/opv2v_dataset.py): `stat_analysis/CoopPerception/data/opv2v_dataset.py`
- [Model training](https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/experiments/train.py): `stat_analysis/CoopPerception/experiments/train.py`

### BEV Processing

- [BEV encoder](https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/models/bev_encoder.py): `stat_analysis/CoopPerception/models/bev_encoder.py`
- [Segmentation head](https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/models/seg_head.py): `stat_analysis/CoopPerception/models/seg_head.py`
- [Semantic encoding](https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/utils/compression.py): `stat_analysis/CoopPerception/utils/compression.py`
- [Pose alignment](https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/utils/transform.py): `stat_analysis/CoopPerception/utils/transform.py`
- [BEV fusion](https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/fusion/max_fusion.py): `stat_analysis/CoopPerception/fusion/max_fusion.py`

### Evaluation

- [Cooperation metrics](https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/utils/metrics.py): `stat_analysis/CoopPerception/utils/metrics.py`
- [OPV2V evaluation](https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/experiments/prove_cooperation.py): `stat_analysis/CoopPerception/experiments/prove_cooperation.py`
- [Camera coverage analysis](https://github.com/xuannn28/fyp-avs/blob/main/stat_analysis/CoopPerception/dairv2x_camera_analysis.py): `stat_analysis/CoopPerception/dairv2x_camera_analysis.py`

### Other components

- **Ego driver**
- **Vehicle cameras**
- **OPV2V data**
- **DAIR-V2X data**

## Connections

- Vehicle cameras → Ego perception: capture frames
- Vehicle cameras → RSU perception: capture frames
- RSU perception → V2X transport: send detections
- V2X transport → Ego perception: deliver detections
- Camera calibration → Ego perception: provide homography
- Ego perception → Confidence trigger: provide ego detections
- Confidence trigger → Ego driver: present fusion result
- Ego driver → Queue decision: request queue assessment
- Queue decision → Ego driver: present overtake guidance
- RSU perception → Semantic transmission: provide detections
- RSU perception → JPEG trade-off: provide image
- OPV2V data → OPV2V loader: load samples
- OPV2V loader → BEV prototype: supply samples
- BEV prototype → BEV encoder: encode LiDAR
- BEV prototype → Segmentation head: segment BEV
- BEV prototype → Semantic encoding: quantize and encode
- BEV prototype → Pose alignment: align neighbors
- BEV prototype → BEV fusion: fuse maps
- Model training → OPV2V loader: load training data
- Model training → BEV encoder: train model
- Model training → Segmentation head: train model
- OPV2V evaluation → Cooperation metrics: compute metrics
- OPV2V data → OPV2V evaluation: evaluate frames
- DAIR-V2X data → Camera coverage analysis: evaluate pairs
