Robot ovládaný pomocou natrénovanej neurónovej siete - Katarína Kotrlová
Cieľ projektu
Cieľom projektu bolo natrénovať robota pomocou neurónovej siete na chodenie po chodbe bez toho, aby narážal do stien a aby zabáčal v rohoch. Priestorové dáta pochádzajú zo senzora Asus Xtion (podobny ako Kinect).
Parametre sensora
Senzor sníma vzdialenosť od objektov v priestore, kde sa nachádza. Výstupom je pole hodnôt reprezentujúcich hĺbkovú mapu priestoru pred robotom. Spoľahlivo sníma objekty v rozpätí 0,8m-4m. Výsledné hĺbkové pole má rozmer 320 x 240.
Dáta
Získanie vstupných dát
Naprogramovali sme ovládanie robota pomocou šípok na klávesnici, pričom pri každom stlačení šípky sa uložil záznam snímku, čo práve robot videl spolu s kódom stlačenej klávesy. Počet takýchto trénovacích dát bol približne 300.
Predspracovanie
Z nasnímanej mapy 320 x 240 sme spravili mapu rozmerov 16 x 12, aby sme zmenšili vstup do NN.
V dátach sme nahradili 10 000 všetky hodnoty vyššie ako 10 000 alebo menšie ako 0, považujeme ich za nedôveryhodné.
(Vizualizovali sme si sled snímok pomocou animácie - kod.zip)
Nakoniec sme vyrovnali počet vstupov pre každý smer duplikovaním.
Neurónová sieť:
Na natrénovanie sme použili knižnicu Tensorflow v Pythone.
Parametre siete
Neurónová sieť s jednou skrytou vrtvou o 5000 neurónoch.
Trénovanie na 30 epochách, learning rate 0.001
Aktivačná funkcia na skrytej vrstve - jednoduchá RELU funkcia
Aktivačná funkcia na výstupe - lineárna
Natrénovaná sieť sa nachádza tu: network.zip
prvý riadok - počet neurónov na skrytej vrstve, veľkosť vstupného vektora (16*12), počet neurónov na výstupe (3 - reprezentujúce vektor smeru ())
192 riadkov po 5000 hodnôt váh zo vstupu do skrytej vrsty
1 riadok bias zo vstupu do skrytej vrstvy
5000 riadkov po 3 hodnoty váh zo skrytej vrstvy do výstupnej vrstvy
1 riadok bias zo skrytej vrstvy do výstupnej vrstvy
Trénovacie a testovacie dáta
Množinu vstupných dát sme rozdelili na trénovaciu množinu 4/5 a testovaciu množinu 1/5.
Sieť sa natrénovala po cca 30 epochách s accuracy na testovacej množine 99%. Vysoká hodnota accuracy ale mohla byť sčasti spôsobená aj duplicitnými dátami.
Záver
Robot sa viac menej spoľahlivo vyhýbal bočným stenám, ale rohové zákruty mu robili problém. Stene, ku ktorej sa blížil v rohu sa pokúšal vyhnúť príliš skoro, čo vyústilo do zrážky so stenou alebo nekontrolovanej nerozhodnosti. Zo štyroch zákrut vybral iba 2.
Nedokonalosť pohybu v časti s rohom bola spôsobená pravdepodobne malým počtom dát.
Zdrojové súbory
Video
Získavanie vstupných dát do neurónovej siete
Robot jazdiaci pomocou natrénovanej neurónovej siete