Forum: Mikrocontroller und Digitale Elektronik Tilt Kompensation für einen Kompass (HMC5883L)


von Marcel D. (dmarcel21)


Lesenswert?

Hallo,

Ich weiß, dass diese Frage schon oft gestellt wurde, aber ich habe nach 
einigen Suche bis jetzt nichts gefunden.
(Ich habe auch schon einige Formeln, welche ich im Internet gefunden 
habe getestet. Leider hat keine bisher funktioniert.)

Ich baue eine Quadrokopter.
Ich verwende einen Gyro und eine Beschleunigungssensor um Roll (X) und 
Pitch (Y) zu erhalten.
Nun möchte ich auch Yaw (Z) erhalten. Darum brauche ich zuerst einmal 
einen Winkel vom Kompass, damit ich diesen anschließend mit dem Gyro 
vereinigen kann.
Ich habe schon ein Programm geschrieben mit welchen ich den Winkel aus 
den Raw - Daten des Kompasses berechnen kann.
Ich verwende dafür die Formel: winkel = atan2(y,x)
Jedoch habe ich nun das Problem, dass der Kompass keinen sinnvollen 
Winkel liefert, wenn ich in nicht gerade halte. (Was logischer weiß bei 
einem Quadrokopter sehr oft der Fall ist.)

Weiß jemand Formeln, mit welchen ich mittels Roll und Pitch und den Raw 
Daten (x y z) des Kompasses den richtigen Yaw Winkel erhalte?

Danke für eure Hilfe
Marcel

von Kay (Gast)


Lesenswert?

Moin,

Z bekommst Du aber auch vom Gyro und ACC. Für was genau brauchst Du denn 
den Magnetometer ?

Gruß Kay

von Marcel D. (dmarcel21)


Lesenswert?

Ich wollte den Kompass verwenden um dessen Winkel mit den Winkel des 
Gyro's zu verbinden. (Da der Gyro über die Zeit auch fehlerhaft wird.)
Aber nach meinen Wissen ist es nicht möglich aus den Daten des ACC den Z 
Winkel zu berechnen bzw. ich habe nie dafür eine passende Formel 
gefunden.

von gewalt ist unser ende (Gast)


Lesenswert?

Was du da machen willst - nennt man Sensorfusion. Und das ist alles 
andere als einfach und mit ein paar Formeln erledigt. Du solltest dir 
vorhandene Projekte anschauen und abkupfern.

Gruß Jonas

von Marcel D. (dmarcel21)


Lesenswert?

Die Sensorfusion habe ich schon. (Ich habe das mittels Hoch- und 
Tiefpass gelöst.)
Mir geht es nur drum den Fehler des Kompasses zu korrigieren, der 
entsteht, wenn ich den Kompass nicht perfekt gerade halte.
Und sollte mit zwei Formeln lösbar sein, soweit ich weiß.

von jo (Gast)


Lesenswert?

Hoch und Tiefpass, sozusagen ein Complementary Filter? Vielleicht hilft 
die ein Kalman-Filter?

Gruß0 Jonas

von Sven B. (scummos)


Lesenswert?

http://cache.freescale.com/files/sensors/doc/app_note/AN4248.pdf

Funktioniert bei mir aber leider nicht wie gewünscht, ich bin nicht 
sicher woran es liegt. Die Formeln habe ich grob nachgerechnet, das 
scheint zu stimmen -- vielleicht ist an meiner Kalibration was falsch. 
Sag' Bescheid, wenn es bei dir geht, würde mich interessieren!

Natürlich ist es nicht möglich aus den Daten des Beschleunigungssensors 
den z-Winkel zu berechnen, denn welche physikalische Gegebenheit soll 
denn dafür sorgen, dass das Ding merkt in welche Richtung es gedreht 
ist. Ist doch alles komplett symmetrisch um diese Achse.

von Marcel D. (dmarcel21)


Lesenswert?

Okay. Danke für Antwort.
Ich werde es mal dieses Wochenende probieren und dann bescheid geben 
falls es funktioniert.

von Georg (Gast)


Lesenswert?

Marcel D. V. schrieb:
> (Ich habe auch schon einige Formeln, welche ich im Internet gefunden
> habe getestet. Leider hat keine bisher funktioniert.)

In welchem Bereich? Bei uns ist das Erdmagnetfeld schon rund 45 Grad 
geneigt, da gibt es also Orientierungen, in denen das Feld senkrecht 
durch den Sensor geht und also keine Richtung gemessen werden kann, 
ungenau wird sie natürlich schon lange vorher. Ergo braucht man mehr als 
einen Magnetfeldsensor.

Georg

von uwe (Gast)


Lesenswert?

Also wenn ich dich richtig verstehe funktioniert halt der Kompass 
schlecht/gar nicht, wenn er leicht gekippt ist. Was willst du denn da 
rechnen, wenn er nicht funktioniert. Das ist halt bei einem Kompass so 
Prinzipbedingt. Deshal werden solche sachen schon immer kKardanisch 
aufgehängt.
Kardanische aufhängung des Kompasses!?
http://de.wikipedia.org/wiki/Kardanische_Aufh%C3%A4ngung

von Sven B. (scummos)


Lesenswert?

Georg schrieb:
> In welchem Bereich? Bei uns ist das Erdmagnetfeld schon rund 45 Grad
> geneigt, da gibt es also Orientierungen, in denen das Feld senkrecht
> durch den Sensor geht und also keine Richtung gemessen werden kann,
Man braucht für diesen Zweck ohnehin einen 3-Achsen-Magnetfeldsensor 
und einen 3-Achsen-Beschleunigungssensor, und dann sollte das in jeder 
Orientierung funktionieren -- egal wie das Feld durch den Sensor geht.

> Also wenn ich dich richtig verstehe funktioniert halt der Kompass
> schlecht/gar nicht, wenn er leicht gekippt ist. Was willst du denn da
> rechnen, wenn er nicht funktioniert. Das ist halt bei einem Kompass so
> Prinzipbedingt.
Wenn du einen Beschleunigungssensor hast, kannst du die Kippung 
rausrechnen.

von Georg (Gast)


Lesenswert?

uwe schrieb:
> Deshal werden solche sachen schon immer kKardanisch
> aufgehängt.

Quatsch. Man braucht einen magnetischen Sensor mit 3 Achsen und einen 
Lagesensor mit ebenfalls 3 Achsen, dann lässt sich die waagrechte 
Komponente des Magnetfelds, vulgo die Himmelsrichtung, eindeutig 
bestimmen.

Georg

von eiderdaus (Gast)


Lesenswert?

uwe schrieb:
> Also wenn ich dich richtig verstehe funktioniert halt der Kompass
> schlecht/gar nicht, wenn er leicht gekippt ist.

Das funktioniert sehr wohl, wenn man die Daten verschiedener Sensoren 
(mit jeweils 3 Achsen) kombiniert. Genau darum geht es hier ja ...

von eiderdaus (Gast)


Lesenswert?

Ninja'd.

von Marcel D. (dmarcel21)


Lesenswert?

Also ich habe einen 3 Achsen Gyro, ein 3 Achsen Beschleunigungssensor 
und einen 3 Achsen Kompass.

Und wie kann ich nun mit den Beschleunigungssensor bzw. Gyro die Neigung 
des Kompasses ausbessern?

Und wenn ich den Kompass auf dem Tisch im Kreis drehe ändert sich der 
Winkel genau so, wie er sich ändern soll.

von eiderdaus (Gast)


Lesenswert?


von Sven B. (scummos)


Lesenswert?

Marcel D. V. schrieb:
> Und wie kann ich nun mit den Beschleunigungssensor bzw. Gyro die Neigung
> des Kompasses ausbessern?
In dem PDF was ich gepostet habe steht das alles sehr ausführlich 
erklärt. Ob es dann am Ende funktioniert ist wie gesagt eine andere 
Frage, aber erklärt ist es da und die Methode die da verwendet wird 
macht m.E. auch Sinn.

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.