Hallo Forum, ich habe mal wieder eine Frage. Die Ausgangslage: ich habe eine Fläche von knapp 2,5m x 2m, auf der sich mein Roboter positionieren muss. Dazu habe ich folgende Sensoren verbaut: GY-89 (das ist ein Kompass- und Beschleunigungssensor (LSM303D) zusammen mit einem Gyro-Sensor (L3GD20)). Daraus möchte ich erst einmal die aktuelle Geschwindikgkeit bekommen, und danach den Ort. Eigentlich mittels Mathematik und idealen Sensoren kein Problem. Das Problem ist, dass die Sensoren sowohl ein Rauschen (hoch beim Accelerometer, niedrig beim Gyro) und einen Drift (niedrig beim Accelerometer, vglw. hoch beim Gyro) haben. Somit stimmt vor allem der Ort gar nicht! Ich kann zwar an den Rändern der Fläche sagen, dass ich an den maximalen Punkten angekommen bin (x = 0 an linker Wand, x = X_MAX an rechter Wand, y = 0 an hinterer Wand, y = Y_MAX an vorderer Wand), aber dazwischen bin ich mehr oder weniger blind, weil ich mich auf die Werte nicht verlassen kann. Ich habe gerade in meinem Programm also zur Verfügung: Vektor vom Beschleunigungssensor (3 Achsen +-4g mit 16bit pro Achse) Vektor vom Gyrosensor (3 Achsen 500°/s mit je 16bit pro Achse) Aktuelle Heading/Yaw Richtung vom Kompass oder alternativ den Vektor vom Kompass (3 Achsen mit je 16Bit) Meine Frage ist also: Wie kann ich erstens die Werte vernünftig filtern, ohne dass die Updaterate in den Keller geht (5kHz wären schön, ich weiß allerdings nicht wie realistisch das ist) und Wie macht man so was normalerweise (fehlen mir Sensoren, etc)? GPS oder Funkpeilung oder so etwas ist leider nicht möglich. Ultraschall sind auch nicht verlässlich, da zu viel im Raum unterwegs ist (obwohl damit schon sehr lange getestet wurde). Danke im Voraus und mit freundlichen Grüßen, N.G.
Kalman-Filter dürfte dafür das richtige sein. Kannst du nicht die Räder besser auswerten? Wenn sie keine Schlupf haben sollte sie damit recht genau die Position bestimmen lassen.
Hallo Peter, danke für deine Antwort Peter II schrieb: > Kalman-Filter dürfte dafür das richtige sein. Ich bin auch schon darauf gestoßen, aber ich habe diesen Filter noch nicht verstanden, was evtl auch daran liegt, dass jeder es anders erklärt, und für jemanden, der neu in der Materie ist, zu viel voraussetzt. Peter II schrieb: > Kannst du nicht die Räder besser auswerten? Wenn sie keine Schlupf haben > sollte sie damit recht genau die Position bestimmen lassen. Leider nicht. Erstens haben diese weder Encoder noch Rotatuonssensiren oder ähnliches und (schlimmer) diese können extrem durchdrehen. Beim Richtungswechsel ist es richtig schlimm: der Roboter rutscht teilweise noch mehrere Zentimeter in die gleiche Richtung, obwohl die Räder schon in die andere Richtung drehen.
Eventuell kannst du auch eine Optischen-Maus-sensor verbauen.
Peter II schrieb: > Eventuell kannst du auch eine Optischen-Maus-sensor verbauen. Der misst ja so präzise Strecken. Und ausserdem weiss der TO immer ganz genau in welcher Richtung sein Robbi und damit der Maus Sensor steht. Das Problem ist alles andere als trivial und mit der Grund dass praktisch alle Staugsauber und Rasenmäher-Roboter Zufallsmuster fahren.
Der Andere schrieb: > Der misst ja so präzise Strecken. ja, soweit ich weis. > Und ausserdem weiss der TO immer ganz genau in welcher Richtung sein > Robbi und damit der Maus Sensor steht. ja, dafür hat er sein Gyro
>Beim Richtungswechsel ist es richtig schlimm: der Roboter rutscht >teilweise noch mehrere Zentimeter in die gleiche Richtung, obwohl die >Räder schon in die andere Richtung drehen. Das wird die Reifenhersteller freuen und durch den zugehörigen Verschleiß auch jede Wegmessung verhindern. Die meiste hier werden aber sagen: 'Na Hallo! Da ist irgendwas wohl im Argen. Übrigens: Was willst Du mit der Position und der Geschwindigkeit denn anfangen, wenn Du nicht Zielgerichtet anhalten kannst?
Peter II schrieb: > dafür hat er sein Gyro Der misst aber nur Drehraten. Für die ansolute Richtung im Raum integrierst du auch wieder alle fehler mit auf.
Peter II schrieb: > Eventuell kannst du auch eine Optischen-Maus-sensor verbauen. Dafür ist leider auf der Unterseite kein Platz mehr, das war auch unser erster Ansatz. Der Andere schrieb: > Das Problem ist alles andere als trivial leider hast du Recht, trivial ist es nicht. Es muss aber nicht super genau sein, einige cm Genauigkeit reichen. Amateur schrieb: >>Beim Richtungswechsel ist es richtig schlimm: der Roboter rutscht >>teilweise noch mehrere Zentimeter in die gleiche Richtung, obwohl die >>Räder schon in die andere Richtung drehen. > > Das wird die Reifenhersteller freuen und durch den zugehörigen > Verschleiß auch jede Wegmessung verhindern. WEnn es Gummiräder wären ja, da stimme ich dir zu. Wir reden hier aber nicht von Gummi auf Asphalt, sondern von einem Teppich-artigen Untergrund und Metallrädern (siehe Omniwheels). Diese werden auch immer rutschen, dass ist schließlich deren Aufgabe (Okay, ich gebe zu, das hätte ich oben schon schreiben können). Amateur schrieb: > Übrigens: Was willst Du mit der Position und der Geschwindigkeit denn > anfangen, wenn Du nicht Zielgerichtet anhalten kannst? Wie regelt denn deine Heizung? Die ist ja auch nicht sofort auf Maximaltemeperatur, wenn du sie auf 5 drehst, sonder braucht Zeit. Und wenn es dir dann wieder zu warm ist, drehst dus wieder runter. Das wiederholst du solange, bis es sich bei einer angenehmen Temperatur einpendelt. Analog dazu das Fahren beim Roboter: ich weiß wi ich hin will (= Soll-Temperatur), also regel ich es solange, bis ich dahin komme. Gibt halt leider Over- und Undershoot, aber da ein Roboter schneller reagiert, als ein Mensch geht das. ((Funktioniert jetzt ja auch schon)
Der Andere schrieb: > Peter II schrieb: >> dafür hat er sein Gyro > > Der misst aber nur Drehraten. Für die ansolute Richtung im Raum > integrierst du auch wieder alle fehler mit auf. Und einen Kompass, der sogar relativ genau ist
N. G. schrieb: > Beim Richtungswechsel ist es richtig schlimm: der Roboter rutscht > teilweise noch mehrere Zentimeter in die gleiche Richtung, obwohl > die Räder schon in die andere Richtung drehen. Was nützt es, die Räder wild zu drehen, wenn sie das Drehmoment des Motors nicht auf den Boden bringen? Habt ihr es schon mal mit ABS und ASR probiert?
W.A. schrieb: > Was nützt es, die Räder wild zu drehen, wenn sie das Drehmoment des > Motors nicht auf den Boden bringen? ganz so schlimm ist es dann auch wieder nicht. Sobald die Trägheit des unter 1.5kg schweren Roboters überwunden ist gehts flott in die andere Richtung. W.A. schrieb: > Habt ihr es schon mal mit ABS und ASR probiert? Hat nichts gebracht, oder zu wenig um den zusätzlichen Aufwand zu rechtfertigen. Es funktioniert so wie es ist auch ganz gut. Und spätestens wenn irgendein Hindernis im Weg steht, bringen diese Systeme auch nichts mehr. Aber zurück zum Hauptthema. Wie könnte ich die Sensoren und Berechnungen (wenigstens auf ~10cm genau) in Einklang mit der echten Welt bringen? Funktioniert ein Kalman -Filter z.B. im stehen überhaupt? Ich habe bisher immer nur von Gyro-Sensoren gelesen, aber dieser meldet im Stillstand keine Drehung, während der Beschleunignungssensor (laut im selbst) angeblich wild rumgeschleudert wird. Ich will sagen: Wenn es im stillstand schon kaum geht, wie soll es in der Bewegung funktionieren? Und: wie lösen andere dieses Problem? Ich bin ja wohl sicher nicht der erste mi so einem Anliegen. Danke schon mal für eure Antworten
>Und: wie lösen andere dieses Problem? Ich bin ja wohl sicher nicht der >erste mi so einem Anliegen. Ich hab eine ähnliche Anwendung und einen CCD Sensor, der in ca 3m Höhe sitzt und die Position des Roboter optisch ermittelt. Auflösung ca 0.2mm.
N. G. schrieb: > Und spätestens wenn irgendein Hindernis im Weg steht, bringen diese > Systeme auch nichts mehr. Willst du damit sagen, dass du den Roboter jetzt stur dagegen rasseln läßt? Fakt ist doch, dass die Gleitreibung niedriger als die Haftreibung ist und damit Brems- und Beschleunigungsstrecken kürzer werden, wenn man mit ABS oder ASR dafür sorgt, dass die Räder den Großteil der Zeit Bodenhaftung haben und damit in gleicher Zeit mehr Impuls auf den Boden übertragen können. > Hat nichts gebracht, oder zu wenig um den zusätzlichen Aufwand zu > rechtfertigen. Dann ist bei der Implemenentierung wohl was schief gelauften.
Hallo Zusammen, um jetzt mal mit ein paar Unklarheiten aufzuräumen: Es geht um fußballspielende Roboter auf dem Robocup Junior. Wem das nichts sagt: hier ein paar Impressionen: https://www.youtube.com/watch?v=TYeKAMcxOPs Ich wollte nur erst mal das Problem abstrakt darstellen, hilft mir meistens beim Lösungen finden. *gb* schrieb: >>Und: wie lösen andere dieses Problem? Ich bin ja wohl sicher nicht der >>erste mi so einem Anliegen. > Ich hab eine ähnliche Anwendung und einen CCD Sensor, der in ca 3m Höhe > sitzt und die Position des Roboter optisch ermittelt. Auflösung ca > 0.2mm. Ist eine gute Idee, so weit ich weiß gibt es das auf dem "echten" Robocup (für Unis etc.) auch genau so eine Liga. Nennt sich wohl Small Size League. Leider ist das in unserem Fall nicht erlaubt. Das wäre die ideale Lösung. Mittels verschiedener Punkte und Farben könnte man sogar die Roboter unterscheiden und die Drehung, Geschwindigkeit und Ort bestimmen. Leider nicht möglich. W.A. schrieb: > N. G. schrieb: >> Und spätestens wenn irgendein Hindernis im Weg steht, bringen diese >> Systeme auch nichts mehr. > > Willst du damit sagen, dass du den Roboter jetzt stur dagegen rasseln > läßt? Kommt drauf an ob es die Wand, der Gegner oder der Ball ist. Bei der Wand nein, die sollte der Roboter nicht mal berühren, wobei es bei den Toren durchaus vorkommt, dass er mit voller Geschwindigkeit dagegen fährt. Bei Gegnern und Ball sowieso (Die beiden Roboter von uns kommunizieren, sollten also so gut wie nie gegeneinander fahren). Kann man im Video auch relativ gut sehen. > Fakt ist doch, dass die Gleitreibung niedriger als die Haftreibung > ist und damit Brems- und Beschleunigungsstrecken kürzer werden, wenn man > mit ABS oder ASR dafür sorgt, dass die Räder den Großteil der Zeit > Bodenhaftung haben und damit in gleicher Zeit mehr Impuls auf den Boden > übertragen können. Du machst allerdings im Auto auf der Autobahn auch nicht den Rückwärtsgang rein und erwartest, dass du sofort in die andere Richtung fährst ;) >> Hat nichts gebracht, oder zu wenig um den zusätzlichen Aufwand zu >> rechtfertigen. > > Dann ist bei der Implemenentierung wohl was schief gelauften Kann schon sein, war uns aber wie gesagt nicht so wichtig. Extrem ist dieses Schlittern nicht. Es wäre schön wenn noch jemand mit mehr Ahnung als ich (also praktisch jeder der sich mal kurz mit der Materie beschäftigt hat) etwas zur (digitalen) Filterung sagen könnte. Danke trotzdem an alle die sich beteiligen! mit freundlichen Grüßen, N.G. PS: wir nutzten das Modul GY-89, das hat einen integrierten LDO von 5V auf 3.3V für die Chips. Allerdings kommen unsere 5V von einem Schaltregler, der zwar weit vom Modul weg ist, aber evtl sind da Störungen drauf (obwohl man am Oszi nichts sieht, kann ich mir aber ohne Filterung nicht wirklich vorstellen). Könnte da die Glättung von VCC helfen? (zB mittels LC-filter?) Der Buck-Converter ist dieser hier: LM2576T-5.0 (58kHz) Bei dem Modul weiß ich den LDO leider nicht
in der Hoffnung auf neue Antworten... einmal Push bitte ;)
N. G. schrieb: > Dazu habe ich folgende Sensoren verbaut: GY-89 (das ist ein Kompass- und > Beschleunigungssensor (LSM303D) zusammen mit einem Gyro-Sensor > (L3GD20)). Das ist natürlich ein absoluter billig Mist. Gyros driften, Accs rauschen, das hast du ja bereits gesagt. Je billiger die Sensoren, desto schlimmer ist es. Im Datenblatt findest du ja die jeweiligen Drift- und Rauschwerte. Du kannst die ja mal aufintegrieren (nur die Drift), dann hast du eine ungefähre Abschätzung wie gut das geht und vor allem wie lange. Wenn du alle 10s einen fixen Punkt oder so hast bei dem du deine Sensorik "nullen" kannst, dann könnte ich mir schon vorstellen, dass das mit einigen cm Genauigkeit funktioniert. Wie gesagt - das kannst du ja aus den Datenblattangaben ausrechnen. Ansonsten in ein Kalmanfilter natürlich das mittel der Wahl, es gibt inzwischen genügend Implementierungen frei zur Verfügung. Google evtl. mal nach IMU, INS und AHRS. Meistens kommst du dann auf irgendwelche Quadrocopter Codes. Alternativ wäre ein Komplementärfilter. Grundsätzlich wirst du aber (meiner Einschätzung nach) nicht darum herumkommen eine andere Art der optischen Wegstreckenmessung vorzunehmen. Der Maussensor wurde dir ja bereits ans Herz gelegt, das dürfte sehr gut funktionieren auf definiertem Untergrund. Dann musst du eben Platz schaffen für den Sensor. Der Sensor muss ja nicht zentral mittig stehen, sondern du kannst ja auch zwei verbauen, einer Vorne, einer Hinten. Daraus kannst du dir Drehung und Wegstrecke (die sogar redundant) messen. Weiter fällt mir LIDAR ein, da gibt es für 350€ inzwischen sehr brauchbare Lösungen die aus dem Quadrocopter Bereich kommen. z.B. http://www.robotshop.com/en/rplidar-360-laser-scanner.html Das sind so prinzipiell die Möglichkeiten wenn du nicht die Möglichkeit hast irgend was außen am Fahrbereich fest anzubringen. Ansonsten könnte man z.B. 2 oder mehr mit Motor drehbare Laserpointer auf PSD (https://de.wikipedia.org/wiki/Position_Sensitive_Device) am Roboter richten. Die werden dann - auch während der Roboter verfährt - immer auf das Zentrum der PSDs geregelt. Die Korrekturen würde der Roboter dann per Funk oder IR an die feste(n) Station(en) senden. Aus den Kenngrößen der Regelung kann man sehr einfach die Position herausfinden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.