Forum: Mikrocontroller und Digitale Elektronik Ausrichtung Gyro/Acc


von Benjamin K. (kramerb)


Lesenswert?

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

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

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.

von Einer K. (Gast)


Lesenswert?

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.

von Benjamin K. (kramerb)


Lesenswert?

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ß

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

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?

von Udo S. (urschmitt)


Lesenswert?

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.

von Udo S. (urschmitt)


Lesenswert?

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?

von Benjamin K. (kramerb)


Lesenswert?

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
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Udo S. (urschmitt)


Lesenswert?

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)

von Marcel B. (cable545)


Lesenswert?

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
von Benjamin K. (kramerb)


Lesenswert?

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
von Pandur S. (jetztnicht)


Lesenswert?

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
von Benjamin (Gast)


Lesenswert?

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. :-)

von PittyJ (Gast)


Lesenswert?

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.

von Pandur S. (jetztnicht)


Lesenswert?

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.

von Udo S. (urschmitt)


Lesenswert?

Joggel E. schrieb:
> Die werden sicher fuer ein paar Minuten brauchbar sein.

Sicher?

von Wolfgang (Gast)


Lesenswert?

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.

von Pandur S. (jetztnicht)


Lesenswert?

>>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.

von Patrick (Gast)


Lesenswert?

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.

von Benjamin (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.