Lab2-11

Konstruiert und fotografiert von Martin Romann (Remadus).
Hochgeladen am 17.8.2007, 19:24 von remadus.  11 / 13

Der Roboter steht jetzt in einer knapp 30 cm breiten und knapp 60 cm langen Sackgasse. Jetzt sind die Begrenzungswände klar auszumachen, der Entfernungssensor arbeitet jetzt mit mm-Genauigkeit.

Trick: nicht gebrauchte Analogeingänge auf Masse gelegt. Voilà.

Auswerteformel: Entfernung in mm = 16000*Meßwert^(-1,0467).

heiko (17.8.2007, 19:26:37)

Krass.

Wie wertest du die Signale statistisch aus? Würde mich interessiern, wie du die Messfehler in den Ecken automatisch ignorieren lässt.

remadus (17.8.2007, 19:54:06)

Errata: es muß 32000 * Meßwert^-1.0467 heißen

Zur Auswertung habe ich mir folgendes Schema ausgedacht: Nach dem ersten Rundumscan sucht der Roboter den nächstgelegenen Punkt. Dann nimmt er nach rechts und links jeweils einen Punkt hinzu, rechnet die Regressionsgerade aus und nimmt weitere Punkte hinzu, deren Abstand von der zunächst gefunden Geraden nicht größer ist als 5 mm. Hat er die Gerade, dann rechnet er aus, in welchem Winkel er dazu steht. Dann lenkt er 90 Grad ein und richtet sich nach der Wand aus. Jetzt hat er eine Richtung. Jetzt wiederholt er den Scan und prüft, ob die Ausrichtung ausreichend genau ist. Falls nicht, dann Korrekturlenkung, andernfalls geht es in die Auswertung.

Die Auswertung beginnt in Vorwärtsrichtung, dann rechts und links. Das Schema ist wie oben: mittig in der Punktewolke anfangen, Punkte hinzunehmen, Regressionsgerade rechnen und entscheiden, ob da eine Wand ist und wenn ja, wie weit weg.

Hat er nach vorne mehr als 30 cm Platz, kann er ein Labyrinthfeld vorfahren. Wenn nicht, dann wird nach links geprüft oder nach rechts. Sind alle drei Wände vorhanden, dann steht er in einer Sackgasse. Dann muß er wenden.

Kann er abbiegen, dann rechnet er zunächst aus, um welches Stück er noch geradeausfahren muß, um an der Ecke vorbeizukommen. Vorfahren, dann einlenken um 60 Grad (muß ich noch berechnen) und dann einen 90 Grad Bogen fahren. Um diesen Bogen fahren zu können, braucht er die Odometrie. Damit kann er kontrollieren, ob der Lenkwinkel hinhaut und wann er fertig ist. Während des Abbiegemanövers ist der Roboter praktisch blind.

Dann wiederholt sich das Spiel aus Scannen und Manövrieren. Nebenbei muß er sich noch die Felder merken, in denen er schon war. Irgendwann findet er den Zielstrich oder er muß zurück, weil er wieder in einer Sackgasse steht und woanders weitersuchen muß.

Es wird ein ziemliches Programm.

schnaggels (17.8.2007, 23:44:05)

Na denn mal frohes rechnen! Ich schau mal ob ich was über das Rausfiltern von Ausreisern finden kann…

heiko (19.8.2007, 04:29:49)

Donnerwetter. Am Ende berechnest du mir noch die Ideallinie durchs Labyrinth …

Wir haben uns damals darauf konzentriert, dass wir den Wänden nicht zu nah kamen, und dass wir wussten, auf welchem Feld wir sind. Das hat fast funktioniert. Es kam dann nur darauf an, dass der Fehler in der Odometrie nicht so groß wurde, dass wir uns um mehr als 15cm verschätzen … den Abstand nach links und rechts haben wir mit etwas kontrolliert, das wir heute wohl Regelkreis nennen würden. Der zusätzliche Weg, den wir durch das links-rechs-Korrigieren gefahren sind, hat sich fast nie auf 15cm aufsummiert. Ein größeres Problem war das Getriebespiel, weil ich mich stur auf das Gleichlaufgetriebe eingeschossen hatte.

Das Verfahren war rudimentär, aber prinzipiell funktionsfähig. Leider konnte man nicht von Zuverlässigkeit sprechen. Dafür fehlte die Erfahrung, das Hintergrundwissen und schließlich die Feinjustage.

Aber zumindest softwareseitig gibt es, bei allem Respekt, einfachere Lösungen. Der Wettbewerbssieger hatte einen 7.4MHz-M68HC11 mit einem Interpreter zur Verfügung.

heiko (19.8.2007, 04:33:33)

Nachtrag: Wir hatten jeweils zwei Sharp-Sensoren vorn und hinten an jeder Fahrzeugseite montiert (Fahrtrichtungserkennung mit nur einer Messung!), zusätzlich befand sich vorne ein SRF04-Ultraschallsensor. Der hat, sobald wir auf eine Wand zufuhren, den kumulativen Fehler aus der Odometrie beseitigt. Leider war die breite Sendekeule des Ultraschallsensors im Labyrinth fast nicht zu gebrauchen.

Die Encoder waren anfangs ft-Impulsräder, später eine (!) gedruckte Teilscheibe mit vielleicht 5mm Wegauflösung.

remadus (19.8.2007, 22:07:12)

Hallo zusammen,

mérci für die Anmerkungen, die sehr gut zu gebrauchen sind. Ich hoffe auch sehr, daß es einfachere Lösungen gibt, bis jetzt bin ich auf dem Stand erster Vorüberlegungen.

Ich denke auch, daß es einfacher ist, den Roboter zunächst auf einem Feld des Labyrinths auszurichten und dann von Feld zu Feld zu manövrieren. Die Odometrie muß dann nur sehr kleine Strecken bedienen, so daß der Fehler nicht nennenswert kumuliert. Insgesamt könnten die Manöver auch einfacher werden.

Bei diesem Roboter hier wird im Stand gemessen, so daß er Zeit für die Sensoren und deren Auswertung hat. Später fährt er. Der erste Roboter von mir hat feste Sensoren und tastet damit die Wände während der Fahrt ab. Da er gleichzeitig mißt, fährt und odometriert braucht er eine ungleich höhere Verarbeitungsgeschwindigkeit.

Bis jetzt bin ich bei 250 Programmzeilen thkais-Basic angekommen, wobei schon die ersten Fahrmanöver drin sind. Wenn es gut klappt, wird das Labyrinth vielleicht mit 500 Zeilen Programmtext knackbar.

Die Wegauflösung muß ich unbedingt erhöhen, mit 1,7 cm Wegauflösung wird das Navigieren um bestimmte Bögen sehr schwierig.