-
-
Neuer Benutzer
Öfters hier
Asuro und Labyrinthe aus Linien - machbar?
Hallo,
ich möchte meinem Asuro so programmieren, daß er aus einem kreisfreien Labyrinth herausfindet (also immer nächstlinken Weg nehmen). Die Idee war weiters, nur rechtwinklige Kreuzungen zuzulassen, damit man es vielleicht schaffen kann, nach 90° Kurven die Linie wiederzufinden. Sackgassen könnte man mit 180°-Wendungen lösen oder damit, der Sackgasse eine Schlaufe anzufügen, die den Roboter in die Richtung leitet, wo er herkam (hoffe, man kann sich das vorstellen). Das Ziel wird durch einen Gegenstand gekennzeichnet, dessen Erreichen wird mit PollSwitch() erkannt.
Verwenden möchte ich für alles die Linienfolgeeinheit (Erweiterungen der Hardware sollten nicht geschehen laut Aufgabenstellung), habe aber bis jetzt ziemliche Probleme damit, den Roboter auf der Spur zu halten.
Bis jetzt habe ich mal die Sensoren und die LED gegen Umgebungslicht abgeschottet, wie es im Forum mehrfach empfohlen wird, nun geht es schon etwas besser. Ich werde noch weiter mit den Werten rumprobieren, wollte aber doch mal in die Runde fragen, ob ihr die Idee für machbar haltet und wie gut eure Roboter im Linienfolgen sind und wo die Grenzen liegen, zum Beispiel, wie groß der Durchmesser von Kreisen sein soll, die der Roboter schafft.
Danke, desenfrenada
-
Hallo desenfrenada,
wie stellst du dir das Labyrinth vor? Ich werde nicht ganz schlau aus deiner Beschreibung.
Fährt der Roboter einfach Linien nach, die sich verzweigen. Wenn eine Linie zu Ende ist das Ziel nicht gefunden wurde (d.h. PollSwitch nicht ausgelöst), fährt er zurück bis zur letzen Verweigung und probiert immer weiter?
Oder sind die "Wände" einfach Linien am Boden?
Bei der ersten Variante funktionniert dein Vorhaben mit grosser Wahrscheinlichkeit nicht, weil du mit zwei Helligkeitssensoren eine Verzweigung nicht (oder fast nicht) erkennen kannst.
Bei der zweiten Variante könnte es klappen, allerdings musst du da aber wissen, dass der Roboter immer ca. 2cm über die "Wand" hinausfährt, bis der Liniensensor die Linie erkennt hat.
Bei beiden musst du wissen, dass die Methode, immer den linken Weg nehmen, nur funktionniert, wenn du sicher bist, dass es keine Schleifen hat. Wenn du durch vorwärtsfahren und NIE drehen wieder an einen Punkt kommen kannst, an dem du schon warst, dann funktionniert deine Methode nicht.
Falls das der Fall wäre, müsstest du jeden genommenen Weg entweder am Boden markieren (was ohne zusätzlicher Hardware nicht geht) oder im Programm speichern (was eher schwierig wird, da du erstens nicht viel Speicher hast, was für grosse Labyrinthe nötig wäre, oder zweitens, dass der Roboter die Kreuzungen nicht voneinander unterscheiden kann).
Wenn der Roboter dann nämlich einen Weg nehmen will, den er markiert hat, weiss er, dass er dort schon vorher durchgegangen war und kann die nächste Verzweigung in Angriff nehmen.
lg beni
-
Neuer Benutzer
Öfters hier
Die Wände sind als Linien am Boden abstrahiert, ja. So wie hier:
http://www.cs.tuwien.ac.at/prolog/Vo...orithmen_f.pdf
Folie neun.
Das Labyrinth ist per Definition kreisfrei, da muß die immer-links Variante funktionieren.
Die Kreuzungen sind genau im rechten Winkel angelegt, und jede Kreuzung ist so gestaltet, daß der Roboter mit BEIDEN Photosensoren über einen schwarzen Balken muß, also die Kreuzung erkennt, und stehen bleibt.
Dann soll er eine 90° LInkskurve machen, schauen ob die Linie weitergeht, falls nicht, zurückfahren in die Position vor der Linkskurfe, gerade aus schauen, und schließlich rechts.
Ich hoffe, das hat es besser beschrieben, wie das Labyrinth aussehen soll.
-
Hallo,
ich denke schon, dass es möglich ist.
Probier doch erst mal, ob eine Kreuzung erkannt werden kann.
Wenn das möglich ist, dann sollte das ganze auch funktionieren, denn das suchen nach der weiterführenden Strecke halte ich auf jeden Fall realisierbar.
Martin
-
Neuer Benutzer
Öfters hier
Ich werde mich heute an die 90° Kurven machen. Mal schauen, ob ich das mit Odometrie oder einfach mit Motor anwerfen und sleep lösen kann.
Außerdem wären 180° Kurven (zum Umdrehen, für Sackgassen) ein Hit, denn meine ursprüngliche Idee (bei Sackgassen dem Roboter eine Schleife hinmalen, die ihn sanft in die ursprüngliche Richtung zurückführt) funktioniert nicht sehr gut, weil er die halbe Zeit aus diesen Schleifen entflieht. Ich verwende die LineDemo-Routine, die dem Selftest beiliegt, aber diese muß ich noch ziemlich verbessern, damit es vielleicht funktioniert.
Dazu muß ich mal mein Terminalprogramm "reparieren", damit ich die Helligkeitswerte auslesen kann (so much to do, so little time ...
Danke fürs Feedback, hoffentlich kommt noch mehr.
Melitta
-
Super-Moderator
Lebende Robotik Legende
Du kannst ja das Labyrinth entsprechend Folie 4 aufzeichnen, nicht als Graph entsprechend Folie 9. Dann kannst Du an der Wand entlang gehen.
Im praktischen Fall wird der ASURO dann auf der Wand stehen, aber im Bewußtsein sich rechts dieser Wand im Gang zu befinden, in einem Gang der auf der anderen Seite auch eine Wand hat die er gerade nicht berührt aber von der er weiß wo sie ist.
Er nimmt dann natürlich auch nicht die Abzweigungen wahr die der Gang sonst noch hat.
Allgemein ist es praktisch sicher schwierig mit nur 2 Sensoren der Linie zu folgen, also bei Schwärzung den Kurs zu korrigieren und dabei gleichzeitig die Schwärzung zu erkennen, die eine Abzweigung darstellt.
Manfred
-
Neuer Benutzer
Öfters hier
@Manf: ach sooo *versteh* du meinst, den Roboter so zu programmieren, daß er merkt, sobald einer seiner Photosensoren "schwarz" registriert, ist er an einer Kreuzung oder in einer Sackgasse, steht also an einer Wand an. Stimmt, das ist wahrscheinlich nicht so empfindlich wie das Linienverfolgen.
Hm. Wenn ich die Gänge und Wände genügend breit mache - mal testen.
(dazu muß ich allerdings erstmal wieder Daten vom Roboter auslesen können... aber das ist ein anderer Thread
Danke für die Idee!
-
Erfahrener Benutzer
Fleißiges Mitglied
Hallo desenfrenada,
versuch doch einmal Folgendes mit den Linienfolgesensoren (Vorausetzung: die Wege im Labyrinth müssen so breit sein, dass der ASURO knapp darin drehen kann, sonst wird es etwas komplizierter (mit Rückwrtsfahren und so ...)):
a) linker Fototransitor dunkel, rechter hell: Der ASURO befindet sich auf einer Kante am linken Rand eines Gangs. Geradeaus fahren.
b) beide hell, der ASURO ist mitten im Gang oder auf einer Kreuzung: drehe nach links (auf der Hochachse, also linker Motor rückwärts, rechter Motor vorwärts mit gleicher Geschwindigkeit) bis der linke Fototransitor dunkel wird.
c) beide dunkel: am Ende einer Sackgasse. Drehe rechts bis der rechte wieder hell wird.
d) links hell, rechts dunkel: sollte eigentlich nicht auftauchen. Alle Lampen anschalten, anhalten und explodieren lassen .
Als Problem bleibt: Das Ende des Labyrinths zu erkennen und anzuhalten.
Gruß RedBaron
-
Neuer Benutzer
Öfters hier
Ich werd meine Erfahrungen und ERfolge hier posten, sobald ich wieder gscheit flashen kann.
@RedBaron: Ende wird durch einen Gegenstand, an den der Roboter mit einem Tastsensor anstoesst, gekennzeichnet.
Explodieren? *lol* Ich werd ein Benzinfaß draufschnallen!
-
Erfahrener Benutzer
Fleißiges Mitglied
... bleibt zu überlegen, wie du das Bezin entzündest. Wenn dir nicht besseres einfällt, kannst du den ASURO ja rotieren lassen \/ . Reibung erzeugt Wärme...
Spass laß nach! So einfach wie oben beschrieben, geht es natürlich nicht. Jedes Gefährt hat einen leichten Drall. Dein ASURO wird nicht von allein auf einer Kante lang fahren. Da musst du schon einen Regler einbauen, der die Richtung nachjustiert. Machst du das nicht, wird der ASURO kurz über lang abdriften, d.h. z.B. mit beiden Sensoren auf die Linie fahren (beide dunkel, ohne dass das Ende einer Sackgasse erreicht wäre).
Wegen solch einer Regelung kannst du z.B. hier schauen:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=11818
Da du über eine Kante fährst, der linke Regler als Sollwert also einen Dunkelwert aufweist, müssen die Werte des linken Sensors invertiert werden (const - Messwert). Ansonsten sollte es funktionieren.
Über die Regelung muss du noch eine weitere Steuerung legen, die zum einen erkennt, in welchem Zustand sich das System befindet (a)-d), s.o.) und zum anderen dann zwischen den verschieden Aktionen wechselt (Linienfolgung, Linkdrehung, Rechtsdrehung, Anhalten, Explosion).
Das Ganze wird ein wenig dadurch erschwert, dass die Messwerte nicht so wirklich reproduzierbar sind. Du musst filtern. Es ist also nicht so einfach zu erkennen, ob du am Ende einer Sackgasse angelangt bist oder der ASURO ein wenig zu weit nach links abgekommen ist oder sich der Reflexionsgrad des Untergrunds geändert hat oder eine zufällige Messwertschwankung vorliegt oder oder ...
Gruß Red Baron
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen