PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 9DOF-Sensor - Datenauswertung?



Virtuelx
27.05.2013, 16:03
Hallo,

ich habe diesen (https://www.sparkfun.com/products/10724?) 9DOF-Sensor und habe Probleme die Daten richtig zu interpretieren.

Zunächst der Gyrosensor:
Im Datenblatt steht "full-scale range of +/- 2000 °/s" mit einer Empfindlichkeit von 14.375 LSB/(°/s). Hier wirkt schon die Einheit ein wenig merkwürdig, da der Sensor mir ja eigentlich einen Winkel zurückgeben sollte aber die Einheit eigentlich für Winkelgeschwindigkeit zählt? :confused:
Wenn ich das mal außer acht lasse hätte ich gemeint, dass die +/- 2000 °/s = +/- 360° sind. Daher wäre der Umrechenfaktor von Bits auf Grad: (360/2000)*14,375 ?

Beim Beschleunigungssensor weiß ich nicht ob der Sensor so ungenau ist oder ob ich ebenfalls die Daten falsch interpretiere.
Der Sensor hat einen Wertebereich von +/- 16 G mit einer Auflösung von 4 mG/LSB. Bei einer Messung im Ruhestand des Sensor komme ich auf dieses Ergebnis:
~225 Bits =>
225 Bits * 4 mG/LSB = 900 mG = 0,9 G
10% Ungenauigkeit scheint mir doch etwas viel zu sein? :confused:

Hat jemand Ideen, Anmerkungen oder ähnliches?
Danke fürs lesen!

LG

Che Guevara
27.05.2013, 16:49
Hi,

ein Gyrosensor gibt eine Winkelgeschwindigkeit aus, keinen Winkel! Umrechnen kann man das nicht einfach so, dafür musst du integrieren (aber das birgt Fehler, deswegen auch der ACC).
Ist den sichergestellt, dass der Sensor genau waagrecht ist? Einen best. Drift / Offset musst du dabei auch in Kauf nehmen. Die Temperatur spielt dabei auch eine gewisse Rolle.

Gruß
Chris

Virtuelx
30.05.2013, 17:59
Hi,

ein Gyrosensor gibt eine Winkelgeschwindigkeit aus, keinen Winkel! Umrechnen kann man das nicht einfach so, dafür musst du integrieren (aber das birgt Fehler, deswegen auch der ACC).
Ist den sichergestellt, dass der Sensor genau waagrecht ist? Einen best. Drift / Offset musst du dabei auch in Kauf nehmen. Die Temperatur spielt dabei auch eine gewisse Rolle.

Gruß
Chris

Danke für deine Antwort!

Bin leider mit der Differential-/Integralrechnung nicht sehr fit. Könntest du mir ein Beispiel geben wie ich von der Winkelgeschwindigkeit auf den (veränderten) Winkel komme?
Meine Überlegung wäre: Wenn ich z.B.: jede Millisekunde einen Sensorwert mit der Winkelgeschwindigkeit bekomme, kann ich auf den Winkel zurückrechnen, da mir Zeit und Winkelgeschwindigkeit bekannt sind.
Das wäre dann:
(veränderter) Winkel = Winkelgeschwindigkeit/Zeit
z.B.: Winkel = (60°/s)*0,001s = 0,06°
Oder ist das zu einfach? :rolleyes:

Und was meinst du mit "ACC"?

Danke und LG
Virtuelx

Che Guevara
31.05.2013, 15:58
Hi,

also den Winkel kannst du durch Integration ermitteln. Etwa so:


Winkel = Winkel + Gyro

Je nachdem, wie oft du pro Sekunde integrierst, ist der Wert kleiner oder größer. Ein Beispiel:
Der Gyro gibt einen Wert von 32768 bei 2000°/s aus, du integrierst mit 500Hz (2ms)
1°/2000° * 32768 * (1/500) = 8192
D.h. ein Wert von 8192 entspricht einem Winkel von 1°. Wenn du ohne dt (also die Zeitdifferenz zwischen zwei Messungen) rechnest, erhältst du zwar den Winkel nicht im Klartext (sondern ein vielfaches davon), dafür kommst du aber ohne Gleitkommaarithmetik aus und sparst so Rechenzeit.
Dieser Winkel wird allerdings sehr schnell wegdriften (innerhalb 1-2s). Deswegen braucht man einen ACC (Accelerometer / Beschleunigungssensor), mit dem man den richtigen Winkel bestimmen kann. Allerdings misst dieser alle Art von Beschleunigung und ist deshalb stark verrauscht.
Um nun einen korrekten Winkel zu bekommen, bedient man sich der Vorteile beider Sensoren.

Gyro:
+ schnell
+ kaum Rauschen
+ keine Auswirkungen von Vibrationen
- ständiger Drift
- Quantisierungsfehler

ACC:
+ misst absoluten Winkel
+ kein Drift
- starkes Rauschen
- misst alle Beschleunigungen

Man braucht einen Algo, um die beiden Sensorwerte zu fusionieren, da gibts u.a. den Komplementärfilter, Kalmanfilter, usw...
Der Komplementärfilter arbeitet einfach aber sehr gut (wenn er richtig eingestellt ist), ist einfach zu implementieren und braucht kaum Rechenzeit. Der Kalmanfilter dagegen soll besser Ergebnisse liefern, ist aber auch deutlich schwieriger zu verstehen / implementieren und braucht auch mehr Rechenzeit.
Der Filter ist dazu da, den Drift des Gyro und das Rauschen des ACCs zu eliminieren und daraus den richtigen Winkel zu berechnen.
Ein Ansatz eines Komplementärfilters wäre:


a = 0.98
Winkel = a * (Winkel + Gyro) + (1-a) * ACC_Winkel

A ist sozusagen die Zeitkonstante der Filter (Hoch- und Tiefpass), Gyro ist der Gyro-Wert, ACC_Winkel ist der Winkel berechnet vom ACC-Sensor (z.b. per ATN) und Winkel ist der berechnete Winkel aus beiden Sensoren.
Der Gyro und ACC-Wert muss evtl. noch angepasst werden, sodass die Größenordnung beider Werte gleich ist.

Gruß
Chris

CCP1CON
02.06.2013, 13:21
Bei mir sieht das eher so aus!? :


a = 0.98;
Winkel = a *(Winkel +Gyro *dt) + (1-a) *ACC_Winkel;

Che Guevara
02.06.2013, 19:53
Hi,

ja da hab ich wohl nen kleinen Fehler reingeschrieben, wird korrigiert ;)

Gruß
Chris

Virtuelx
11.06.2013, 22:37
Danke euch!
Habs jetzt raus :).