Forum: Mikrocontroller und Digitale Elektronik Beschleunigungssensor, Neigung berechnen


von john (Gast)


Lesenswert?

Hallo,

ich habe hier einen BMA180 Beschleunigungssensor vor mir liegen.
Daten auslesen, etc funktioniert super.
Nun will ich den Neigungswinkel bezüglich des Erdmittelpunktes 
ausrechnen.
Dafür bleiben mir ja nun 2 Möglichkeiten...
1) sin(alpha) = beschleunigung_x_achse/1g
oder
2) tan(alpha) = beschleunigung_x_achse/beschleunigung_z_achse

Nun meine eigentilche Frage: Mit welcher Formel werde ich wohl bessere 
Ergebnisse auf erzielen, wenn sich der Beschleunigungssensor auf einem 
Quadrocopter befindet (natürlich Tiefpass gefiltert, etc).
Und was kann ich auf einem AVR schneller berechnen?

Vielen Dank schonmal ;)

von Michael K. (mmike)


Lesenswert?

Tangens. Da haben eventuelle Vibrationen wenig Einfluss.

Grüße,
Michael

von Karl H. (kbuchegg)


Lesenswert?

Mit gar keiner.
Sobald sich dein Quadrocopter bewegt, treten Beschleunigungen auf, die 
du zwar misst, die aber nichts mit der Lotrechten zu tun haben.

Beispiel:

Dein Quadro schwebt vor dir und der Beschleunigungssensor bestimmt das 
als die Lotrechte

       +--------------+
               |
               |
               v

jetzt bewegt sich dein Quadro nach links.

        <------------

       +--------------+
               |
               |
               v

Dein Sensor registriert diese und meldet

         <------------

       +--------------+
               \
                \
                 v


als Folge davon, wertet das dein Programm so aus, als ob dein Quadro 
nach rechts gekippt wäre

(also so

           +
             \
               \
              |  \
              |    \
              v     +
)

und rollt den Quadro nach links, um die vermeintliche Neigung, die gar 
nicht existiert, auszugleichen.
Und steuert sich damit selbst ins Verderben.

von john (Gast)


Lesenswert?

@Karl Heinz Buchegger:
Das ist mir schon klar, ich verwende außerdem ein Gyroskop und verknüpfe 
die Daten der beiden Sensoren ;)
Mir ging es nur darum wie ich die Daten des Beschleunigungssensors am 
besten verarbeite um hierbei schon einen möglichst kleinen Fehler zu 
erhalten. Dass der berechnete Winkel des Beschleunigungssensors nur im 
absoluten Stillstand (der nie eintreten wird) genau stimmen ist mir 
bewusst.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Du musst eben beide Formeln hernehmen, und ihre Konditionierung [1] für 
die erwarteten Wertebereiche vergleichen.

Zur Berechnung ist schwer was zu sagen, ohne zu wissen welche 
Genauigkeit benötigt wird und wie oft zu Berechnen ist.

Evtl. ist ein Nachguck-Tabelle für atan bzw. asin das beste, so wie in 
[2] eingesetzt, nebst evtl. geschickter Nutzung von Additionsththeoremen

[1] http://de.wikipedia.org/wiki/Kondition_(Mathematik%29
[2] http://www.mikrocontroller.net/articles/AVR_Arithmetik/Sinus_und_Cosinus_(Lineare_Interpolation%29

von Badal (Gast)


Lesenswert?

Hallo,

ich habe das gleiche Problem mit einem LSM303.
Zwar bekomme ich mit sin(y/x) es raus jedoch wenn ich ruckel oder eine 
wackelbewegung mache zeigt es mir grosse sprünge.

Wie kann ich dies Integrieren damit ich diese Störungen nicht bekomme.

Viele Grüsse

von Guido Körber (Gast)


Lesenswert?

Dazu brauchst Du einen Lowpass Filter oder Medianfilter. Damit geht die 
zeitliche Auflösung natürlich runter, aber die Spitzen werden 
flachgekloppt.

von eProfi (Gast)


Lesenswert?

atan2(y,x) ist die Funktion der Wahl, da dort auch Werte bei x=0 
definiert sind, welche bei der Division einen Fehler (divison by zero) 
bringen würden.

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.