Archiv verlassen und diese Seite im Standarddesign anzeigen : Gyro drift beheben/kompensieren
eniddelemaj
06.12.2018, 21:49
Hey,
einige, die das hier lesen kennen mich vermutlich schon haha. Ich bin der, der versucht einem Roboter mit Hilfe eines MPU 6050, eine Orientierung zu geben. Wenn ich den Roboter anweise sich um 90 Grad zu drehen, dann soll er sich entsprechend drehen.
Bis jetzt konnte ich mein Ziel weitestgehend erreichen, doch natürlich gibt es immer Raum für Verbesserung.
Es geht also mal wieder um den Mpu.
Dieser bzw das Gyroskop weist einen Drift auf. Der Yaw Wert ändert sich langsam über die Zeit. Fährt der Roboter ein endloses Viereck, dann wird der Drift sichtbar indem sich das Viereck, auf dem der Roboter fährt, "dreht".
Ich habe schon versucht dem entgegen zu wirken, indem ich in gewissen Zeitabständen einen bestimmten Wert hinzufüge. Natürlich konnte ich kein befriedigendes Ergebnis erzielen.
Ein weiterer Ansatz wäre doch, anstatt des Mpu 6050 einen 9250 mit Magnetometer zu verwenden. Wenn ich gyro, accel und mag kombiniere müsste der Drift doch ausgeglichen werden oder?
Kennt jmd ansonsten eine Lösung für das Problem?
ARetobor
06.12.2018, 22:27
Hallo
vielleicht hilft das hier weiter:
http://wiki.sunfounder.cc/index.php?title=MPU6050_Module
Der BNO055 (https://learn.adafruit.com/adafruit-bno055-absolute-orientation-sensor/overview)
macht das intern.
Kann man auch selber rechnen: Ist nur wenn man es gut machen will nicht mehr so ganz einfach.
Fest Drift-Kompensationswerte anzugeben halte ich gelinde gesagt für recht naiv. Der Drift muss nämlich bei weitem nicht konstant sein.
Wenn du erst mal bei dem MPU6050 bleiben willst könnte dir das hier helfen:
https://forum.arduino.cc/index.php?topic=215997.0
wobei man vom Regen in die Traufe kommen kann, weil man mit Kompass den Fehler der Drift u.U. gegen den Fehler der Kompass-Fehlweisung eintauscht, wenn man wechselnde magnetische und elektromagnetische Quellen in der Nähe hat.
eniddelemaj
08.12.2018, 01:03
Hallo
vielleicht hilft das hier weiter:
http://wiki.sunfounder.cc/index.php?title=MPU6050_Module
Von dieser Seite habe ich so einen Calibration Script heruntergeladen:
https://github.com/kkpoon/CalibrateMPU6050
Das Problem ist leider nur, dass mein Arduino nicht genug Arbeitsspeicher hat.
Zumindest hat mir die IDE das mitgeteilt. Ansonsten hört sich dieser Ansatz aber sehr
gut und einfach an.
shedepe
Der BNO055 (https://learn.adafruit.com/adafruit-...ensor/overview)
macht das intern.
Kann man auch selber rechnen: Ist nur wenn man es gut machen will nicht mehr so ganz einfach.
Fest Drift-Kompensationswerte anzugeben halte ich gelinde gesagt für recht naiv. Der Drift muss nämlich bei weitem nicht konstant sein.
Wenn du erst mal bei dem MPU6050 bleiben willst könnte dir das hier helfen:
https://forum.arduino.cc/index.php?topic=215997.0
Naja ich habe jetzt halt nur den MPU6050 zur Verfügung. Haha ja stimmt, aber irgendwas
musste ich ja versuchen, bevor ich nach Hilfe frage:p.
Der Link hat jetzt soweit ich gelesen habe nur mit der Berechnung eines Winkels zu tun.
HaWe
wobei man vom Regen in die Traufe kommen kann, weil man mit Kompass den Fehler der Drift u.U. gegen den Fehler der Kompass-Fehlweisung eintauscht, wenn man wechselnde magnetische und elektromagnetische Quellen in der Nähe hat.
Das kann ich mir sehr gut vorstellen. Ich habe mit Magnetometer ziemlich miese Erfahrungen.
Da war die Kombination aus Accelerometer und Gyro die bisher beste Lösung.
Nun ich könnte mir jetzt einen besseren MC oder diesen BNO055 besorgen.
Oder kennt jemand einen Script der weniger speicherhungrig ist?
ich habe sowohl einen CMPS11 als auch einen CMPS12 mit Bosch-Sensor, beide haben 9D-on-board motion signal processing inkl. Kompass, aber beide geben falsche headings aus bei externen Magnet-Störfeldern - die kannst du halt nicht rausrechnen, wenn sie nicht vorhersehbar sondern zufällig und wechselnd auftreten.
Ich sehe nur die Möglichkeiten:
- 6D IMU ohne Kompass
- ab und zu manuell an definierten Bodenmarkierungen nachkalibrieren
- externe Bakensysteme als Referenzen verwenden
eniddelemaj
09.12.2018, 00:43
Was sind Bakensysteme? Ich kenne Baken nur von Schranken.
Was soll ich damit machen?
Naja manuell nachkalibrieren ist ziemlich unschön. Per Hand wieder auf richtigen Kurs setzen meinst du?
Wenn es nicht anders geht, würde ich natürlich Geld dafür investieren, wenn ich damit mein Problem lösen kann.
Also ich könnte mir einen Arduino mit mehr Ram holen, damit ich dieses Kalibrationsscript ausführen kann oder
wie shedepe gesagt hat diesen BNO055 verwenden.
Was wäre also eurer Meinung nach die beste Lösung?
Was die beste Lösung ist, kommt auf Deine Umgebung an, in der das Teil betrieben werden soll.
Nur mal so eine Idee:
Hast Du schon mal versucht, das Bauteil, dass von Drift betroffen ist, anders zu installieren? Beispielweise seitenverkehrt oder auf dem Kopf, oder beides - um dann zu schauen, wie das mit dem Drift aussieht (also ob der Drift auch gegenläufig ist, wenn das Sensormodul zur jetzigen Position gedreht installiert ist)? Falls es möglich wäre, den Drift in die Gegenrichtung zu bekommen, könnte man zwei dieser Sensoren installieren und den Drift etwas kompensieren (auch wenn er vermtl. nicht ganz beseitigt werden kann). Wenn der Drift mit dem Bauteil nichts zu tun hat, sondern überwiegend von der Erdrotation oder so was abhängt, wird das vermtl. nicht funktionieren.
Wenn Du ein Kompassmodul hast, dass genau ist, außerhalb magnetischer Felder, die es beeinflussen, dann kannst Du doch dein Teil kalibrieren. HaWe hatte aber mit andern Worten schon geschrieben, dass Du nur dann kalibrieren kannst, wenn Du mit dem Modul außerhalb magnetischer Felder bist, also weg von elektrischen Geräten. Also such die Punkte in der Umgebung, wo das Teil fährt, wo ein Kompass ordentliche Werte liefert - zum Kalibrieren fährst Du die dann an.
-----------------------------------------------------------------------------------------------------
Nachtrag:
Noch ein paar Informationen anderer User bezüglich 6050:
Nettes Spielzeug. Ich hab's an einem Raspberry PI via I2C erprobt, wenn man die Null-Werte gut genug bestimmt, zeigen die Gyro-Achsen eine recht geringe Drift, < 1 Grad/Minute. Auch die Wiederholgenauigkeit ist nicht schlecht. Zu Temperaturstabilität etc. kann ich nichts sagen. Achtung: Den beworbenen "Motion Prozessor" Teil des Sensors kann man vergessen, der Hersteller wirbt zwar damit, es gibt aber keine öffentlich zugängliche Dokumentation dazu. Für den SDK kann man wohl ein paar 1000er abdrücken. Für alles andere kann man Datenblätter im Internet finden.
Soweit ich weis muss man alle Koeffizienten (Nullwerte, Empfindlichkeit, Tempereturkoeffizienten) selbst bestimmen, das kann dauern. Viel weiter bin ich noch nicht gekommen, v.A. um einen anständigen "Künstlichen Horizont" draus zu basteln muss ich meine Mathematikkenntnisse noch ein wenig entrosten.
Alles in allem erstaunlich für den Preis, wie viel besser Sensoren für den 10fachen Preis sind kann ich nicht sagen. Für den Einstieg auf jeden Fall empfehlenswert.
Vom Prinzip her taugt das Modell für den Quadrocopter (egal ob Hexa, Octa), allerdings musst du entsprechende Filter-Algorithmen laufen lassen (Kalman, DCM) um den Drift zumindest von Pitch und Roll einzudämmen. Beim Yaw musst du dir einen weiteren Sensor besorgen (zb. Magnetsensor) um auch da den Drift kompensieren zu können. Wenn es dir nur um das Fliegen mit einer Fernbedienung geht, dann brauchst du den Drift von Yaw nicht unbedingt per Microcontroller zu kompensieren, sondern kannst das ganze auch per Fernbedienung trimmen, dass reicht aus.
Quelle: https://www.amazon.de/Wadoy-MPU-6050-Modul-3-Achsen-analoge-Gyro-Sensor-Beschleunigungssensor-Modul/product-reviews/B00D1K5Z5Q/ref=cm_cr_dp_d_hist_5?ie=UTF8&filterByStar=five_star&reviewerType=all_reviews#reviews-filter-bar
-----------------------------------------------------------------------------------------------------
Nachtrag:
https://www.roboternetz.de/community/threads/61416-Nur-Gierwinkel-ben%C3%B6tigt-Gyro-Drift-wegbekommen-%28Phidget-1044%29
-----------------------------------------------------------------------------------------------------
Nachtrag:
Von dieser Seite habe ich so einen Calibration Script heruntergeladen:
https://github.com/kkpoon/CalibrateMPU6050
Das Problem ist leider nur, dass mein Arduino nicht genug Arbeitsspeicher hat.
Vielleicht auf einem nodeMCU versuchen?
MfG
oft ist es schon so, dass die Nähe zu Motoren Magnetstörfelder verursachen, die sich bei verschieden starkem Betrieb beider Motoren unkalkulierbar verändern. Man müsste den Sensor 1 m über dem Robot montieren, damit sie nicht mehr stören, und später dürfen auch keine extrernen Magnetfelder oder Eisenträger (Stahlbeton) etc. in der Umgebung vorkommen (Bereits ein Notebook, in dessen Nähe ein Kompass-Sensor gerät, dreht dessen Anzeige um bis zu +/- 180° (!):
Praktisch also Mumpitz.
Bakensysteme:
das sind elektonische Leuchttürme, die du anpeilen oder anpingen kannst (per Radiowellen, Licht, Laser oder Infrarot)
Fix- und fertiges Bakensystem: Pozyx https://www.pozyx.io/?gclid=EAIaIQobChMI2d3JqLWS3wIVSOR3Ch2vmwWFEAAYASA AEgJWgPD_BwE
Also ich widerspreche an der Stelle HaWe erneut, dass Motoren unbedingt Probleme machen müssen. Wenn man Industriemotoren verwendet hat man z.B. sehr geringe externe Magnetfelder weil die Dinger korrekt geschirmt sind.
Ihr redet grade davon Drift eines Gyros bzw. Accelerometers zu kalibrieren bzw. eliminieren. Der Drift ist so hochgradig von Temperatur usw. abhängig -> Funktioniert nicht. Dazu gibt es zwei Lösungen 1. Man nimmt einen Lasergyro beginnend bei so 500.000€ oder 2. Man beschäftigt sich mit SLAM und nutzt Gyro und Acellerometer für kurzfristig (Im millisekunden bis einstelligen Sekunden Bereich) genaue Zusatzinformationen. Was aber nicht funktioniert ist der Versuch aus dieser Kombi den zurückgelegten Weg zubestimmen. Die Drehung noch eher. Was man machen kann ist wenn man steht (Und weiß dass man steht) die Sensordaten wieder zu 0 kalibrieren.
Che Guevara
09.12.2018, 11:35
Hi,
also nicht umsonst werden Magnetometer relativ häufig verbaut wenn es um die Drehung der Yaw-Achse geht. Dass Motoren und andere eisenhaltige Gegenstände Störungen verursachen, ist auch nichts neues. Trotzdem kann man mit einem Kompass sehr gute Ergebnisse erzielen.
Wurde er einmalig in einer relativ ungestörten Umgebung kalibriert, kann man später jederzeit die aktuelle Vektorlänge des Magnetfeldes ausrechnen und somit erkennen, ob und wie stark die Daten gerade verfälscht sind. Nun kann man einfach seinen Filter so anpassen, dass er nur bei geringer Störung den Kompass mit einbezieht oder je nach Störung mehr oder weniger stark.
Wer gut in Sensorfusion ist, der schafft es auch, einen Kalman oder ähnliche Filter so zu programmieren, dass dieser nur einmalig beim Start (also Motoren aus) den Kompass benötigt und später ohne diesen trotzdem korrekte Headingwerte liefert.
Extremfall zur Verdeutlichung:
kalibriere ihn mal in einer ungestörten Umgebung,
dann platziere ein paar Dutzend starke Dauermagneten und DC-Elektromagneten zufällig irgendwo im Raum
und verändere ihre Position während des Tests
und dann fahre mit deinem Robi an diesen Magneten mit veränderlicher Position vorbei:
das gibt Murks, das Heading (Yaw) ist nicht zu gebrauchen.
@Che Guevara:
also nicht umsonst werden Magnetometer relativ häufig verbaut wenn es um die Drehung der Yaw-Achse geht.
Das ist wohl richtig, aber wenn Du den zurückgelegten Weg, also quasi Deinen Standort bestimmen willst, summierst
Du auf und damit summierst Du fortlaufend jeden Fehler, also Driften und absolute Fehler. Kann man sich mit einfachen
Zahlenbeispielen klarmachen (Geschwindigkeit = 1. Ableitung des Weges nach der Zeit, Beschleunigung: 2. Ableitung,
Weg aus Beschleunigung bedeutet dann 2x integrieren, also gehen Fehler bei z.B. konstanter Beschleunigung auch
quadratisch ein.) Um so was befriedigend zu realisieren brauchst du, wie shedepe schon erwähnt hat, high-end-sensoren mit
minimalen Fehlern.
mfg
Achim
wie gesagt,
selbst nur minimalste Fehler der besten Kompass-IMUs helfen nicht, wenn zufällig wechselne externe oder interne Magnetfelder an verschiedensten Orten zu verschiedensten Zeiten auftreten.
- - - Aktualisiert - - -
update, überlesen:
@shedepe
ich widerspreche an der Stelle HaWe erneut, dass Motoren unbedingt Probleme machen müssen
stimmt,
nicht alle müssen,
aber viele können... 8)
Che Guevara
10.12.2018, 00:02
Nun wenn ich Magneten in der Nähe habe (oder andere ferromagnetische Objekte) ändert sich i.d.R. die Länge des Gesamtvektors, sodass ich zu diesem Zeitpunkt meine Messwerte verwerfen / weniger stark berücksichtigen kann. Hab ich natürlich andauernd wechselnde Magnetfelder hilft das auch nichts, das ist schon klar. Normalerweise ist so eine Situation aber eher die Ausnahme als die Regel. Für kurze Unterbrechungen kann man auch nur mit dem Gyro arbeiten (t<xx sec).
Dass der TE damit seinen Bot lokalisieren möchte, habe ich so nicht verstanden, das wird weder mit Odometrie noch mit AHRS / INS was. Dazu braucht es GPS o.ä. (also Absolutwertgeber der Position) oder evtl. SLAM, da kenn ich mich nicht aus.
Dass der TE damit seinen Bot lokalisieren möchte, habe ich so nicht verstanden
Er möchte zunächst das Gerät in einem bestimmten Winkel drehen und weiterfahren lassen, zu jeder Zeit, ausgehend vom letzten Winkel. Also z.B. erst geradeaus dann, nach 50cm, 20 Grad nach links, dann geradeaus und nach 210cm, 10 Grad nach rechts und für weitere 85cm geradeaus.
Er bekommt einen starken Drift, wenn er ein Quadrat in einer Richtung abfährt (also immer Links herum z.b.). Wobei es hierbei sicher nicht unwichtig wäre, zu wissen, um wieviel Grad sich das abgefahrene Quadrat in welcher Zeit dreht.
Nun wenn ich Magneten in der Nähe habe (oder andere ferromagnetische Objekte) ändert sich i.d.R. die Länge des Gesamtvektors, sodass ich zu diesem Zeitpunkt meine Messwerte verwerfen / weniger stark berücksichtigen kann. Hab ich natürlich andauernd wechselnde Magnetfelder hilft das auch nichts, das ist schon klar. Normalerweise ist so eine Situation aber eher die Ausnahme als die Regel. Für kurze Unterbrechungen kann man auch nur mit dem Gyro arbeiten (t<xx sec).
Dass der TE damit seinen Bot lokalisieren möchte, habe ich so nicht verstanden, das wird weder mit Odometrie noch mit AHRS / INS was. Dazu braucht es GPS o.ä. (also Absolutwertgeber der Position) oder evtl. SLAM, da kenn ich mich nicht aus.
du brauchst nur mal an Lautsprecher-Standboxen vorbeizufahren, die beeinflussen das Magnetfeld bereits unkalkulierbar in Stärke und Richtung in ihrem Umfeld, und wenn der Robot nicht weißt, wie nah er dran ist, lässt sich auch kein verlässliches Kompass-Heading berechnen.
Das gleiche gilt für Stahlträger in Wänden und Fussböden, Metallöfen, Computern, sowie Stahl/Eisen-Stehlampen, Tisch- und Stuhlbeinen oder -Gitarrenständer (letztere werden ja auch mal herumgerückt). Hinzu kommen elektrom. Störfelder durch Motoren und Gestell oder Dreharm des Robots selber, ebenfalls abhängig von Stellung und Leistung im wechselnden Fahrbetrieb.
Da es unmöglich ist, jede Fehl- und Missweisung an jedem beliebigen Ort samt aller exakter Korrekturwerte für jede beliebige aktuelle Stellung/Fahrrichtung zu kennen, kannst du auch keine Position bestimmen und keine Drehung exakt berechnen.
Daher kann man auch nicht vorhersagen, wann man sich auf den Kompass velassen kann und wann man nur mit Gyro allein arbeiten muss.
Fazit: vergesst einen Kompass für Räume/indoors, wenn es keine standardisierbare Experimentalumgebung ist.
Wer es tatsächlich geschafft haben sollte, ohne weitere externe Referenzen (Baken, Peilungen, Sensoren), möge das mal hier vorstellen. Und übrigens, auch GPS ist indoors bei seiner ungeheueren Ungenauigkeit nicht hilfreich, eher schon Odometrie (auch nur in gewissen Genauigkeits-Grenzen).
Ich habe noch was gefunden:
Wenn du dein Modul auf den Tisch legst und es fixierst, wirst du immer noch eine Drehrate messen. Verschieden groß auf verschiedenen Achsen, aber diese drift ist immer da.
Und jetzt nimmst du du einen Fön und bläst dein Modul an. Da wirst du eine deutliche Veränderung bemerken.
Darum haben die einen Temperatursensor eingebaut, und mit dem kannst du die drift pro Achse und Temperatur bestimmen. Und das liefert dir eine Tabelle, in der du einen Korrekturwert nachschlagen kannst. Und interpolieren zwischen den beiden nächstgelegenen Werten.
Das musst aber alles DU programmieren. Das kann das Modul nicht. Aber die Temperatur gibt es dir ja.
Quelle: https://www.python-forum.de/viewtopic.php?t=42462
Falsch:
Das musst aber alles DU programmieren. Das kann das Modul nicht. Aber die Temperatur gibt es dir ja.
Richtig:
der MPU6050 kann das selbstverständlich autonom berechnen, er rechnet das mit seinem onboard-dmp bereits mit ein, samt sensor fusion! (man muss dann ntl die dmp-Libs verwenden, wie bereits verlinkt, keinesfalls die raw-Werte)
Es geht aber dauerhaft nicht ohne stabile externe Referenzen!
eniddelemaj
14.12.2018, 22:51
Ich danke euch für die vielen Antworten!
Sry, dass ich so spät antworte, ich habe viel zu tun in letzter Zeit.
Also ich bin gegen einen Magnetometer auch eher abgeneigt, da der Roboter sich
ausschließlich drinnen bewegen wird. Außerdem habe ich schonmal versucht
so ein Teil zu kalibrieren, allerdings war das Ergebnis ziemlich unbefriedigend.
Den Vorschlag mit dem Mag habe ich nur gemacht, weil ich dachte, dass man aus einer
Kombi aus Mag Gyro und Acc einen Wert berechnet der sich auch durch externe Störfelder
nicht verändert, da gyro und acc diese Änderung irgendwie bemerken und ausgleichen würden
und anders herum würde der mag Drifts kompensieren. Naja aber jetzt wo ich drüber nachdenke
kann das nicht so einfach sein, wie ich mir das vorgestellt habe.
Und ja mags sind extrem anfällig gegen externe Magnetfelder. Gyro und Accel scheinen dagegen
immun zu sein.(Soweit ich es zumindest getestet habe)
Da ich mit dem Mag nicht so gute Erfahrungen gemacht habe, würde ich wenn möglich
lieber auf einen mag verzichten und den Drift alleine mit gyro und accel minimieren.
Der Drift ist zwar nicht stark und vlt erwarte ich etwas zu viel für solch günstige Boards.
Nach 30 Sekunden verändert sich der Yaw-Wert bei Stillstand um etwa 0.2/0.3.
Allerdings schwankt diese Veränderung auch.
Rabenauge
15.12.2018, 08:46
Gyroskope driften auch...
Zumindest die preiswerten, die gewöhnlich mit nem simplen Piezo-Kreisel arbeiten. Diese Dinger driften praktisch immer.....wenn du an nen Sensor kommst, der die SMM-Technologie benutzt (bessere Modellheli-Kreisel z.B. tun das), dann versuch den mal- diese sind driftfrei. Kriegst du mit nem Piezo nicht hin.
Ansonsten wurden bereits die meisten Buzzwords genannt was man versuchen kann:
Komplementärfilter
Kalmanfilter
SLAM
Faserkreisel
Sensoren mit integrierter Signalverarbeitung
Man verwendet IMUs sonst auch meistens nur um andere Verfahren zur Posenbestimmung zu stützen.
Die Gyro-Drift hat mindestens 2 Komponenten:
1.) eine konstante, natürliche Komponente durch die Erddrehung abseits des Äquators, also 360°/24h = 0,25°/min, (die hat man überall, bei jedem Gyro) und
2.) eine zufällige, veränderliche, bauartbedingte Komponente, die nicht vorhersagbar ist, und die die natürliche weit übersteigen kann.
Oftmals habe ich in einem 20 sec Intervall schon eine Drift von 5° gemessen, welche dann im Minutendurchschnitt auf 1-10° zurückgegangen ist, aber eben völlig unvorhersagbar und ständig wechselnd.
Daher nützen dafür auch keine statistischen oder stochastischen Filter wie Komplementär-, Kalman- oder Highpassfilter -
ohne verlässliche zusätzliche Referenzen: keine Chance.
SLAM funktioniert ja auch nur durch zusätzliche Referenzen (Odometrie und/oder Baken), und ebenso beim Monte-Carlo-Filter, für den ebenfalls externe Referenzen (Raum-Plan, Abstände zu Wänden) bekannt sein müssen.
Holomino
15.12.2018, 16:12
Mal nur so als Idee: Wenn man den Kompass selber kreiseln lässt, müsste sich eine Störung anhand von Amplitude und Phasenverschiebung doch zeigen (Addition von zwei Sinussen gleicher Frequenz unterschiedlicher Phasenlage ergibt wieder einen Sinus, also Subtraktion des kalibrierten Sinus vom Gemessenen sollte dann auch wieder die Störung ergeben)?!?
Mal nur so als Idee: Wenn man den Kompass selber kreiseln lässt, müsste sich eine Störung anhand von Amplitude und Phasenverschiebung doch zeigen (Addition von zwei Sinussen gleicher Frequenz unterschiedlicher Phasenlage ergibt wieder einen Sinus, also Subtraktion des kalibrierten Sinus vom Gemessenen sollte dann auch wieder die Störung ergeben)?!?
das verstehe ich nicht:
wenn du einen Kompass auf einen Robot baust, der sich dreht, dann wird nach genau (physikalisch) 180° der Kompass je nach Kompassfehl- und Missweisung durch Störquellen irgendeinen um 0 bis 180° abweichenden Wert anzeigen.
Der Gyro wird je nach Drift einen um die momentane Drift (z.B. 1-15°/min) abweichenden Wert zeigen.
Laut Kompass hast du dich also möglicherweise um 220° gedreht, laut Gyro um 190°.
Oder laut Kompass um 100°, und laut Gyro um 183°.
Worauf soll man sich jetzt verlassen und was zur Grundlage der Drehungsmessung verwenden, sodass man auf die tatsächlichen exakt 180° kommt?
Oder du fährst im leichten Bogen (-3° in 30 sec, ohne es exakt zu wissen, vermeintlich fährst du geradeaus), und bewegst dich auf eine Magnet-Störquelle zu, ohne es zu wissen.
Je nach Pol wird der Kompass zwischen -180° und +180° ausschlagen, und jetzt z.B. +100° oder -70° anzeigen (und wenn du dich entfernst, wieder weniger).
Der Gyro wird um die Drehbewegung (-3°) plus Drift (+1 bis +5° in 20sec) z.B. +2° oder -2° anzeigen ( wie gerade die Drift ist, weiß ja keiner).
Was rechnet also der Robot aus, wie weit er sich gedreht hat, und wie kommt er dann auf genau -3°?
Holomino
15.12.2018, 17:51
Hmm, ich denke mal, der Fehler im Gyro ist endlich (für den Drift gibt es keine externe Störursache), der externe Fehler im Kompass ist es nicht. Wenn Du an nem Magneten vorbeifährst, wirst Du seinen Standort (die Phasenlage) durch einen sich drehenden Kompass aus mehreren Positionen heraus interpolieren können. Dabei bleibt das Erdmagnetfeld stabil (die Magnetfelder addieren sich ja nur), d.h. den kalibirierten Wert in der nach Gyro erwarteten Phasenlage (das ist dann bei einem sich drehenden Magnetfeldsensor ein vollständiger Sinus) kannst Du dabei getrost nach Gyrowert+Odometrie abziehen.
Zumindest aber kann man mit diesem Wissen (oh, da ist ne Störung, da kommt mit einem mal ne ganz andere Amplitude auf dem aufgenommenen Magnetfeldsensorsinus) doch zumindest so lange die Driftkorrektur im Gyro anhand des Kompasses unterdrücken, bis man aus dem Störfeld wieder heraus ist.
(Eigentlich müsste man das mal simulieren)
Hmm, ich denke mal, der Fehler im Gyro ist endlich (für den Drift gibt es keine externe Störursache), der externe Fehler im Kompass ist es nicht. Wenn Du an nem Magneten vorbeifährst, wirst Du seinen Standort (die Phasenlage) durch einen sich drehenden Kompass aus mehreren Positionen heraus interpolieren können. Dabei bleibt das Erdmagnetfeld stabil (die Magnetfelder addieren sich ja nur), d.h. den kalibirierten Wert in der nach Gyro erwarteten Phasenlage (das ist dann bei einem sich drehenden Magnetfeldsensor ein vollständiger Sinus) kannst Du dabei getrost nach Gyrowert+Odometrie abziehen.
Zumindest aber kann man mit diesem Wissen (oh, da ist ne Störung, da kommt mit einem mal ne ganz andere Amplitude auf dem aufgenommenen Magnetfeldsensorsinus) doch zumindest so lange die Driftkorrektur im Gyro anhand des Kompasses unterdrücken, bis man aus dem Störfeld wieder heraus ist.
nachdem der Kompass dasjenige Teil ist, das ständig unvorhersehbar die größten Fehler produziert, kann man auch gleich den Kompass komplett rauslassen.
Der Gyro Fehler bleibt ja sowieso immer (ebenfalls schwankend), und der Kompassfehler kann den Driftfehler niemals auf Null herausrechnen, denn er kann ja jederzeit gleichsinnig oder gegensinnig oder gar nicht vorhanden sein.
Hinzu kommt, dass nicht nur 1 Magnetstörquelle existiert, sondern mehrere (neben dem Robot, und im Robot selber), die mit dem Erdmagnetfeld interferieren und je nach Fahrtrichtung mehr oder weniger auffallen.
D.h. beide könnten sich auch um gleichsinnig 10° vom echten Wert unterscheiden, oder der Kompass liegt 10° unter dem Gyro, weil er zufällig mal richtig misst, der Gyro aber nicht). Oder der Kompass liegt 10° unter dem korrekten wert, und der Gyro mal nur 0,25° darüber und ist damit (fast) richtig.
Und jetzt fahr mit dem Robbi mal 1 Stunde lang durch die Gegend, d.h. du hast bei 1-10°/min. eine Gyrodrift von insgesamt irgendwas zwischen 60°-600° Fehlweisung/h.
Da kannst du genauso gut Kaffeesatz-lesen oder deinen Kurs würfeln.
Wenn du anderer Meinung bist:
schreib hier mal deinen Algorithmus in C++ hin, wie du es anders und besser rechnest.
Was ist denn bis jetzt draus geworden?
Ich bin neu in der Materie, aber nur mal so ein Gedanke.
Könnte man nicht unten Am Robot einen optischen Maussensor anbringen?
Da der ja Bewegungen in der X / Y Achse bemerkt sollte sich bei Geradeausfahrt eigentlich nur der Y Wert ändern, der Drehfehler sich somit feststellen und kompensieren lassen.
Der Sensor müsste dabei nur ausserhalb der Drehachse des Robots angeordnet sein.
Wie sich dabei die " Zeichnung " des Untergrundes auswirkt müsste man ausprobieren.
Ich bin neu in der Materie, aber nur mal so ein Gedanke.
Könnte man nicht unten Am Robot einen optischen Maussensor anbringen?
Da der ja Bewegungen in der X / Y Achse bemerkt sollte sich bei Geradeausfahrt eigentlich nur der Y Wert ändern, der Drehfehler sich somit feststellen und kompensieren lassen.
Der Sensor müsste dabei nur ausserhalb der Drehachse des Robots angeordnet sein.
Wie sich dabei die " Zeichnung " des Untergrundes auswirkt müsste man ausprobieren.
Ja, klar wäre das theoretisch möglich, allerdings kann sich auch dann der Sensor jederzeit im Zentrum einer Kreisbewegung befinden, daher wären 2 Maussensoren sicher noch besser. Und/oder weitere externe Referenzen zusätzlich.
Auch ist der Boden ja nicht unbedingt überall völlig plan.
Na ja, technisch lösbar wird das sein, aber wie denn jetzt - auch das Kompensieren der Drift?
MfG
:Weihnacht
Na ja, technisch lösbar wird das sein, aber wie denn jetzt - auch das Kompensieren der Drift?
Wurde doch schon öfters ausgeführt:
Entweder muss man sich mit dem (kurzfristigen) Driftfehler des MPU6050 (z.B. im dmp mode) abfinden, andernfalls lässt sich (mittel/langfristig) die Geräte-spezifische, über die Zeit schwankende Drift nur durch verlässliche externe Referenzen kompensieren (teilw. Odometrie, in absolut Stör-Magnetfeld-freien Umgebungen auch Kompass (fällt hier weg), sehr grob auch GPS (fällt hier auch weg), ansonsten Peilung von eigenen Referenz-Baken/Markierungen oder Detektion von Boden-Markierungen) .
Vielleicht noch mal etwas aus dem Netz dazu mit Komplementärfilter:
http://www.pieter-jan.com/node/11
MfG
:Weihnacht
Vielleicht noch mal etwas aus dem Netz dazu mit Komplementärfilter:
http://www.pieter-jan.com/node/11
Du verstehst das zu Grunde liegende Problem offensichtlich überhaupt nicht:
yaw-Werte (horizontaler Kurs) basieren auf Drehungen um die senkrechte Achse (die zum Erdmittelpunkt gerichtet ist).
Bei Drehung um die senkrechte Achse ändern Accelerometer aber überhaupt nicht ihre Messwerte!
Bei yaw-Drehung bleiben Accelerometer ständig konstant (der senkechte Vektor auf 9,8m/s², die beiden horizontalen auf 0m/s²), egal wie man dreht!
Das mit den Komplementärfiltern für Gyro-yaw-Werte zusammen mit Accelerometern kann daher mathematisch überhaupt nicht funktionieren, da Accelerometer keine veränderlichen Messwerte und damit auch keinen Filter-Beitrag zu der senkrecht stehenden yaw-Achse liefern können!
Accelerometer können nur Veränderungen messen, die NICHT um die senkrechte Achse drehen.
Accelerometer können daher mathematisch nur roll- und pitch Werte per Filter Fusion stabilisieren!
Probiere es bitte immer erst selber aus, bevor du hier falsche und komplett irreführende Hinweise gibst!
Bei Drehung um die senkrechte Achse ändern Accelerometer aber überhaupt nicht ihre Messwerte!
Also mit andern Worten: Beschleunigungssensoren messen die Beschleunigung nicht, die aus der Fliehkraft resultiert
Richtig?
MfG
:Weihnacht
Also mit andern Worten: Beschleunigungssensoren messen die Beschleunigung nicht, die aus der Fliehkraft resultiert
Richtig?
das ist auch falsch, selbstverständlich messen sie auch Fliehkräfte (Zentrifugalbeschleunigung), aber die sind bei der Messung von yaw Werten irrelevant bzw. für Komplementär- oder Kalmanfilter etc. nicht zielführend.
Und bevor du nun wieder irgendwelche theoretischen Gedankenspiele anfängst: überprüfe sie bitte praktisch, bevor du sie postest, und dann zeige auch bitte den fertigen C(++) Code!
Holomino
20.12.2018, 18:15
Komm mal runter.
Komm mal runter.
hä?
was ist das denn jetzt für ein zielführender Diskussions-Beitrag!?
Holomino
20.12.2018, 18:45
Das muss nicht zielführend sein, was ich hier schreibe. Wo steht das?
Es sollte aber eine äußere Form wahren, die ich manchmal in Deinen Beiträgen vermisse. DAS fördert die konstruktive Zusammenarbeit. DAS ist zielführend.
Um die eigentliche Problematik mal auf den Punkt zu bringen, Moppi: Der Komplementärfilter würde eine oder DIE Lösung sein, wenn die Beschleunigungssensoren diese minimalen Bewegungen in x- und y-Richtung vernünftig messen würden. Bei einem Roboter sind die gemessenen Beschleunigungswerte aber so verschwindend gering, dass sie im Rauschen des Sensors untergehen. Man kann damit recht zuverlässig die Neigung eines Gerätes (zum Gravitationsfeld der Erde, also immer nach unten) messen, aber kaum eine Bewegung in x/y-Richtung (eine leichte Drehung, wie hier das Problem, schon gar nicht).
Kurz: wenn der Beschleunigungssensor es könnte, warum bräuchte man dann noch ein Gyroskop?
Das muss nicht zielführend sein, was ich hier schreibe. Wo steht das?
Es sollte aber eine äußere Form wahren, die ich manchmal in Deinen Beiträgen vermisse. DAS fördert die konstruktive Zusammenarbeit. DAS ist zielführend.
Um die eigentliche Problematik mal auf den Punkt zu bringen, Moppi: Der Komplementärfilter würde eine oder DIE Lösung sein, wenn die Beschleunigungssensoren diese minimalen Bewegungen in x- und y-Richtung vernünftig messen würden. Bei einem Roboter sind die gemessenen Beschleunigungswerte aber so verschwindend gering, dass sie im Rauschen des Sensors untergehen. Man kann damit recht zuverlässig die Neigung eines Gerätes (zum Gravitationsfeld der Erde, also immer nach unten) messen, aber kaum eine Bewegung in x/y-Richtung (eine leichte Drehung, wie hier das Problem, schon gar nicht).
An "meiner Form" ist nichts auszusetzen, denn sie verweist (in Abgrenzung zu "wilder Spekulation") auf rationale Argumente und praktische Verwertbarkeit.
Dein "komm mal runter" ist aber ein Einwurf, der genau das nicht tut, daher pack dich mal an deine eigene Nase.
Übrigens, auch dein
Kurz: wenn der Beschleunigungssensor es könnte, warum bräuchte man dann noch ein Gyroskop? trifft nicht den Punkt, denn wenn es so wäre, dann könnte man ja gewinnbringend statistische oder stochastische Filter für Sensorfusion verwenden - das wäre ja sogar äußerst hilfreich und wünschenswert (s. Komplementärfilter-Link), aber es geht eben nicht für Accelerometer und Gyro-yaw-Werte!
... selbstverständlich messen sie auch Fliehkräfte (Zentrifugalbeschleunigung)...
Jedenfalls dachte ich mir, die Fliehkraft steht im Zusammenhang mit Radius und Geschwindigeit. Wenn ich den Radius nicht weiß, aber die Geschwindigkeit (bzw. Beschleunigung) und also die Beschleunigung - die zum Kreisäußeren wirkt - messen kann, dann könnte der Radius berechnet werden und daraus sicher auch der Winkel, den ich eingeschlagen habe.
Gut, ok, wenn das nicht zusammenpasst, dann ist es so.
Wenn ich es mal brauche, werde ich eine Lösung finden.
MfG
:Weihnacht
- - - Aktualisiert - - -
Kurz: wenn der Beschleunigungssensor es könnte, warum bräuchte man dann noch ein Gyroskop?
Das hatte ich mich auch gefragt. Weiß nicht, wie genau die Dinger Beschleunigung messen.
Also Komplementärfilter nur für Neigungswinkel?
MfG
:Weihnacht
Also Komplementärfilter nur für Neigungswinkel?
nein, ich hatte es schon geschrieben:
Accelerometer für was auch immer für Filter, aber nicht nur für Neigungswinkel (pitch), sondern auch für Rollwinkel (roll).
Nur eben nicht für yaw.
Komplementärfilter generell aber durchaus auch für andere brauchbare yaw-Referenzen (Peilungen, Odometrie, auch Kompass falls keine Störfelder)
Holomino
20.12.2018, 19:39
An "meiner Form" ist nichts auszusetzen, denn sie verweist (in Abgrenzung zu "wilder Spekulation") auf rationale Argumente und praktische Verwertbarkeit.
Au, Au, weia.
Au, Au, weia.
heya, noch so ein zielführender Post zur Lösung des TOP-Problems! Du übertriffst dich ja selber!
Holomino
21.12.2018, 08:24
Also Komplementärfilter nur für Neigungswinkel?
Im allgemeinen Sprachgebrauch gebe ich Dir da recht. Einen Gegenstand auf der Ebene zu neigen (kippen) ist etwas anderes, als ihn zu drehen. Wir drehen den Mülleimer, so dass die Klappe normgerecht für das Müllauto zur Straße steht. Das Müllauto aber kippt (neigt) den Mülleimer zum entleeren.
Beim fahrbaren Untersatz des TE sind die Freiheitsgrade auf die Ebene reduziert. Bei der Rotation von Neigung zu sprechen, halte ich eher für missverständlich.
eniddelemaj
23.12.2018, 17:42
Erstmal krass, wie sehr ihr euch hier bemüht mir zu helfen!
Das weiß ich wirklich zu schätzen und auch, wenn ich das in anderen
Posts vlt schon erwähnt habe, ich würde diese Seite jedem weiterempfehlen!
Nur leider bin ich mir jetzt nicht ganz sicher, ob ich diese Informationsflut richtig
verarbeitet habe. Also sind meine Optionen entweder den Drift einfach hinzunehmen
(ist ja ohnehin nicht so groß) oder die o.g. Baken als Referenzen zu verwenden.
Sprich ich kann den Drift nicht kompensieren, außer ich investiere mehr Geld
in einen besseren Gyro.
Würde es vlt auch helfen einen Durchschnittswert anhand von Yaw Werte zu ermitteln?
Die Verbesserung müsste ja noch nicht mal groß sein, da der Drift ohnehin sehr klein ist.
Ich mache hier einmal ein neues Fass auf:
Wie wäre es mit einem LIDAR oder einer Kamera mit Bilderkennung zur Orientierung? Ich habe so etwas noch nicht probiert, aber es schließt meines Erachtens Probleme, wie z. B. Drift, etc. aus, da sich dann immer das Bild, bzw. die Bilder (Bei Kamerasystemen mit mehr als einer Kamera) aus.
Auch den weiter oben schon geäußerten Gedanken von 2 optischen Maussensoren finde ich brauchbar. Diese nebeneinander montiert sollten auch helfen.
VG, Jürgen
@jmoors:
Auch den weiter oben schon geäußerten Gedanken von 2 optischen Maussensoren finde ich brauchbar. Diese nebeneinander montiert sollten auch helfen.
Ist schon mehrfach probiert/diskutiert worden. Auch hier entstehen hinreichend viele Fehler, die über längere Wege zu groß werden. (Bei der Maus wird dieser
Fehler quasi durch dir Rückkopplung Auge-Hand kompensiert)
Ich hatte mal versucht, das Problem mittels eines auf einen Servo montierten Sharp-Distanz-Sensor zu lösen. Fahrzeug steht, "Radar" nimmt 50..120 Werte
im Abstand von 0.5..1° auf, µC erstellt ein 2-D-Abbild des Raumes, robot weiß daraus, wo er ist. Hab dann irgendwann mal aufgegeben, der mathematische
Apparat fing an meine entsprechenden Kenntnisse, Zeitvorrat und den Speicher des xmega zu "sprengen".
mfg
Achim
...Ich hatte mal versucht, das Problem mittels eines auf einen Servo montierten Sharp-Distanz-Sensor zu lösen. Fahrzeug steht, "Radar" nimmt 50..120 Werte
im Abstand von 0.5..1° auf, µC erstellt ein 2-D-Abbild des Raumes, robot weiß daraus, wo er ist. Hab dann irgendwann mal aufgegeben, der mathematische
Apparat fing an meine entsprechenden Kenntnisse, Zeitvorrat und den Speicher des xmega zu "sprengen".
mfg
Achim
Dann eben die Rechnerei auslagern an einen Laptop - oder diesen auf den Robi bauen, wenn es denn mit der Größe passt. Ansonsten nimmt der Robi ein Bild auf, sendet es zum Laptop per WLAN. Dann fährt der Robi 20cm, macht ein weiteres Bild und sendet es zum Laptop. Dieser errechnet mögliche Kollisionen und sendet Fahrbefehle (Geradeaus, Links 20°, etc.) an den Robi.
Hallo!
Am einfachsten wäre stebiler Referenzpunkt zb. LW bzw. MW Radiosender. Dafür braucht man nur Miniradio mit Ferritantene und Finder von minimaler Empfangsstärke. ;)
@jmoors:
Dann eben die Rechnerei auslagern an einen Laptop.
Ja, mach mal, wenn Du meinst das programmieren zu können, klingt ja alles so easy, ich übernehm's dann gern.
@PICture:
stebiler Referenzpunkt zb. LW bzw. MW Radiosender. Dafür braucht man nur Miniradio mit Ferritantene
... und pico-sekunden logik/controller. Mit "Standard"-Hardware dürfte die Auflösung auch nicht besser
werden als der Driftfehler, wenn man Gyro/Beschleunigungs-Sensor nimmt.
mfg
Achim
...@PICture:
stebiler Referenzpunkt zb. LW bzw. MW Radiosender. Dafür braucht man nur Miniradio mit Ferritantene
... und pico-sekunden logik/controller. Mit "Standard"-Hardware dürfte die Auflösung auch nicht besser
werden als der Driftfehler, wenn man Gyro/Beschleunigungs-Sensor nimmt....
Ich habe genau das bei der BW mit Radarsignalen ein paar Jahre gemacht. Wenn ihr auf kurze Entfernung ein Radiosignal anpeilen wollt, dann müsst ihr mit sehr hohen Frequenzen arbeiten. Das Sendesignal sollte im KU-Band oder höher liegen. Es wird sehr viele Reflektionen geben. Das halte ich für unrealistisch. Alleine die Kosten für einen Empfänger im KU-Band...
Meiner Meinung nach ist der beste Ansatz der mit Bilderkennung einer Kamera oder LIDAR ein 3D-Bild des Raumes zu erstellen. Wenn die Rechnerleistung nicht ausreicht, kann es eben kein Arduino oder Raspberry werden, sondern ein Laptop oder Tablet, das die Kiste steuert.
VG, Jürgen
Wenn ihr auf kurze Entfernung ein Radiosignal anpeilen wollt, dann müsst ihr mit sehr hohen Frequenzen arbeiten. Das Sendesignal sollte im KU-Band oder höher liegen. Es wird sehr viele Reflektionen geben. Das halte ich für unrealistisch. Alleine die Kosten für einen Empfänger im KU-Band...
Das habe ich nicht gesagt. Glaubst du echt an Reflektionen bei Wellenlänge größer als 200 m ? :confused:
Übrigens, kleinster Empfänger ist eine DCF Funkuhr (77,5 kHz): https://www.ebay.de/itm/DCF-77-Empfangsmodul-Funkzeit-Modul-Funkuhr-Funk-Arduino-Modul-Antenne-DCF1-Uhr/183550270452?hash=item2abc72dbf4:g:5poAAOSwFZZb97~ a:rk:2:pf:0 . Man muss nur dort die von Signalstärke abhängige Spannung finden.
Man muss nur dort die von Signalstärke abhängige Spannung finden.
Da wird wohl alles andere was bisher diskutiert wurde, trotz Driften, Fehlern, Reflexionen usw., wesentlich genauer sein!
mfg
Achim
Es sind schon viele gute Vorschläge gekommen was man gegen Drift tun könnte, eine absolute Orientierung einbringen mit unterschiedlichen Mitteln die unterschiedlich aufwendig und wirksam sind.
Für eine Bewertung wäre es sicher auch hilfreich zu sehen, wie das Problem quantitativ aussieht. Wie groß ist die Drift über der Zeit, wenn sie isoliert gemessen wird, bei stillstehendem Fahrzeug. Den Vorteil hat man ja bei einem Fahrzeug, man kann falls nötig und sinnvoll ab und zu stehen bleiben und die Drift messen.
Wenn sie sich nur langsam und stetig ändert dann kann man sie damit erfassen und zumindest zum Teil kompensieren.
Auf alle Fälle meine ich, wäre es für die Bewertung von Lösungen interessant, wie groß der Fehler über der Zeit ist.
Für die Drehung auf der Stelle kann man die Rotation von Antriebsmotoren her berechnen bzw. ableiten.
Die Ansteuerung eines weiter entfernten Ziels kann mittels Fahrrichtung (Winkel) erfolgen. Wobei das nicht 100ig sein muss und wird. Hat man sich dem Ziel genähert, dann kann man auf Sicht fahren oder nach Funkfeuern oder nach anderen optischen Markern, die sich erfassen lassen und nach denen man das Fahrzeug ausrichtet.
Eine zuverlässige Methode um den Drehwinkel zu bekommen wäre, wenn man ein Poti per Stange (die fest mit dem Fahrzeug verbunden ist) auf die Erde absenkt und gegen den Untergrund drückt, während man das Fahrzeug anhält. Dann die Drehung ausführen (nach Schleiferstellung), Poti wieder einziehen und weiterfahren.
MfG
Für die Drehung auf der Stelle kann man die Rotation von Antriebsmotoren her berechnen bzw. ableiten. MfG
Nein, dann wird der Schlupf, das Durchdrehen der Räder, nicht berücksichtigt.
Die Ansteuerung eines weiter entfernten Ziels kann mittels Fahrrichtung (Winkel) erfolgen. Wobei das nicht 100ig sein muss und wird. Hat man sich dem Ziel genähert, dann kann man auf Sicht fahren oder nach Funkfeuern oder nach anderen optischen Markern, die sich erfassen lassen und nach denen man das Fahrzeug ausrichtet.
Eine zuverlässige Methode um den Drehwinkel zu bekommen wäre, wenn man ein Poti per Stange (die fest mit dem Fahrzeug verbunden ist) auf die Erde absenkt und gegen den Untergrund drückt, während man das Fahrzeug anhält. Dann die Drehung ausführen (nach Schleiferstellung), Poti wieder einziehen und weiterfahren.
Ich habe das vor gefühlt 100 Jahren mal probiert, einen Poti auf die Erde zu pressen wie oben beschrieben. Hat leider nicht funktioniert. Vor allem bei Fließenböden ging das schief. Besser ist, die aktuelle Richtung mit dem Kompass ermitteln, drehen und wieder den Kompass auslesen. Der Nordwert des Kompass ist egal, denn die Differenz ist wichtig. Der Vorteil ist, dass man während der Fahrt den Kompass wieder auslesen und die Richtung nochmals korrigieren kann.
wenn keine Magnetstörfelder vorhanden sind, dann geht das mit dem Kompass und wäre die Methode der Wahl.
Bei mir allerdings funktioniert es nicht, es treten Fehlweisungen von -180° bis +180° auf (bereits oben erwähnt), dann kann man statt Kompass genausogut den Kurs würfeln. 8)
Und mit dem Würfeln ist ja mehr oder weniger auch Realität. Man muss den Kurs nur gut genug schätzen können, um mit Näherung zum Ziel immer genauer zu werden.
Allerdings ist das eben nicht geeignet um geometrische Figuren in unbekanntem/unerschlossenem Umfeld mit hoher Präzession zu fahren.
MfG
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.