Počítadlo kol k autodráze

Je to už bezmála 30 let, co jsme s bráchou závodili na autodráze a strašně toužili po počítadle ujetých kol, aby byly závody spravedlivé.

Dnes mám vlastního syna, a tak jsem se k téhle staré myšlence vrátil. Díky pokročilé umělé inteligenci a strojovému učení se mi během jednoho odpoledne podařilo postavit počítadlo založené na kamerovém snímání dráhy a počítačovém vyhodnocování průjezdů.

Snímací rampa

Mechanické provedení

Základní rám držící kameru jsem vyrobil z dřevěných hranolků 2 × 2 cm, sešroubovaných vruty a natřených černou barvou. Kamera je přišroubovaná přibližně 20 cm nad středem dráhy.

Po celém obvodu rampy jsem připevnil LED pásek, který slouží jako přísvit pro kameru. Rampa stojí volně, takže je potřeba ji při každém použití srovnat na správné místo podle obrazu z kamery.

Snímací rampa zespodu

Program pro počítání kol

Základem celého počítadla je obyčejná USB kamera umístěná nad startovní/cílovou čárou. Kamera snímá prostor nad autodráhou a program v počítači sleduje dvě předem nastavené detekční oblasti — jednu pro každou dráhu.

Původně jsem uvažoval o rozpoznávání barev aut nebo barevných značek na střechách, ale nakonec se ukázalo, že to není potřeba. Na každé dráze může být vždy jen jedno auto, takže stačí hlídat konkrétní část obrazu. Když se v detekční oblasti změní obraz, program to vyhodnotí jako průjezd auta cílem.

Program je napsaný v Pythonu a pro zpracování obrazu používá knihovnu OpenCV. Kromě samotného počítání kol umí také startovní odpočet, zvuky, měření časů kol, výsledkovou obrazovku a označení vítěze zlatým pohárem.

Funkce programu

Program si při nastavení uloží obraz prázdné cílové oblasti jako referenci. Potom při závodě neustále porovnává aktuální obraz s touto referencí.

Zjednodušeně:

prázdná trať = reference
aktuální obraz = obraz z kamery
rozdíl mezi nimi = změna v detekční zóně

Když rozdíl překročí nastavenou hodnotu, program to vyhodnotí jako průjezd auta.

Každá dráha má vlastní detekční zónu:

Dráha 1 → detekční oblast 1
Dráha 2 → detekční oblast 2

Aby se jeden průjezd nezapočítal víckrát, je v programu ochranná prodleva. Po započítání průjezdu program krátkou chvíli ignoruje další detekce ve stejné dráze.

Program zároveň řeší i start ze startovní čáry. Pokud auta při startu stojí přímo v detekční zóně, nezapočítá se to jako kolo. Program nejdřív počká, až auto zónu opustí, a první kolo započítá až při dalším průjezdu cílem.

Aktuální verze programu umí:

  • – snímat obraz z USB kamery
  • – nastavit dvě detekční zóny pro dvě dráhy
  • – uložit nastavení zón do souboru
  • – načíst nastavení při dalším spuštění
  • – spustit závod startovním odpočtem
  • – přehrát zvuky při odpočtu
  • – počítat kola pro obě dráhy
  • – měřit celkový čas
  • – měřit časy jednotlivých kol
  • – zobrazit nejlepší a průměrné kolo
  • – dopočítat průměrnou rychlost
  • – určit vítěze
  • – nechat druhé auto dojet
  • – zobrazit výsledkovou obrazovku
  • – označit vítěze pohárem

Instalace Pythonu a knihoven

Program je napsaný v Pythonu, takže je potřeba mít v počítači nainstalovaný Python. Používám ho ve Windows, kde funguje s běžnou USB kamerou.

Potřebné knihovny se nainstalují příkazem:

pip install opencv-python numpy pygame

Volitelně je možné nainstalovat ještě knihovnu pygrabber, která umí vypsat názvy kamer připojených přes DirectShow:

pip install pygrabber

Ta není pro samotný závod nutná, ale hodí se při hledání správné kamery. Právě to mi nakonec zabralo nejvíce času. Musel jsem dokonce zakázat integrovanou kameru v notebooku, aby program začal používat obraz z USB kamery.

Soubory programu

V jedné složce máme hlavní program:

autodraha_pocitadlo_kol.py

Vedle něj je složka se zvuky a v ní potřebné zvuky:

sounds/
beep.wav – krátké pípnutí při odpočtu 3, 2, 1
go.wav – zvuk startu
finish.wav – zvuk při dojetí vítěze

Pokud zvuky chybí, program nespadne. Jen poběží bez nich.

Spuštění programu

Program se spouští z příkazové řádky:

python autodraha_pocitadlo_kol.py

Pokud je v počítači více kamer, dá se zkusit vybrat jiná kamera:

python autodraha_pocitadlo_kol.py --camera 1

nebo:

python autodraha_pocitadlo_kol.py --camera 2

Pro vypsání dostupných kamer:

python autodraha_pocitadlo_kol.py --list-cameras

Pokud je nainstalovaný pygrabber, jde vypsat i názvy DirectShow kamer:

python autodraha_pocitadlo_kol.py --list-dshow

Nastavení detekčních zón

Po spuštění programu se zobrazí obraz z kamery. V režimu nastavení jsou vidět dvě detekční zóny a hodnoty rozdílu obrazu.

