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 ;)
Tangens. Da haben eventuelle Vibrationen wenig Einfluss. Grüße, Michael
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.
@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.
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
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
Dazu brauchst Du einen Lowpass Filter oder Medianfilter. Damit geht die zeitliche Auflösung natürlich runter, aber die Spitzen werden flachgekloppt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.