HCC!Forth

HCC!forth

Geesink, een sumorobot

door Paul Wiegmans

Geesink is een mobiele robot, sumorobot die op de HCC-dagen in 1998 de helaas weinige aanwezige tegenstanders allemaal uit de ring heeft verwijderd. Geesink is te zien op de MPEG film over de HCC-dagen op C!T-ROM nr 18, waar hij in gevecht is met een Fisher Technik robot. Het bouwen van Geesink is voortgekomen uit mijn interesse in elektronica, de 8051 microcontroller en de programmeertaal Forth. Geesink is deels gebaseerd op mijn ervaringen met het bouwen van mijn vorige en eerste robot Mobo.

Geesink is een autonoom bewegende mobiele robot. Dat houdt in dat het voertuig zijn eigen krachtbron aan boord heeft, en zijn eigen intelligentie, die bestaat uit een microcontroler met software die de robot zelfstandig laat bepalen hoe het beweegt, in welke richting en met welke snelheid. De robot legt doelbewust gedrag aan de dag dankzij een aantal sensoren, die de robot informatie geven over de omgevingswereld waarin hij zich verkeert, en die het de robot mogelijk maken om beslissingen te maken op basis van deze informatie.

De robot bestaat uit drie delen of niveaus:

  • Fysiek: het houten platform waarop de wielen, sensoren, en printplaten zijn gemonteerd.
  • Elektrisch: een elektronisch systeem, bestaand uit een microprocessor, sensors, motoren en een krachtbron.
  • Logisch/functioneel: een incrementele Forth compiler met een intelligent besturingsprogramma.

Robosumo

Geesink is een mobiele robot, die speciaal is ontworpen het robot-sumo te spelen. Robot-sumo of Robosumo is een tweekamp tussen twee mobiele robots op een rond platform, waarbij het de bedoeling is dat een robot dat ander probeert uit de ring te schuiven. De robot wint, die het eerst de andere robot de ring afduwt of die het langst de tweekamp uithoudt zonder zelf van de ring afgeduwd te worden. Voor een simpel sumorobot kunnen een aantal doelen worden gesteld die het probeert uit te voeren om een westrijd te winnen:

Een sumorobot detecteert de rand van de ring en blijft daarbinnen (obstakel-vermijdend)

Een sumorobot detecteert de tegenstander en richt zich daarop (obstakel-opzoekend)

De reglementen voor Robosumo stellen eisen aan de dimensies van de robot. De robot mag maximaal 20 cm bij 20 cm groot zijn, en mag maximaal 1 kg zwaar zijn. Geesink voldoet aan deze eisen: hij is 19,5 cm bij 19,5 cm en heeft een gewicht van 980 gr.

Foto's van Geesink (voor, zij, achter)

Platform

Het platform voor Geesink werd eerst van plexiglas gebouwd. Toen bleek dat dit materiaal slecht te bewerken was, is het platform opnieuw gebouwd van houten hobbyplaat en latten.

Het platform bestaat uit een vierkante basisplaat van fijn multiplex. De motoren en de motorbatterij zijn aan de onderkant gemonteerd, terwijl de processorprint en de interfaceprint aan de bovenkant zijn gemonteerd. Alle verbindingen zijn M3 bouten en moeren. De voorkant en achterkant heeft een houten balkje gemonteerd waarop elk 2 bumpers gemonteerd zijn met drukschakelaars. De batterij voor het elektronische systeem ligt los tussen de basisplaat en de processorprint.

Bumpers heb ik gemonteerd met behulp van folietoetsen, die met behulp van een hete lijm gemonteerd aan de bumperbalk aan de voor en achterkant.

Elektrisch systeem

Het elektrische systeem bevat alle componenten voor het controller-systeem, de sensors en de motoren. De microcontroller bevindt zich op een processorprint, welke een F+-bord is met een 80C535 processor. Dit microcontrollersysteem draait zelfstandig. Daarboven is een interfaceprint gemonteerd verbonden met de processorprint via enkele connectors. De interfaceprint bevat elektronica voor niveauaanpassing en aansluiting voor elke individuele sensor, enkele LEDs en de aansluitingen voor de schakelaars, de twee batterijen, en motoren.

Het elektrisch systeem wordt gevoed uit twee batterijen. De motoren en LEDs hebben een eigen krachtbron met 4 NiCad cellen, onafhankelijk en gescheiden van het elektrische deel met de microprocessor en alle sensors, om de beinvloeding van stoorpulsen opgewekt door de motoren op de werking van de sensors te minimaliseren. Het deel met de microcontroller en sensors wordt gevoed uit twee 4,5 V platte batterijen.

De processorprint is een zelf ontwikkeld F+ bord, met een 80C535 processor, 32 KB RAM, en 32 KB ROM met daarin de taal Forth, een I2C realtime clock, en een lithium batterij voor backup van de RAM. De 80C535 processor is een algemene 8-bit processor compatibel met de alom bekende 8051 met 36 digitale in/uitgangen waarvan 8 ook bruikbaar zijn als analoge ingang van de ADC met 8 of 10-bit resolutie. De lithium batterij bewaart het programma gedurende 1 jaar in de RAM, en maakt het mogelijk dat het systeem bij het aanschakelen automatisch begint met het uitvoeren van de routines in RAM.

Aandrijving

De motoren zijn servomotoren, die zo zijn gemodificeerd dat ze volledig rond kunnen draaien. Deze motoren zijn uiterst klein, en hebben geen grote krachtstroomelektronica nodig. De servomotoren worden aangestuurd met een pulswijdte gemoduleerd (PBM) signaal op TTL-spanningsniveaus en kunnen rechtstreeks aan de 80C535 microcontroller verbonden worden. Met het pulsbreedte gemoduleerd signaal kan de snelheid en draairichting traploos geregeld worden. De minieme motortjes erin worden vertraagd door middel van een interne tandwielenkast, en het askoppel neemt daarbij fors toe. Dit is ideaal voor Robosumo waar de motoren flink wat kracht moeten leveren. Het nadeel is dat de snelheid niet zo erg hoog is.

De sensoren geven Geesink informatie over de omgevings en zijn rechtstreeks verbonden met de interfaceprint. Er zijn 13 sensors:

  • 4 paren bumperschakelaars; 2 op de voorbumper en 2 op de achterbumper.
  • 4 infrarode obstakeldetectors voor korte afstand, met IS471; voor, achter, links en rechts.
  • 1 infrarode obstakeldetectors voor lange afstand met een GP2D02;
  • 4 End-Of-World detectors; type CNY70 infrarode optocouplers die de rand van de Sumoring detecteren.

Op de sensorprint zijn bovendien nog aansluitingen voor 1 speaker, 1 infrarood sensor, 3 LEDs, 4 extra schakelaars, 2 extra servomotoren en 4 ADC kanelen voor het meten van de batterijspanningen en de motorstromen.

Op de hoekpunten van het platform zijn aan de onderkant de EndOfWorld detectoren gemonteerd die de rand van de ring detecteren. Dit zijn optocouplers van het type CNY70. Hierin zit een aktieve IR-LED en een IR-transistor. Wanneer de witte ringrand onder een sensors verschijnt wordt het gereflecteerd infrarode licht van de IR-LED opgevangen door de IR-transistor en de intenisteit ervan gemeten op een ADC-kanaal. De IR-LED wordt aan en uitgeschakeld en het verschil tussen de reflecties wordt gemeten. Dit geeft een betrouwbare mate van reflectiviteit ("witheid") van de ondergrond ongeacht de hoeveelheid van omgevingslicht. Deze methode werkte goed, maar pas wanneer direct zonlicht op de ring onder de sensors viel (zoals in het clubhuis in Gouda wel eens gebeurde) dan raakte Geesink toch enigszins in de war.

Aan de voorkant, achterkant en beide zijkanten zijn nabijheidsdetectors gemonteerd van type IS471. Deze aktieve sensors geven een digitaal signaal dat aktief wordt wanneer een object binnen ongeveer 15 cm in de straal komt. De LEDs worden gevoed uit de motorspanning.

Software

De software van Geesink zorgt dat de robot reageert op de omgeving en dat de robot intelligent beweegt. Het besturingsprogramma van Geesink is grotendeels geschreven in Forth, en assembler is gebruikt voor de tijdkritische delen, zoals de servosturing die helemaal op basis van software plaatsvindt. De Forth in EPROM is 8051-ANS-Forth dat is ontwikkeld door de HCC Forth g.g. door o.a. Willem Ouwerkerk. Forth is een krachtige redelijk makkelijk te leren taal dat heel geschikt is voor microcontrollers. Het maakt het mogelijk om interactief te programmeren en dit verkort de ontwikkeltijd aanzienlijk. Een programma wordt tijdens het downloaden gecompileerd in RAM en kan direkt worden uitgetest. Fouten in de software kunnen worden hersteld, door de RAM helemaal of gedeeltelijk te wissen en een nieuwere versie van de software te downloaden. Sommige aanpassingen aan de software kunnen met behulp van een terminal rechtstreeks gedaan worden op de prompt van het microcontrollersysteem, variabelen kunnen bekeken of gewijzigd worden en de routines geherdefinieerd. Dit verkort het testen en foutzoeken enorm.

De doelen van Geesink zijn dezelfde als iedere Sumorobot. Het softwareprogramma van Geesink zorgt daarom dat Geesink die doelen kan bereiken. Om een sumowedstrijd te winnen heeft een sumorobot grofweg de volgende doelen.

  • De robot moet de tegenstander opzoeken;
  • De robot moet de tegenstander uit de ring werken;
  • De robot moet in de ring blijven en niet zelf over de rand te rijden.
  • De robot moet in de ring blijven en niet door de tegenstander uit de ring geduwd worden.

Het software van Geesink is gebaseerd op de Subsumption Architecture van MIT professor Rodney Brooks. Subsumption Architecture is een methode is evan uitgaat dat een robot complex intelligent gedrag aan de dag kan leggen, door middel van het implementeren van een aantal gedragingen ("behaviors") die elk voor zich erg eenvoudig zijn en slechts reageren op prikkels van de buitenwereld. Deze gedragingen vechten als het ware om belangrijkheid (prioriteit) en zijn feitelijk kleine parallel uitgevoerde controlesystemen. Er wordt geen lange termijn planning gedaan. De strategie voor een sumorobot kan dus vereenvoudigd worden van het proberen te bereiken van een ingewikkeld doel (het winnen van robosumo) tot een aantal zeer eenvoudige deeltaken en het programmeren van een aantal zeer simpele routines die elk afzonderlijk proberen elk zijn eigen simpele deeltaak te verwezenlijken.

De software van Geesink is uitgesplitst in deze deelprogrammas of gedragsprogrammas:

  • Randvinder: detecteert de rand van de ring en onderneemt aktie om binnen de ring te blijven. Dit onderbreekt Botser.
  • Botser: detecteert een botsing met de tegenstander en onderneemt aktie om Geesink tegen de tegenstander op te rijden. Botser heeft voorrang boven Proxer.
  • Proxer: detecteert de tegenstander op korte afstand en onderneemt aktie om Geesink naar die richting te sturen. Proxer heeft voorrang boven Zoeker.
  • Zoeker: detecteert de tegenstander op lange afstand en onderneemt aktie om Geesink naar die richting te sturen. Zoeker heeft voorrang boven Crazyivan.
  • Crazyivan: draait Geesink eens in de zoveel tijd om zijn as, om de vast-gemonteerde langeafstandssensors te kans te geven om de tegenstander op te pikken (en zo de kans geeft aan deelprogramma Zoeker om prioriteit te krijgen). Crazyivan heeft voorrang boven Kruiser.
  • Kruiser: stuurt Geesink met lage snelheid vooruit en laat Geesink eens in de zoveel tijd een bocht nemen. Dit gedrag geeft zijn commando altijd af aan de actuatoren (aandrijfmotoren) van Geesink, zolang niet tenminste een ander gedrag aktief wordt.

De gedragingen zijn verbonden aan elkaar in een netwerk. Sensoren geven signalen aan gedragingen waardoor informatie over de buitenwereld verwerkt kan worden. Een gedraging kan aktief worden wanneer het een bepaald signaal krijgt van de sensoren. Gedragingen geven hun signaal af aan actuatoren waardoor de robot beweegt en aktie kan ondernemen in de wereld, bijvoorbeeld via aandrijfmotoren of een robothand. Gedragingen kunnen ook signalen aan elkaar geven. Een gedraging kan ook een gedraging van een lager niveau of lagere prioriteit onderdrukken. Het afgegeven signaal van de gedraging van lagere prioriteit raakt dat verloren. Alleen de dominante gedraging geeft zijn signaal aan de actuatoren.

Deze gedragingen zijn feitelijk deelprogrammas die allemaal tegelijk (parallel) uitgevoerd worden. Wanneer er geen multitasking mogelijk is, dan kunnen deze gedragingen geprogrammeerd worden als zogenaamde finite state machines (FSM). Omdat het besturingssysteem van Geesink (80C535-ANS-Forth) niet multitasking is, zijn de gedragingen in Geesink allemaal geprogrammeerd als FSM. Een FSM is een abstracte controlestructuur die gezien kan worden als een verzameling toestanden. De FSM kan met een toegevoerd signaal van een toestand naar een andere worden gebracht.

Dynamisch reageren op omgeving

Het is erg belangrijk voor een sumorobot dat het op ieder moment de rand van het strijdtoneel kan detecteren, zelfs als zit het in een commandoreeks voor het ontwijken van een obstakel. Het gebruik van gedragingen en het schijnbaar parallel uitvoeren daarvan in Geesink zorgt ervoor dat Geesink op elk moment zijn sensors blijft uitlezen en dynamisch blijft reageren op zijn omgeving. Omdat alle gedragingen parallel uitgevoerd worden, is Geesink op geen enkel moment blind voor zijn sensors, want op geen enkel moment raakt het programma in een hardgecodeerde wachtlus, zoals bijvoorbeeld in het commando "ga achteruit, wacht 2 seconden, ga linksom, wacht 1 seconde, ga vooruit" omdat deze zijn geprogrammeerd in een FSM die continu test of de tijd verstreken is. Deze FSM wordt als het ware parallel uitgevoerd tegelijk met de andere FSMs en dit maakt het mogelijk dat tijdens reeks commandos toch alle sensors uitgelezen worden. Dit maakt het mogelijk dat Geesink een zeer scherp reageert op veranderingen in de omgeving, met name een tegenstander-sumorobot.

Het prioriteitenschema liggen vast. De motoren krijgen het commando van de gedraging die aktief is en voorrang krijgt. Gedraging Kruiser is altijd aktief en geeft zijn commando altijd af aan de motoren. Pas wanneer Crazyivan aktief is, geeft Crazyivan zijn commando aan de motoren; om te draaien. Wanneer een van de sensoren een signaal geeft dan wordt een van de andere gedragingen aktief en geeft die gedraging zijn commando aan de motoren. De gedraging met de hoogste prioriteit is Randvinder, omdat de EndOfWorld-sensors het belangrijkst zijn, waarop Geesink altijd moet reageren. Daarom heeft Randvinder de hoogste prioriteit. Hoewel de prioriteiten vastliggen, is het niet te zeggen welke gedraging op een moment dominant is. Welke gedraging dominent is, is helemaal afhankelijk van de signalen van de sensors.