www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kalman Lagebestimmung BMA180 ITG3200


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte auf gaaaanz Lange Sicht mal einen Oktokopter bauen. Habe mir 
jetzt ohne viel Ahnung von der Materie zu haben einen BMA180 
Beschleunigungssensor und einen ITG3200 Gyrosensor bei Sparkfun gegönnt. 
Ich kann die beiden Sensoren auch schon mit I2C auslesen. Auf Dauer soll 
halt auch GPS und ein Luftdrucksensor rein.
Nun ist die Frage, was mache ich mit den Sensordaten.

Ich habe gelesen, dass man die Sensordaten wohl am besten mit einem 
Kalmanfilter vereint. Kennt jemand ein Tutorial oder ein Buch welches 
den Filter erklärt? Ich möchte eigentlich keinen fertigen Code abtippen 
ohne Ihn zu verstehen. Schön wäre eine Erklärung die sowohl auf die 
Mathematik dahinter als auch auf eine Implementation auf einem µC 
eingeht.

Noch eine weitere Frage:
Wie kalibriere ich diese Sensoren sinnvoll. Selbst in Ruhelage ändern 
sich die Werte der Beschleunigungs/Drehratenregister ständig in einem so 
nicht erwarteten Bereich.

Und noch eine Frage: Die beiden Sensoren haben Temperatursensoren 
integriert. Gehe ich recht in der Annahme, dass diese nicht die 
Außentemperatur sondern die Chiptemperatur messen?

Schonmal Danke für eure Anregungen ;)
Mfg Peter

Autor: Wolfgang H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe auch einen ITG3200 und weiß nicht wie ich diesen kalibiriere. 
Bitte da auch um Hilfe.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaut mal hier vorbei...
http://tom.pycke.be/mav/71/kalman-filtering-of-imu-data
http://tom.pycke.be/mav/70/gyroscope-to-roll-pitch-and-yaw
http://tom.pycke.be/mav/69/accelerometer-to-attitude

Peter schrieb:
> Noch eine weitere Frage:
> Wie kalibriere ich diese Sensoren sinnvoll. Selbst in Ruhelage ändern
> sich die Werte der Beschleunigungs/Drehratenregister ständig in einem so
> nicht erwarteten Bereich.

Was heißt "in einem so nicht erwarteten Bereich"?

Tom

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube ich habe meinen Fehler gefunden. Wenn ich nur das MSB 
Register auslese kommen sinnvolle Werte raus.

Die Werte werden im 2er Komplement ausgegeben und das habe ich beim 
Bitshiften der 14 Bit Zahl nicht bedacht.
Das MSB Register belegt Bit 13-6 und das LSB Register 5-0(allerdings auf 
Bitpositionen 7-2). Wie kombiniere ich die beiden Werte in eine richtige 
unsigned short Variable?

Mfg Peter

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir sieht das ganze etwa so aus:

data->gyro_x_raw = ((data_received[3] << 8) | (data_received[4]));
data->gyro_y_raw = ((data_received[5] << 8) | (data_received[6]));
data->gyro_z_raw = ((data_received[7] << 8) | (data_received[8]));

gyro_x_raw ist als signed short int
und data_received als char deklariert.

gyro_x_raw / 14.375 ergibt dann die Drehrate in °/s

Tom

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

bei einem 16 bit Wert verstehe ich das schon, aber wenn ich nun 14 bit 
in die 16 bit variable reinpackte muss ich ja eigentlich noch um 2 nach 
rechts shiften, damit die jeweiligen bits an der richtigen Stelle sind. 
Durch den Bitshift zerstöre ich doch dann aber die 2er 
Komplementdarstellung, oder?

Mfg Peter

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Datenblatt S. 27:

8.6 Registers 27 to 34 – Sensor Registers
GYRO_XOUT_H/L 16-bit X gyro output data (2’s complement format)
GYRO_YOUT_H/L 16-bit Y gyro output data (2’s complement format)
GYRO_ZOUT_H/L 16-bit Y gyro output data (2’s complement format)

Da steht was von 16-Bit und bei mir funktionierts zumindest so.

Tom

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich beschäftige mich grad bei der Auswertung noch nicht mit dem Gyro 
sondern mit dem BMA180, der Gyro kommt erst als nächstes dran ;)

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> ITG3200 Gyrosensor

So eine Anmerkung. Der Sensor klingt zwar cool mit I2C und solchen 
Späßchen allerdings hat er einen Messbereich der absolut unnötig groß 
ist und damit eher unbrauchbar. +- 2000°/Sekunde
Bei einem Quadrocopter (bzw. Octo) sind +-300°/Sekunde mehr als 
ausreichend, da ansonsten die Auflösung darunter leidet. (bzgl. der ADC)
In meinen Augen wird's viele Probleme mit diesem Sensor geben aber ich 
habe selbst noch nicht mit ihm gearbeitet (auf Grund eben dieser 
Überlegungen). Allerdings würde mich interessieren ob du das mit diesem 
Sensor auch hinbekommst. Wäre super wenn du dich mal nochmal melden 
würdest.