Nastavení detekčních zón

Ovládání zón:

1 – nastavit zónu pro dráhu 1
2 – nastavit zónu pro dráhu 2
A – srovnat zóny podle dráhy 1
K – uložit nastavení
L – načíst nastavení

Nejdřív se pomocí myši nastaví zóna pro první dráhu. Potom se nastaví poloha zóny pro druhou dráhu. Program hlídá, aby obě zóny měly stejnou velikost a byly ve stejné vzdálenosti od startovní čáry. To je důležité, aby měly obě dráhy stejné podmínky.

Nastavení se ukládá do souboru:

autodraha_config.json

Při dalším spuštění si program uložené zóny načte automaticky.

Uložení reference

Velmi důležitým krokem je uložení reference prázdné tratě.

Před závodem je potřeba dát auta pryč z detekčních oblastí a stisknout klávesu R.

Tím si program uloží obraz prázdné tratě. Od té chvíle porovnává aktuální obraz s tímto stavem.

Po uložení reference už je důležité nehýbat kamerou, rampou ani osvětlením. Když se něco posune, je lepší referenci uložit znovu.

Správný postup před závodem je:

1. Spustit program
2. Zkontrolovat detekční zóny
3. Dát auta mimo detekční zóny
4. Stisknout R
5. Postavit auta na start
6. Stisknout S

Při startu už auta v detekčních zónách být můžou. Start referenci nepřepisuje.

Připraveno ke startu

Start závodu

Závod se spustí klávesou S.

Program zobrazí odpočet:

3
2
1
GO!

A zároveň přehraje zvuky:

3, 2, 1 → beep.wav
GO → go.wav

Po startu začne běžet časomíra a program začne počítat průjezdy obou drah.

Je odstartováno

Po dojetí vítěze se přehraje:

finish.wav

Závod se ale neukončí okamžitě. Druhá dráha může ještě dojet svůj počet kol. Teprve potom se zobrazí finální výsledková obrazovka.

Ovládání programu

Přehled kláves:

S start závodu / nový závod
R uložit referenci prázdné tratě
1 nastavit zónu dráhy 1
2 nastavit zónu dráhy 2
A srovnat zóny
K uložit nastavení
L načíst nastavení
+ zvýšit počet kol
– snížit počet kol
T testovací režim
P uložit snímek obrazovky do preview.jpg
C reset závodu
Q / ESC konec programu

Počet kol se dá měnit přímo v programu pomocí kláves + a -.

Výsledková obrazovka

Po dokončení závodu se zobrazí výsledky obou drah.

Výsledek závodu

Program ukáže:

– vítěze
– čas vítěze
– čas druhé dráhy
– rozdíl mezi auty
– počet kol
– nejlepší kolo
– průměrné kolo
– průměrnou rychlost

Vítězná dráha je označená zlatým pohárem.

Průměrná rychlost se počítá podle délky jednoho kola nastavené v programu:

TRACK_LENGTH_M = 5.13

Pokud má trať jinou délku, stačí tuto hodnotu změnit.

Osvětlení a spolehlivost detekce

Ukázalo se, že pro spolehlivou detekci je hodně důležité stálé osvětlení. Kamera reaguje na změny jasu a program je může vyhodnotit jako změnu v detekční oblasti.

Proto jsem na držák kamery přidal LED pásek jako přísvit. Detekce se tím výrazně zlepšila. Je ale potřeba dát pozor na poblikávání LED pásku, hlavně pokud je napájený ze stejného zdroje jako autodráha. Motory aut mohou způsobovat poklesy napětí a rušení.

Ještě lepší by byl samostatný zdroj pro LED osvětlení, ale kvůli jednoduchosti používám společné napájení.

Nastavení citlivosti

Citlivost detekce se nastavuje hodnotou:

DETECTION_THRESHOLD = 47.0

V testovacím režimu program ukazuje hodnotu rozdílu obrazu pro každou dráhu. Podle toho se dá práh doladit.

Princip je jednoduchý:

  • hodnota bez auta musí být pod prahem
  • hodnota při průjezdu auta musí být nad prahem

Například:

  • bez auta kolem 40
  • s autem kolem 54
  • práh 47

Když program detekuje falešné průjezdy, práh je potřeba zvýšit. Když naopak průjezdy nestíhá nebo vynechává, práh je potřeba snížit nebo zvětšit detekční zóny.

Závěr

Opravdu hodně mě překvapilo, jak jednoduchá nakonec byla tvorba samotného programu. Těžko se mi hledají správná slova, ale fakt jsem nečekal, že to půjde tak rychle. Použil jsem ChatGPT 5.5 Thinking a upřímně říkám, že sám bych tohle opravdu nedal.

Stačilo popsat základní myšlenku, probrat pár detailů a funkční základ programu byl na první pokus hotový. Nejvíce času mi nakonec nezabrala samotná tvorba programu, ale řešení nefunkční kamery. I to se ale nakonec podařilo vyřešit.

Celkově vzato, když budu počítat jen čistou práci, zabralo celé počítadlo včetně výroby držáku kamery zhruba jeden den.

Velkou výhodou tohoto řešení je, že není potřeba nijak upravovat samotnou autodráhu. Nemusí se vrtat do dílů, přidávat optické závory ani řešit spínače v kolejích. Stačí kamera nad cílovou čárou, stabilní osvětlení a počítač s programem.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *