Forum: Offtopic Winkelberechnung, Beschleunigungssensor, Erdbeschleunigung


von Carlo (Gast)


Lesenswert?

Ich arbeite zurzeit an einem Flightcontroller und habe es zum 
Interessanten Teil geschaft, der Lageregelung.
Aus Beschleunigungssensor und Gyroskop Winkel ermitteln, mittels 
komplementär Filter vereinigen und den PID-Regler eine Antwort berechnen 
lassen.

Nur kann ich mir nicht erklären wie ich einen korrekten Winkel aus den 
Daten des Beschleunigungssensors errechne, da die Erdbeschleunigung doch 
jede Berechnung verfälscht.

Ein Nullen der Z-Achse dürfte das Problem nicht lösen, in Schräglage 
zeigt die Erdanziehung auch auf den anderen Achsen Auswirkungen...

Berechnen würde ich den Winkel zunächst mit atan2().

: Verschoben durch User
von Max M. (jens2001)


Lesenswert?

Carlo schrieb:
> wie ich einen korrekten Winkel aus den
> Daten des Beschleunigungssensors errechne, da die Erdbeschleunigung doch
> jede Berechnung verfälscht.

Minus 9,81m/s^2.

Carlo schrieb:
> in Schräglage
> zeigt die Erdanziehung auch auf den anderen Achsen Auswirkungen...

Genau DAS ist der Sinn!

Für eine Lage-/Beaschleunigungsregelung musst du natürlich die Daten der 
Gyroskope mit verrechnen.

von Thomas R. (dt_roll)


Lesenswert?

Erstmal ... Die Beschleunigungssensoren sind nicht genau genug, um per 
integration die Geschwindigkeit zuverlaessig zu erhalten, noch weniger 
taugen sie um durch Doppelintegration die Position zu erhalten. Sie 
geben einen Hinweis.
Wenn man die Hoehe moechte, sollte man einen barometrischem Drucksensor 
verbauen.

Es gibt die tatsaechliche Lage, mit dem tatsaechlichen Bewegungsvektor, 
und dann gibt es den scheinbaren Bewegungsvektor, der sich vom 
tatsaechlichen Bewegungsvektor durch die Bewegungsgleichungen 
unterscheidet. Daraus gibt es dann auch eine scheinbare Position.
Falls man in der etwas besseren Lage ist, die Position per GPS zu 
erhalten, kann man sich mehr Abweichung bei den Bewegungsgleichungen 
erlauben. Falls man die Position nicht hat, sollte man per 
barometrischem Druck die Hoehe haben. Per Energieerhaltung und 
Flugeigenschaften kann man die Bewegungsgleichungen zurueckkalibrieren.
Diese Energieerhaltungs Gleichungen sind bei einem Flieger einfacher als 
bei einer Drohne haette ich mal angenommen. Denn ein Flieger setzt Hoehe 
sehr effizient in Geschwindigkeit um.

Der PID ist uebrigens das Einfachste, und funktioniert eigentlich nur 
bei einer Drohne im stabilen Zustand.

von Timmo H. (masterfx)


Lesenswert?

Ohne die Erdbeschleunigung hättest du gar keine Information über die 
absolute Lage. Den Winkel bekommst du ja genau deswegen weil sich die 1g 
auf die 3 Achsen je nach Lage verteilen. Der Betrag des Vektors ist 
immer 1g (sofern keine zusätzliche Beschleunigung im Spiel ist) und die 
Lage ergibt sich aus der Aufteilung der 3 Achsen.

Das Gyroskop gibt dir die Winkelgeschwindigkeit und liefert dir durch 
Integration der Winkelgeschwindigkeit ebenfalls den Absoluten winkel, 
welcher allerdings driftet. Den Drift von Pitch und Roll gleichst du 
über längere Zeit mit dem Beschleunigungssensor aus, den Yaw Drifst 
kannst du hingegen nur mit einem Magnetfeldsensor ausgleichen.
Den Drift den Gyros sollte man vorher einmal über ein paar hundert 
Samples auswerten und dann kontinuierlich vom Messwert abziehen (für 
jede Achse separat natürlich).
Das ganze schmeisst man im einfachsten Fall einfach in ein 
Komplementärfilter
Winkel = 0.99*(Winkel+Gyro*dt) + 0.01*WinkelausAcc;

: Bearbeitet durch User
von Benny S. (benny_s)


Lesenswert?

