Forum: Mikrocontroller und Digitale Elektronik Schieflage berechnen aus G-Sensor


von Sensor (Gast)


Lesenswert?

Hallo,

ich möchte in einem 3-dimensionalen Raum die Schieflage eines Sensors 
berechnen. Verwendet wird ein Beschleunigungssensor.

Für jede Achse einzeln ist es einfach, arcsin(X/Z) und arcsin(Y/Z) 
ergeben die Schiefstellungen bezüglich der X und Y Achse, aber wie 
erhalte ich nun eine resultierende Schieflage daraus?

Also meinetwegen habe ich 5° Schieflage zur X-Achse und 3° Schieflage 
zur Y-Achse.

Wie schief steht nun das Gerät?

von Philipp K. (philipp_k59)


Lesenswert?

Nimmt man da nicht lieber einen 6 Achs Gyro, oder ist das da mit drin?

Ein Beschleunigungssensor misst im Prinzip ja nur Bewegung.

von Sensor (Gast)


Lesenswert?

Der Sensor ist leider gesetzt

von Boris (Gast)


Lesenswert?

Philipp K. schrieb:

> Ein Beschleunigungssensor misst im Prinzip ja nur Bewegung.

Seit wann?

von A. Z. (donvido)


Lesenswert?

Philipp K. schrieb:
> Nimmt man da nicht lieber einen 6 Achs Gyro, oder ist das da mit
> drin?
>
> Ein Beschleunigungssensor misst im Prinzip ja nur Bewegung.

Ein "6 Achs Gyro" ist nichts anderes als ein Gyroskop (3 Achsen) und ein 
Beschleunigungssensor (nochmal 3 Achsen). Durch den Vektor der 
Erdbeschleunigung kann man sehr gut die Lage bestimmen, sofern das 
Objekt nicht beschleunigt. Fall doch, kann man beide Sensoren 
miteinander fusionieren.
Zur Lagebestimmung lauten die Stichwörter Rotationsmatrix und oder 
Quaternionen.

: Bearbeitet durch User
von Sven B. (scummos)


Lesenswert?

Vermutlich kannst du es explizit ausrechnen, wenn es dir Spaß macht, 
aber die einfache Variante bei der man nichts denken muss ist 
Quaternionen zu benutzen.

von A. S. (Gast)


Lesenswert?

Sensor schrieb:
> Also meinetwegen habe ich 5° Schieflage zur X-Achse und 3° Schieflage
> zur Y-Achse.
> Wie schief steht nun das Gerät?
Na, 3 und 5 Grad. Nimm einen Klotz in die Hand, Male die Seiten x,y und 
z an (die, wenn unten, 1g messen) und spiele damit.

Wenn Du ein anderes Maß willst (Roll Pitch jaw z.b.) dann nenne es.

von Klaus (Gast)


Lesenswert?

Du kannst die Länge des Vektors in x/y Ebene mit Pythagoras ausrechnen. 
Dann einmal deine Winkelfunktion.

Klaus

von Joe F. (easylife)


Lesenswert?

l=sqrt(x^2+y^2+z^2)
alpha=arccos(z/l)

von Klaus (Gast)


Lesenswert?

Joe F. schrieb:
> l=sqrt(x^2+y^2+z^2)
> alpha=arccos(z/l)

Ist leider falsch.

l=sqrt(x^2+y^2)
alpha=arccos(z/l)

Ist richtig.

Klaus

von (Gast)


Lesenswert?

Joe F. schrieb:
> l=sqrt(x^2+y^2+z^2)

Bei ruhendem Accelerometer sollte das eigentlich im Rahmen der 
Messgenauigkeit konstant sein, ausser die lokale Erdbeschleunigung 
ändert sich (unwahrscheinlich).

von Sebastian S. (amateur)


Lesenswert?

Mit einem Beschleunigungssensor wird das nichts.

