Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Nils Gageik Luft- und Raumfahrtlabor IMU, I2C, Quaternionen.

Ähnliche Präsentationen


Präsentation zum Thema: "Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Nils Gageik Luft- und Raumfahrtlabor IMU, I2C, Quaternionen."—  Präsentation transkript:

1 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Nils Gageik Luft- und Raumfahrtlabor IMU, I2C, Quaternionen

2 Inhalt: (1) Organisatorisches (2) IMU & Messprinzip (3) I²C, Inter-Integrated Circuit (4) HAL I²C (5) Was sind Quaternionen? (6) Vor- und Nachteile von Quaternionen (7) Implementierung & Framework (8) Aufgaben 1-4 (9) Programmierhilfen Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Inhalt Nils Gageik

3 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Intro Aufgabe Nils Gageik Sense (5)Filter (8) Control (9-11) TM /TC (6,7)

4 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Intro Laborplan Nils Gageik Laborplan: 90 Punkte Laborübungen + 10 Punkte Beteiligung Vorlesung = 100 Punkte Total

5 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Intro Benotung Nils Gageik 5 Aufgabenblöcke mit abschließendem Testat: - Sense (5)10 Punkte - TM / TC (6,7)10 Punkte - Filter (8)10 Punkte - Control 1 (9, 10)15 Punkte - Control 2 (11)15 Punkte __________________________________________ 60 Punkte 30 Punkte (Atheel) 10 Punkte (Vorlesung) __________________________________________ 100 Punkte

6 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Intro Benotung Nils Gageik Benotung: - Abgabe: Ende des Blocks, beim nächsten Übungstermin allerspätestens Ende Juli - Mehr als 1 Woche Verzug bedeutet Punktabzug - Je schneller, desto besser - System muss grundsätzlich funktionieren für Abgabe - Benotung nach Verständnis (Testat) und Qualität des Resultats (ggf. Abzug für Mängel) - Konzentriert euch auf das Wesentliche - Punkte entsprechen praktischer Leistung und Fragen: gute Antwort / schlechte Antwort - Geprüft wird Codeverständnis & Theorie (Folien)

7 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Intro Benotung Nils Gageik Fragen: - Nutzt die 2h während der Übung! Allgemeines (Rodos, MCU): Atheel, Michael - Büro: Geb. 54/2, 3. OG (links)

8 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense IMU Nils Gageik

9 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense IMU Nils Gageik IMU3000 oder Digital Combo Board 6DOF: - ADXL345 Accelerometer 3DOF (AnalogDevices) - ITG3200 bzw. IMU Ansteuerung per I²C - Datenblätter auf dem Server: Z:\public\Data Sheets

10 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Messprinzip Corioliskraft Nils Gageik

11 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Messprinzip Gyroskope Nils Gageik Gyrometer: ITG DOF Digital Gyrosensor MEMS: Mikro-Elektro-Mechanisch Drehratensensor: Winkel durch Integration über die Zeit Messung kapazitiv

12 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Messprinzip Nils Gageik Accelerometer: ADXL345 Feder-Masse Prinzip MEMS: Mikro-Elektro-Mechanisch Aus Silizium Beschleunigung wird kapazitiv gemessen

13 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense TWI Nils Gageik I²C, Inter-Integrated Circuit = TWI, Two-wire: - Serieller Master-Slave-Bus - Vorteile: günstig, wenige Verdrahtungen - 2 Busleitungen: SCL (serial clock), SDA (serial data line) - Vorteile: einfach, günstig, wenige Verdrahtungen - Nachteile: störanfällig, geringe Leitungslänge - Taktmodi: Standard bis 100 kHz, Fast Mode bis 400 kHz - Übertragungsrate: max. 3,4 Mbit/s (relativ langsam)

14 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense TWI Nils Gageik TWI / I²C Ablaufschema: ©

15 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense I²C Ablaufschema Nils Gageik I²C Datenaustausch: - Startsignal - 1 Byte Adresse (7bit) + R/W (1bit = 1 für Write) - ACK (vom Slave) - Byteweise Datenpakete je quittiert mit ACK - Stopsignal Die genannte Adresse ist die I²C/TWI Slave Adresse des angesprochen Teilnehmers.

16 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense I²C Implementierung Nils Gageik Datenpackete: - 1. Anfangsadresse (Master nennt Registeradresse des Slaves) - 2. Datenbytes (W: Master sendet, R: Slave sendet) - Bei Burstmode werden mehrere Bytes von einer Anfangsadresse angefangen übertragen. Implementierung: - Verwendung der HAL (hardware abstraction layer, s.u.) - Alle Adresse stehen in den Datenblättern - TWI-Adressen: ITG: S. 18 und ADXL: S.10 - Register-Adressen: ITG: S. 22 und ADXL: S.14 - Schreiben ist Daten an den Slave / Sensoren senden - Lesen ist Daten vom Slave / Sensoren empfangen - Um zu Lesen macht man WriteRead, da man zunächst schreiben muss, was man (welches Register) lesen will.

17 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense HAL I²C Nils Gageik HAL I2C: Liefert schon komplette I2C Funktionalität HAL_I2C i2c1(I2C_IDX1);// Objekt anlegen Zum Lesen (Sensormessungen): i2c1.writeRead() Zum Schreiben (Sensoren einstellen): i2c1.write() Zum Initialisieren: i2c1.init() Zum Reseten: i2c1.reset()

18 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Nils Gageik HAL I2C: i2c1.write(const uint8_t addr, const uint8_t* txBuf, uint32_t txBufSize) Schreiben: addrI2C Adresse des Gerät (Slave) txBufSendebuffer (was man schreiben will) txBufSizeGröße, wie viele Bytes geschrieben werden Rückgabewert gibt Fehler an: HAL_I2C_ERR_START = -1,HAL_I2C_ERR_STOP = -2, HAL_I2C_ERR_WRITE = -3,HAL_I2C_ERR_READ = -4, HAL_I2C_ERR_ADDR = -5,HAL_I2C_ERR_NOT_MASTER = -6, Wichtig!Rückgabewert überprüfen! Sense HAL I²C

19 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Nils Gageik HAL I2C: i2c1.writeRead(const uint8_t addr, const uint8_t* txBuf, uint32_t txBufSize, uint8_t* rxBuf, uint32_t rxBufSize) Schreiben + Lesen ohne Unterbrechung: addrI2C Adresse des Gerät (Slave) txBufSendebuffer (was man schreiben will) txBufSizeGröße, wie viele Bytes geschrieben werden rxBufLesebuffer (wohin empfangene Daten kommen) rxBufSizeGröße, wie viele Bytes gelesen werden Wichtig!Rückgabewert überprüfen!-> Fehler ausgeben Sense HAL I²C

20 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Nils Gageik HAL I2C: Mit der Funktion void reset_i2c() kann bei einem Fehler der I2C resetet werden. Funktioniert nicht, wenn Sensor hängt -> Power On/Off Sense HAL I²C

21 Quaternionen (1): Prof. Sergio Montenegro Lehrstuhl Informatik 8 Nils Gageik Eigenes Zahlensystem (4D) Jedes Quaternion besteht aus einem Skalarteil x 0 und Vektorteil x = [x 1, x 2, x 3 ] Quaternionenmultiplikation (nicht kommutativ): Quaternionen Was sind Quaternionen?

22 Quaternionen (2): Prof. Sergio Montenegro Lehrstuhl Informatik 8 Quaternionen Was sind Quaternionen? Nils Gageik Die Orientierung eines Körpers im dreidimensionalen Raum lässt sich durch ein Quaternion eindeutig beschreiben. Rotation eines Vektors v: Umrechnung in Rotationsmatrix: RPY (Φ,Θ,Ψ) in Quaternionen:

23 Quaternionen (3): Prof. Sergio Montenegro Lehrstuhl Informatik 8 Nils Gageik Q: Eugenia Schwamberger Quaternionen Was sind Quaternionen?

24 Vor- und Nachteile: Prof. Sergio Montenegro Lehrstuhl Informatik 8 Nils Gageik Redundante Elemente Anschau- lichkeit Singuläre Stellen Performance Rotationsmatrix6geringneingut Euler-Winkel0gutjaschlecht Drehvektor & Drehwinkel 1geringja- Quaternionen1sehr geringneinsehr gut Quaternionen Vor- und Nachteile

25 Implementierung: Prof. Sergio Montenegro Lehrstuhl Informatik 8 Nils Gageik Mittel der Wahl: Rotationsmatrix und/oder Quaternionen für Berechnungen Euler-Winkel nur für Darstellung (keine kontinuierliche Darstellung) Kochrezept (Bestimmung der Orientierung mit einer IMU): 1.) Gyroskop liefert Drehraten ω 2.) Integration der Drehraten liefert Winkel, aber Rotationen müssen infinitesimal in jedem Zeitschritt „aufrotiert“ werden, denn Rotationen sind nicht kommutativ, deshalb: Δφ = ω · T 3.) Δφ -> dq (Transformation z.B. als RPY/DCM in Quaternion) 4.) Normieren 4.) Orientierungsquaternion Q(n+1) = Q(n)  dq 5.) Normieren Quaternionen Implementierung

26 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Framework Nils Gageik Framework: STM32F4_RODOS_Template Qopter_Sense.cpp -> Main + Sense -> Darin arbeitet ihr heute (primär) myStructs.h -> Datenstrukturen myTopics -> Globals wie Topics, ComBuffer, globale Variablen

27 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Framework Nils Gageik Mathelibrary: Project: support_libs -> matlib.cpp Vector3D Addition von Vektoren etc. implementiert YPR bzw. RPY Quaternion q Mit Vorsicht benutzen Quaternionenmultiplikation: q = q * dq;

28 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Sensorkonfiguration Nils Gageik Konfiguration der Sensoren: Damit die Sensoren gut bzw. überhaupt arbeiten, sind diese vorab per I²C zu konfigurieren. Folgende Konfiguration wird vorgeschlagen: Stelle per Write dazu folgende Werte in den Registern ein (vgl. Datenblätter), um die Sensoren einzustellen. ITG: ADDR = 0x16, VALUE = 0x18// DLPF, SCALE ITG: ADDR = 0x3E, VALUE = 0x01// PM, x Gyro Ref ADXL: ADDR = 0x2D, VALUE = 0x08// POWER CTRL ADXL: ADDR = 0x31, VALUE = 0x09// DATA FORMAT

29 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Aufgabe 1 Nils Gageik Vorbereitung: Lade alle nötigen Dateien vom Server: Serveradresse: \\galileo.informatik.uni-wuerzburg.de\gast\\galileo.informatik.uni-wuerzburg.de\gast Alternativ: \\ \gast\\ \gast Du findest die Dateien unter: \SS 2016\LR Labor Du benötigst das STM Quadrocopter Control System Framework mit Eclipse: STM_QCS.rar Dies ist das Framework aus der vorherigen Übungen auf das Problem angepasst und um nötige Hilfen / Funktionen erweitert. Wie du arbeitest, bleibt dir überlassen. Es wird empfohlen diese QCS Vorlage mit Eclipse zu verwenden. Insbesondere bei der Fehlersuche und Analyse kann das später sehr hilfreich sein.

30 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Aufgabe 1 Nils Gageik Aufgabe 1: Benutze das Framework (Projekt RODOS Template) und Rodos um die Sensoren anzusteuern: a) Guck dir alle Dateien an und versuche ihren Zweck zu verstehen. Mach dir einen Überblick. Du kannst jetzt Fragen stellen. Später musst du alles erklären können. b) Initialisiere I²C #1 und bestimme die I²C-Adressen der Sensoren aus den Datenblättern. c) Zunächst konfiguriere die Sensoren wie auf Folie 23 beschrieben. Denk daran I²C-Fehler abzufangen und anzuzeigen. d) Lies die Messdaten (3 DOF Drehrate & Beschleunigung) aus. Speichere diese in einem Struct.

31 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Hinweis zu I²C Nils Gageik Hinweis zu I²C: Der I²C-Bus ist sehr fehleranfällig. Es sollte sichergestellt werden, dass kein Thread auf den I²C-Bus zugreifen möchte, bevor dieser initialisiert ist. Dies kann durch ein entsprechendes Flag (i2c_init) geschehen. Der Zugriff auf den I²C-Bus (Adresse des HAL_I2C Objekts: HAL_I2C * i2c) muss ggf. anderen Threads möglich sein. In der Datei myStructs.h in der Struktur I2C_Data ist dazu eine Datenstruktur hinterlegt. Buffer und Rückgabewerte sind dort auch angelegt. Es wird empfohlen diese oder etwas Vergleichbares zu benutzen. Es sollten nicht zu viele Threads I2C benutzen, um Probleme vorneherein auszuschließen.

32 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Aufgabe 2 Nils Gageik

33 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Aufgabe 3 Nils Gageik Aufgabe 3 : Berechne mit Hilfe des ITGs den Drehwinkel (3x1D, vereinfacht). Bei einer 90-Grad Drehung sollten auch 90 Grad angezeigt werden. Hinweis: Mit den PeriodicBeat Funktionen lässt sich das Timing sehr einfach gewährleisten. Benutze eine feste Laufzeit: setPeriodicBeat(0, SENSE_SAMPLE_TIME*MILLISECONDS); suspendUntilNextBeat();

34 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Aufgabe 4 Nils Gageik Aufgabe 4 : Bestimme nun fortlaufend die Orientierungsänderung im dreidimensionalen Raum mit Hilfe von Quaternionen. Lass dir das resultierende Quaternion fortlaufend in Eulerwinkeln ausgeben. Vergleiche das Ergebnis mit der vereinfachten Integration ohne Quaternionen. Was stellst du fest?

35 Prof. Sergio Montenegro Lehrstuhl Informatik 8 Framework Hinweis Programmierhilfen Nils Gageik Hier ein paar Tipps, die das Leben leichter machen. Wer noch mehr hat oder was vermisst, kann mir eine schreiben: Strg halten + Linke Maustaste oder F3 und dabei Typ / Variable / Funktion selektieren -> Sprung zur Deklaration Strg + Leertaste (Autovervollständigung) Strg + B (Build all) Strg + Alt + H oder Rechtsklick -> Open Call Hierarchie Vorher eine Funktion auswählen, dann wird angezeigt, wo diese überall aufgerufen wird. Strg + Alt + Pfeiltaste hoch/runter: Zeile kopieren und oben/unten einfügen Wenn etwas nicht geht, hilft es manchmal, das Projekt neu zu öffnen (Import) und zu kompilieren. Leider werden Referenzen aus anderen Projekte nicht gefunden.


Herunterladen ppt "Prof. Sergio Montenegro Lehrstuhl Informatik 8 Sense Nils Gageik Luft- und Raumfahrtlabor IMU, I2C, Quaternionen."

Ähnliche Präsentationen


Google-Anzeigen