czech english

Kryton

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
[2] Larry Barello's Home Page: AVR and Robotics. [online]. [cit. 2012-05-16]. Dostupné z: http://www.barello.net/index.htm
[3] Bob Blick: Projects / H-Bridge. [online]. [cit. 2012-05-16]. Dostupné z: http://www.bobblick.com/techref/projects/hbridge/hbridge.html
[4] Miloš Zajíc. [online]. [cit. 2012-05-16]. Dostupné z: http://www.zajic.cz/menic/menic.htm

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

Vaše zpráva byla úspěšně odeslána

Pro odeslání formulář je třeba mít zapnutý javascript.