Außer:
1. Das Gerät wird nie ausgeschaltet.
2. Das eine Mal, wenn dann es angestellt wird ist es in einer supergenau
   definierten Lage und hält dabei still.
3. Das Teil ist so Hypergenau, dass es "fast nicht" Beschleunigungen
   genauestens registriert.
...

zu 1. Einschalten in welcher Lage?
zu 2. siehe 1.
zu 3. Du kannst mit fast nicht messbarer Beschleunigung eine fast nicht 
messbare Rotationsgeschwindigkeit erreichen, nach einiger Zeit auch jede 
beliebige, die dann irgendwann jede beliebige Ausrichtung ergibt.
In der Zwischenzeit kannst Du Dir aber die Nullen, am Display, ansehen.

Merke:
Auch wenn sich nichts tut, dreht sich Dein System, da irgendwer dafür 
gesorgt hat, dass sich die "Plattform" (hier die Erdkugel) ständig 
dreht.
Beschleunigung ist relativ.

Damit es nicht in Vergessenheit gerät.
Auf einem Auge sind nämlich Beschleunigungssensoren blind:
Eine Rotation ist keine Beschleunigung! Danach hat aber z.B. eine 
Beschleunigung in X-Richtung, ein völlig andere Richtung. Uups!

: Bearbeitet durch User
von A. Z. (donvido)


Lesenswert?

Sebastian S. schrieb:
> Mit einem Beschleunigungssensor wird das nichts.
>
> Außer:
> 1. Das Gerät wird nie ausgeschaltet.

Quatsch, du kannst mit einer einzelnen Messung jeder Zeit die Lage 
bestimmen, voraussgesetzt der Sensor erfährt keine Beschleunigung außer 
der Erdbeschleunigung. Dafür kannst du den Sensor ein und ausschalten 
wie du willst.


> 2. Das eine Mal, wenn dann es angestellt wird ist es in einer supergenau
>    definierten Lage und hält dabei still.
> 3. Das Teil ist so Hypergenau, dass es "fast nicht" Beschleunigungen
>    genauestens registriert.
> ...

Kann es sein, dass du die klassische Drift eines Gyroskops meinst?

von (Gast)


Lesenswert?

Sebastian S. schrieb:
> Mit einem Beschleunigungssensor wird das nichts.

Doch. Normale MEMS-Accelerometer messen die Beschleunigung relativ zu 
einem inertialen Beobachter, also einem, der sich im freien Fall 
befindet. Im freien Fall misst so ein Ding also in etwa 0m/s², wenn das 
Ding auf dem Tisch liegt misst es einen Vektor mit Länge ca. 9,81m/s².

https://en.wikipedia.org/wiki/Proper_acceleration

von Wolfgang (Gast)


Lesenswert?

Philipp K. schrieb:
> Ein Beschleunigungssensor misst im Prinzip ja nur Bewegung.

Nein, die Erdbeschleunigung mit der genauso gut wie jede andere 
Beschleunig. Was er nicht messen kann ist konstante Bewegung.

Frag mal I. Newton.

von StefG (Gast)


Lesenswert?

Weil Beschleunigungskraft messtechnisch nicht Von Gravitationskraft zu 
unterscheiden ist, kann man einen Beschleunigungssensor sehr wohl als 
Winkelmesser verwenden.
Vorausgesetzt, der Sensor erfährt keine Beschleunigungskräfte.
Das heisst er muss stillstehen (in Bezug auf die Erde) oder sich mit 
konstanter Geschwindigkeit bewegen.

Manche Sensoren haben eine definierte Einbaulage und kompensieren die 
Gravitationskraft, so dass x,y und z Beschleunigung in dieser 
Einbauposition 0 sind.
Das müsste man halt kompensieren.

sqrt(x^2 + y^2 +z^2) muss 1 [g] ergeben dann passt das.

Der Rest besteht aus einer Umrechnung vom kartesischen (x,y,z) 
Koordinatensystem in Kugelkoordinaten (r, Phi, Theta).