Thread-Ersteller hier, durch das Verschieben zum Offtopic-Board musste 
ich mich registrieren.

Demzufolge addiere ich die Beschleunigungen von X,Y,Z und prüfe sie auf 
~1g,  wenn das zu trifft berechne ich die Lage?
Aber wenn ich bspw. eine Beschleunigung gegen die Erdanziehung habe und 
ganz zufällig auf ~1g komme ist die errechnete Lage doch unbrauchbar?

> Das ganze schmeisst man im einfachsten Fall einfach in ein
> Komplementärfilter
> Winkel = 0.99*(Winkel+Gyro*dt) + 0.01*WinkelausAcc;

Hier kommt mir die Frage auf was passiert wenn ich keine ~1g hab, also 
keinen brauchbaren Winkel vom Beschleunigungssensor erhalte? Sollte ich 
dann für diesen Durchlauf 100% auf das Gyro geben oder den zuletzt 
gültigen Wert des Beschleunigungssensors benutzen?

PS: Danke für die rundum Infos, Magnetometer, Barometer, GPS-Modul, 
alles liegt bereit doch dazu komme ich erst später. Zunächst ist das 
Ziel Pitch und Roll von Gyroskop und dem Beschleunigungssensor zu 
erhalten.

von Timmo H. (masterfx)


Lesenswert?

Benny S. schrieb:
> Hier kommt mir die Frage auf was passiert wenn ich keine ~1g hab, also
> keinen brauchbaren Winkel vom Beschleunigungssensor erhalte? Sollte ich
> dann für diesen Durchlauf 100% auf das Gyro geben oder den zuletzt
> gültigen Wert des Beschleunigungssensors benutzen?

Ja genau. Der Drift vom Gyro ist auch nicht so riesig, sodass man in der 
Regel auch einige Sekunden ohne Acc leben kann. Ich mache es bei meinem 
Copter so:
1
// accMagnitude = Betrag accVektor => prüfen auf max 1.2g, min 0.8g
2
if(accMagnitude < 120 && accMagnitude > 80 ){
3
  EstAngle[0] = 0.995*(EstAngle[0]+(float)gx*0.07*0.01) + 0.005*(_atan2(ax_f,sqrt(ay_f*ay_f+ az_f*az_f)));
4
  EstAngle[1] = 0.995*(EstAngle[1]+(float)gy*0.07*0.01) + 0.005*(_atan2(ay_f,sqrt(ax_f*ax_f+ az_f*az_f)));
5
}
6
else{
7
  EstAngle[0] = (EstAngle[0]+(float)gx*0.07*0.01);
8
  EstAngle[1] = (EstAngle[1]+(float)gy*0.07*0.01);
9
}

: Bearbeitet durch User
von Thomas R. (dt_roll)


Lesenswert?

>Hier kommt mir die Frage auf was passiert wenn ich keine ~1g hab, also
keinen brauchbaren Winkel vom Beschleunigungssensor erhalte? Sollte ich
dann für diesen Durchlauf 100% auf das Gyro geben oder den zuletzt
gültigen Wert des Beschleunigungssensors benutzen?

PS: Danke für die rundum Infos, Magnetometer, Barometer, GPS-Modul,
alles liegt bereit doch dazu komme ich erst später. Zunächst ist das
Ziel Pitch und Roll von Gyroskop und dem Beschleunigungssensor zu
erhalten.

....

Wenn der Absolutwert der Beschleunigung nicht 1g ist, gibt es 
offensichtlich eine zusaetzliche Beschleunigung. Die kann sich ergeben 
durch :

-eine Motorinduzierte Beschleunigung - ersichtlich an der Ansteuerung
-eine Kurvenbeschleunigung in 3D - ersichtlich am Gyro
-ein Luftloch, geht hinunter - ersichtlich am Barometer
-ein Auftriebsschlauch, geht hinauf - ersichtlich am Barometer

Das Fluggeraet befindet sich in einer Differentialgleichung, die 
abgespult wird. Und da muss man mitrechnen. In der Mitte beginnen geht 
nicht. Ein Sample aus der Mitte des Ablaufes ist wertlos.

Ich empfehl erst mal eine Simulation zu schreiben. Welche Fluglagen 
ergeben welche Sensorwerte. Und dann das Ganze passiv, dh ohne Antrieb, 
zB an einer Schnur aufgehaengt zu verifizieren.

: Bearbeitet durch User
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.