Ups

Uit RobotMC.be
Ga naar: navigatie, zoeken

Ultrasoon Positie Systeem

Inleiding

Veel robots zijn uitgerust met odometrie om verplaatsing te registreren. Hiermee kan, op basis van de startpositie en orientatie (rijrichting) de nieuwe plaats van de robot worden berekend ('dead reckoning'). Uiteraard is de verplaatsing nooit 100% nauwkeurig door afwijkingen in de mechanica, berekeningen en door slip op de wielen. Omdat de nieuwe positie steeds wordt bepaald op basis van de voorgaande, zal de afwijking steeds groter worden. Met name afwijking in de orientatie hebben grote invloed. Dit probleem kan worden opgelost door regelmatig de positie opnieuw te bepalen. Dit kan bijvoorbeeld door terug te gaan naar een referentiepunt zoals de startlijn bij Roborama. Maar het zou nog mooier zijn om overal in de baan de absolute positie te kunnen bepalen. Hiervoor is het Ultrasoon Positie Systeem (UPS) ontwikkeld.

Principe

Ultrasoon is een geluidsgolf met een snelheid van ca 330 meter/seconde (ca 30 microseconden per cm). De afstand die de ultrasoon puls heeft afgelegd kun je bepalen door de tijd tussen zenden en ontvangen te meten. En als je de afstand meet vanaf de robot tot drie bakens op bekende posities, kan de plaats van de robot worden berekend.

Ups principe.JPG

Scenarios

Als de robot een ultrasoon puls uitzendt, kan deze worden opgevangen door drie bakens. De bakens kunnen worden aangesloten op een microcontroller die het verschil in looptijd nauwkeurig kan bepalen. Het startmoment van de puls is niet bekend aan de ontvanger. Deze kan worden berekend, maar dit is een relatief zware berekening voor een microcontroller. Met deze methode weten de bakens de positie van de robot en is draadloze communicatie nodig om deze informatie aan de robot door te geven.

Een alternatief scenario is het principe van het Global Positioning System: de bakens zenden continue pulsen uit in een vast patroon, bijvoorbeeld in een 50ms interval. De ontvanger op de robot bepaalt het verschil in looptijd en bepaalt zo de positie, waardoor verder geen communicatie tussen de robot en de bakens nodig is. Ook heeft deze methode als voordeel dat meerdere robots tegelijk gebruik kunnen maken van het plaatsbepalingssyteem. Maar zals gezegd is dit een vrij zware berekening omdat het startpunt van de puls niet bekend is. Daarnaast maakt beweging van de robot de berekening nog complexer, omdat hier de afstand van de bakens tot verschillende punten wordt bepaald. Het grootste nadeel van deze methode is echter de continue stroom van ultrasoon energie, waardoor het niet mogelijk is om gebruik te maken van de klassieke ultrasoon sensoren om de afstand tot obstakels te bepalen.

In het derde scenario zendt de robot een infrarood code uit, waarop een baken een ultrasoon puls verstuurt. Infrarood heeft de snelheid van licht, waardoor de looptijd kan worden verwaarloosd. De robot meet de looptijd tussen het verzenden van de infrarood code en de ontvangst van ultrasoon, wat voornamelijk de looptijd van de ultrasoon puls is. Door verschillende infrarood codes te gebruiken kan het baken worden gekozen. Voordeel van deze methode is dat de werkelijke afstand tot een baken wordt gemeten en niet deze hoeft te worden afgeleid uit het verschil in looptijd. Onvermijdelijke meetfouten, die in de voorgaande methodes een foutieve positie geven, geven in deze methode minder afwijking en kunnen worden gebruikt om de betrouwbaarheid van de meting te bepalen. Daarnaast kan de robot even stoppen met plaatsbepaling als het gebruik wil maken van klassieke ultrasoon sensoren. Een nadeel is dat slechts 1 robot tegelijk gebruik kan maken van het plaatsbepalingssyteem.

Bakens

Foto baken.JPG

Het UPS systeem is opgebouwd volgens het derde scenario's. De bakens zijn eenvoudig van opzet: een 56kHz IR detector wordt gebruikt om de trigger-codes te ontvangen. Deze codes worden verstuurd als serieel karakter op 1200 baud. De IR detector is aangesloten op een PIC 16F73, die de code decodeert en vergelijkt met de code die is ingesteld op de pennen A0 t/m A4. Als de code gelijk is, wordt een korte ultrasoon puls verstuurd via de US zender. Een LED geeft de status van het baken weer. Bij het inschakelen wordt de ingestelde code weergegeven. Daarna geven korte filtsen aan dat het baken stand-by staat en bij ultrasoon activiteit brandt de led continue. De baken-electronica bestaat uit een handvol componenten met een kostprijs van ca 10 euro.

Het is belangrijk dat bakens nauwkeurig op hun positie blijven staan, omdat een verschuiving van een centimeter de naukeurigheid al merkbaar beinvloedt. Het oorspronkelijke statief van aluminium strip voldeed hierom niet en is vervangen door een rode, ijzeren voet van 1,5kg.

Schema us baken.JPG

Mobile

Foto us mobile.jpg

De mobiele unit bestaat uit de volgende onderdelen: - Een PIC 16f876a microcontroller. - een infrarood zender, opgebouwd uit 8 leds, aangestuurd via een tweetal transistoren. Hiermee kan de controller de bakens triggeren. - een ultrasoon ontvanger, opgebouwd uit een kegel die signalen uit alle richtingen reflecteert naar de ultrasoon sensor. De sensor is aangesloten op een upc1409 chip, waarmee eenvoudig een gevoelige ontvanger kan worden gemaakt. Tot slot heeft de microcontroller een i2c slave poort, die wordt gebruikt om de mobiele unit te configureren, bedienen en uit te lezen.

Zoals in onderstaand schema is aangegeven, is de mobile voorzien van een dubbele voeding. De bovenste voeding wordt gebruikt voor de microcontroller en levert ook de hoge piekstromen voor de IR zender. De onderste voeding (met 78L05) zorgt voor een stabiele en schone voedingspanning (zonder verstoring van de zender) die de gevoelige ontvanger nodig heeft. Voor een goede werking moet het circuit van de ultrasoon sensor en ontvanger uit de buurt van de IR zender worden gehouden.

Schema us mobile.JPG

i2c interface

De mobile heeft een i2c slave interface. De i2c interface geeft de volgende mogelijkheden:

  • instellen van (maximaal 4) bakenposties.
  • instellen van de mode (uit, eenmalig of continue meten)
  • uitlezen van de resultaten (coordinaten en stdev van de laatste meting)
  • instellen van de timing en aanpassen van de calibratie
  • uitlezen van de ruwe meetgegevens (afstand tot de bakens)

De i2c interface is in detail beschreven in [de UPS handleiding[1]].

Techniek

De software voor dit project is geschreven in JAL en maakt gebruikt van de libraries van Jallib. JAL is speciaal ontwikkeld voor Microchip PIC controllers. Zowel JAL als Jallib zijn open-source.

Het programma voor de bakens is klein en past in de meeste PIC midrange controllers. De gekozen 16F73 is de goedkoopste PIC die wordt geleverd door Voti, die ook alle andere benodigde onderdelen voert. De 16F73 heeft meer pinnen dan voor het baken nodig zijn. De mobile software gebruikt meer RAM, vandaar dat hier gekozen is voor een 16F876A. Maar ook in dit geval volstaat een controller met minder pinnen.

Van de beide schakelingen - baken en mobile - is geen pcb-ontwerp beschikbaar.

Resultaten

Een eerste test is uitgevoerd met een tweetal bakens. Met 2000 metingen (1000 per baken) op een interval van 100ms is het resultaat (in mm):

Gemiddelde positie 306, 758 Min/max x: 290, 357 min/max y: 701, 776 stdev 6,38 / 6.16 Een meting heeft dus gemiddeld minder dan een centimeter afwijking!

De mobile geeft naast de positie ook aan hoe nauwkeurig de meting is. Onderstaand diagram geeft de spreiding weer van zo'n 1500 metingen, nadat 20% met de grootste afwijking zijn weggelaten:

Scatter1.JPG

De standaard-deviatie van de positie is ca 2 centimeter. Als de robot stil staat, werkt de plaatsbepaling dus prima. Maar het is natuurlijk veel interessanter om te weten wat de nauwkeurigheid is als de robot rijdt. In onderstaande figuur heeft de robot 'heen en weer' gereden in de roborama baan. De blauwe lijn geeft de positie volgens de odometer aan en de bruine lijn is de positie van het UPS.

Scatter2.JPG

Rechts-boven zijn een paar metingen van de UPS die niet horen bij een normale 'heen en weer' route. De afwijking die door de UPS ontvanger wordt aangegeven (maar niet is weergegeven in dit diagram) is op dat moment ook hoog. De samenvallende metingen bij het einpunt maken duidelijk dat de metingen weer naukeurig zijn als de robot is gestopt. De blauwe lijn heeft het normale verloop van 'heen en weer', behalve dan dat deze midden onder (op de terugweg) negatief wordt. Met andere woorden: de robot is buiten de baan gereden. Dit is natuurlijk niet het geval en geeft aan wat het zwakke punt is van odometrie: door een kleine afwijking in de rijrichting bij de start, die verder oploopt (met name op bij de draai) loopt de afwijking van de positie bij deze korte en simpele rit al op tot 20 cm. Wat zou het mooi zijn als we de 'drift' van de odometrie kunnen corrigeren met de gegevens van de UPS. Dit kan op verschillende manieren en de beste methode is een Kalman filter, omdat deze de gegevens van de odometrie en UPS continue kan samenvoegen en daarbij rekening houdt met de nauwkeurigheid van de gegevens. De eerste resultaten zijn veelbelovend, ondanks dat de rijrichting (de belangrijkste bron van odometrie fouten) nog niet werkt. Wordt vervolgd!

Overigens.... Het mag duidelijk zijn dat dit soort nauwkeurigheden alleen mogelijk als de baken precies op de goede plaats staan en dat is vraagt meer aandacht dan ik had verwacht. De vervanging van de lichte aluminium driepoot door een stevige ijzeren voet bleek hiervoor noodzakelijk. De indicator voor de nauwkeurigheid - 'stdevkw' (zie i2c interface) - werkt prima. Als de bakens op de juiste plaats staan en de robot staat stil in het midden van de baan, zal stddevkw varieeren tussen 50 en 500. Als deze aanzienlijk hoger is, is er waarschijnlijk iets mis in de opstelling van de bakens of de configuratie van de mobile. Tijdens het rijden wordt de nauwkeurigheid aanzienlijk minder en dat is zichtbaar door de hogere stdevkw van de metingen.

Vervolg

Met odometrie kan actueel en nauwkeurig de verplaatsing van een robot worden bepaald, die door middel van dead reckoning kan worden omgerekend in de positie. De afwijking van deze positie wordt door de opstapeling van fouten echter steeds groter. Het UPS bepaalt een absolute positie en geeft daarbij ook de afwijking aan van de meting. De vervolgstap is nu om deze twee gegevens samen te voegen met een Kalman filter (zie presentatie hier) om zo optimaal (=zo nauwkeurig als mogelijk) de positie te bepalen. Maar uiteraard kan zijn er ook andere wegen die naar Rome leiden. Het andere uiterste is om metingen die niet nauwkeurig genoeg zijn te negeren en de rest van de meting over te nemen als nieuwe postie.

Joep