Tracker Turret este un sistem embedded capabil să detecteze și să urmărească automat o persoană folosind procesare video în timp real și control hardware al unei turete motorizate. Proiectul combină algoritmi de computer vision, comunicație serială și control hardware low-level într-o platformă integrată.
Ideea proiectului a pornit de la dorința de a crea un sistem care îmbină procesarea video cu controlul mecanic în timp real. Sistemul utilizează camere video conectate la o placă Avnet MaaXBoard pentru detectarea și urmărirea unei persoane folosind OpenCV. Datele rezultate sunt transmise către un microcontroler Arduino Nano ESP32 care controlează mișcarea servo motoarelor și afișarea informațiilor pe un display OLED.
Scopul principal al proiectului este realizarea unei platforme autonome capabile să:
* detecteze fețe în timp real * urmărească poziția unei persoane * controleze mecanic orientarea turetei * afișeze starea sistemului pe display * comunice între module hardware diferite
Proiectul poate avea aplicații în:
* robotică * sisteme autonome * supraveghere inteligentă * automatizare * cercetare în computer vision și embedded systems
Elementul de noutate al proiectului constă în integrarea unui sistem Linux embedded capabil de procesare video avansată cu un microcontroler dedicat controlului hardware în timp real, utilizând mai multe protocoale hardware și tehnici low-level studiate în laborator.
Sistemul este împărțit în două componente principale:
* modulul de procesare video * modulul de control hardware
==== Modulul de procesare video
Procesarea video este realizată pe placa Avnet MaaXBoard i.MX8M care rulează Linux embedded. Pe aceasta rulează un program Python bazat pe OpenCV responsabil pentru:
* capturarea imaginilor de la cameră * detectarea fețelor folosind clasificatori Haar Cascade * estimarea poziției țintei în imagine * generarea comenzilor de control
În funcție de poziția feței detectate în cadru:
* dacă fața este în stânga → se transmite comanda de rotire stânga * dacă fața este în dreapta → se transmite comanda de rotire dreapta * dacă fața este centrată → tureta se oprește * dacă nu există față detectată → sistemul intră în modul SEARCHING
Comenzile sunt transmise prin UART către microcontroler.
==== Modulul de control hardware
Controlul hardware este realizat folosind Arduino Nano ESP32 programat folosind ESP-IDF și drivere hardware low-level.
Microcontrollerul este responsabil pentru:
* controlul servo motoarelor folosind PWM hardware * controlul display-ului OLED prin I2C * recepționarea comenzilor prin UART * actualizarea stării sistemului
Comenzile primite de la MaaXBoard sunt:
| Comandă | Funcție |
|---|---|
| C0 | Oprire / țintă centrată |
| C1 | Rotire stânga |
| C2 | Rotire dreapta |
| C3 | Mod SEARCHING |
În funcție de comanda primită:
* servo motorul este mișcat * display-ul OLED este actualizat * starea sistemului este modificată
Display-ul OLED afișează:
* DETECTED → atunci când există o față detectată * SEARCHING → atunci când nu există țintă detectată
* Cameră USB → MaaXBoard i.MX8M * OpenCV → Detectare față și tracking * Algoritm decizie → Determinare direcție țintă * UART → Transmitere comenzi * Arduino Nano ESP32 → Control hardware * PWM → Control servo motor * I2C → Control display OLED * OLED SSD1306 → Afișare stare sistem
==== Fluxul complet de funcționare
1. Camera transmite imagini către MaaXBoard. 2. OpenCV procesează imaginea și detectează fața. 3. Sistemul determină poziția feței în cadru. 4. Se generează o comandă UART. 5. Comanda este transmisă către Arduino Nano ESP32. 6. ESP32 actualizează poziția servo motorului. 7. ESP32 actualizează mesajul de pe display-ul OLED.
Acest proces rulează continuu în timp real.
==== Stadiul actual al implementării hardware
În momentul actual au fost implementate și validate:
* comunicația UART între MaaXBoard și ESP32 * controlul servo motorului folosind PWM * comunicația I2C cu display-ul OLED SSD1306 * detectarea fețelor folosind OpenCV * transmiterea comenzilor de tracking în timp real
Sistemul funcționează complet end-to-end:
* detectare față * transmitere comandă * mișcare servo * actualizare display
| Componentă | Rol în proiect |
|---|---|
| Cameră USB | Captură imagine pentru tracking |
| Avnet MaaXBoard i.MX8M | Procesare video și rulare OpenCV |
| Arduino Nano ESP32 | Control hardware și comunicare |
| Servo motor | Mișcarea turetei |
| Display OLED SSD1306 I2C | Afișarea stării sistemului |
| Breadboard | Realizarea conexiunilor |
| Fire Dupont | Conexiuni electrice |
| Alimentare USB | Alimentarea sistemului |
| Convertor UART | Debugging și testare comunicație |
==== UART MaaXBoard → ESP32
| MaaXBoard | ESP32 | Funcție |
|---|---|---|
| UART2_TX | RX0 | Transmitere comenzi |
| GND | GND | Referință comună |
Protocolul UART utilizează:
* baudrate: 9600 * comenzi text de forma C0/C1/C2/C3
==== Servo motor
| Servo | ESP32 |
|---|---|
| Signal | GPIO9 |
| VCC | Alimentare externă |
| GND | GND comun |
Servo motorul este controlat folosind PWM hardware la 50Hz.
==== Display OLED SSD1306
| OLED | ESP32 |
|---|---|
| SDA | A4 |
| SCK/SCL | A5 |
| VCC | 3.3V |
| GND | GND |
Display-ul utilizează protocolul I2C și a fost detectat la adresa 0x3C.
==== PWM
PWM-ul hardware este utilizat pentru controlul servo motorului.
Avantaje:
* control precis al poziției * funcționare fluidă * utilizare eficientă a hardware-ului
==== UART
UART este utilizat pentru comunicația dintre MaaXBoard și ESP32.
Avantaje:
* implementare simplă * comunicație robustă * latență redusă
==== I2C
I2C este utilizat pentru controlul display-ului OLED SSD1306.
Avantaje:
* număr redus de fire * integrare simplă * compatibilitate ridicată
==== Timere hardware
Timerele hardware sunt utilizate pentru:
* generarea semnalului PWM * actualizarea periodică a servo motorului * sincronizarea task-urilor FreeRTOS
==== Stadiul actual al implementării software
Au fost implementate:
* captură video OpenCV * detectare fețe Haar Cascade * tracking în timp real * generare comenzi UART * parser UART pe ESP32 * control servo PWM * control OLED SSD1306 * task-uri FreeRTOS pentru paralelizare
| Bibliotecă | Rol |
|---|---|
| OpenCV | Detectare și procesare imagine |
| pyserial | Comunicație UART pe Linux |
| ESP-IDF | Programare low-level ESP32 |
| driver/uart.h | Control UART hardware |
| driver/ledc.h | PWM hardware |
| driver/i2c.h | Comunicație I2C |
| FreeRTOS | Task scheduling |
==== OpenCV
OpenCV oferă:
* algoritmi optimizați * detectare rapidă * compatibilitate Linux embedded * integrare simplă cu Python
==== ESP-IDF
ESP-IDF permite:
* acces direct la periferice hardware * control low-level * performanță ridicată * utilizarea driverelor hardware oficiale
==== UART
UART a fost ales deoarece:
* este simplu de implementat * este robust * necesită puține resurse hardware * oferă latență mică
Pentru creșterea performanței au fost realizate următoarele optimizări:
* reducerea rezoluției imaginii pentru creșterea FPS-ului * transmiterea comenzilor sub formă compactă * utilizarea task-urilor separate pentru UART și servo * utilizarea PWM hardware în loc de software PWM * utilizarea comunicației I2C hardware * reducerea latenței UART prin scăderea baudrate-ului și stabilizarea comunicației
Sistemul a fost validat prin:
* testarea comunicației UART * testarea PWM pentru servo * scanarea magistralei I2C * detectarea display-ului la adresa 0x3C * validarea tracking-ului facial * testarea mișcării turetei în timp real
Au fost validate:
* funcționarea comunicației dintre module * afișarea mesajelor pe OLED * reacția servo motorului la poziția feței * funcționarea în timp real a sistemului
Calibrarea sistemului a fost realizată prin:
* ajustarea dead-zone-ului pentru tracking * reglarea vitezei servo motorului * ajustarea parametrilor Haar Cascade * configurarea rezoluției optime pentru cameră * ajustarea frecvenței comenzilor UART
Scopul calibrării a fost obținerea unei mișcări stabile și reducerea oscilațiilor sistemului.
Software-ul este împărțit în:
==== MaaXBoard Linux
* captură video * detectare fețe * logică tracking * generare comenzi UART
==== ESP32
* task UART * task servo * control OLED * PWM hardware * I2C hardware
Componentele comunică folosind un protocol UART simplu bazat pe comenzi text.
Pentru demonstrarea proiectului vor fi prezentate:
* detectarea unei persoane în timp real * rotirea turetei după poziția țintei * afișarea stării pe display-ul OLED * transmiterea comenzilor UART * funcționarea sistemului embedded complet
Vor fi atașate:
* imagini cu conexiunile hardware * capturi din timpul funcționării * demonstrație video a proiectului
Tracker Turret demonstrează integrarea cu succes a:
* computer vision * embedded Linux * control hardware low-level * comunicații seriale * protocoale hardware * sisteme real-time
Proiectul reprezintă o combinație practică între software și hardware și evidențiază utilizarea conceptelor studiate în laborator într-un sistem complet funcțional.