Kryton
Autor: Marek Valšík, Zbyšek Zapadlík, 2012-08-21
autonomní robot na soutěž BEAR RESCUE 2012
Tento článek popisuje návrh a stavbu autonomního robota na soutěž BEAR RESCUE
2012 pořádané v rámci robotického dne katedrou softwarového inženýrství MFF UK
a občanského sdružení Robonika. Stavba a realizace autonomního robota zasahuje
do několika oborů – elektronika, automatické řízení, strojírenství a materiály,
umělá inteligence a zpracování informací a obrazu.
Hardware
Úvod
Pohybový systém je řešen jako dvoukolový diferenciálně řízený podvozek,
konstrukce je tvořena převážně z hliníkových profilů a spojovacích plechů.
Některé části jsou vytištěné z plastu. Senzorický systém tvoří čtveřice
infračervených senzorů a pole taktilních senzorů vpředu podvozku. Na vrchní
části je umístěna barevná kamera. Řídicí systém obstarává netbook.
Mechanika
Konstrukce
Konstrukce je tvořena převážně hliníkovými profily, plechy, které je drží
dohromady a vytištěnými plastovými částmi na 3D tiskárně. Vrchní část robota
tvoří plexisklo, ve kterém jsou díry pro nouzový vypínač, zapínací a spouštěcí
tlačítka.
Motory
Pro pohon robota byly vybrány 2 stejnosměrné motory s převodovkou a enkodéry.
Motory jsou na 12 V, jejich točivý moment je 1,5 kg/cm amaximální výkon mají
4,22 W.
Netbook
Na soutěž nám byl zapůjčen od školy netbook s následujícími parametry: Intel
Atom N570 Dual Core, 10" LED CB 1024x600, RAM 1GB, HDD 320GB 5400 otáček, WiFi,
webkamera, 6-článková baterie, Windows 7
Kamera
Byla zvolena kamera určená pro Playstation3 (PS3 EYE). Při rozlišení 320x240
pixelů zvládá pořizovat 120 snímků za sekundu.
Senzory
Pro pohyb robota se využívaly 4 infračervené senzory vzdálenosti s rozsahem
10-80 cm. Dva z nich byly umístěny napevno v zadní části robota, kde směřovaly
kolmo ke stěně. Další dva byly umístěny na servech, které je natáčely do
různých směrů, podle potřeby.
Dále byly na robota umístěny taktilní senzory, na které robot reagoval buď
natáčením od místa nárazu, nebo přímo couvnutím.
DPS
Desky, na kterých byly elektronické součástky potřebné pro chod robota, jsme si
vyrobili vlastnoručně. Některé pomocí metody nažehlování toneru a některé
fotocestou. Všechny byly jednostranné, jen nejsložitější z nich měla pár
drátových propojek.
Uchopovací mechanizmus
Uchopovací mechanizmus byl navržen ve SketchUpu a vytištěn na 3D tiskárně.
Obr. 1 Návrh v programu SketchUp
1.2.8 Finální podoba robota
Obr. 2 Finální podoba robota před soutěží
Elektronika
Řídicí systém robota tvoří netbook s následujícími parametry:
- Mini notebook - Intel Atom N570 Dual Core, 10" LED CB 1024x600, RAM 1GB, HDD
320GB 5400 otáček, WiFi, webkamera, 6-článková baterie
Elektronika robota se skládá ze čtyř hlavních desek, každá po jednom
mikrokontroléru: I2CBridge ,DriveBoard, SenzorBoard, SenzorBoard2.
Netbook komunikuje prostřednictvím redukce USB↔RS232 a převodníkem napěťových
úrovní (MAX232) s deskou I2CBridge, která přeposílá pakety požadované desce
(podle adresy) přes I2C sběrnici.
O řízení motorů se stará deska DriveBoard. Přes čtyři vodiče plus napájení
spíná dva H-můstky připojené na motory. Pro regulaci výkonu využívá pulzně
šířkovou modulaci (PWM). Tento signál je vytvořen pomocí dvou PWM kanálů
mikrokontroléru. Informaci o natočení (resp. rychlosti otáčení) dávají
kvadraturní enkodéry na každém z motoru. Ty jsou připojeny na vstupy externího
přerušení mikrokontroléru. Každý „tik“ enkodéru tedy vyvolá přerušení.
Pro získání dat ze senzorů slouží dvě „senzorové“ desky. Na tyto desky jsou
připojena serva jednak pro natáčení předních IR senzorů, jednak pro mechaniku
radlice. K jejich řízení je využito PWM kanálů mikrokontrolérů. Na digitální
vstupy mají tyto dvě desky připojená taktilní čidla a na vstupy A/D převodníku
infračervené senzory. Jeden kanál A/D převodníku je využit pro měření proudu do
serva radlice.
Měření proudu do serva radlice bylo potřeba kvůli zpětné kontrole nad stiskem.
Toto měření je realizováno pomocí bočníku, jehož úbytek napětí je zesílen
operačním zesilovačem a přiveden na A/D vstup.
Blokové schéma celé elektroniky je uvedeno na Obr. 3.
Blokové schéma napájení je uvedeno na Obr. 4. Spouštěcí deska funguje jako
monostabilní klopný obvod s relé. Dva monolitické pětivoltové stabilizátory
jsou připevněny k hliníkovému rámu konstrukce, což zajišťuje dostatečné
chlazení. Napájení je rozděleno do dvou větví, aby se předešlo rušení řídící
elektroniky vlivem odběru serv.
Software
Úvod
Na netbooku běží operační systém Windows 7. Řízení celého robota obstarává
program psaný v Javě s grafickým uživatelským rozhraním, ten dostává informace
o obrazu od externího programu napsaného v C++, využívající knihovnu OpenCV.
Ladění probíhalo tak, že jsme propojovali vlastní notebooky s Krytonem přes
Wi-Fi (program TeamViewer), ovládali GUI a nahrávali nové verze programů. Pro
zjednodušení spouštěcího procesu, tedy spuštění dvou programů, jejich konzolí a
zarovnání oken do požadovaných pozic, jsme napsali několik bat souborů.
Procesory na jednotlivých deskách mají programy napsané v C.
Procesory
Komunikace
Netbook komunikuje prostřednictvím redukce USB↔RS232 a převodníkem napěťových
úrovní (MAX232) s deskou I2CBridge, která přeposílá pakety (jsou bufferovány)
požadované desce - podle adresy- přes I2C sběrnici. Při čtení dat se nejprve
odešle příkaz na I2CBridge, který obsahuje ID desky, ze které se má číst.
I2CBridge tyto požadavky střádá v bufferu a postupně vyvolává přenosy na I2C
sběrnici a čte data z požadované desky. Po načtení a ověření celého paketu se
provede odeslání přes USART do netbooku.
Zápis:
Formát pro I2C Bridge (přes UART):
1. START byte
2. ADRESA+W
3. POC_DAT
4. DATA
I2C Bridge přepošle na ADRESU
1. DATA
Na konci dat je checksum - ten se počítá z celých DATA a z POC_DAT
Čtení:
Formát pro I2C Bridge (přes UART):
1. START byte
2. ADRESA+R
3. POC_DAT - jen pokud se nepoužije vlastní formát dat, jinak 0
I2C Bridge načte data z ADRESY a pošle je přes UART
1. START
2. POC_DAT
3. DATA
DATA mají na začátku ADRESU(od koho jde)
Formát I2C DAT pro vlastní desky:
Byte| 2xbyte - 2xbyte ….| Byte
Na začátku ID
Uprostřed wordy
Na konci checksum
"W+Driverdeska - natočit- (90°,90°/s)"
"W+Driverdeska - jet - (400cm,50cm/s)"
Před posláním je přičteno k číslu 32768, aby se mohla posílat kladná i záporná čísla.
2xByte -> +/- 32768
65535=32767
..
32769=1
32768=0
32767=-1
..
0=-32768
Při čtení ze slave se odešle fronta připravená předchozím příkazem.
PID regulace
Motory jsou řízeny pomocí PWM o frekvenci cca 300Hz a zpětnou informaci dávají
kvadraturní enkodéry. Na mikrokontroléru desky DriveBoardběží dva nezávislé
číslicové PID regulátory. Níže je uvedena rovnice pro výpočet výstupního výkonu
jednoho motoru.
out= (Kp•err-Kd•(last_err-err)+Ki•integ_err)•Ko;
out – výstup pro pwm kanál (po normalizaci)
err – rozdíl požadované a skutečné rychlosti
last_err – předchozí hodnota err
integ_err – integrace proměnné err za čas
Kp – proporcionální konstanta
Kd – derivační konstanta
Ki – integrační konstanta
Ko – konstanta pro normalizaci pro výstup
Skenování
U senzorových desek je implementována funkce skenování, která funguje tak, že
se servo se senzorem cyklicky otáčí o malý úhel a měří se hodnota ze senzoru.
Tím je získáno pole dat, které při rozložení po kružnici dává prostorové
rozmístění překážek. Tato funkce nebyla při soutěži použita pro svojí nízkou
rychlost.
Řídící program
V níže uvedené tabulce je seznam a krátký popis tříd v řídícím programu.
Tabulka 1 Seznam tříd
KrytonwareApp Základní třída
KrytonwareView Třída uživatelskýchudálostí
Main Hlavní třída, zde probíhá smyčka
cComdriver Pro posílání zpráv přes COM
cDrive Řízení podvozku
cPath Cesta složená z xy bodů, plánování cesty
cSekvence Posloupnost akcí - natočit, jet rovně
SocketServer Třída pro komunikaci s OpenCV přes sokety
cMedved Reprezentace medvěda
cPaket Jeden paket odesílaný deskám
cSenzor Uchovává údaje ze senzorů
MapBox Okno pro zobrazení mapy a cest
SenzorBox Okno pro vizualizaci dat
FitnessComparator, ArrayListFitness Pomocné třídy pro hledání cesty ve spojitém prostoru
Program obsahuje algoritmus pro nalezení cesty ve spojitém prostoru. Byl použit
genetický algoritmus popsaný v [1]. Tento algoritmus se uplatnil v soutěži
pouze pro návrat na rozhledovou pozici po sebrání medvěda. Cesta je
reprezentována posloupností bodů, takováto forma je předána třídě cSekvence,
která ji převede na posloupnost akcí pro podvozek (např.: rovně 20cm, otoč do
leva o 45°,rovně 40cm atd..)
Diagram na Obr. 5popisuje použitou strategii. Jedná se tedy o stavový sekvenční
automat. Kombinace sledování stěny a pevných pravidel a opravných mechanizmů
zaručila velkou robustnost celého systému.
Pokud se některý taktilní senzor dotkne překážky v průběhu vykonávání libovolné
akce, robot vykoná opravnou sekvenci odpovídající poloze daného taktilního
senzoru (např.: Pokud robot narazí levou částí, provede rotaci o pár stupňů
doprava).
Zpracování obrazu
Pro zpracování obrazu z kamery se využívá opensourcové knihovny OpenCV. K
robustnosti programu byly parametry většiny funkcí konfigurovatelné za běhu
programu, pomocí kláves a posuvníků na obrazovce.
Základním prvkem pro vyhledání medvěda bylo nalezení největší plochy daného
rozmezí barev. Po získání obrazu z kamery se snímek převedl do HSV prostoru
barev, kde první hodnota určuje barvu, druhá její sytost a třetí její smíchání
s bílou barvou. Pomocí vestavěného filtru v knihovně OpenCV se odfiltrovaly
veškeré barvy, které se nevešly do nastaveného rozmezí. Na zbytku obrazu se
hledaly takzvané bloby zbylých barev. Odstranily se ty, které byly spojené s
postranními okraji obrazu, kvůli případům, kdy robot byl blízko kraje arény a
viděl přes ni. Ve zbytku blobů se našel největší z nich, kterým byl medvěd.
Okolo vybraného blobu se udělala obdélníková obálka, jejíž počátek a rozměry
byly předány řídícímu programu, který podle nich navigoval robota k
medvědovi.
Další funkce, která byla implementována a připravena k použití byla detekce
hran. V OpenCV nazývaná canny. Celý obraz se převedl do odstínů šedi a hledaly
se jednotlivé hrany, které se pak kopírovaly zpět do obrazu z kamery ještě před
vyhledáváním blobů. Tato funkce by byla užitečná pro oddělení podobných
barev.
Na soutěži bylo využito možnosti přípravy, kdy jsme stihli nastavit rozmezí
barev, které plyšový medvěd obsahoval. Proto nebylo třeba funkce detekce hran
objektů, která by vyhledání medvěda zpomalila, a bylo by nutné snížit rozlišení
zpracovávaného obrazu.
Shrnutí
Do naší kategorie se přihlásilo 13 týmů, z toho se 9 skutečně zúčastnilo.
Průběh soutěže byl následující: nejprve se konaly 4 kvalifikační jízdy, které
Kryton všechny úspěšně absolvoval (jako jediný). Poloha a typ medvěda se s
každým kolem měnily. Časy jednotlivých pokusů jsou zde, zleva od prvního:
1:23.75 2:18.82 1:22.72 0:51:91
Z 9 soutěžících robotů se pouze třem, včetně nás, podařilo medvěda sebrat a
dovézt zpátky na start. Zbývající dva soupeři měli nejlepší časy 0:59.94 a
1:04.59.
Oba soupeřící roboti používali strategii napevno dané dráhy a senzorů na
krátkou vzdálenost, nevyhledávali medvěda aktivně. My jsme pro každého medvěda
uložili do programu pro rozpoznávání obrazu profil, který definoval rozmezí
barev, jež má registrovat. Při každém odstartování jsme pak jen zvolili profil
podle toho, jakého medvěda nám rozhodčí dal na hřiště. V třetím pokusu byl
malinký medvěd umístěn do rohu hřiště, těsně ke stěně. K našemu velkému
překvapení i takto umístěného medvěda dokázal Kryton sebrat. Žádný ze soupeřů
medvěda z rohu nedostal.
Do finále tedy postoupili 3 roboti. Finále se skládalo ze 3 zápasů, každý s
každým. Tyto finálové zápasy probíhaly tak, že dva roboti odstartovali zároveň
každý na své dráze a který dovezl medvěda na start dříve, vyhrál. První
finálový zápas se nám povedl, medvěd byl na relativně vhodné pozici, Kryton ho
zaregistroval rychle a sebrání se povedlo na první pokus. Do cíle dojel o pouhé
2 sekundy před soupeřem, v čase 49,7 s. Druhý finálový zápas jsme dostali na
dráhu medvěda s červeným tričkem, takže jsme museli rychle přenastavit barvu,
kterou bude Kryton považovat za medvěda. Nastavili jsme, aby Kryton bral právě
barvu červeného trička. Po dojetí na místo rozhledu se vydal směrem k
medvědovi.Po přiblíženírobot vrhl stín na medvěda, tím se změnila detekovaná
barva, která byla mimo nastavené rozmezí. Kryton strčil do medvěda a ten se
povalil na bok. Kryton pak neviděl na barevné tričko a tím pádem jezdil dokola
bez úspěchu, bylo to tedy naší chybou, měli jsme zvolit buď větší toleranci
barev, nebo nastavit barvu samotného medvěda. Druhý finálový zápas tedy vyhrál
soupeř. Nakonec hráli dva soupeři mezi sebou. Výsledkem bylo, že každý
finalista měl po jednom bodu, tedy remíza. Organizátoři se rozhodli, že se
nebudou konat další zápasy, ale rozhodne se podle nejrychlejšího času z
finálových kol. Náš robot měl nejrychlejší čas – 49,7 s a byli jsme vyhlášeni
vítězi.
Fakt, že u programu pro rozpoznání obrazu byla možnost rychle měnit nastavení,
se ve výsledku velmi osvědčil. Stejně tak i robustnost algoritmu – antikolizní
systém a opravné sekvence, při špatném sebrání opakované sebrání medvěda – nám
zaručila úspěch.
Závěr
Navrhli a zkonstruovali jsme autonomního robota pro výše uvedenou mezinárodní
soutěžpořádané v rámci robotického dne, které jsme se následně zúčastnili.
Obsadili jsme 1. místo v nejnáročnější kategorii. Postup a vývoj práce na
robotu byl námi dvakrát prezentován v Robotickém klubu na naší škole, a také
byla uskutečněna krátká ukázka na soutěži Kyberrobot konané též na naší
škole. O našem robotu a o nás vyšly články na zpravodajských webech
idnes
a
t-uni. Též jsme vystupovali v pořadu
PORT
na ČT2.
Literatura
[1] DVOŘÁK, J.; KRČEK, P; 2010. AUTONOMOUS LOCOMOTIVE ROBOT PATH PLANNING ON THE BASIS OF MACHINE LEARNING,DISSERTATION THESIS,BRNO UNIVERSITY OF TECHNOLOGY
Pošlete email redakci.
Všechny materiály, které máme k dispozici, jsou již součástí článku, na který reagujete (tj. pokud tam tedy není např. plánek na stavbu, je to proto, že nic takového nemáme).
Vaši zprávu se bohužel nepodařilo odeslat, ale můžete nám napsat sami na adresu webmaster-at-robotika.cz
Vaše zpráva byla úspěšně odeslána
Pro odeslání formulář je třeba mít zapnutý javascript.