siehe Wikipedia - Polarkoordinaten

von Joe F. (easylife)


Lesenswert?

Klaus schrieb:
> Joe F. schrieb:
>> l=sqrt(x^2+y^2+z^2)
>> alpha=arccos(z/l)
>
> Ist leider falsch.
>
> l=sqrt(x^2+y^2)
> alpha=arccos(z/l)
>
> Ist richtig.

Wie kommst du drauf, dass das falsch sein sollte?

l ist die Gesamtlänge des Vektors und dient zur Normierung von z (-1 ... 
+1), muss also aus allen 3 Komponenten errechnet werden.

Überlege mal, was in deinem Fall passiert, wenn der Sensor genau 
horizontal liegt (x=0, y=0)...

: Bearbeitet durch User
von Bernd K. (prof7bit)


Lesenswert?


von Klaus (Gast)


Lesenswert?

Ja sorry ist natürlich doch richtig.

l=sqrt(x^2+y^2+z^2)
alpha=arccos(z/l)

Ich war bei einer Umrechnung mit dem arctan.

a=sqrt(x^2+y^2)
alpha=arctan(z/a)

Klaus

von Rolf M. (rmagnus)


Lesenswert?

Sebastian S. schrieb:
> Mit einem Beschleunigungssensor wird das nichts.
>
> Außer:
> 1. Das Gerät wird nie ausgeschaltet.
> 2. Das eine Mal, wenn dann es angestellt wird ist es in einer supergenau
>    definierten Lage und hält dabei still.

Nein. Wozu sollte sowas nötig sein?

> 3. Das Teil ist so Hypergenau, dass es "fast nicht" Beschleunigungen
>    genauestens registriert.
> ...

1g ist mehr als "fast nicht".

> Merke:
> Auch wenn sich nichts tut, dreht sich Dein System, da irgendwer dafür
> gesorgt hat, dass sich die "Plattform" (hier die Erdkugel) ständig
> dreht.

Es geht nicht um Drehraten, sondern um Beschleunigung.

> Beschleunigung ist relativ.

Nicht in einem Inertialsystem.

> Eine Rotation ist keine Beschleunigung!

Eben!

> Danach hat aber z.B. eine Beschleunigung in X-Richtung, ein völlig andere
> Richtung. Uups!

Wieso "uups"? Das ist doch genau das, was ich messen will. Wenn die 
Erdbeschleunigung z.B. aus meiner Sicht plötzlich nach oben zeigt, weiß 
ich, dass ich auf dem Kopf stehe. Dazu muss das Ding weder "hypergenau" 
sein, noch muss es beim Einschalten in einer "supergenau definierten" 
Lage gewesen sein.

von Joe F. (easylife)


Lesenswert?

Wenn der Sensor gedreht wird und sich dabei nicht genau im Zentrum der 
Drehung befindet, misst er allerdings zusätzlich zur Erdbeschleunigung 
auch die auftretenden Zentrifugalkräfte...

von c-hater (Gast)


Lesenswert?

Joe F. schrieb:

> Wenn der Sensor gedreht wird und sich dabei nicht genau im Zentrum der
> Drehung befindet, misst er allerdings zusätzlich zur Erdbeschleunigung
> auch die auftretenden Zentrifugalkräfte...

Natürlich. Immer, wenn der Sensor irgendwie bewegt wird, mißt er 
natürlich die Summe aller Beschleunigungsvektoren. Zum Glück liefert 
aber die Informatik eine Möglichkeit, trotzdem zu einem Ergebnis zu 
kommen.

Der erste Trick ist ein "preshared secret". Die Auswertung weiß also 
vorab, dass in dem Messergebnis der drei Achsen irgendwo die als 
konstant anzunehmende Erdbeschleunigung versteckt sein muss, deren 
mögliche Änderung hat also eine Grenzfrequenz von 0. Auf dem Mond würde 
man dieses Geheimnis natürlich auf die Mondschwerkraft anpassen müssen 
usw., aber das ist trivial...

Der zweite Trick ist, die erste Ableitung aller Meßwerte auszuwerten 
,also nicht den Messwert selber, sondern das Ausmaß seiner Änderung im 
Vergleich zum jeweils vorigen.

Naturgemäß kann die konstante Erdbeschleunigung dann nix mehr bewirken, 
da sie eben konstant ist. D.h.: wenn man den aus den ersten Ableitungen 
berechneten Vektor vom gemessenen Vektor abzieht, verbleibt die 
Erdbeschleunigung als Vektor.

Das Verfahren ist so trivial, dass es (zumindest in der naiven Form) 
normalerweise jeder umsetzen können müsste, der die 10. Klasse 
abgeschlossen hat. Alle nötige Mathematik ist hier lt. den Lehrplänen 
sämtlicher deutschen Bundesländer bereits behandelt worden.

Was dann kitzlig ist, das erfordert allerdings akademische Bildung und 
handwerkliche Fähigkeiten als Programmierer. Das sind die unschönen 
Effekte des allgewaltigen Rauschens. Zum einen rauschen schon die 
Sensoren selber, zum anderen rauscht die real implementierte Mathematik 
durch die begrenzte Auflösung der ganzen Rechnerei. Das sinnvoll zu 
kompensieren ist die eigentliche Kunst bei der ganzen Sache. Und das ist 
leider nicht trivial. Denn: es gibt keine endgültige Lösung für dieses 
Problem. Man kann sich ihr nur infinit nähern unter gleichzeitig über 
alle Grenzen wachsendem Rechenaufwand. Der Trick ist also: mache es 
gerade so gut, wie du es für die konkrete Anwendung tatsächlich 
brauchst...

von Wolfgang (Gast)


Lesenswert?

Joe F. schrieb:
> Wenn der Sensor gedreht wird und sich dabei nicht genau im Zentrum der
> Drehung befindet, misst er allerdings zusätzlich zur Erdbeschleunigung
> auch die auftretenden Zentrifugalkräfte...

Es geht um ein stehendes Gerät. Da gibt es keine Zentrifugalkräfte.

Sensor schrieb:
> Wie schief steht nun das Gerät?

von Wolfgang (Gast)


Lesenswert?

c-hater schrieb:
> Der erste Trick ist ein "preshared secret".

In der Physik kannst du sämtliche Naturgesetze als "preshared secrets" 
betrachten. Das macht die Sache dann weniger geheimnisvoll und öffnet 
Berechnungen anhand der Bewegungsgleichungen (rotatorisch und 
translatorisch) Tür und Tor.

von Wolfgang S. (Gast)


Lesenswert?

Der TO kennt Winkel bezüglich vorgegebener Achsen.

Und es ist klar, dass die Wahl bez. einer neuen anderen Richtung oder 
Achse einen anderen Neigungswinkel ergibt.

Darüber hat sich Euler schon mal den Kopf zerbrochen und unter seinem 
Namen findet man auch die entsprechende Transformationsmatrix.

von c-hater (Gast)


Lesenswert?

Wolfgang schrieb:

> In der Physik kannst du sämtliche Naturgesetze als "preshared secrets"
> betrachten.

Das trifft nicht den Kern der Sache. Wie ich schon in meinem Posting 
sinngemäß schrieb: für eine Anwendung auf der Mondoberfläche würde man 
das anpassen müssen.

Es handelt sich hier tatsächlich, informatikmäßig betrachtet, um ein 
"shared secret". Hat die Auswertung das falsche für die Umgebung, 
liefert die Berechnung unbrauchbaren Müll.

von Joe F. (easylife)


Lesenswert?

Wolfgang schrieb:
> Es geht um ein stehendes Gerät. Da gibt es keine Zentrifugalkräfte.

Wie geht das zusammen mit

