Zelf-lerende robots

De meeste robots krijgen een taak voorgeprogrammeerd in hun programma-geheugen. Soms is het echter te moeilijk om een goed algoritme te bedenken. Zou het niet prachtig zijn om in zulke situaties een zelf-lerende robot te hebben? Hier zie je bijvoorbeeld een robot die leert om vooruit te kruipen op basis van Q-learning. In het begin maakt de robot enkele sullige bewegingen, maar naarmate de robot bijleert, kruipt hij steeds beter voorwaarts.

Zelf-lerend algoritme
Een zelf-lerende robot interageert met zijn omgeving typisch als volgt: Een robot kan interageren met zijn leefwereld door bepaalde acties te ondernemen. Deze acties resulteren in verandering van toestand en een beloning (of straf). De beloning is afgestemd op wat men wenst dat de robot doet. We kunnen dit schematisch voorstellen als volgt:

zelf-lerende robot


In het geval van de kruipende robot zal de beloning dus afgestemd zijn op de mate waarinde robot vooruit geraakt gedurende een bepaalde tijdsstap. De bedoeling is voor iedere toestand waar de robot zich in kan bevinden te leren wat de best mogelijk actie, en dus de hoogste beloning oplevert, is die de robot kan ondernemen. Q-learning External link is een voorbeeld van een zelf-lerend algoritme External link dat het mogelijk maakt om op een goede manier het beste actie-plan aan te leren. Hiervoor maakt het algoritme gebruik van een tabel, de Q-tabel, waarin voor iedere toestandsactie (s,a) paar een waarde Q wordt bijgehouden. Deze waarde stelt de cumulatieve ogenblikkelijke beloning voor in combinatie met de te verwachten beloning. De Q-tabel wordt iedere tijdsstap geüpdated door gebruik te maken van volgende formule:

formule Q-leren


Hierbij is Q(s,a) de Q-waarde horend bij het toestands-actie paar. De learning rate alpha ligt steeds tussen 0 en 1 en bepaalt de mate waarin de robot zal bijleren: met waardes gelijk aan 0 zal de robot niets leren terwijl een learning rate van 1 ervoor zal zorgen dat de robot enkel gevoelig is voor de meest recentste informatie. Je experimenteert het best met enkele waarden. Daarnaast hangt de Q-waarde af van de verkregen beloning r op een volgende tijdsstap t+1 en wordt ook de hoogst mogelijke toekomstige beloning in rekening gebracht. Met de discount factor gamma kan men regelen hoe
belangrijk toekomstige beloningen zijn voor de robot. De Q-waarde omvat dus niet alleen de huidige beloning maar brengt ook toekomstige beloningen in rekening. Hierdoor kan de robot acties ondernemen die op korte termijn geen beloning opleveren maar op lange termijn wel het gunstigste zijn.
Iedere tijdsstap t wordt dan de actie genomen horend bij de toestand waar de robot op dat moment in zit en waarvoor de Q-waarde het grootste is. Om te vermijden dat de robot blijft vastzitten in suboptimale oplossingen breidt men het
algoritme uit met een epsilon-greedy selectie methode. Dit houdt in dat de actie met grootste Q-waarde voor een bepaalde toestand gekozen wordt met kans 1−epsilon en dat in de andere gevallen een willekeurige actie gekozen wordt. ook hier is het aan te raden met enkele epsilon-waarden (typisch kleiner dan 0.1).

De robot
De kruipende robot bepaalt zijn beloning op basis van het al dan niet voorwaarts bewegen. Om te weten welke richting de robot kruipt, maakt de robot gebruik van een hoek-encoder. De hoek-encoder bestaat uit een infrarood-LED, een dubbele fototransistor en een encoder wiel. Het encoder wiel draait met het wiel mee en zorgt ervoor dat het uitgezonden infrarood licht al dan niet kan ontvangen worden door de dubbele fototransistor. De dubbele fototransistor heeft twee uitgangen waarop twee identieke maar licht verschoven versies van een periodiek signaal komt te staan. Dit staat ook bekend als een kwadratuur en wordt hieronder weergegeven:

kwadratuur


Uit de twee signalen kan men vier mogelijke toestanden afleiden. Dit laat toe naast het aantal rotaties ook de draaizin
van het wiel af te leiden. De twee uitgangen van de dubbele fototransistor zijn aangesloten op de pinnen
RB6 en RB7 van de microcontroller. Deze pinnen hebben de mogelijkheid om een interrupt te genereren bij verandering van de ingang, de zogenaamde interrupt-on-change functionaliteit, wat men zal moeten gebruiken om de afgelegde afstand te kunnen afleiden.

En... ACTIE!
Na het bouwen van de robot en het implementeren van het Q-learning algoritme hebben we de robot getest. Voor de Q-tabel beschouwende we volgende vier acties: servo 1 een stand omhoog, servo 1 een stand naar beneden, servo 2 een stand omhoog en servo 2 een stand omlaag. Om de grootte van de Q-tabel te beperken werd ook het aantal toestanden beperkt tot 4 standen per servo en dus 16 toestanden in totaal. Het uiteindelijke resultaat is te zien in volgend filmpje: