hobby-cnc

Welcome to my
Robotic site.

 

 

Finite State Machines om een Robot gedrag te Leren
geschreven door Paul Wiegmans.

Het idee van de Subsumption Architecture is ideaal om intelligente robotbesturingen te programmeren.

Elk van deze gedragingen is geprogrammeerd als een Finite State Machine of FSM. Een FSM is een uitgebreide programmastructuur die in een bepaalde toestand verkeert, en die onder een bepaalde voorwaarde in een andere toestand overgaat. Die voorwaarde kan een drempelwaarde zijn op een sensor of een teller die na een bepaalde tijd een signaal geeft. De FSM maakt het mogelijk om een aantal handelingen achter elkaar uit te voeren terwijl de processor beschikbaar blijft om andere taken uit te voeren of sensors af te lezen.

Een voorbeeld van een functie die in een FSM geprogrammeerd kan worden is een programma waarbij een robot met een bumperschakelaar achteruitrijdt en wegdraait wanneer het contact maakt met een obstakel. Een slecht geschreven programma ziet er zo uit (in pseudocode):

ZOLANG 1=1

VOORUIT

ALS LINKERBUMPER = 1 DAN ( A )

ACHTERUIT

200 MILLISECONDE RECHTSOM

400 MILLISECONDE

EINDALS

ALS RECHTERBUMPER = 1 DAN ( B )

ACHTERUIT

200 MILLISECONDE RECHTSOM

400 MILLISECONDE

EINDALS

EINDZOLANG

robobits_7_01_1

Het nadeel van dit programma is dat de robot alleen obstakels voelt wanneer hij vooruit gaat. Wanneer de rechterbumper contact maakt met een obstakel en programmatak B wordt uitgevoerd, dan wordt gedurende 600 ms geen enkele sensor afgelezen en is de robot totaal blind voor alle sensoren. Wat nu als de linkerbumper contact met een obstakel maakt

wanneer het programma zijn afwerking voor de rechterbumper uitvoert? Het programma houdt geen enkele rekening met die mogelijkheid. Wat we zouden willen, is dat tijdens elk punt van het programma alle sensors afgelezen worden, en het programma daarop blijft reageren. Dit is nu mogelijk door de doorloop van de hoofdlus zo kort mogelijk te houden, en te voorkomen dat het programma voor een ontoelaatbaar lange tijd verzandt in een zijtak. Dit nu is mogelijk met behulp van een FSM.
robobits_7_01_2

Door het programma verloop voor te stellen in een toestanddiagram wordt duidelijk hoe de zaken ervoor staan. De ballonnen stellen een bepaalde toestand voor, waarin de FSM verkeert. Alleen op een voorwaarde gaat de FSM naar een andere toestand. Deze toestand

robobits_7_02_1

overgangen worden voorgesteld als een pijl. De voorwaarde voor een toestandovergang staat naast de pijl. Een voorwaarde kan een sluitende schakelaar of een andere sensor of een verstreken tijdsduur zijn.

We nemen aan dat de robot altijd vooruit blijft gaan, maar als er iets gebeurt op de bumper, dan wordt er aktie ondernomen. Deze aktie wordt uitgevoerd door de FSM, het programma dat we BUMPER noemen.

 BUMPER staat altijd in toestand 0 en leest continu de bumperschakelaars af. Zodra één van de bumpers contact maakt, dan gaat de BUMPER naar toestand 1 wanneer de rechterbumper contact maakt, en naar toestand 3 wanneer de linkerbumper contact maakt, en het command achteruit wordt gegeven. Na 200 milliseconden het command achteruit te hebben gegeven, geeft BUMPER het commando om weg te draaien naar de andere richting, gedurende 400 milliseconden. Nadat 400 milliseconden verstreken zijn komt BUMPER weer in toestand 0 waarin BUMPER geen command meer geeft.
robobits_7_02_2

Een voorbeeld maakt dit duidelijk. Het volgende sourcecodefragment is een routine in Forth uit mijn vorige robot Mobo die reageert op een bumperschakelaar en de robot achteruit en daarna links of rechts stuurt.

robobits_7_02_3
robobits_7_03_3

 

 

 

 

 

 

Het grote voordeel hiervan is dat het programma nooit in een lus of programmatak blijft hangen. Routine BUMP wordt aangeroepen, test de bumpers en test de voorwaarden waarop een toestandovergang plaatsvindt, en wordt direkt beeindigd. In een andere deel van het pogramma staat de hoofdlus, en daarin wordt BUMP aangeroepen. Ondertussen wordt wel gedurende iedere doorgang door BUMP de bumperschakelaars uitgelezen.

In een goed gestructureerd robotbesturingsprogramma wordt de hoofdlus ongeveer 200 keer per seconde doorlopen, en dus ook routine BUMP. Er is nergens een hardgecodeerde delay in BUMP dus BUMP wordt ook 200 keer per seconde aangeroepen en ook de bumperschakelaars uitgelezen.

Dit artikelkomt uit het maandblad Robobits
 van de HCC gebruikers groep Robotica.
Wilt u meer weten over deze onderwerpen ?
kom dan naar onze Gebruikers dagen
 iedere eerste zaterdag van de maand.
sporthal "De Dissel" te Hooglanderveen

 

copyright © 2000 - 2007 Majosoft
www.majosoft.com

netherlands
england
germany

Heeft u ook een leuke hobby en wilt u die ook graag tonen ? Stuur een email naar majosoft at outlook dot com Wij maken voor u de site als u de gegevens aan kan leveren.

Do you have also a nice hobby and you want to show it. Please send an email to majosoft at outlook dot com . We make the site if you can deliver the information.

Haben Sie auch ein Hobby und wollen sie das sehn lassen. Bitte schicken Sie eine email zu majosoft at outlook dot com . Wir machen die zeite fur ihn, wenn sie uns die information geben.

[Robotic] [Projects] [Radio Control to PC interface] [Kermit] [Robotic Arm] [Robot arm 2] [Info] [Datasheets] [PICmicro microcontrollers] [Maandblad] [Beginners..... B+ boardje] [Het PeeWee interface] [Opamps deel1] [Opamps deel2] [Geisoleerde Accu Bewaking] [IR-PROXIM] [Inleiding digitale bouwstenen] [Digitale logische bouwstenen] [Het aansturen van Solid State Relais] [Finite State Machines om een Robot gedrag te Leren] [PWMDRV-S-M-L voor kleine tot grote motoren] [SENSOREN IN DE TUINBOUW] [Ombouw radiografisch bestuurbare rc auto naar Robot auto] [Grondbeginselen van de digitale logica] [SENSOREN IN DE TUINBOUW2] [U2352B A TCM] [Eenvoudige tiptoets] [Stappen motor sturing] [Robotic Links] [bijeenkomsten] [HCC Robotic Day  8 jan 2005] [HCC Robotic Day]