Robot pentru Cartografiere 2D cu LiDAR
Introducere
Proiectul constă în realizarea unui robot mobil pe roți, controlat wireless printr-un controller PS4 (Bluetooth), capabil să cartografieze în timp real spațiul unei camere folosind un senzor LiDAR cu scanare 360°. Robotul transmite datele de scanare prin WiFi (UDP) către o aplicație software rulată pe laptop, care construiește incremental o hartă 2D a mediului înconjurător.
Ce face proiectul:
Se deplasează prin cameră sub control wireless (controller PS4 prin Bluetooth)
Scanează continuu mediul cu LiDAR la 10Hz (~3860 puncte/secundă)
Transmite datele LiDAR prin WiFi UDP către aplicația de pe laptop
Aplicația Python pe laptop transformă datele polare în coordonate carteziene și desenează harta 2D a camerei în timp real
Descriere generală
Module hardware și interacțiunea lor:
ESP32 DevKit V1 - microcontroler dual-core care orchestrează tot sistemul. Folosește FreeRTOS pentru task-uri paralele pe cele două nuclee. Dispune de WiFi 2.4GHz și Bluetooth Classic integrate, esențiale pentru comunicarea dublă wireless.
LiDAR M1C1 - scanează 360° la 10Hz, trimite pachete binare prin UART la 150000 baud către ESP32.
MPU6050 (IMU) - oferă date de orientare prin I2C, folosite pentru a corecta harta când robotul se rotește.
Driver L298N - punte H care primește semnale PWM (3.3V) de la ESP32 și controlează motoarele DC cu putere mare din baterie.
Buck Converter 5V/3A - regulator separat pentru a asigura alimentare stabilă pentru LiDAR și ESP32, izolată de zgomotul motoarelor.
Controller PS4 - input wireless prin Bluetooth Classic.
Laptop (Python + Pygame) - aplicație care primește pachete UDP prin WiFi de la ESP32 și desenează harta 2D în timp real.
Fluxul de date end-to-end:
Input control: Joystick PS4 → Bluetooth → ESP32 (Core 0)
Procesare comenzi: ESP32 generează semnale PWM → L298N → Motoare DC
Achiziție senzori: LiDAR (UART) + IMU (I2C) → ESP32 (Core 1)
Buffer & parsare: Core 1 procesează pachetele binare LiDAR
Transmisie WiFi: Core 1 împachetează datele în UDP datagrame → WiFi 2.4GHz → Laptop
Vizualizare: Aplicație Python primește UDP, transformă coordonate polare în carteziene, desenează cu Pygame
Hardware Design
Listă de piese
| Componentă | Model | Cantitate | Rol |
| Microcontroller | ESP32 DevKit V1 | 1 | Procesare centrală + WiFi/BT |
| Senzor LiDAR | M1C1 Mini 360° | 1 | Scanare mediu |
| Cablu adaptor | JST-PH 1.25mm 4-pin → Female Dupont | 1 | Conexiune LiDAR-ESP32 |
| Șasiu robot | Kit 2WD acril cu motoare și encodere | 1 | Mecanică |
| Driver motoare | L298N Dual H-Bridge | 1 | Control putere motoare |
| Convertor DC-DC | Buck MP1584 sau LM2596 (5V/3A) | 1 | Alimentare stabilă logică |
| IMU | MPU6050 (GY-521) | 1 | Orientare robot (Lab I2C) |
| Acumulatori | Li-ion 18650 3000mAh | 2 | Sursă energie |
| Suport baterii | 2× 18650 serial cu fire | 1 | Asamblare baterii |
| Încărcător | TP4056 sau extern dual | 1 | Reîncărcare |
| Senzori encoder | LM393 IR slot | 2 | Odometrie roți (Lab Întreruperi) |
| Switch | ON/OFF rocker | 1 | Pornire sistem |
| Fire Dupont | Set Male-Male, Male-Female | 1 set | Conectică |
| Breadboard | 400 puncte | 1 | Prototipare |
| Controller PS4 | Sony DualShock 4 (sau clonă) | 1 | Input wireless |
Pinout ESP32 DevKit V1
În lucru - Pinout-ul exact urmează să fie stabilit în timpul fazei
de implementare hardware. Tabelul de mai jos este
preliminar și poate suferi modificări în funcție de testarea practică.
| Pin ESP32 | Conexiune | Funcție | Lab |
| GPIO 16 (RX2) | LiDAR M1C1 - TX | Recepție date LiDAR | Lab 1 (UART) |
| GPIO 17 (TX2) | LiDAR M1C1 - RX | Comandă LiDAR (opțional) | Lab 1 (UART) |
| GPIO 21 (SDA) | MPU6050 - SDA | Date I2C | Lab 6 (I2C) |
| GPIO 22 (SCL) | MPU6050 - SCL | Clock I2C | Lab 6 (I2C) |
| GPIO 18 | L298N - IN1 | Direcție motor stânga (1) | Lab 0 (GPIO) |
| GPIO 19 | L298N - IN2 | Direcție motor stânga (2) | Lab 0 (GPIO) |
| GPIO 23 | L298N - IN3 | Direcție motor dreapta (1) | Lab 0 (GPIO) |
| GPIO 5 | L298N - IN4 | Direcție motor dreapta (2) | Lab 0 (GPIO) |
| GPIO 25 (PWM) | L298N - ENA | Viteză motor stânga | Lab 3 (PWM) |
| GPIO 26 (PWM) | L298N - ENB | Viteză motor dreapta | Lab 3 (PWM) |
| GPIO 34 (ADC) | Divizor rezistiv baterie | Monitor tensiune baterie | Lab 4 (ADC) |
| GPIO 32 | Encoder roată stânga | Întrerupere odometrie | Lab 2 (Întreruperi) |
| GPIO 33 | Encoder roată dreapta | Întrerupere odometrie | Lab 2 (Întreruperi) |
| GPIO 2 | LED status WiFi | Indicator conexiune | Lab 0 (GPIO) |
| VIN (5V) | Buck converter OUT | Alimentare placă | - |
| GND | GND comun | Masa | - |
Software Design
Mediu de dezvoltare
Firmware ESP32: Arduino IDE 2.x cu suport ESP32 (ESP32 Arduino Core), alternativ ESP-IDF
Aplicație PC: Python 3.x cu Pygame pentru vizualizare, biblioteca standard socket pentru UDP
Librării și surse 3rd-party
WiFi.h și WiFiUdp.h - libraryii standard ESP32 Arduino pentru rețea
-
Wire.h - librărie I2C standard Arduino pentru MPU6050
MPU6050 library by Electronic Cats (sau driver custom)
socket (Python stdlib) - comunicare UDP
Pygame - vizualizare hartă 2D
NumPy - calcule transformări coordonate
Notă: Driverul UART pentru LiDAR M1C1 va fi implementat de la zero, fără bibliotecă. Documentația protocolului va fi reconstruită din observarea fluxului de date și din resurse GitHub disponibile.
Rezultate Obţinute
Această secțiune va fi completată progresiv pe măsură ce proiectul avansează. La momentul actual (Milestone Săpt 9) este în faza de proiectare și aprobare temă.
Etape planificate:
Săpt 10-11: Asamblare hardware, testare individuală module (motoare, LiDAR, IMU, WiFi)
Săpt 12-13: Integrare firmware, sincronizare task-uri, implementare protocol UDP
Săpt 14: Aplicație Python receiver UDP + algoritm cartografiere
Săpt 15-16: Testing end-to-end, optimizări, demonstrație finală
Concluzii
Va fi completat la finalizarea proiectului.
Download
Arhivele cu surse, scheme și documentație vor fi încărcate aici la finalizarea fiecărei etape.
Jurnal
Săpt 9 (curentă): Alegerea temei, definitivare componente, schemă bloc, aprobare asistent.
Cercetare conector LiDAR: Identificat că LiDAR M1C1 folosește JST-PH 1.25mm 4-pin (rar), găsit cablu adaptor pentru conexiune directă fără lipit.
Decizie alimentare: Adăugat Buck Converter separat după ce am observat că regulatorul L298N are limită ~500mA, insuficient pentru ESP32 + LiDAR + IMU simultan.
Decizie microcontroler: Ales ESP32 DevKit V1 standard pentru documentație extinsă, pini lipiți și WiFi/BT integrate.
Decizie protocol comunicare: Ales UDP în locul TCP/USB Serial pentru a permite robot complet autonom (fără cablu) cu latență minimă pentru streaming LiDAR.
Bibliografie/Resurse
Resurse Hardware
Resurse Software
Laboratoare PM utilizate