Hallo zusammen, ich habe ein nicht weiter relevantes Objekt (3x3 cm) mit Accelerometern (X, Y, Z; m/s²) und Gyroskopen (X, Y, Z; °/s) ausgestattet. Liegt das Objekt flach auf dem Tisch, misst der Acc erwartungsgemäß -9,81 m/s² in Z Richtung und ca. ~0 m/s² für X, Y. Nun kann sich das Objekt in zwei verschiedenen Stadien befinden und für beide möchte ich gerne die Ausrichtung ermitteln: 1) Ruhezustand Das Objekt liegt gerade oder schief auf einem unbeweglichen Gegenstand bzw. in der ruhigen Hand. 2) Bewegung Das Objekt wird auf und ab bewegt, dabei kann es sich auch drehen. Meine eigenen Bemühungen sind bisher weitestgehend fruchtlos. Für den 1) Case bin ich noch in der Lage, die Ausrichtung jeder Achse auf einen kegelförmigen Bereich genau zu bestimmen, aber die genaue Richtung zu ermitteln gelingt mir leider nicht. Für den 2) Case kommt zusätzlich noch die Schwierigkeit hinzu, dass die Erdbeschleunigung von der Bewegungsbeschleunigung getrennt werden muss. Kann mir dazu jemand ein Vorgehen raten? Ich bin auch für Teillösungen sehr dankbar. Da ich kein Ingenieur bin, bitte ich um eine möglichst laienfreundliche Beschreibung. :-) Vielen Dank und Grüße Benjamin
Bewegung wäre ds/dt, mit einem Beschleunigungssensor, mist Du aber die Beschleunigung (ds/dt^2). Du müsstest also die Position ermitteln und gucken, ob sich diese ändert.
Benjamin K. schrieb: > und für > beide möchte ich gerne die Ausrichtung ermitteln: Im Modelbausektor nennt sich das "9 DOF Sensor" Dir fehlt also noch das Magnetfeld. Passende Algorithmen finden sich auch in dem Sektor.
Ich möchte ja keine Bewegung messen, aber trotzdem kann der Beschleunigungssensor ja von mir bewegt werden. Die Position zu bestimmen wäre für mich das Endziel, aber meinem Verständnis nach muss ich dafür die Ausrichtung zu jeder Zeit kennen, da sich das Objekt drehen kann oder? Denn wenn mein Objekt für eine Sekunde mit 10 m/s² in Z Richtung beschleunigt wird, dabei aber um 180° gedreht ist, entspricht die Endposition -10 Meter und nicht 10 Meter. Wenn du einen direkteren Ansatz zur Positionsbestimmung hast, würde mir das sogar noch stärker weiterhelfen. ;-) Danke und Gruß
Benjamin K. schrieb: > Denn wenn mein Objekt für eine Sekunde > mit 10 m/s² in Z Richtung beschleunigt wird, dabei aber um 180° gedreht > ist, entspricht die Endposition -10 Meter und nicht 10 Meter. dazu müsstest Du aber die Ausgangsgeschwindigkeit kennen. Deine Annahme stimmt ja nur, wenn die 0 ist. > Wenn du einen direkteren Ansatz zur Positionsbestimmung hast, würde mir > das sogar noch stärker weiterhelfen. ;-) GPS?
Benjamin K. schrieb: > Die Position zu bestimmen wäre für mich das Endziel Das ist praktisch unmöglich. Deine Gyros messen Drehraten, deine Beschleunigungssensoren messen Beschleunigungen. Um von Drehraten zu Winkel zu kommen musst du die Drehrate aufintegrieren. Um von der Beschleunigung zur Position zu kommen musst du die Messwerte sogar zweimal aufintegrieren. Jeglicher Offsetfehler führt dabei zu einem sich immer weiter aufsummierenden Fehler. Drohnen kekommen das inzwischen recht gut hin, die messen aber noch das Erdmagnetfeld und haben damit die absolute Position im Raum und ermitteln den Drift vieleicht über eine nach unten gerichtete Kamera oder einfach über GPS. Die übliche Methode um die Sensordaten so gut wie möglich miteinander zu verrechnen nennt sich Kalman Filter, der ist aber alles andere als trivial. Am besten schaust du mal in entsprechenden Foren wo es um Drohnenselbstbau geht.
Benjamin K. schrieb: > Denn wenn mein Objekt für eine Sekunde > mit 10 m/s² in Z Richtung beschleunigt wird, dabei aber um 180° gedreht > ist, entspricht die Endposition -10 Meter und nicht 10 Meter. Das ist schon falsch. Wenn sie eine Sekunde mit 10m/s² beschleunigt wurde, dann hat sie die Geschwindigkeit 10m/s und ist nach einer Sekunde 10m weg, nach 2 Sekunden 20m, nach 3s ... Und ja wenn sie um 180° gedreht wurde (horizontal) dann ist sie nach 1 Sekunde -10m von dem Ursprungspunkt, nach 2s -20m ... Und jetzt das Ganze in 3 Dimensionen, mit wechselnden Beschleunigungen. Und dann dreht sie sich noch in alle 3 Achsen, so daß deine Z-Achse auf einmal schräg in den Raum weist, ... Du erkennst das Problem?
Indoor, deshalb fällt GPS leider weg. Es geht mir auch nur um eine sehr kurzfristige Positionsbestimmung (max. 20 Sekunden), kann man da den Drift ggf. vernachlässigen bzw. mit einem Kalman-Filter mitigieren? Nach der Zeit wird der Sensor resettet. Danke für den Tipp mit dem Magnetfeld, damit könnte ich zumindest den 1) Case vermutlich gelöst bekommen.
:
Bearbeitet durch User
Benjamin K. schrieb: > Für den 2) Case kommt zusätzlich noch die Schwierigkeit hinzu, dass die > Erdbeschleunigung von der Bewegungsbeschleunigung getrennt werden muss. Und es kommt noch dazu, dass du auch in Bewegung bist, wenn du keinerlei zusätzliche Beschleunigung mehr, sondern nur noch eine gleichmägige Bewegung hast. Und du wolltest doch so eine Bewegung vom Stillstand unterschieden. Benjamin K. schrieb: > Es geht mir auch nur um eine sehr kurzfristige Positionsbestimmung Das ist jetzt aber nochmal um eine gute Liga höher. Bisher wolltest du nur die Bewegung erkennen, jetzt willst du aus der Bewegung auch noch die Position berechnen. Spannend. Alle Ansätze und Versuche, die ich bisher gesehen habe, sind an der Realität des Rauschens mehr oder weniger gescheitert...
Benjamin K. schrieb: > Es geht mir auch nur um eine sehr kurzfristige Positionsbestimmung (max. > 20 Sekunden) Nehmen wir mal an dein Beschleunigungssensor hätte von seinem Maximalwert 1% Offsetfehler. Maximalwert wäre 10m/s², Fehler also 0,1m/s² Wenn dein Objekt jetzt eigentlich steht, würde er 0,1m/s² ausgeben. Nach 10 Sekunden würdest du jetzt schon einen Fehler in der Geschwindigkeit von 1m/s haben und ein Positionsfehler von 5m. Nach 20 Sekunden 2m/s und 20m. (Ich hoffe ich habe mich jetzt im Kopf nicht verrechnet)
Hab ich das richtig verstanden? Du möchtest die Lage und Orientierung deines Objektes ermitteln und dann noch die Höhe dazu? Oder geht es nicht nur um die Höhe sondern generell um die Position und dann noch die Lage im Raum? Inertialsensoren(Gyro, Acc) werden häufig genutzt, um die Lage im Raum zu ermitteln. Um dann noch die Orientierung zu bestimmen kann man noch ein Magnetometer dazu nehmen, oder aber die Messungen des Gyroskops(Drehrate um die Z-Achse) aufintegrieren. Dann hast du auch den zurückgelegten Winkel um die Z-Achse. Allerdings wurde hier ja schon angemerkt, dass Dir da der Drift, also das Aufintegrieren des Sensorrauschens, Dein Ergebnis versaut. Das Problem hast du aber generell bei der Ermittlung der Lage nur aus den Werten des Gyroskops. Hier hilft nur eine ordentliche Offsetkompensation vom Gyro und ein Hochpass-Filter. Eine abschließende Sensorfusion(Kalmanfilter, Komplementärfilter usw.) ist dann der Schlüssel... Für die Höhe würde ich eher zu Optischen- bzw. Ultraschalsensoren greifen, oder aber in deinem Fall ein Barometer?!
:
Bearbeitet durch User
Lothar M. schrieb: > Das ist jetzt aber nochmal um eine gute Liga höher. Bisher wolltest du > nur die Bewegung erkennen, jetzt willst du aus der Bewegung auch noch > die Position berechnen. Sorry, falls ich mich unpräzise ausgedrückt habe. :-) Deshalb nochmal in aller Klarheit: Ich möchte ausschließlich eine Position bestimmen bestehend aus einer X Y und Z Koordinate. Alle anderen Größen wie Bewegung oder Ausrichtung waren lediglich als Hilfsgrößen gedacht. Der Nullpunkt der Position (0, 0, 0) ist hierbei der Punkt, an dem sich der Sensor bei Aktivierung befindet. Die Entfernung zum Boden, zur Wand o.ä. ist also egal. In meiner Fantasie wäre das ohne die Möglichkeit der Drehung relativ einfach möglich, indem ich von der Beschleunigung auf den zurückgelegten Weg schließe. Wenn das Objekt nun gedreht ist, verändert sich aber die Ausrichtung und die erfassten Beschleunigungswerte sind anders zu interpretieren, was deren Auswirkung auf die Positionsänderung angeht. Bspw. wie oben beschrieben, führt eine horizontale Drehung um 180° zu einer Invertierung der Z-Achse, so dass der Betrag gleich bleibt und das Vorzeichen geändert wird.
:
Bearbeitet durch User
Ja, einfach 2 mal aufintegrieren. Und allfaellige Rotationen mitrechnen. Einfach im 3D Raum mit Vektoren rechnen. Das Gyro laesst dich ja den Dreh Winkel rechnen. Sollte kein Problem sein. Von der Drift abgesehen.
:
Bearbeitet durch User
Joggel E. schrieb: > Ja, einfach 2 mal aufintegrieren. Und allfaellige Rotationen mitrechnen. > Einfach im 3D Raum mit Vektoren rechnen. Das Gyro laesst dich ja den > Dreh Winkel rechnen. > > Sollte kein Problem sein. Von der Drift abgesehen. Danke, das klingt für mich zwar noch nicht ganz so einfach, aber ich versuch das mal am Wochenende und melde mich dann wieder. :-)
Joggel E. schrieb: > Ja, einfach 2 mal aufintegrieren. Und allfaellige Rotationen > mitrechnen. > Einfach im 3D Raum mit Vektoren rechnen. Das Gyro laesst dich ja den > Dreh Winkel rechnen. > > Sollte kein Problem sein. Von der Drift abgesehen. 2 mal aufintegrieren. Was da wohl für Fehler herauskommen. wegen Rundungsfehler, Sensorbeschränkungen etc. Irgendwann ist es aus, und die Genauigkeit ist dahin. Und ich meine, das geht sehr schnell. Ich kenne professionelle Trackingsysteme. Die arbeiten mit festen Kameras im Raum. Die ermitteln die Winkel zu dem Objekt, und rechnen dann die Position aus. Ist eine aufwändige und teuere Angelegenheit, doch die Genauigkeit bleibt auch nach Stunden erhalten.
Nun, man kann die Sensoren ja zu Beginn Offsetkalibrieren. Bedeutet, man sagt das Ding ist in Ruhe und dann werden die Beschleunigungs- & Winkelbeschleunigungswerte gemittelt und als Offset hinterlegt. Die werden sicher fuer ein paar Minuten brauchbar sein.
Udo S. schrieb: > Das ist schon falsch. Wenn sie eine Sekunde mit 10m/s² beschleunigt > wurde, dann hat sie die Geschwindigkeit 10m/s und ist nach einer Sekunde > 10m weg, nach 2 Sekunden 20m, nach 3s ... > Und ja wenn sie um 180° gedreht wurde (horizontal) dann ist sie nach 1 > Sekunde -10m von dem Ursprungspunkt, nach 2s -20m ... Eine Drehung des Objektes beeinflusst den Bewegungsvektor überhaupt nicht. Was sich ändert ist die Orientierung des körperfesten Koordinatensystems.
>>Joggel E. schrieb: >> Die werden sicher fuer ein paar Minuten brauchbar sein. > >Sicher? Welche Genauigkeit erwartet du ueber welche Zeit ? Solange die Drift groesser wie das Quantisierungsrauschen ist, sollte das passen. Ich wuerde das einfach mal messen. Ortsfest die Werte auslesen und ueber eine laengere Zeit eine Statistik fuehren. Allenfalls mit Aufzeichnen der Temperatur. Alles mit genuegend Bits Aufloesung, um nicht im Rauschen zu verschwinden. Zeig mal.
Welchen Sensor hast du denn zurzeit? Wenn du nur mit der IMU die Position bestimmen willst, wirst du um ein Magnetometer nicht herum kommen. Dann hast du 9 DOF (Degrees of freedom). Um diese zuerst in eine Orientierung umzuwandeln bieten sich Sensor Fusion Algorithmen wie der Kalman Filter an. Sobald du eine genaue Orientierung hast, kannst du anhand der Orientierung den Erdbeschleunigungsvektor berechnen. Diesen kannst du dann von den Beschleunigungswerten abziehen. Dann integrierst du einfach die korrigierte Beschleunigung auf der X, Y und Z Achse doppelz auf und hast dann die X, Y, Z Position relativ zum Start. Es gibt schon fertige Sensoren, die alles bis auf das doppelte Integrieren der korrigierten Beschleunigung recht gut hinbekommen. Der BNO055 wäre da so einer, für den es auch recht viele Beispiele gibt. Da hast du dann weniger Aufwand an Filtertechnik und die Ergebnisse sind wahrscheinlich besser als wenn ein Hobbyist mit viel Aufwand zusammenschustern könnte.
Besten Dank erstmal für die ganzen Ideen. Wir verwenden aktuell einen MPU6050. Das Problem das ich sehe ist, dass die Orientierung sich in unserem Anwendungsfall laufend ändert. D.h. das Objekt dreht sich permanent. Dann müssten wir die Beschleunigung doch zu jedem Einzelzeitpunkt entsprechend der Drehung neu adjustieren, oder? Danke vorab und Grüße Benjamin
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.