Difference between revisions of "Tatrabot LineFollowing"

From RoboWiki
Jump to: navigation, search
(Source Code)
Line 36: Line 36:
  
 
== Source Code ==
 
== Source Code ==
 +
 
 +
int end = 0;
 +
 
   while(!end){
 
   while(!end){
 
     uint8_t ln = senseLine();
 
     uint8_t ln = senseLine();
Line 53: Line 56:
 
     wait(20);
 
     wait(20);
 
  }
 
  }
 
  
 
== Video Dokumentácia ==
 
== Video Dokumentácia ==

Revision as of 14:38, 30 June 2016

Zadanie

Cieľom projektu bolo pomocou genetického algoritmu vyvinúť neurónovú sieť, pomocou ktorej bude robot ovládaný tak, že bude nasledovať čiaru.

Curvedline.jpg

Použité technológie

Nosnú časť projektu som programoval v jazyku C# v prostredí Visual Studio 2015. Jednalo sa o simuláciu robota vo virtuálnom priestore. Testovanie Fitness jednotlivcov a následný genetický algoritmus na zdokonaľovanie jedincov.

Samotný robot beží pod jazykom C a tu som naprogramoval len vyhodnotenie jednoduchej doprednej neurónovej siete v prostredí ChibiStudio.

Použitý bol robot Tatrabot vybavený 4 svetlocitlivými senzormi na snímanie čiary.

Tatrabotjur.jpg

Špecifiká problému - Dopredné Neurónové siete

Dopredné neurónové siete nie sú schopné si pamätať predošlé stavy. Preto neurónova sieť, ktorá ovláda tohto robota musí spraviť rozhodnutie iba z aktuálnych dát prijímaných zo senzorov. To by na vyriešenie nášho problému malo stačiť.


Naša neurónová sieť ma jednoduchu topólogiu, so 4 vstupnými neurónmi(dostávajú dáta od senzorov), 3 skrytými neurónmi(spracúvajú dáta) a 2 výstupnými neurónmi(vrátia hodnoty podľa, ktorých robot urobí rozhodnutie či pokračovať rovno, zabočiť vľavo, či vpravo). Size: Upright

Špecifiká problému - Genetický algoritmus

Neurónové siete sa zvyknú na úlohy poväčšinou trénovať pomocou Reinforcement Learningu. Avšak teraz sme sa rozhodli zvoliť metódu genetického algoritmu.

Vytvorili sme 200 náhodných jedincov - prvú generáciu neurónových sietí. Následne sme s nimi odsimulovali robota a ohodnotili ich schopnosť riešiť náš problém - tzv. fitness jedinca. Táto fitness sa vyhodnocovala ako vzdialenosť, ktorú robot prejde po čiare( počet opakovaní rozhodovacieho programu, opakovanie skončí, keď žiadny senzor nevidí čiaru).

Ďalej sa použijú metódy kríženia( priemerujeme hodnoty váh dvoch jedincov), mutácie( s 10% šancou zmením váhu o 20% nahor, z 10% o 20% nadol) a migrácie( pridáme ďaľších náhodne vygenerovaných jedincov) na tvorbu nových jedincov. Nová generácia obsahuje 100 mutovaných, 50 migrovaných a 50 krížených jedincov. Zároveň si však do archívu odkladáme najlepšieho jedinca z každej generácie.

Po niekoľkých generáciach by mali vznikať lepší jedinci, potenciálne aj takí, ktorí už náš problém vedia riešiť.

Size: Upright


Source Code

int end = 0;

 while(!end){
   uint8_t ln = senseLine();
   if(ln == 0){
     end = 1;
   }
   int i = resolveNeuralNetwork(ln);
   if(i == 0){
     setMotor(3, 4000);
   }
   else if(i == 1){
     setMotor(1,4000);
   }
   else if(i == 2){
     setMotor(2, 4000);
   }
   wait(20);
}

Video Dokumentácia

Záver

Robot nepracuje úplne podľa očakávaní, pravdepodobne sa jedná o chybu v jeho virtuálnej simulácií a kalibráciu jeho parametrov.