- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: MultiIO & RP6M256 - GYRO-Demo

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Anzeige

    Powerstation Test
    @Dirk,

    tolle anleitung...

    irgendwie funktioniert sie aber hier bei mir nicht. Hier die daten aus der RP6control_orientation.h

    ursprüngliche werte:

    Code:
    // L3GD20 gyroscope: 
    #define I2C_MULTIIO_L3GD20_ADR        0xd6        // Default (SDO -> VCC) 
    //#define I2C_MULTIIO_L3GD20_ADR        0xd4        // SDO -> GND 
     
    // L3GD20 gyroscope calibration data: 
    #define MAX_X                        20000        // Max. X-axis value 
    #define MIN_X                        -20000        // Min. X-axis value 
    #define OFFSET_X                    0        // Offset X-axis 
    #define MAX_Y                        20000        // Max. Y-axis value 
    #define MIN_Y                        -20000        // Min. Y-axis value 
    #define OFFSET_Y                    0        // Offset Y-axis 
    #define MAX_Z                        20000        // Max. Z-axis value 
    #define MIN_Z                        -20000        // Min. Z-axis value 
    #define OFFSET_Z                    0        // Offset Z-axis 
     
    // L3GD20 temperature sensor definitions: 
    //#define GET_TEMP                            // Use temperature sensor 
    //#define OFFSET_TEMP


    werte nach der kalibrierung mittels der demo_05_02:

    Code:
    // L3GD20 gyroscope: 
    #define I2C_MULTIIO_L3GD20_ADR        0xd6        // Default (SDO -> VCC) 
    //#define I2C_MULTIIO_L3GD20_ADR        0xd4        // SDO -> GND 
     
    // L3GD20 gyroscope calibration data: 
    #define MAX_X                        20000        // Max. X-axis value 
    #define MIN_X                        -20000        // Min. X-axis value 
    #define OFFSET_X                    3625        // Offset X-axis 
    #define MAX_Y                        20000        // Max. Y-axis value 
    #define MIN_Y                        -20000        // Min. Y-axis value 
    #define OFFSET_Y                    364        // Offset Y-axis 
    #define MAX_Z                        20000        // Max. Z-axis value 
    #define MIN_Z                        -20000        // Min. Z-axis value 
    #define OFFSET_Z                    1073        // Offset Z-axis 
     
    // L3GD20 temperature sensor definitions: 
    //#define GET_TEMP                            // Use temperature sensor 
    //#define OFFSET_TEMP
    nach der kompilierung der demo_05_02 mit den originalwerten driften alle drei achsen recht schnell weg, nach der kompilierung mit den werten nach der kalibration stehen die werte dauerhaft bei

    (normalize L3GD20() ist in der demo_05_02 auskomentiert, also mit"//" versehen)

    x -31,7
    y -3,2
    z -9,3

    wenn ich die "//" bei normalize L3GD20() in der demo_05_02 entferne, stehen alle drei werte bei 0.0


    /#define CALIBRATION ist in beiden fällen auskomentiert


    was läuft da schief?
    gruß inka

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,

    nach der kompilierung der demo_05_02 mit den originalwerten driften alle drei achsen recht schnell weg,
    Soweit ok.

    nach der kompilierung mit den werten nach der kalibration stehen die werte dauerhaft bei
    (normalize L3GD20() ist in der demo_05_02 auskomentiert, also mit"//" versehen)
    x -31,7
    y -3,2
    z -9,3
    Nach dem ERSTEN Eintragen der OFFSET-Werte (Punkte 1 bis 3) wird die Neukompilierung MIT der Funktion normalizeL3GD20() in der Demo gemacht, um die 1. Kalibrierung zu prüfen (Punkte 4 bis 6, auch beim Wiederholen der Kalibrierung ab Punkt 3).

    wenn ich die "//" bei normalize L3GD20() in der demo_05_02 entferne, stehen alle drei werte bei 0.0
    Das ist gut und sollte nach erfolgreicher Kalibrierung bei ruhig stehendem RP6 auch so sein.

    /#define CALIBRATION ist in beiden fällen auskomentiert
    Nein, CALIBRATION sollte zur Kalibrierung NICHT auskommentiert, also definiert sein.

    was läuft da schief?
    Anleitung evtl. nicht 1:1 nachvollzogen?
    Gruß
    Dirk

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von Dirk Beitrag anzeigen
    Nach dem ERSTEN Eintragen der OFFSET-Werte (Punkte 1 bis 3) wird die Neukompilierung MIT der Funktion normalizeL3GD20() in der Demo gemacht, um die 1. Kalibrierung zu prüfen (Punkte 4 bis 6, auch beim Wiederholen der Kalibrierung ab Punkt 3).
    habe den rp6 jetzt nicht zu hand, werde es morgen aber überprüfen


    Zitat Zitat von Dirk Beitrag anzeigen
    Das ist gut und sollte nach erfolgreicher Kalibrierung bei ruhig stehendem RP6 auch so sein.
    Aber die anzeige verändert sich auch beim drehen des rp6 nicht!


    Zitat Zitat von Dirk Beitrag anzeigen
    Nein, CALIBRATION sollte zur Kalibrierung NICHT auskommentiert, also definiert sein.
    hier war es so gemeint, dass die kalibration abgeschlosseh ist, daher wieder auskomentiert


    Zitat Zitat von Dirk Beitrag anzeigen
    Anleitung evtl. nicht 1:1 nachvollzogen?
    s.o.

    seit wann geht das "doppelquoten"(man sieht auch das was der vor/vor autor geschrieben ha) im forum nicht? Zu verständlichkeit trägt es nicht gerade bei...
    gruß inka

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    @Dirk,

    also die nochmalige kalibrierung des gyros mit der demo_05_02 ergab fast identische werte.

    - wenn ich bei der demo 05_01 und der demo 05_02 nicht kalibrieren will, sondern die vom gyro gemessenen werte nur anzeigen will, muss ich in beiden fällen die zeile "#define CALIBRATION" auskommentieren. Stimmt?

    - dann wird in der while(true) schleife der abschnitt zwischen "#ifdef CALIBRATION" und "else" übersprungen und nur das "display part" ausgeführt:

    Code:
    // Display part: 
                setCursorPosLCD(0, 0);        // line 1 
                writeStringLCD_P("X"); 
                writeDoubleLCD(xdpsg, 6, 1); 
                writeStringLCD_P("   "); 
                setCursorPosLCD(0, 8);        // line 1 pos 9 
                writeStringLCD_P("Y"); 
                writeDoubleLCD(ydpsg, 6, 1); 
                writeStringLCD_P("   "); 
                setCursorPosLCD(1, 0);        // line 2 
                writeStringLCD_P("Z"); 
                writeDoubleLCD(zdpsg, 6, 1); 
                writeStringLCD_P("   ");
    das stimmt doch auch, oder?

    - müsste in diesem fall in diesem displaypart nicht noch am anfang die zeile "readL3GD20();" hinzu? Und wie ist es mit dem "gyrotask"? Muss diese nicht auch aufgerufen werden? Oder zumindets "resetgyro"?

    ich habe jetzt auf jeden fall in der demo_05_01 die zeile "readL3GD20();" hinzugefügt, die demo zeigt dann veränderungen in allen drei achsen an, je nachdem wie ich der robby drehe. Die im ruhezustand angezeigten werte der drei achsen (bei demo_05_01) sind natürlich nicht bei 0.0, weil ja der rest nicht kalibriert ist, aber der sensor reagiert immerhin...

    dass sich die anzeige bei auskommentierterm define fürs kalibrieren überhaupt nicht rührte, hat mich schon sehr iritiert...

    die demo_05_02 ist gut geeignet für die kalibrierung des gyros. Hast Du evtl. noch etwas womit man vergleichbar "einfach" den accelerator und magnetometer kalibrieren könnte? Ich weiss nicht ob man der minIMU irgendwie vorgaugeln kann dass sie gedreht wird und sie dann die min/max werte für die kalibrierung auf dem display ausgibt?
    gruß inka

  5. #15
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,
    Ich weiss nicht ob man der minIMU irgendwie vorgaugeln kann dass sie gedreht wird und sie dann die min/max werte für die kalibrierung auf dem display ausgibt?
    Nein, die IMU muss schon real bewegt werden!
    Es gibt aber Kalibrierungs-Programme, die die Min/Max-Werte beim Drehen selbst "einsammeln" und ausgeben.
    Ein Beispiel gab es glaube ich für die orangutan-Plattform. Geh mal suchen.
    Gruß
    Dirk

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Hi Dirk,
    treffen den meine annahmen/fragen:

    müsste in diesem fall in diesem displaypart nicht noch am anfang die zeile "readL3GD20();" hinzu? Und wie ist es mit dem "gyrotask"? Muss diese nicht auch aufgerufen werden? Oder zumindets "resetgyro"? Und an welcher stelle? In der while(true) schleife oder schon davor?
    zu? Oder habe ich damit nur einen an einer anderen stelle von mir gemachten fehler korrigiert?
    gruß inka

  7. #17
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,

    im "calibration part" ist ja readL3GD20() zum Einlesen der Gyro-Daten und (optional, zuerst auskommentiert) normalizeL3GD20() zum Normalisieren drin.
    Im "Display part" ist die task_GYRO() drin, diese Funktion enthält einen eigenen Programm-Teil zum Einlesen der Daten (anstelle von readL3GD20() ) und normalizeL3GD20() zum Normalisieren.

    Somit gibt es in beiden Versionen einen Teil zum Einlesen der Daten und zum Normalisieren.
    Beim "Display part" findet das Einlesen, Normalisieren und die Auswertung der Daten (mit der task_GYRO() ) nicht hinter der Kommentarzeile "// Display part:" statt, sondern DAVOR in diesem Bereich:
    Code:
    #ifndef CALIBRATION
    		task_I2CTWI();
    		task_GYRO();
    #endif
    Gruß
    Dirk

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Hi Dirk,

    damit wir vom gleichen reden, hier die while schleife der demo_05_02 (im originalzustand in dem ich das runtergeladen habe):

    Code:
    while(true)  
        { 
    #ifndef CALIBRATION 
            task_I2CTWI(); 
            task_GYRO(); 
    #endif 
            task_I2CTWI(); 
            if(getStopwatch1() > 500) // 500ms 
            { 
    #ifdef CALIBRATION 
                // GYRO calibration part: 
                readL3GD20();                        // Get sensor values 
                //normalizeL3GD20(); 
                setCursorPosLCD(0, 0);        // line 1 
                writeStringLCD_P("X"); 
                writeIntegerLCD(x_axisg, DEC); 
                writeStringLCD_P("   "); 
                setCursorPosLCD(0, 8);        // line 1 pos 9 
                writeStringLCD_P("Y"); 
                writeIntegerLCD(y_axisg, DEC); 
                writeStringLCD_P("   "); 
                setCursorPosLCD(1, 0);        // line 2 
                writeStringLCD_P("Z"); 
                writeIntegerLCD(z_axisg, DEC); 
                writeStringLCD_P("    "); 
    #else 
                // Display part: 
                setCursorPosLCD(0, 0);        // line 1 
                writeStringLCD_P("X"); 
                writeDoubleLCD(xdg, 6, 1); 
                writeStringLCD_P("   "); 
                setCursorPosLCD(0, 8);        // line 1 pos 9 
                writeStringLCD_P("Y"); 
                writeDoubleLCD(ydg, 6, 1); 
                writeStringLCD_P("   "); 
                setCursorPosLCD(1, 0);        // line 2 
                writeStringLCD_P("Z"); 
                writeDoubleLCD(zdg, 6, 1); 
                writeStringLCD_P("   "); 
    #endif 
                setStopwatch1(0); 
            } 
     
        }
    ich finde im displaypart kein "task_gyro", nur fürs kalibrieren...

    hier

    Code:
    #endif 
            task_I2CTWI(); 
            if(getStopwatch1() > 500) // 500ms
    müsste die zeile doch dabei sein, oder?

    das davor gehört doch zu kalibration?
    gruß inka

  9. #19
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,
    das davor gehört doch zu kalibration?
    Das davor, also das hier:
    Code:
    #ifndef CALIBRATION 
            task_I2CTWI(); 
            task_GYRO(); 
    #endif
    ... gehört NICHT (#ifndef) zur Kalibrierung, sondern zur Anzeige.
    Gruß
    Dirk

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. MultiIO - Wetter Library und Demo V1.0
    Von Dirk im Forum Robby RP6
    Antworten: 6
    Letzter Beitrag: 18.07.2013, 14:39
  2. RP6M256 SD-Karte
    Von Gerhard M im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 28.10.2012, 20:37
  3. Verkaufe [V] IC's & Diverse Platinen & SPS & Thin Clients & Display 6.4" Touch
    Von Noy im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 0
    Letzter Beitrag: 14.01.2012, 02:43
  4. Bascom & RN-Control Demo funzt nicht
    Von lineage im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 10.02.2010, 22:59
  5. MD22 I2C Demo für C-Control I v1.1 & v2.02
    Von Windt H.J. im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 0
    Letzter Beitrag: 29.07.2005, 23:37

Berechtigungen

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

Solar Speicher und Akkus Tests