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
Ich habe auch einen ITG3200 und weiß nicht wie ich diesen kalibiriere. Bitte da auch um Hilfe.
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
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
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
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
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
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 ;)
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 =)
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
Noch ein Tipp von mir, benutzt statt dem I2C lieber den SPI, ist sicherer und schneller...
@ 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
@Wolfgang H. Vielleicht helfen ja diese beiden Links um zu vergleichen Accelerometer: http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=167 Gyro: http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=167&sipp=1&page=2 und nich einen Link der die Funktion der IMU erklärt: http://www.starlino.com/imu_guide.html
welchen g Bereich sollte man bei einem Beschleunigungssensor einstellen?
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.
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
Hallo, ich noch mal ... der Sensor wird mit eine Frequenz von 400Hz abgefragt (über den Data Ready Interrupt) Grüße, Michael
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 ?
Hallo, eine Dokumentation mit Beispielen zum Thema Kalman gibts bei NI : http://digital.ni.com/worldwide/germany.nsf/web/all/E10103F0159A7F2EC12568E90057F03B ciao Franz
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.