Hi Leute,
beim Bau meines Roboters saß ich letztens vor einem sehr interessanten Rätsel.
Mittlerweile habe ich eine Lösung dafür gefunden.
Nun dachte ich mir, das wäre doch mal eine tolle Rätselaufgabe fürs Forum
Vielleicht findet ja sogar jemand noch eine bessere Lösung als ich sie habe.
Folgende Aufgabe soll realisiert werden:
Mein Roboter soll erfassen können wo in meiner Wohnung er sich befindet.
Dafür greife ich zum üblichen Koordinatensystem. (Auflösung in Millimeter!)
Ein Fester Punkt in meiner Wohnung (eine Äußere Ecke) hat die Koordinaten (0, 0)
Somit kann sich der Bot immer nur im positiven Bereich bewegen.
Negative Koordinaten gibt es nicht.
Zum fahren gibte es folgende vier Szenarien, für die es jeweils eine Formel zu
entwerfen gilt:
1.: in Vorwährtsrichtung fahren
2.: nur das rechte Rad dreht einzeln (nach vorne)
3.: nur das linke Rad dreht einzeln (nach vorne)
4.: in rückwärtiger Richtung fahren
(Der Controller weiß zu jeder Zeit in welchem Szenario er sich befindet, da er die Fahrbefehle selbst an einen anderen Controler gibt)
Es soll möglichst genau ermittelt werden an welcher Position im Koordinatensystem sich der Roboter befindet (best mögliche Genauigkeit ist gefordert, 100% genau geht es [glaub ich] nicht)
Wie oft bzw. bei welchem Ereigniss eine Berechnung erfolgt und wie mit Variablen verfahren wird, das müsst ihr selbst bestimmen bzw. herausfinden was das beste/sinnvollste ist
Daten:
- Der Roboter besitzt 2 separat getriebene Räder mit Radencodern.
- Die Encoder geben 255 Incremente pro Radumdrehung.
- Die Encoder gehen auf 2 Timer im Controller, welche als 8-Bit Counter arbeiten. So dass die Counter im Controller immer einen Wert zwischen 0 und 255 aufweisen
- Der Radumfang beträgt 22cm.
- Der Abstand der beiden Räder beträgt 25cm.
- Der logische Punkt des Roboters im Koordinatensystem liegt genau mittig zwischen den beiden Antrieben (auf der verlängerten Achse der Antriebs)
- Es wird davon ausgegangen das es keinen Schlupf gibt.
Hinweis:
Es ist wichtig, das beim fahren in vorwärtsrichtung NICHT einfach nur die Radumdrehung auf die Koordinaten aufaddiert werden. Hierbei sollen äußere Einflüsse beachtet werden.
So das sich die Berechnung auch nicht aus der Bahn werfen lässt, wenn ein Rad mal kurzzeitig etwas langsamer dreht (wegen Hinderniss oder unterschiedlichem Untergrund).
Danach fährt der Roboter nämlich in eine andere Richtung
Zusatz:
Für die ganz schlauen: Ihr solltet versuchen für das Szenario 1-3 eine Formel zu entwerfen. (Mach bar ist es, ich habe das jetzt auch so gelöst)
Beispiel:
Hier noch 2 kleine Beispiele zum (hoffentlich) besseren Verständniss:
1. Fall:
Der Roboter befindet sich bei x: 150 und y: 200 (150, 200)
nun drehen beide Räder jeweils 255 Incremente nach vorne (Szenario 1)
somit wären die neuen Koordinaten bei (150, 420)
(Weil er sich ja um 220mm Richtung y bewegt hat)
2. Fall:
Der Roboter befindet sich bei x: 150 und y: 200 (150, 200)
Nun dreht nur das linke Rad, so lange das sich der Roboter um 90° gedreht hat.
Danach würde er sich dann bei x: 162,5 und y: 212,5 befinden.
Wer diese beiden Fälle nicht versteht oder nicht nachvollziehen kann, braucht gar nicht erst an zu fangen das Rätsel zu lösen.
Noch ein kleiner Tipp von meiner Seite:
Nacht euch Zeichnungen auf einem Blatt, das hilft ungemein beim erstellen der Formeln und beim Nachvollziehen.
PS: Die beiden Fälle ziegen nur die Ergebnisse, aber nicht den Lösungsweg, da ich nicht zu viel der Lösung verraten möchte. Ihr müsst natürlich immer von den Grunddaten, den Incrementen des rechten und linken Rades ausgehen und mit diesen beiden Werten und eventuell von vorherigen Rechnungen verwendete Variablen/Zwischenergebnisse alles andere Berechnen. Denn so viel kann ich schon einmal sagen: Die Räder werden niemals gleich drehen.
Lesezeichen