Namen zaključne naloge je izdelava avtonomnega robota, ki na podlagi glasovnih ukazov poišče in se premakne do določenega objekta. Robot s kamero prepozna objekte po barvi in obliki, z ultrasoničnim senzorjem meri razdaljo do ovir, ter z dvema DC motorjema avtonomno navigira do cilja.
- Izdelati robota, ki prepozna barvne geometrijske oblike (rdeča kocka, modri trikotnik, itd.)
- Implementirati glasovno upravljanje v slovenščini in angleščini
- Robot se avtonomno premakne do ciljnega objekta in ga dotakne/potisne
- Dokumentirati celoten postopek izdelave
| Komponenta | Opis |
|---|---|
| Raspberry Pi 5 (8GB) | Glavni računalnik robota |
| USB kamera | Zajem slike za vizualno prepoznavanje |
| USB mikrofon | Zajem govora za glasovne ukaze |
| 2x DC krtačni motor | Pogon robota (levi in desni) |
| L298N motor driver | H-bridge za krmiljenje motorjev |
| HC-SR04 ultrasonični senzor | Merjenje razdalje do objektov |
| Baterija/napajalnik | Napajanje motorjev in RPi |
| Tehnologija | Namen |
|---|---|
| Python 3 | Programski jezik |
| OpenCV | Računalniški vid - detekcija barv in oblik |
| YOLOv8 | AI detekcija objektov (backup) |
| Google Speech-to-Text | Prepoznavanje govora |
| lgpio | Krmiljenje GPIO pinov na RPi 5 |
Raspberry Pi 5 L298N Motor Driver
───────────── ──────────────────
GPIO 12 (Pin 32) ──────────── ENA (PWM levi motor)
GPIO 23 (Pin 16) ──────────── IN1 (levi smer 1)
GPIO 24 (Pin 18) ──────────── IN2 (levi smer 2)
GPIO 27 (Pin 13) ──────────── IN3 (desni smer 1)
GPIO 22 (Pin 15) ──────────── IN4 (desni smer 2)
GPIO 13 (Pin 33) ──────────── ENB (PWM desni motor)
GND (Pin 6) ──────────── GND
Raspberry Pi 5 HC-SR04 Senzor
───────────── ─────────────────
GPIO 17 (Pin 11) ──────────── TRIG
GPIO 18 (Pin 12) ──┐
│ ECHO
[1kΩ]─┤
│
[2kΩ]─┤
│
GND
5V (Pin 2) ──────────── VCC
GND (Pin 6) ──────────── GND
POMEMBNO: ECHO pin HC-SR04 deluje na 5V, Raspberry Pi GPIO pa na 3.3V. Napetostni delilnik z upori 1kΩ in 2kΩ zniža napetost na varnih 3.3V.
- Raspberry Pi 5: USB-C napajalnik (5V/5A) ali power bank
- L298N in motorji: ločen vir napajanja (npr. 4x AA baterije = 6V ali Li-Po baterija 7.4V)
- GND mora biti skupen med RPi in L298N!
robot_project/
├── config.py # Vse nastavitve (GPIO, barve, parametri)
├── motor_control.py # Krmiljenje motorjev (L298N)
├── ultrasonic_sensor.py # Ultrasonični senzor (HC-SR04)
├── camera_vision.py # Vizualno prepoznavanje (OpenCV + YOLO)
├── speech_recognition_module.py # Glasovni ukazi (Google Speech API)
├── navigation.py # Navigacijska logika
├── main.py # Glavni program
├── requirements.txt # Python knjižnice
├── setup.sh # Namestitveni skript
└── dokumentacija.md # Ta dokument
Centralna konfiguracijska datoteka. Vse nastavitve so na enem mestu: GPIO pini, HSV barvni razponi za detekcijo barv, parametri motorjev (PWM frekvenca, hitrost), nastavitve kamere in navigacijski parametri.
Razred MotorController krmili dva DC motorja preko L298N H-bridge driverja. Uporablja knjižnico lgpio, ki je podprta na Raspberry Pi 5 (starejši RPi.GPIO ni združljiv z RPi 5). Podpira vožnjo naprej, nazaj, zavijanje levo/desno in proporcionalno krmiljenje z različnimi hitrostmi na vsakem motorju.
Razred UltrasonicSensor meri razdaljo z ultrasoničnim senzorjem HC-SR04. Pošlje ultrazvočni impulz in izmeri čas, ki ga signal potrebuje za pot do ovire in nazaj. Za večjo natančnost izvede več meritev in vrne povprečje.
Razred CameraVision izvaja vizualno prepoznavanje objektov:
OpenCV pristop (primarni):
- Zajame sliko z USB kamere
- Pretvori iz BGR v HSV barvni prostor
- Ustvari barvno masko za ciljno barvo (rdeča, modra, zelena, rumena)
- Najde konture (obrise) v maski
- Za vsako konturo določi obliko s štetjem oglišč:
- 3 oglišča → trikotnik
- 4 oglišča (razmerje stranic ~1:1) → kvadrat/kocka
- Več kot 6 oglišč + visoka cirkularnost → krog
YOLOv8 pristop (backup): Če OpenCV ne najde objekta, se uporabi YOLOv8 nano model za splošno detekcijo objektov.
Razred SpeechRecognizer prepoznava glasovne ukaze:
- Posluša mikrofon
- Pošlje zvočni posnetek na Google Speech-to-Text API
- Poskusi najprej slovenščino, nato angleščino
- Parsira prepoznani tekst v strukturiran ukaz z barvo in obliko
Podprti ukazi:
- Slovenščina: "najdi rdečo kocko", "najdi modri trikotnik"
- Angleščina: "find red cube", "find blue triangle"
- Ustavitev: "ustavi", "stop"
Razred Navigator izvaja avtonomno navigacijo:
- Iskanje: Če objekt ni viden, se robot obrača na mestu in išče
- Približevanje: Ko je objekt najden, se mu približa:
- Uporablja P-regulator (proporcionalno krmiljenje) za korekcijo smeri
- Če je objekt levo od centra → korigira v levo (in obratno)
- Neprestano preverja razdaljo z ultrasoničnim senzorjem
- Dotik: Ko je razdalja manjša od 5 cm, se ustavi = objekt dotaknjen/potisnjen
Glavni program, ki poveže vse module. Tri načini delovanja:
- Normalen:
python3 main.py— glasovni ukazi - Testni:
python3 main.py --test— ukazi s tipkovnico - Demo:
python3 main.py --demo— takoj poišče rdečo kocko
┌─────────────┐
│ START │
└──────┬──────┘
│
┌──────▼──────┐
│ Čakaj na │
│ glasovni │◄────────────────┐
│ ukaz │ │
└──────┬──────┘ │
│ │
┌──────▼──────┐ DA ┌──────┴──────┐
│ Ukaz = ├────────► │ USTAVI │
│ "ustavi"? │ └─────────────┘
└──────┬──────┘
│ NE
┌──────▼──────┐
│ Parsaj │
│ barvo+obliko│
└──────┬──────┘
│
┌──────▼──────┐
│ Ali vidi │ DA ┌─────────────────┐
│ objekt? ├─────►│ Približuj se z │
└──────┬──────┘ │ P-regulatorjem │
│ NE └────────┬─────────┘
┌──────▼──────┐ │
│ Obrni se │ ┌──────▼──────┐
│ in išči │ │ Razdalja │ DA ┌──────────┐
│ (360°) │ │ < 5 cm? ├────►│ USPEH! │
└──────┬──────┘ └──────┬──────┘ │ Dotaknil │
│ │ NE └──────┬───┘
┌──────▼──────┐ │ │
│ Najden? │ DA └───────────┐ │
│ ├──────► (ponovi) │ │
└──────┬──────┘ │ │
│ NE │ │
┌──────▼──────┐ │ │
│ NEUSPEH │ │ │
│ Ni najden │ │ │
└──────┬──────┘ │ │
│ │ │
└─────────────────────────────────┘───────┘
│
(čakaj naslednji ukaz)
Robot uporablja proporcionalno krmiljenje (P-regulator) za natančno usmerjanje proti objektu:
odmik = (pozicija_objekta / širina_slike - 0.5) × 2
korekcija = Kp × odmik × bazna_hitrost
leva_hitrost = bazna_hitrost + korekcija
desna_hitrost = bazna_hitrost - korekcija
Kjer je:
odmik: relativni odmik objekta od centra slike (-1.0 do 1.0)Kp = 0.8: proporcionalni koeficientbazna_hitrost: hitrost motorjev (zmanjša se ko je blizu cilja)
- Raspberry Pi 5 z nameščenim Raspberry Pi OS (Bookworm 64-bit)
- USB kamera priključena
- USB mikrofon priključen
- L298N motor driver povezan po vezalnem načrtu (poglavje 3)
- HC-SR04 senzor povezan z napetostnim delilnikom
- Internetna povezava (za Google Speech API in namestitev)
# 1. Prenesi projekt na RPi
# (kopiraj mapo robot_project na Raspberry Pi)
# 2. Zaženi namestitveni skript
cd robot_project
bash setup.sh
# 3. Aktiviraj virtualno okolje
source venv/bin/activate# Test motorjev (robot se premakne naprej, nazaj, levo, desno)
python3 motor_control.py
# Test ultrasoničnega senzorja (izpisuje razdaljo)
python3 ultrasonic_sensor.py
# Test kamere (odpre okno z detekcijo objektov)
python3 camera_vision.py
# Test govora (posluša mikrofon in izpisuje ukaze)
python3 speech_recognition_module.py# Aktiviraj virtualno okolje
source venv/bin/activate
# Normalen zagon (glasovni ukazi)
python3 main.py
# Testni način (tipkovnica)
python3 main.py --test
# Demo način (takoj poišče rdečo kocko)
python3 main.py --demo
# Demo z določeno barvo in obliko
python3 main.py --demo --color modra --shape trikotnikČe robot ne prepozna barv pravilno, je potrebno kalibrirati HSV razpone v config.py. Postopek:
- Zaženi
python3 camera_vision.py - Postavi objekt pred kamero
- Prilagodi vrednosti
COLOR_RANGESvconfig.py:- H (Hue): Odtenek barve (0-179)
- S (Saturation): Nasičenost (0-255) — višja = bolj živa barva
- V (Value): Svetlost (0-255) — višja = svetlejša barva
Če se robot ne premika naravnost, prilagodi hitrosti v config.py:
MOTOR_SPEED: Osnovna hitrost (privzeto 60%)TURN_SPEED: Hitrost obračanja (privzeto 50%)SLOW_SPEED: Počasna hitrost za fino približevanje (privzeto 35%)
Prilagodi TARGET_DISTANCE_CM v config.py glede na dolžino robota (privzeto 5 cm).
| Problem | Rešitev |
|---|---|
| Kamera ne deluje | Preveri USB priklop. Zaženi v4l2-ctl --list-devices. |
| Mikrofon ne deluje | Preveri USB priklop. Zaženi arecord -l. |
| Motorji se ne premikajo | Preveri L298N povezavo in napajanje motorjev. |
| Razdalja vedno "None" | Preveri TRIG/ECHO povezave in napetostni delilnik. |
| Ne prepozna govora | Preveri internetno povezavo (Google API). |
| Ne vidi barv pravilno | Kalibriraj HSV razpone (poglavje 7.1). |
| Robot zavija namesto naravnost | Prilagodi hitrosti motorjev ali zamenjaj IN1/IN2 pine. |
V zaključni nalogi je bil uspešno izdelan avtonomni robot na platformi Raspberry Pi 5, ki združuje računalniški vid (OpenCV + YOLOv8), prepoznavanje govora (Google Speech-to-Text) in avtonomno navigacijo (P-regulator). Robot je sposoben na glasovni ukaz v slovenščini ali angleščini poiskati objekt določene barve in oblike ter se do njega avtonomno premakniti.
Projekt demonstrira praktično uporabo:
- Računalniškega vida za prepoznavanje objektov
- Obdelave govora za upravljanje
- Regulacijske tehnike za navigacijo
- Senzorske tehnologije za zaznavanje okolice
- Programiranja v Pythonu na vgrajenem sistemu
Zaključna naloga | Raspberry Pi 5 Robot
Ko spremeniš kodo na RPi, samo te 3 ukaze:
cd /home/matija/robot_project
git add -A
git commit -m "opis spremembe"
git pushČe pa spremeniš na Macu in hočeš prenesti na RPi:
- Na Macu:
scp datoteka matija@192.168.1.26:/home/matija/robot_project/ - Na RPi:
git add -A && git commit -m "opis" && git push
za test v venv (cd /home/matija/robot_project source venv/bin/activate python3 main.py )