Robot ovládaný pomocou natrénovanej neurónovej siete - Katarína Kotrlová

From RoboWiki
Jump to: navigation, search

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)

BugBox dopredu.png BugBox doprava.png

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

source.zip

nn.zip

Video

Získavanie vstupných dát do neurónovej siete

Robot jazdiaci pomocou natrénovanej neurónovej siete