Gleiches gilt für den Kalmanfilter. Die meisten verwenden ihn einfach 
aber wirklich verstehen tun ihn glaube ich die wenigsten. Es wäre z.B. 
super, wenn du ein Tutorial machen könntest (ausformuliert für 
Nicht-Mathematiker / Dummies) wo der Kalmanfilter erklärt wird. Die 
meisten bezeichnen ihn als "Magic Box" oder so ähnlich =)

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> Ich beschäftige mich grad bei der Auswertung noch nicht mit dem Gyro
> sondern mit dem BMA180

Ok. Das würde natürlich erklären wie du auf 14-Bit kommst ;)

Als Beschleunigungssensor hab ich den ADXL345 der mit 10-Bit arbeitet. 
Und das gute Stück lese ich wie die Gyros. Allerdings kann man dem auch 
über das Justify Bit (A setting of 1 in the justify bit selects left 
(MSB) justified mode, and a setting of 0 selects right justified mode 
with sign extension) beibringen wie er die Daten zu schicken hat.

Tom

Autor: tomtom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ein Tipp von mir, benutzt statt dem I2C lieber den SPI, ist 
sicherer und schneller...

Autor: Wolfgang H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Lehrmann Michael

Welchen Gyro würdest du denn prinzipiell empfehlen?
Werde mein Glück aber erstmal mit dem ITG versuchen. Stehe ja eh ganz am 
Anfang der Pläne un das Ziel ist noch sehr fern.

Wenn ich das mit dem Kalman Filter irgendwann mal soweit habe, dass ich 
das alles verstehe, kann ich mein Wissen gern teilen. ;)

Mfg Peter

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Wolfgang H.

Vielleicht helfen ja diese beiden Links um zu vergleichen

Accelerometer: 
http://www.sparkfun.com/commerce/tutorial_info.php...

Gyro: 
http://www.sparkfun.com/commerce/tutorial_info.php...

und nich einen Link der die Funktion der IMU erklärt:

http://www.starlino.com/imu_guide.html

Autor: _Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
welchen g Bereich sollte man bei einem Beschleunigungssensor einstellen?

Autor: ala42 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
signed char MSB = ...
unsigned char LSB = ...
signed short result = (((signed short)MSB) << 6) | (LSB>>2);

Da MSB signed ist wird das Vorzeichen bei der Konvertierung auf signed 
short korrekt expandiert. LSB ist unsigned, damit beim Rechtsschieben 
das (nicht vorhandene) Vorzeichen nicht nachgezogen wird.

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

bin auch grad dabei nen Regler für meinen Tricopter zu programmieren auf 
Basis des XMega 128A1. Als Sensoren hab ich den ITG-3200 (Gyro) und den 
LIS3L02DQ (Accelerometer). Die Sensorfusion mache ich momentan mit einem 
Komoplementärfilter (einfach mal nach "The Balance Filter" googlen) und 
es funktioniert super! Das Gyro ist klasse! Wenig Drift (4° in 35 
Minuten) und wunderbare Auflösung ...

Momentan hab ich das Problem, dass der Sensor öfter mal "hängen" bleibt 
und der XMega "Arbitration lost" meldet. Trotz TWI Reset, Stop 
Condition, ... kommt der Sensor erst wieder in "Schwung", wenn ich einen 
Power-Cycle mache ... hat jemand von Euch auch schon ähnliche 
Erfahrungen gemacht?

Kabel sind ca. 15cm lang und 2.2k Pullups sind drin. Stromversorgung ist 
auch ok (mit dem Oszi gemessen).

Der Sensor ist auf dem Headerboard von Sparkfun (bezogen bei Watterott)

beste Grüße,
Michael

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich noch mal ... der Sensor wird mit eine Frequenz von 400Hz abgefragt 
(über den Data Ready Interrupt)

Grüße,
Michael

Autor: Busel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lehrmann Michael schrieb:
> Es wäre z.B.
> super, wenn du ein Tutorial machen könntest (ausformuliert für
> Nicht-Mathematiker / Dummies) wo der Kalmanfilter erklärt wird. Die
> meisten bezeichnen ihn als "Magic Box" oder so ähnlich =)

Ja, immer her damit.

Gibt es sowas schon für FFT ?

Autor: Franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

eine Dokumentation mit Beispielen zum Thema Kalman gibts bei NI :

http://digital.ni.com/worldwide/germany.nsf/web/al...


ciao

Franz

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.