Rolf M. schrieb:
> Das ist doch genau das, was ich messen will. Wenn die
> Erdbeschleunigung z.B. aus meiner Sicht plötzlich nach oben zeigt, weiß
> ich, dass ich auf dem Kopf stehe.

?

Ein Gerät kann ja nicht plötzlich auf dem Kopf stehen, ohne dass es 
vorher gedreht wird...?

Oder willst du einmalig (z.B. nach dem Einschalten) die Lage bestimmen, 
die sich dann nicht mehr ändert?

von Rolf M. (rmagnus)


Lesenswert?

Joe F. schrieb:
> Ein Gerät kann ja nicht plötzlich auf dem Kopf stehen, ohne dass es
> vorher gedreht wird...?
>
> Oder willst du einmalig (z.B. nach dem Einschalten) die Lage bestimmen,
> die sich dann nicht mehr ändert?

Du gehst davon aus, dass sich das Gerät entweder immer dreht oder nie. 
Man könnte aber auch einfach sicherstellen, dass nur dann gemessen wird, 
wenn es sich gerade nicht dreht.

von Joe F. (easylife)


Lesenswert?

Rolf M. schrieb:
> Man könnte aber auch einfach sicherstellen, dass nur dann gemessen wird,
> wenn es sich gerade nicht dreht.

Fair enough.

von A. S. (Gast)


Lesenswert?

c-hater schrieb:
> : für eine Anwendung auf der Mondoberfläche würde man das anpassen
> müssen.

Dann skizziere doch Mal deine Rechnung oder Aufgabe, wo das alles nur 
klappt, wenn man g kennt.

von Bernd K. (prof7bit)


Lesenswert?

Rolf M. schrieb:
> Wenn die
> Erdbeschleunigung z.B. aus meiner Sicht plötzlich nach oben zeigt, weiß
> ich, dass ich auf dem Kopf stehe.

Oder daß sich jemand der Steuerkontrolle bemächtigt und die 
Schubrichtung umgekehrt hat während Du kurz auf dem Klo warst (ein ganz 
übler Scherz). Vor allem wenn Du zuvor keine Drehung gespürt hast. Man 
könnte noch zusätzlich einen Gyro hinzuziehen.

: Bearbeitet durch User
von Georg (Gast)


Lesenswert?

c-hater schrieb:
> Hat die Auswertung das falsche für die Umgebung,
> liefert die Berechnung unbrauchbaren Müll

Nur wenige von uns haben Gelegenheit, Geräte auf dem Mond zu testen.

Georg

von N.N. (Gast)


Lesenswert?

Der 3d Sensor liefert einen Vektor G = (gx,gy,gz)
Man definiert was oben ist, als Vektor O = (ox, oy, oz).
von beiden berechnet man die Länge |G| und |O|.

und dann ist der Winkel:
phi = arccos ( G∘O / (|G|*|O|) );

'∘' ist skalarprodukt, hier also gx*ox+gy*oy+gz*oz

siehe: https://de.wikipedia.org/wiki/Skalarprodukt

von Stefan F. (Gast)


Lesenswert?

Philipp K. schrieb:
> Ein Beschleunigungssensor misst im Prinzip ja nur Bewegung.

Die Erdanziehung ist eine Beschleunigung nach unten.

von Stefan F. (Gast)


Lesenswert?

Sebastian S. schrieb:
> Auf einem Auge sind nämlich Beschleunigungssensoren blind:
> Eine Rotation ist keine Beschleunigung!

Stellen wir uns einen Sensor vor, der auf einer Töpferscheibe geklebt 
wurde. Die senkrechte Achse zeigt immer 1G an, wegen der Erdanziehung.

Die anderen beiden Achsen werden bei Rotation eine Beschleunigung nach 
Außen anzeigen. Im Volksmund nennt man dies "Fliehkraft".

Diese Kraft ist nur im unendlich kleinen Zentrum der Rotation null. Aber 
kein Sensor ist unendlich klein.

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.