- LiTime Speicher und Akkus         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 29

Thema: für Arduino / Due: Empfehlung für IMU / I2C Gyro Sensor

  1. #1
    HaWe
    Gast

    für Arduino / Due: Empfehlung für IMU / I2C Gyro Sensor

    Anzeige

    LiFePo4 Akku selber bauen - Video
    hallo,
    wer hier hat eine gute Empfehlung für eine IMU, die man mit einem Arduino Due und einem Breadboard betreiben kann ?

    Es sollte ein I2C Gyro Sensor sein, der intern durch eigene Filter (Kalman etc.) stabilisiert ist, evtl. durch Verwendung zusätzlicher weiterer Sensoren (wie z.B. Accelerometer und/oder Kompass).

    Der Gyrowert (wenigstens die Winkelgeschwindigkeit - oder möglicherweise auch bereits der Winkel) sollte also stabilisiert und gefiltert ausgegeben werden, indem man einfach I2C Register ausliest (z.B. 3x 16 oder 3x 24 bit für die 3 dim.), ohne dass weitere Berechnungen notwendig sind. Insb. muss der Sensor auch für den Due geeignet sein.

    MPU6050 u.ä. scheiden also aus, weil man zum Einen viel zu viel selber rechnen muss um zu verwertbaren Werten zu kommen, zum anderen oft AVR Timer verwendet werden, was die Sache unglaublich verkompliziert und gerade auch für den Due unbrauchbar macht. Außerdem hat er offenbar keine eingebauten Kalman-Filter, wie es nötig wäre. Ein einfaches selbst ausgelöstes I2C -read für devaddr + regaddr muss also reichen.

    Eine grundsätzliche Idee wäre z.B. dieser Chip als 1D-Gyro hier, leider ist der aber eben 1D und nicht direkt anschließbar und steuerbar mit Arduinos/Breadboards, außerdem scheint er auch UART/SPI zu haben und kein I2C:
    http://www.minfinity.com/eng/page.ph...=1&sub=1&tab=2

    Wer kennt was?
    Geändert von HaWe (06.03.2015 um 17:52 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    also der MPUxxxx scheidet eigentlich nicht aus (also nicht wegen dem o.g. Argument). Den gibts in der 6xxx Version mit Gyro + Acc und in der 9xxx Version mit Gyro + Acc + Compass.
    Er lässt sich einfach konfigurieren (DLPF, Scaling, etc) und beinhaltet einen DMP, der dir Quaterionen ausgibt.
    Musst mal danach googln, einige Projekte verwenden die DMP Daten.

    Gruß
    Chris

  3. #3
    HaWe
    Gast
    hallo,
    das wäre schön, wenn du Recht hast!
    Was jetzt Quaternionen sind, weiß ich nicht, bei allem was ich aber gefunden habe, muss man aber selber Kalman-Filter programmieren und Timer-Interrupts für I2C verwenden:
    http://playground.arduino.cc/Main/MPU-6050#sketch
    https://github.com/jrowberg/i2cdevli...rduino/MPU6050
    https://github.com/TKJElectronics/Ka...amples/MPU6050

    Ich Suche etwas, wo die Winkelgeschwindigkeit oder sogar der Winkel bereits intern durch Kalman berichtigt sind und man nur noch die gefilterten Werte auslesen muss (z.B. als 16- oder 24-bit Werte)

    Der Cruizcore-IMU legt sie z.B. als (edit: KALMAN-) gefilterte 16-bit-Werte in insg. 2 Bytes ab und man muss die 2 Bytes nur noch zu ints zusammensetzen (LoByte + 8x HiByte): die muss man dann noch über die Zeit integrieren um den Drehwinkel zu erhalten, das ist ntl. ok.

    Ich kenne diesen IMU im Prinzip sogar schon von Lego (als XG1300L): mehr als 2 Register-Bytes auslesen braucht man da also prinzipiell wirklich nicht zu machen, anschließend nur noch eben integrieren. Genau so soll es sein, also keine Riesen-libs etc., wozu auch, wenn die gefilterten Werte schon fertig in den Registern abgelegt sind?
    Geändert von HaWe (06.03.2015 um 17:53 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Der MPUxxxx gibt dir Winkelgeschwindigkeit, Beschleunigung und Temperatur aus (alles mit max. 8kHz), der DMP gibt Quaternionen mit 200Hz aus.
    Quaternionen findet man mit Google beim ersten Treffer, das ist eine andere Art der Darstellung der Orientierung im Raum, weil Euler zb das Problem mit dem Gimbal Lock hat, sie lassen sich aber relativ einfach in Euler-Winkel überführen.
    Winkelgeschwindigkeit, Temperatur und Beschleunigung liegen jeweils als 16Bit vor, ist also auch kein Aufwand das auszulesen! Mit dem DMP kenn ich mich nicht so aus.

  5. #5
    HaWe
    Gast
    für den MPU werden aber irgendwelche seltsamen AVR-I2C-libs mit AVR-IRQs verwendet, die für den Due nicht funktionieren, und ein Kalman ist eben nicht eingebaut, daher sind die abgelegten Werte für Winkelgeschwindigkeit, Temperatur und Beschleunigung höchstens ungefilterte raw-Werte.
    Damit ist es aber keine IMU, die selber bereits intern die Werte Kalman-bereinigt anbietet: darum geht es aber.
    Aus der bereinigten 3D-Winkelgeschwindigkeiten dann in einen 3D-Vektor zu berechnen, ist dann aber doch absolut kein Problem mehr, wozu brauche ich da Quaternionen?
    Andererseits, wenn der Kalman integriert wäre, warum würde sich dann jemand die Mühe machen, ein externes Kalman Programm dafür zu schreiben? ich glaube also kaum, dass der MPUxxxx das bereits integriert hat - darum geht es aber.

    (Der XG1300L bzw. R1350 hat den Kalman aber bereits integriert und legt die gefilterten 1D-Werte dann in 2 Registern ab, fertig, und so etwas Suche ich - nur eben 3D und per I2C.)

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hm, ich habs mir schonmal gedacht, entweder du liest nicht richtig oder bist beratungsresistent!
    Man braucht für den MPU WEDER eine spezielle Library NOCH muss man die Werte (Winkel als Quat.) selbst errechnen, den die WERDEN ausgegeben!!!!!!!

    EDIT:
    Achja, ob da drinnen ein Kalman am Werkeln ist oder nicht, weiß ich nicht, aber es gibt auch noch andere Filter, die sehr gut arbeiten. Außerdem warum sollte man, nur weil man die Daten schon fusioniert bekommt, nicht mal selbst einen Kalman schreiben? So schwierig ist das nicht und stell dir vor: man lernt dabei sogar noch was

  7. #7
    HaWe
    Gast
    dann wahrscheinlich begriffsstutzig.

    dann schreib mir bitte mal auf, wie der Sketch lautet, ohne irgendwelch libs verwenden zu müssen:

    der Sketch-Code würde wahrscheinlich so ähnlich wie folgt aussehen (Pseudo-Code, Syntax stimmt sicher nicht genau ):

    Code:
    while(1) {
      
      // dt ausrechnen;
      dt=millis()-oldtime;
      oldtime=millis();
    
      if Wire.available() {
        Wire.beginTransmission(devaddr);
        Wire.write(start_reg); // address MPU-reg.
        Wire.endTransmission();
    
        
        //...
        Wire.requestFrom(devaddr, 6); 
        // das müsste jetzt sicher anders geschrieben werden...
        int xw= (Wire.read(xreg1)+ 8* Wire.read(xreg2))*dt;
        int yw= (Wire.read(yreg1)+ 8* Wire.read(yreg2))*dt;
        int zw= (Wire.read(zreg1)+ 8* Wire.read(zreg2))*dt;
        
      }
      delay(20);
     
      // das wäre der komplette Code für die bereits intern Kalman-bereinigten Cruizcore-Sensoren.
      // so soll es - im Prinzip - funktionieren!
      
    }

    wie sähe das jetzt für den MPU aus (bitte den kompletten Code posten, ich verstehe nämlich nicht, wie das gehen soll)

    - - - Aktualisiert - - -

    ps, edit,

    mit fällt dazu gerade ein: der MPU hat einen Interrupt-Pin, der mit einem AVR-Interrupt getriggert werden msss - genau das geht aber nicht mit dem Due (CMIIW)


    edit 2, ich sehe, du hast es ja gerade noch nachgeschoben:
    was ich Suche ist eine IMU, die den Kalman bereits integriert hat, wie oben im TOP geschrieben, und wie es die betr. Cruizcode Sensoren ja auch haben.

    ich Suche eine IMU, die bereits Filter-kompensierte Werte ablegt, nichts wo selber noch gerechnet werden muss, wie ich ja ausführlich geschrieben habe.
    Geändert von HaWe (06.03.2015 um 17:34 Uhr)

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Also einmal probier ichs noch:
    Wenn du den MPU richtig einstellst (was nicht gerade schwierig ist), GIBT ER KOREKTE, DRIFTFREIE WINKEL AUS.
    Ob die jetzt mit Kalman oder Tante-Ema-Filter berechnet werden, sollte doch egal sein, solange sie richtig sind?!
    Auch den Interrupt musst du nicht benutzen, obwohl ich nicht verstehe, warum das mit deinem µC nicht funktionieren soll...

  9. #9
    HaWe
    Gast
    Mit dem Mega geht es (erster Link), sie sind aber als raw Werte extrem verrauscht, daher ist ein Kalman nötig.
    Ich habe es auch mit meinem Due probiert, klappte absolut nicht. Ich habe ihn exakt so verkabelt, wie mit dem mega.
    Ich hab von dem Ding mit seinen Monster-Libs auch die Nase voll (ich habe ihn inzwischen verschenkt), daher Suche ich eine Alternative mit integriertem Kalman, wie ich es ganz oben bereits beschrieben habe.

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Also das ist definitiv meine letzte Antwort hier, komme mir langsam verarscht vor!
    HIER: https://www.youtube.com/watch?v=Ge8L9f6rzA0
    sieht man EINDEUTIG, dass die ausgegeben Winkel nicht verrauscht sind und alles funktioniert, wie es soll.

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. RN-Vorschlag: 3D-Gyro + G-Sensoren (IMU)
    Von Reinald im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 30
    Letzter Beitrag: 17.10.2014, 15:15
  2. Suche i2c Gyro-Sensor
    Von Blimpiander im Forum Sensoren / Sensorik
    Antworten: 26
    Letzter Beitrag: 13.10.2010, 21:23
  3. suche software für IMU-5 Sensor
    Von avoid im Forum Software, Algorithmen und KI
    Antworten: 4
    Letzter Beitrag: 28.09.2009, 01:39
  4. Empfehlung für einen Sensor
    Von Sergius im Forum Sensoren / Sensorik
    Antworten: 4
    Letzter Beitrag: 27.04.2008, 02:28
  5. Antworten: 0
    Letzter Beitrag: 21.11.2005, 15:11

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus