Bumperlogica

Uit RobotMC.be
Versie door BlueHaze (overleg | bijdragen) op 29 dec 2017 om 22:35
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Ga naar: navigatie, zoeken

Original text written by Chris Schur on http://www.schursastrophotography.com/robotics/bumperlogic.html
Translated with permission by Gert Willemsens. Photo and picture courtesy: Chris Schur

Originele tekst geschreven door Chris Schur op http://www.schursastrophotography.com/robotics/bumperlogic.html
Met toestemming vertaald door Gert Willemsens. Foto's en afbeeldingen door Chris Schur


Bumperlogicaarena400.jpg



Picbot II en de robot Test Arena


Een van de eerste sensoren die een robotbouwer op zijn nieuwe robotcreatie plaatst, is over het algemeen de voorste bumper. Gezien het geplande gebruik van deze sensors meestal redelijk vaag blijft, is er weinig gedetailleerde informatie die beschrijft welk gedrag bij het programmeren moet worden geïmplementeerd. De meeste boeken raken het onderwerp oppervlakkig aan. Zo schakelen de meeste publicaties, na een beschrijving als “Draai rechts na linkse botsing” en “ Draai links na rechtse botsing”, vrij snel over naar meer verleidelijke onderwerpen als sonar of kartering. Daarom wensen we hier deze informatie aan te vullen en de kwesties te bespreken die achter de simpele “Bumper logica” liggen.


Het doel van de bumpers

De meest voor de hand liggende verklaring waarom mobiele robots sensorbumpers nodig hebben is het feit dat deze als laatste detectiemiddel kunnen worden gebruikt wanneer de infrarood-, sonar- of andere navigatiesensoren het obstakel niet hebben kunnen waarnemen. Iets botter gezegd: als alle andere sensoren het obstakel gemist hebben, dan zal de bumper aanduiden dat de robot tegen een object van onbekende vorm en afmeting is gestoten. Zo kan de robot dan een soort van ontsnappingsmanoeuver uitvoeren om zo terug op het pad naar zijn bestemming te geraken.


Bumperlogica1.jpg

Hoewel de eerste robots van vele experimenteerders enkel bumpers hebben voor ruwe obstakeldetectie, zijn deze bumpers meestal onvoldoende om te vermijden dat de robot vast komt te zitten in de huishoudelijke omgeving. Proberen te navigeren van kamer tot kamer is bijna zoals al voelend je weg zoeken in het donker: je robot kan er een overmatig lange tijd over doen om zijn bestemming te bereiken, als hij die al bereikt. Daarom moeten we steeds overwegen om ten minste IR obstakeldetectie toe te voegen voor de primaire detectie, nadat de bumpers werden geïnstalleerd.



Traditionele bumperlogica

Er kunnen minimaal twee schakelaars als bumper worden geïnstalleerd op de voorkant van de robot, meestal dicht bij de grond. De algemene regels zijn dan:

  1. Botsing op de linkerbumper: Stop, Draai rechts, rij door;
  2. Botsing op de rechterbumper: Stop, Draai links, rij door;


Bumperlogica2.jpg

Dit is de ideale formule om te waarborgen dat de robot snel vast zal komen te zitten in de huishoudelijke omgeving, of zelfs in een meer beheerste testzone als een doolhof of arena.

Ten eerste zal de robot, wanneer hij in een hoek terechtkomt, oneindig heen- en weer blijven bewegen tot de batterijen leeg zijn. Dit fenomeen noemt men “Canyoning” en er zijn een aantal oplossingen voorhanden om deze situatie te corrigeren. Ten tweede kan de robot in nauwe of beperkte gebieden vast komen te zitten, bijvoorbeeld tussen twee dicht bijeenstaande muren, botsend tot in het oneindige. Dit is het “Tunnel probleem”. Ten laatste kan de robot, als hij dan toch een noemenswaardige afstand achteruit zou rijden, vast komen te zitten omdat hij geen enkele manier heeft om op te merken of hij achteraan iets geraakt heeft.


Geavanceerde bumperlogica

Met iets lichtjes gesofisticeerde programmatie en overdachte plaatsing van enkele extra bumpersensoren kunnen we deze valkuilen vermijden en zelfs wat artificiële intelligentie toevoegen om de botsingsituatie op te lossen. Laat ons verder elke toestand in detail bespreken en enkele mogelijke oplossingen naar voor brengen.


Hoeveel bumpers?

Bumperlogica3.jpg

Het toevoegen van een continue ring van bumpersensoren rond de robot is waarschijnlijk overdreven en een verspilling van de beperkte middelen op de robot. Onze experimenten in normale huishoudelijke omgevingen tonen aan dat vijf kleine bumperstootkussentjes vooraan de robot en één achteraan de meest optimale oplossing geeft, gebruik makend van een beperkt sensorennet. De layout bestaat uit een centrale bumper die aan beide zijden door twee zijbumpers wordt geflankeerd. Daarenboven is een bumper achteraan op de robot gemonteerd. We zullen als volgt naar deze serie bumpers, die de hele breedte van de robot overspannen, inclusief eventuele wielen en projecties op de zijkanten, verwijzen:

- Links Links Voor;
- Links Voor;
- Center;
- Rechts Voor;
- Rechts Rechts Voor;
- Achter;

Voor we beschrijven welke actie (“gedrag”) elke bumper moet initiëren herhalen we dat er drie situaties zijn die we in beschouwing moeten nemen. Ten eerste is er een simpel reactief of reflexief gedrag. Deze simpele bumperlogica start een vooraf gedefiniëerde set van ontsnappingsbewegingen in functie van de bumpersensor die was geactiveerd. Men noemt dit “ballistische” manoeuvers, wat betekent dat eens ze begonnen zijn, ze doordoen tot het einde zonder sensorinput. Zo zullen we bijvoorbeeld, na het indrukken van de rechter bumper, eerst stoppen gedurende een halve seconde, dan links draaien gedurende 2 seconden, waarna we doorrijden. Totaal reactief dus, met weinig intelligentie erin verwerkt. Ten tweede hebben we tijdsgebonden botsingen. Dit kan gebeuren wanneer de robot vast zit in een “canyoning” situatie en de robot seconde na seconde heen en weer botst tijdens zijn ontsnappingspoging. Wanneer we een soort toezichthoudende intelligentie toevoegen, dan zouden we deze tijdsafhankelijke gebeurtenissen kunnen detecteren en overeenkomstig reageren. In dit geval zou het meten van de tijd tussen opeenvolgende botsingen gedurende een half dozijn botsingen ons duidelijk maken dat we in de “canyoning” situatie zitten. Ten derde voegen we de factor “Creativiteit” toe. In een document dat ik recent las over gedragsgestuurde robotica door een psychologieprofessor, werd hij als volgt aangehaald: “Creativiteit is simpelweg een kleine hoeveelheid willekeurige ruis toegevoegd aan standaard reflexieve machine-intelligentie”. Dit komt erop neer dat wanneer een logische beslissing wordt genomen door de processor in een robot of door het neurale net van een insect, een kleine hoeveelheid van deze willekeurige “creativiteit” tot nieuwe oplossingen van het voorliggende probleem kan leiden en zelfs gedrag kan produceren. Wij kunnen dit bereiken door mathematische willekeur aan onze reacties toe te voegen. Laat ons nu deze drie richtlijnen implementeren om enige artificiële intelligentie toe te voegen aan ons bumperreactieprogramma.


Ballistische/Wederkerende reacties

Botsing centraal vooraan

Bumperlogica6.jpg

De keuze om links of rechts te draaien zou, met enkel bumpersensoren, compleet willekeurig zijn gezien we, in tegenstelling tot IR, niet aan elke zijde kunnen kijken of die vrij is. We moeten effectief tegen iets aan rijden om te weten dat het daar is. De oplossing bestaat er dan in om eerst een kleine afstand achteruit te rijden tot de bumpersensor niets meer detecteert. Dan draaien we willekeurig links of rechts met voor elke richting een even grote kans (50%). De maximum draaihoek zal de grootste zijn van enige andere bumper en is typisch 90 graden in het totaal. Het is essentieel om hier willekeurige creativiteit toe te voegen zodat we geen twee keer in dezelfde situatie terechtkomen. Voor onze robot kozen we ervoor om 45 graden te draaien plus een willekeurig geselecteerde hoeveelheid tussen 0 en 45 graden, zodat de totale mogelijke hoek de gewenste 90 graden bedraagt.


Botsing Links Voor of Rechts Voor

Bumperlogica7.jpg

Aan elke kant van de centrale bumper hebben we de aanliggende bumpersensoren. Deze liggen uiteraard op een hoek van ongeveer 22 graden, gezien ze rond de robot gedraaid staan. Naargelang we van het centrum weggaan, vermindert de totale hoek die we moeten draaien proportioneel. Dit is vooral zo om ervoor te zorgen dat de richting waarin de robot voortbeweegt ongeveer dezelfde blijft als deze waarnaar hij bewoog voor de botsing. We noemen dit “proportionele reactiviteit”. Voor deze bumpers stoppen we eerst de voorwaartse beweging, waarna we terugrijden om de bumpersensoren vrij te krijgen en waarna we dan over een hoek van ongeveer 45 graden draaien in de tegenoverliggende richting van de botsing. Ook hier voegen we willekeurige creativiteit toe om ervoor te zorgen dat we niet steeds heen en weer bewegen in dezelfde situaties. Daarom draaien we 22 graden plus een willekeurige hoek tussen 0 en 23 graden, met een totale draaihoek van 45 graden.


Botsing Links Links Voor of Rechts Rechts Voor

Bumperlogica8.jpg

De buitenste bumpers vooraan de robot geven een indicatie van een “schampschot” botsing op de zijkanten van de robot. De reactie hierop zal minimaal zijn zodat de robot nauwe gangen kan doorkruisen indien nodig. De robot zal stoppen en ongeveer de helft achteruit rijden ten opzichte van een centrale botsing. Dit is zo omdat de hoek van de zijdelingse bumpers bijna 45 graden bedraagt ten opzichte van de voorwaartse bewegingslijn en er minder afstand nodig is om een zijdelingse impact op te lossen. We draaien dan links of rechts, tegen de bumper die de botsing gedetecteerd heeft in, over een totale hoek van 22 graden. Dit bestaat weerom uit een half vaste en een half willekeurige hoek. In dit geval zal 11 graden draaien plus een willekeurige hoek tussen 0 en 11 graden volstaan. Voor deze bumpers kan dit ook een beetje worden fijngesteld om de nauwheid van de gang waardoor de robot moet kunnen klein te houden.


Botsing Achter

Bumperlogica9.jpg

De bumper achteraan, die verlengstukken heeft zoals voelsprieten of een gebogen bumperrail, kan simpelweg bestaan uit één schakelaar. De meeste robots bewegen immers zelden achterwaarts over een noemenswaardige afstand en doen dit meestal enkel wanneer ze een ontwijkend manoeuver of een gecontroleerde dockingprocedure uitvoeren. De sleutel bestaat erin om een kleine lus te doorlopen terwijl achteruit wordt bewogen zodat we een achterwaartse botsing kunnen detecteren en stoppen. In nauwe situaties mogen de 5 cm die we na een frontale botsing achteruit moeten, gehalveerd worden. Een botsing achteraan zal zelf geen reactie veroorzaken. Enkel wanneer we met opzet achterwaarts bewegen wordt deze sensor in het oog gehouden.



Tijd/Gebeurtenis reactie

Bovenop de zuiver reactieve reacties zijn er ook reacties op gebeurtenissen die zich over een bepaalde tijd voordoen en waar we op moeten reageren. Indien we bijvoorbeeld een half dozijn bumperdetecties hebben over een periode van bijvoorbeeld vijf seconden, dan kunnen we er vrij zeker van zijn dat we gevangen zitten in een nauwe beperkte ruimte. Door de tijd tussen botsingen in het oog te houden, kunnen we zo’n situaties ontdekken en ontwijkende acties uitvoeren.

Snelle meervoudige botsingen

Er zijn twee grote types van tijd gecoreleerde botsinggebeurtenissen waar we op kunnen ingaan. Beide resulteren in meerdere botsingen binnen een klein tijdsinterval en ze onderscheiden is niet altijd gemakkelijk. De reactie op elk type is een beetje verschillend en deze worden verder besproken.

“Canyoning” (gevangen in de hoek)

Bumperlogica10.jpg

Dit is het meest voorkomende type van tijd gecoreleerde botsinggebeurtenissen dat experimentele robotici tegenkomen. In dit geval zal de robot vast komen te zitten in de hoek van een ruimte of tussen delen van meubilair met de juiste tussenafstand, door heen en weer te botsen tussen aanliggende muren. Wanneer de robot bijvoorbeeld de hoek raakt met zijn linkerbumper, dan zal hij ontwijkend draaien naar rechts. Een seconde later raakt hij echter de tegenoverliggende muur met zijn rechterbumper en ontwijkt naar links. Dit kan zo blijven doorgaan tot de batterijen van de robot leeg zijn. Het is uitermate belangrijk dat we dit detecteren en oplossen, willen we dat de robot normaal kan functioneren in een huishoudelijke omgeving. Om deze conditie op te lossen moeten we ze echter eerst detecteren. We doen dit door de laatste vier botsingen op te slaan in het geheugen, samen met de tijd ertussen. Daarna onderzoeken we de tijden en richtingen om “canyoning” te detecteren.


Bumperlogica4.jpg

Implementatie van deze methode houdt in dat we de robot programmeren om te onthouden. Dit is niet moeilijk en introduceert het concept van leermatrices. Het idee bestaat erin om vier of meer variabelen te bewaren waarin timinggegevens kunnen worden opgeslagen. Terwijl de robot voortbeweegt zonder iets te raken, tellen we constant een klein tijdsinterval, bijvoorbeeld 10ms. Dit is klein genoeg om snelle reacties op botsingen niet te verstoren. Wanneer we dan een bumperbotsing detecteren reageren we zoals normaal, maar slaan we het laatste tijdstip dat de lus telde op en resetten we de teller. Na elke opeenvolgende botsing schuiven we de oude waarden naar beneden en registreren we de nieuwe. Daardoor krijgen we een totale tijd tussen de laatste vier botsingen. Na elke botsing kijken we snel naar de lijst met variabelen, wat eigenlijk een 1 bij 4 array is. Als de totale tijd 5 seconden of minder is, dan is de snelle botsing situatie gedetecteerd. In de meeste gevallen zal het volstaan om 180 graden te draaien om uit de hoek te ontsnappen. Deze werkwijze is waarschijnlijk 99 procent effectief om uit een hoek te ontsnappen. Je kan ook de richting van de draai opslaan. Een hoek zal worden opgeslagen als Rechts-Links-Rechts-Links of het omgekeerde. Als dit gebeurt EN de totale tijd is klein, dan zit je hoogstwaarschijnlijk vast in een hoek.


Hier volgt als voorbeeld pseudo code om de meeste hoeken te detecteren:

LOOP:

Test bumpers
IF impact Then Escape

PAUSE 10mS
T = T + 10 ‘Tel 10mS tijdstoenames

GOTO LOOP ‘Geen botsing

ESCAPE:
T3 = T2 ‘Verschuif de waarden in de array
T2 = T1
T1 = T0
T0 = T

IF T0+T1+T2+T3 < 5 Seconden THEN CORNER
Voer ontsnappingsmanoeuver uit
GOTO LOOP

CORNER:
Draai 180 graden
GOTO LOOP


Bumperlogica11.jpg

Links: ontsnappen uit een hoek

Natuurlijk moeten er een aantal lijnen worden toegevoegd om de waarde van T te beperken wanneer hij “over rolt” bij het tellen en zo. Maar dit is het basisidee. Er kan echter een geval zijn dat een hoek lijkt te zijn voor een robot die enkel met bumpers is uitgerust, maar waar hij toch niet uit kan ontsnappen. Dit is “Gevangen in de Tunnel”.

Gevangen in de Tunnel (Nauwe Gang)

Bumperlogica12.jpg

Zonder de hulp van IR of sonar om naar de verstliggende ontsnappingsroute te kijken kan navigatie met bumpers soms enkel “proberen”. Een laatste situatie waarnaar gekeken dient te worden is “Gevangen zitten in de Tunnel”, of “Tunneling”. Beeld je even in dat je robot in een nauwe gang komt of in een ruimte tussen de zitbank en de muur. Ergens middenin zal de robot tegen de muren beginnen botsen. Wat hierop volgt hangt voor een groot deel af van de vorm van de robot alsook van de hoeveelheid vrije ruimte die hij ter beschikking heeft, maar het meest voorkomende resultaat is dat de robot snel heen en weer zal botsen tussen de muren en vast zal komen te zitten. Gezien hij geen objecten kan detecteren tenzij hij ertegen botst is het moeilijk te zeggen welke weg de robot uit de tunnel zal leiden. Veel huisrobots zullen uren goed bewegen tot Tunneling voorkomt, waarbij de robot vast zit tot de batterijen leeg zijn. Tunneling lijkt enorm op Canyoning voor een robot die enkel van een bumper is voorzien. Maar er zijn verschillen waarnaar kan worden gekeken en waardoor een heel andere aanpak tot ontsnappen kan worden geïmplementeerd.


Om Tunneling te detecteren moeten we niet enkel het laatste half dozijn botsingintervallen opslaan, maar ook hoe vaak de hoekontsnappingsreactie werd geactiveerd. Nadat twee of drie hoekontsnappingsreacties vlak na mekaar werden uitgevoerd, zonder dat de robot ergens geraakt, implementeren we onze tunnelontsnappingsroutine. Ondanks het feit dat dit geen perfecte methode is, kan het de robot uit enkele potentieel fatale vallen halen. Het antwoord op het probleem is natuurlijk om de uitweg te vinden door een wand te volgen. In wandvolgen blijven we geleidelijk aan draaien naar links of rechts en slechts een kleine hoeveelheid wegdraaien na een botsing. Hierdoor zal de robot de wanden volgen in een serie van kleine gebogen routes. Het wandvolgen stopt wanneer enige andere bumper een botsing detecteert, wat misschien een indicatie is van het einde van de tunnel.

De pseudo code voor een ontsnapping uit een tunneling situatie kan er als volgt uitzien:

LOOP:
.
(zelfde zoals code in bovenstaand voorbeeld)
.

GOTO LOOPCORNER:
Test de tijd tussen de laatste drie keer dat we hier gekomen zijn
IF SUM < 10 seconden THEN TUNNEL
GOTO LOOP

TUNNEL:
Volg de wand tot botsing
GOTO LOOP

Bumperlogica13.jpg

De belangrijkste techniek voor wandvolgen met bumpers is ervoor te zorgen dat de bumpers voorbij de zijrand van de bumperreeks uitsteken zodat we zeker zijn dat een botsing met de robot bijna parallel aan de wand, zal worden gedetecteerd. De grootte van de bogen wordt bepaald door hoe scherp je terug naar de wand draait. Indien te breed, dan kan je een gebogen wand missen. Indien te smal dan zal je heel wat energie opdoen aan het botsen tegen de wanden. Een boog van 15 cm tot enkele tientallen centimeters is geschikt en hangt vooral af van de lengte van de stukken in het huishouden tegen de muur. In onze kleine robot test arena hebben we de afstand op 15 cm gezet om de muren dicht te volgen. De enige waarschuwing die we hier willen geven is ervoor te zorgen dat het muurvolgen beperkt wordt in de tijd, bijvoorbeeld tot maximaal 5 seconden. Anders zou het wel eens kunnen dat je robot gedurende lange tijd wandvolgen blijft doen rond een meubel.

Het zal ondertussen ook wel duidelijk zijn dat het zoeken van de weg door de kamer met bumpers op zijn minst riskant is en dat er zoveel manieren zijn om vast te komen te zitten dat het moeilijk is om al deze situaties te plannen, laat staan de situatie detecteren. Maar hier goed programmeren zal een goede backup geven voor de IR en andere sensoren mochten deze falen.


Statis (geen botsingen)

Bumperlogica14.jpg

Een ander aspect van elk ontsnappingsplan is het plannen van de statis ontsnappingsgebeurtenissen. Dit gebeurt als volgt. Stel dat het gebied waardoor een robot zal bewegen, onderweg naar zijn bestemming, een bepaalde grootte heeft, bijvoorbeeld 2m². Wanneer de robot nu langer beweegt dan de tijd die hij er normaal over doet om de volledige ruimte te overbruggen, en dit zonder bumperdetecties, dan kan hij vastzitten met draaiende wielen terwijl de bumper het obstakel niet aanraakt. Op dit moment kunnen we de stasis ontsnappingsroutine implementeren, die de robot vrij zal maken door elk wiel om beurten eens te schudden zodat hij los komt. Dit kan een ballistische routine zijn – door de reactie lopen zonder te letten op de bumpers. Om deze statis ontsnapping te implementeren gebruiken we een totaal van de aan-tijd tussen bumperdetecties. Wanneer we een bepaald totaal bereiken, dan zitten we waarschijnlijk in een stasis val.


Hier volgt een voorbeeld van pseudo code:

LOOP:
Test bumpers
IF impact Then Escape
PAUSE 10mS
T = T + 10 ‘Tel 10mS toenames van tijd
IF T > 1500 THEN STASIS ‘over 15 seconds geen bumperdetecties
GOTO LOOP ‘Geen botsing

STASIS:
Stasis ontsnappingsroutine
GOTO LOOP


Valse positieve meldingen (Bumper zit vast in de aan-mode)

Bumperlogica15.jpg

Een veel voorkomend probleem met zelf gebouwde bumperschakelaars is dat de robotdesigner de hefboom van de schakelaar zelf als de ondersteuning gebruikt voor de bumper of de voeler. Dit zal niet lang meegaan en kan resulteren in een geblokkeerde bumperschakelaar of een gebogen hefboom. Ook kunnen schakelaars stuk gaan door gebruik. In elk geval, wanneer een enkele bumper schakelaar aan blijft steken, dan zal de robot continu reageren, in cirkels rijdend terwijl hij tracht te ontsnappen aan het spookobject. Door de aan-tijd in het oog te houden voor elke bumper, kunnen we de processor waarschuwen wanneer de aan-tijd overdreven hoog wordt, bijvoorbeeld 5 seconden of meer. Daarenboven kan je door de laatste tien draairichtingen op te slaan kijken of deze steeds dezelfde zijn. Dit is ook een goede indicatie om in acht te nemen. Een andere techniek is kijken naar de bumper na het achteruit bewegen na een normale frontale botsing. Tenzij de bumper vast zit zou er normaal geen detectie mogen zijn. Er kan weinig gedaan worden om de bumper los te maken terwijl de robot rond beweegt, maar we kunnen de robot de bumper laten negeren of de operator laten verwittigen wanneer het de gesloten drempeltijd overschrijdt.


Valse negatieve meldingen (slechte bumperschakelaar)

Bumperlogica16.jpg

Het is moeilijk te detecteren wanneer een bumper stuk gaat en niet meer sluit. Dit kan gebeuren wanneer de bumper wordt afgerukt bij een ontsnappingsmanoeuver. Je zal lang moeten kijken wanneer er geen reactie van een bepaalde bumper meer komt. Als het de centrale bumper is, dan zal de robot waarschijnlijk stoppen en de statis detectie kan dan geactiveerd raken. Maar een zijdelingse bumper is problematischer. Een mogelijke oplossing bestaat erin de robot periodisch de bumpers te testen tegen een object door de specifieke hoek tussen de bumpers te draaien en vooruit te rijden om een botsing met een specifieke bumper te detecteren. Dit kan gedaan worden bij het opstarten aan de robotbasis.



Creatieve reacties

We behouden de definitie van robot “creativiteit” als een kleine hoeveelheid willekeurige ruis toegevoegd aan reflexieve reacties. Dit concept wordt gebruikt in biologische systemen voor de creatie van oplossingen voor alledaagse problemen. Een voorbeeld in de biologische wereld zou een hert kunnen zijn dat door het bos wandelt. Wanneer het hert aan een grote boom komt, dan moet het errond. Maar in welke richting? Na even aarzelen kiest het hert een willekeurige richting en gaat verder. Willekeur kan ook gebruikt worden in ontdekking. Neem bijvoorbeeld een mier die naar een gekende voedselbron gaat. Wanneer de mier voortbeweegt dan gaat zijn pad willekeurig heen en weer omdat de willekeurige ruis in de beweging van zijn poot deze een beetje zijdelings doet gaan. Wanneer de mier zijn bestemming nadert dan ontdekt hij een tweede voedselbron die net naast het gekende pad naar de eerste voedselbron lag. We kunnen, in navolging van de natuur, een willekeurige ruis toevoegen om de ontsnappings- en zoekroutines van de huisrobots te verbeteren.


Willekeurige ruis definiëren

Bumperlogica16.jpg

Er zijn verschillende methods om willekeurige ruis met software te genereren. Pbasic en PICbasic hebben het “RANDOM(X)” commando dat eigenlijk niet meer doet dan een bitje wijzigen in een seed-getal. Je kan ook een min of meer willekeurig getal genereren door het niet gehele gedeelte te nemen van x = y^3, een techniek die reeds jaren gebruikt wordt. Willekeurig gegenereerde getallen uit een opzoektabel halen wordt een beetje minder gebruikt, maar kan werken. Om te testen hoe willekeurig een “willekeurige getallen generator” eigenlijk is, kan je het gemiddelde nemen en dat zou na een aantal generaties moeten oplopen tot de helft van het verschil van de maximum en de minimum waarden. Met andere woorden: Avg = Sigma min tot max / n. Voor de meeste software zal dit rond de helft van 8 of 16 bits liggen, oftewel rond 128 of 32500.



Generatie van willekeurige “Creatieve reacties”

Tot nog toe hebben we een een goede toepassing van creatieve reacties gezien in onze rotatie algoritmes voor elke bumper. Door een kleine hoeveelheid van een beperkte willekeur toe te voegen aan de strikt reactieve Rechts/Links reactie op een botsing, kunnen we dit niet enkel gebruiken om ons uit moeilijke situaties te helpen, maar zeker ook om ons uit de Canyoning-val te halen en eventueel ook uit de Tunnel-val. Wanneer we hierbovenop nog eens een laag artificiële intelligentie plaatsen die naar situaties met deze valkuilen kijkt, dan kunnen we onze ontsnappingskansen enorm verhogen.


Toepassingen voor “Creativiteit”

Bumperlogica18.jpg

Er zijn zoveel mogelijke toepassingen voor dit nuttig concept, dat we het hier enkel beschrijven voor de bumper logica. Belangrijk is hier dat, na het kiezen van de maximum draaihoek na een specifieke botsing, we die hoek in twee delen en de tweede helft willekeurig maken tussen nul en de helft van het maximum om de complete hoek af te werken.

Dus in het geval van een rechter botsing bijvoorbeeld, zullen we niet meer dan 90 graden naar links draaien, maar altijd meer dan 45 graden door bij een vaste hoek van 45 graden steeds een willekeurige hoek tussen 0 en 45 graden op te tellen. We wensen tenslotte dat de robot zo veel mogelijk in de richting blijft bewegen waarin hij bewoog om het specifieke doel te bereiken! Wat echter niet is aangeraden is de robot steeds willekeurig te laten draaien; 0 tot 360 graden zal een robot zeker uit de meeste situaties krijgen; maar de robot zal dan zoals een speelgoed zonder doel rondbotsen in de kamer en zijn vooropgestelde doel slechts per toeval bereiken. We kunnen het “creatieve” concept ook gebruiken voor tijds gecorelleerde situaties. Door een beetje willekeurige tijd toe te voegen aan het muurvolgen of achteruit ontwijken kunnen we nuttige oplossingen bereiken die we anders niet zouden kunnen realiseren.


Elektromechanische bumperarchitectuur

Hier bespreken we de elektromechanische implementatie van de bumperreeks op de robot. Eerst en vooral moet je beseffen dat het eigenlijke concept van wat we proberen te bouwen geen reeks van schakelaars met een bumperplaatje op is. Wat we maken is een “geïnstrumenteerde bumper”. Er is een enorm verschil in ontwerpfilosofie. De verkeerde manier om dit botsingdetectiesysteem te ontwerpen is door schakelaars vooraan en achteraan de robot te plaatsen en een soort draad, staaf of plaat op de schakelaarshefbomen of -knoppen te bevestigen. Hoewel dit aanvankelijk zal werken, is het op langere termijn onbetrouwbaar en zal het snel versleten raken of zal het schakelaarsmechanisme stukgaan of onbruikbaar worden. De correcte manier om een deftige botsingsdetectiesensor te maken is de volgende:

  • Ontwerp eerst een stevig multi-sectie mechanisch bumper systeem voor de voor- en achterkant van de robot;
  • Voeg dan de detectieschakelaars toe aan de bumper;

De logica hierachter is om een sterke serie bumperplaatjes of -staven te maken die de mechanische belasting, die ze in de echte wereld tegekomen, aankunnen. Door het bereik van de mechanische opbouw te beperken kunnen we zelfs voorkomen dat de sensorschakelaars worden beschadigd.

Bumperlogica19.jpg

Laat ons enkele voorbeelden geven van slechte en goede botsingbumpers. Hoeveel robots heb je gezien die hefboomschakelaars aan de voorkant gelijmd of geschroefd hebben en die dan voelsprieten van pianodraad aan de hefbomen hebben vastgemaakt met plastic buisjes? Veel waarschijnlijk. Na een paar dozijn botsingen tegen de muren en meubels geraken de hefbomen verwrongen en de drukknoppen worden diep genoeg ingedrukt om ze te beschadigen. Erger nog, omdat het buigen naar achter toe niet is beperkt kunnen ze, wanneer ze aan een obstakel blijven hangen tijdens het draaien, gewoon de hefbomen naar buiten toe buigen zodat deze nooit meer op hun normale positie terecht komen. Dit is een ZWAK ontwerp.


Laten we nu even kijken naar een ander type. De volledige robot is omgeven door een plastic of metalen cylinder die bovenaan is opgehangen door pianodraad of iets gelijkaardigs. In de ruimte tussen het lichaam van de robot en het binnenste van de cylinder plaatsen we rondom een hele hoop hefboomschakelaars zodat, wanneer de cylinder een obstakel tegenkomt, deze naar binnen toe zwaait en een dichtbijzijnde schakelaar sluit, waardoor er ook richtingsinformatie bekend wordt. Daarenboven monteren we aan elke zijde van de schakelaars een kort staafje, waarop de cylinder zal stoppen voordat het de hefboomschakelaars volledig platdrukt. Anderzijds kunnen we het lichaam van de schakelaars zodanig achteruit brengen en verbergen dat enkel de hefbomen van de schakelaars uitsteken. We hebben nu de beweging mechanisch gelimiteerd en DAN hebben we de binnenkant geïnstrumenteerd met botsingveilige (de staafjes) schakelaars. De “Rug Warrior” robots die reeds aan velen verkocht werden gebruiken dit concept. Dit is een STERK ontwerp.

Bumperlogica20.jpg

Er zijn talloze kleinere details in bumperconstructie die ze optimaal maken in de detectie van botsingen, zoals het toevoegen van rubberen matjes om schade te voorkomen, of de bumper in secties te verdelen om meer sensoriële informatie te voorzien. Neem even de tijd om de foto’s in het “Robot Menu” van Robots.net te bekijken voor ideeën die toepasbaar zijn in jouw omgeving. Je zal zowel goede als slechte ontwerpen zien, maar hier zijn veel goede ideeën te vinden.

Finaal zouden we de bumpersensor layout moeten bespreken. De meeste robotici komen overeen dat een rond lichaam met differentiële sturing het beste ontwerp is voor een binnenhuis robot, met afmetingen die normaal gezien kleiner zijn dan een 30 cm in diameter. Hierdoor kan de robot ter plaatse draaien wanneer hij rondrijdt en kan hij obstakels ontwijken zonder hoeken en projecties op de robot of op meubels en zo te raken. Je robot kan eigenlijk ook vierkant of rechthoekig zijn, zo lang zijn buitenste huid of de grens van de bumper ring rond is. Dit wordt ook veel gedaan om het beste van de twee werelden te verenigen.

Voor onze huisrobots hebben we besloten om vijf frontale bumperplaten te plaatsen en een achteraan. Dit was geen willekeurige keuze, maar werkte op tientallen robots die gedurende jaren zowel in binnen- als buitenshuise omgevingen opereerden. Je kan er natuurlijk zoveel hebben als je zelf wenst, maar onthou dat, volgens onze ervaring, een of twee frontale bumpers nooit genoeg is om je uit de problemen te houden.

Om het even op te sommen

Bumperlogica21.jpg

Het ontwerp van een bumperset en het programmeren ervan is een evidente en methodische taak. Probeer de valkuilen van slecht ontwerp te vermijden en probeer de complexe gedragingen die een goed solide geïnstrumenteerd bumperontwerp zal tonen niet te eenvoudig voor te stellen. We hopen dat we je, door je sommige van de details van wat we gedurende de afgelopen jaren op dit vlak gedaan hebben, hebben laten inzien dat je op zijn minst voorzichtig en intelligent moet zijn in je eigen ontwerpen en dat we misschien enkele richtlijnen voor de implementatie en programmering hebben laten zien. Als we ook maar één robotbouwer geholpen hebben om een betere en intelligentere machine te bouwen, dan hebben we ons doel bereikt!


Chris Schur, 12 oktober 2006