Forum: Mikrocontroller und Digitale Elektronik Komplementärfilter für 3 Achsen und je 360°?


von Humpty (Gast)


Lesenswert?

Hallo zusammen

Ich habe bereits viele Foren und Dokumente durchsucht, habe jedoch noch 
keine wirkliche Antwort auf mein Problem gefunden:

Ich habe ein System, welches mit einem 3-achsigen Gyrosensor und einem 
3-achsigen Beschleunigungssensor ausgerüstet ist.
Von diesem System soll nun die relative Lage im Raum nachverfolgt 
werden. Relativ meine ich, weil ich ohne Kompass die genaue Richtung ja 
nicht ermitteln kann. Gesucht ist also nur die Änderung in Bezug zum 
Einschaltzeitpunkt. Es ist auch keine Strecke, die eventuell 
zurückgelegt wird, gesucht, sondern nur die Drehungen.
Dabei kann das System um jede Achse volle 360°-Drehungen ausführen.

Ich bin nun auf das Komplementärfilter gestossen, welches den Winkel um 
eine Achse jeweils mit
Winkel_x = A*(Winkel_x + Gyro_x*dt) + (1-A)*(atan(Acc_y/Acc_z))
berechnen soll. Diese Berechnung hatte ich dann für jede Achse gedacht.

Jedoch gibt es ja zB. den Fall, dass das System um die Horizontale 
dreht, was der Gyrosensor erfasst, der Beschleunigungssensor jedoch 
nicht.
Auch gibt es den Fall, dass, wenn eine Beschleunigungsrichtung Lotrecht 
vorhanden ist, die anderen zwei Richtungen sehr klein sind. Wenn diese 
nun ändern, ergibt der atan() davon bereits sehr grosse Winkel, obwohl 
gar nicht gedreht wurde.

Meine Frage ist nun:
Ist das Komplementärfilter überhaupt für eine solche Aufgabe zu 
gebrauchen oder ist dies "nur" für Systeme, welche in der Horizontalen 
liegen und auf diese Position geregelt werden soll, anwendbar (also zB. 
Nick und Roll)? Denn alle Informationen, die ich bis jetzt fand, bezogen 
sich nur auf ein 1- oder 2-achsiges System.
Falls es funktionieren sollte, hat jemand Informationen, wie man dies 
auf dieses genannte System anwenden kann?
Oder ist in diesem Fall ein Kalman-Filter notwendig (was sicher ein, 
wenn möglich zu vermeidender, grösserer Aufwand darstellen würde)?

Über Antworten oder Anregungen wäre ich sehr dankbar!

Gruss
Humpty

von Daniel S. (daniel_s)


Lesenswert?

Hi,

das ist so ziemlich genau das Problem was Multicopter haben. Schau dich 
dort mal um. Die Meisten benutzen Kalmann Filter welcher beide Sensoren 
verheiratet und Störungen unterdrückt. Dabei wird von einem Model 
ausgegangen welches mit den Messwerten gestützt wird.

von Humpty (Gast)


Lesenswert?

Hallo Daniel

Vielen Dank für deine Antwort.

Bei den Multicoptern bin ich eben meistens darauf gestossen, dass 
vorallem die Nick und Roll-Achse so stabilisiert wird. Dies habe ich 
bereits ausprobiert und funktioniert gut in meinem System (solange nicht 
bis 90° gekippt wird, weil dann eine andere Achse Lotrecht wird).
Wie jedoch die Gier-Achse erkannt wird, wenn die beiden Anteile des 
Beschleunigungssensors so klein sind und mit dem Gyro verheiratet werden 
sollen, habe ich nirgends Antworten gefunden.
Sobald eine Achse mehr oder weniger Lotrecht ist, kann ich die Werte des 
Beschleunigungssensors für eben diese Drehachse nicht wirklich 
verwenden.
Trotzdem wird für Multicopter häuffig ein Komplementärfilter 
vorgeschlagen.

Gruss
Humpty

von Daniel S. (daniel_s)


Lesenswert?

Ist dein System auch bewegt? Also treten auch andere Beschleunigungen 
auf ausser der Erdbeschleunigung? Das ist meist der Fall. Deshalb kann 
man sich nicht auf den Beschleunigungssensor alleine verlassen. Darum 
der Kalmannfilter. Gyro und ACC haben so ihre Nachteile. Man muss etwas 
intelligentes haben welche beide Messwerte miteinander verheiratet so 
dass etwas richtiges dabei rauskommt.

Bei den Multikopter gibt es verschiedene Systeme. Mit und ohne 
Achskopplung. Das Problem ist, dass wenn du dein System aus der Nulllage 
um 90° nach vorne kippst und danach um die Hochachse des Systems (das 
ist jetzt die Rolllachse von vor dem Kippen) um 90° drehst (gierst) dann 
ist der Copter nicht mehr um 90° nick sondern um 90° Roll geneigt. Bei 
einem Quadrocopter zeigt dann nicht mehr der Vordere Motor nach unten 
sondern der rechte. Um das auszugleichen brauchst du eine 
Euler-Transformation der Winkel.

Was du machen willst ist eine IMU (Inertial measurement unit) Lies dich 
doch dazu ein. Ist nicht so wild. Google mal nach Achskopplung.

von Humpty (Gast)


Lesenswert?

Das System ist sehr langsam bewegt. Es sollte also hauptsächlich die 
Erdbeschleunigung auftreten.

Mit dem Komplementärfilter werden die beiden Sensoren bereits 
zusammengeführt.

Eine Euler-Transformation bin ich am implementieren. Jedoch wird dies 
denke ich das Problem nicht beheben, dass wenn ich in der horizontalen 
Lage bin, die Gier-Bewegung aus der Winkelberechnung des 
Beschleunigungssensors falsche Werte liefert.

Muss man sich da ab einem bestimmten Moment nur auf die Gyro-Daten 
verlassen, weil die Beschleunigungswerte falsche Winkel liefern 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.