## 💻 **Software Architecture** Our software implementation employs a distributed processing architecture that optimizes performance through specialized task allocation between multiple processors. This documentation was last updated on **[september]**. ### **System Architecture Overview**
| **Processing Distribution**: - **Vision & Navigation Unit**: Raspberry Pi 4 handling real-time image analysis, obstacle-color detection, lane tracking, and parking-marker detection - **Sensor & Motor Control Unit**: ESP32 running its own onboard state machine (obstacle avoidance → clearance → corner turn → wall following) using its own ultrasonic sensors, while accepting vision-based overrides from the Raspberry Pi over UART - **Communication Bridge**: One-directional UART protocol at 115200 baud, Raspberry Pi → ESP32, carrying vision detection results as plain-text messages **Core Software Components**: - [`vision_navigation.py`](vision_navigation.py) - Obstacle Challenge: real-time HSV-based detection of red/green obstacle pillars, the white track lane, and magenta parking markers, plus proportional steering-correction calculation - [`final.py`](final.py) - Open Challenge: area-based wall following (dual ROI strips) + orange-line turn counting, actively transmits `A` messages over UART - [`esp32_car.ino`](esp32_car.ino) - Onboard motor/servo control, ultrasonic wall-following and corner-turning state machine, and UART parser for vision messages Only one of the two vision scripts (`vision_navigation.py` or `final.py`) runs on the Raspberry Pi at a time, matching the challenge currently being run. |
Integrated development and testing setup |