- 12V Akku mit 280 Ah bauen         
Seite 5 von 6 ErsteErste ... 3456 LetzteLetzte
Ergebnis 41 bis 50 von 52

Thema: HDMM01 und die orientierungslib von Dirk

  1. #41
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Anzeige

    E-Bike
    @inka:
    Ich habe noch mal die Lib mit der M256 getestet. Die M32-Lib müßte eigentlich genauso funktionieren.

    Den "Fehler" mit der fixen Richtungsanzeige von ~270° kann ich nachvollziehen,- und zwar dann, wenn der Sensor noch nicht kalibriert wurde.
    Du müßtest also die Definitionen MAX_X_2DM, MIN_X_2DM, MAX_Y_2DM und MIN_Y_2DM in der RP6M256_Orientation.h an deine Hardware anpassen, d.h. den Sensor kalibrieren.
    Gruß
    Dirk

  2. #42
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    @Dirk:
    das mit der kalibrierung werde ich probieren, sobald ich an meine daten komme, habe momentan probleme mit meiner netzwerkplatte - nach einem heftigen gewitter war sie auf einmal weg
    gruß inka

  3. #43
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    @Dirk:
    habe jetzt die kalibrierung durchgeführt. nach dem eintragen in die "RP6Control_Orientation.h":

    Code:
    // 2D-Compass (HDMM01): 
     
    // MMC2120MG magnetometer: 
    #define I2C_MULTIIO_HDMM01_ADR        0x60        // Default 
     
    // MMC2120MG magnetometer calibration data: 
    #define MAX_X_2DM                    2016.0        // Max. X-axis value 2042.0 
    #define MIN_X_2DM                    1831.0        // Min. X-axis value 1863 
    #define BIAS_X_2DM                    (MAX_X_2DM + MIN_X_2DM) / 2.0 
    #define SF_X_2DM                    2.0 / (MAX_X_2DM - MIN_X_2DM) 
    #define MAX_Y_2DM                    2228.0        // Max. Y-axis value 2220 
    #define MIN_Y_2DM                    2028.0        // Min. Y-axis value 2040 
    #define BIAS_Y_2DM                    (MAX_Y_2DM + MIN_Y_2DM) / 2.0 
    #define SF_Y_2DM                    2.0 / (MAX_Y_2DM - MIN_Y_2DM)
    nach einer neukompilierung der "RP6Control_MultiIO_05.c" sind aber die ausgaben auf dem display fast identisch mit denen ohne kalibrierung. Auch die 270. So langsam bin ich am aufgeben...

    kann man in der "RP6Control_Orientation.h" irgendwelche extremwete eingeben um zu sehen ob es überhaupt eine reaktion des HDMM gibt?
    gruß inka

  4. #44
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @inka:
    2 Fragen:
    1. Kalibrierung wie hier beschrieben durchgeführt?
    2. Vor dem Neukompilieren "Make clean" gemacht bzw. die Files RP6Control_OrientationLib.lst und .o gelöscht?

    kann man in der "RP6Control_Orientation.h" irgendwelche extremwete eingeben um zu sehen ob es überhaupt eine reaktion des HDMM gibt?
    Ja, wäre möglich. Du kannst probeweise auch anders kalibrieren: Neige den RP6/Sensor in alle Richtungen und notiere dir die Min./Max.-Werte der beiden Achsen. Die trägst du dann in die RP6Control_Orientation.h ein.
    Andere Möglichkeit zur Fehlersuche: Die normalizeHDMM01() Funktion nicht nutzen, sondern die nicht normalisierten Werte direkt verwenden.
    Gruß
    Dirk

  5. #45
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    @Dirk:

    ich teste jetzt nur noch mit der RP6Control_MultiIO_05.c, die zeile mit "normalize" habe ich auskomentiert, statt Heading 270, wird Heading 0 angezeigt, ansosnten keine änderung zum positiven...

    Code:
    #ifdef COMPASS_2D
                // 2D-Compass test:
                task_I2CTWI();
                SRF02_getFirmware(CH_SRF02_1);
                intreg2dm = readHDMM01();            // Get sensor values
                task_I2CTWI();
                if(!intreg2dm) {                    // Data valid?
    //                normalizeHDMM01();                // Normalize data
                    heading2dm = headingHDMM01();    // Calculate heading
                    setCursorPosLCD(0, 0);        // line 1
                    writeStringLCD_P("Heading   ");
                    writeIntegerLCD(heading2dm, DEC);
                    writeStringLCD_P(" ");
                    writeStringLCD(dir);
                    writeStringLCD_P("  ");
                    setCursorPosLCD(1, 0);        // line 2
                    writeStringLCD_P("X ");
                    writeIntegerLCD(x_axis2dm, DEC);
                    writeStringLCD_P("  ");
                    setCursorPosLCD(1, 8);        // line 2 pos 9
                    writeStringLCD_P("Y ");
                    writeIntegerLCD(y_axis2dm, DEC);
                    writeStringLCD_P("  ");
                }
                task_I2CTWI();
                mSleep(3000);
    #endif
    Zitat Zitat von Dirk Beitrag anzeigen
    1. Kalibrierung wie hier beschrieben durchgeführt?
    ja

    Zitat Zitat von Dirk Beitrag anzeigen
    2. Vor dem Neukompilieren "Make clean" gemacht bzw. die Files RP6Control_OrientationLib.lst und .o gelöscht?
    alle dateien gelöscht...

    Zitat Zitat von Dirk Beitrag anzeigen
    Ja, wäre möglich. Du kannst probeweise auch anders kalibrieren: Neige den RP6/Sensor in alle Richtungen und notiere dir die Min./Max.-Werte der beiden Achsen. Die trägst du dann in die RP6Control_Orientation.h ein.
    Andere Möglichkeit zur Fehlersuche: Die normalizeHDMM01() Funktion nicht nutzen, sondern die nicht normalisierten Werte direkt verwenden.
    siehe oben, btw. der Y wert wird negativ (mit -) angezeigt...
    gruß inka

  6. #46
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @inka:
    ...die zeile mit "normalize" habe ich auskomentiert, statt Heading 270, wird Heading 0 angezeigt, ...
    So einfach geht es nicht, weil normalizeHDMM01() die Variablen x_axis2dm, y_axis2dm nutzt, um daraus die double Variablen x2dm, y2dm zu berechnen. Mit x2dm, y2dm wird dann die Richtung errechnet.
    Gruß
    Dirk

  7. #47
    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
    @inka:
    So einfach geht es nicht, weil normalizeHDMM01() die Variablen x_axis2dm, y_axis2dm nutzt, um daraus die double Variablen x2dm, y2dm zu berechnen. Mit x2dm, y2dm wird dann die Richtung errechnet.
    schaue ich mir an, scheint aber nicht so ganz trivial zu sein...


    Zitat Zitat von inka Beitrag anzeigen
    der Y wert wird negativ (mit -) angezeigt...
    wie ist es damit? ok?
    gruß inka

  8. #48
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @inka:
    Zitat von inka: der Y wert wird negativ (mit -) angezeigt... wie ist es damit? ok?
    Ja, die x_axis2dm, y_axis2dm Werte können auch negativ werden.
    Bei der Kalibrierung müßte man negative Minimal-Werte dann natürlich auch unter MIN_X_2DM und MIN_Y_2DM eintragen.
    Gruß
    Dirk

  9. #49
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    @Dirk:

    ich habe jetzt diese werte für X_2dm un Y_2dm eingetragen:

    Code:
    // MMC2120MG magnetometer calibration data:
    #define MAX_X_2DM                    2015.0        // Max. X-axis value 2042.0
    #define MIN_X_2DM                    1840.0        // Min. X-axis value 1863
    #define BIAS_X_2DM                    (MAX_X_2DM + MIN_X_2DM) / 2.0
    #define SF_X_2DM                    2.0 / (MAX_X_2DM - MIN_X_2DM)
    #define MAX_Y_2DM                    -2038.0        // Max. Y-axis value 2220
    #define MIN_Y_2DM                    -2228.0        // Min. Y-axis value 2040
    #define BIAS_Y_2DM                    (MAX_Y_2DM + MIN_Y_2DM) / 2.0
    und bekomme auch in der LCD die headingwerte angezeigt, diese verändern sich auch entsprechend der position in die ich den RP6 drehe. So weit so gut...

    wenn ich ihn aber in die richtung NORD drehe (ausgerichtet nach einem uralten analogen kompass) dann zeigt er nicht 360 (oder so) sondern ein wert um die 250. Das der RP in fahrtrichtung NORD steht, konnte ich anhand der umgebung verifizieren, der analoge kompass ist also ok...

    Wurden schon die abhängigkeiten der angezeigten/berechneten himmelsrichtungen zu den in der orientation.h eingetragenen werten (s.o.) hier irgendwo erklärt? Oder könnte ich bei irgendeinem der werte einen bestimmten bertrag ab-/hinzu-addieren um auf die 360/NORD zu kommen? Wie komme ich zu diesem wert?
    gruß inka

  10. #50
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @inka:
    bekomme auch in der LCD die headingwerte angezeigt, diese verändern sich auch entsprechend der position in die ich den RP6 drehe.
    Das ist schon mal gut.

    Was aber auffällt:
    Deine Min-/Max-Werte sind auffällig: Die Amplitude der Y-Achse bleibt im neg. Bereich und die der X-Achse im pos. Bereich.
    Das könnte dafür sprechen, dass dein Sensor in einem stark von Magnetfeldern oder in einem (durch Metalle) verfälschten Erdmagnetfeld arbeitet. Dadurch kriegst du auch keine richtige Richtungsanzeige und bei der Kalibrierung keine sinnvollen Min-/Max-Werte.

    Wichtig ist:
    - Auf dem RP6 sollte er möglichst weit weg von den Motoren sitzen
    - In der direkten Nähe sollten auch keine Metallteile sein (Stahlschrauben, Abstandhalter, Kabel ...)
    - In der weiteren Umgebung (>2m) genauso (Handy, PC, Tisch mit Stahlbeinen, Netzteil, Kabel ...)
    Gruß
    Dirk

Seite 5 von 6 ErsteErste ... 3456 LetzteLetzte

Ähnliche Themen

  1. Kompass-Modul Hdmm01 für den Rp6
    Von Morpheus1997 im Forum Robby RP6
    Antworten: 8
    Letzter Beitrag: 09.08.2012, 18:33
  2. 2 x HDMM01 auf Arduino Mega
    Von arnoa im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 08.02.2012, 17:19
  3. Pollin I2C Kompassmodul HDMM01
    Von malthy im Forum Sensoren / Sensorik
    Antworten: 11
    Letzter Beitrag: 15.09.2011, 13:53
  4. Zu Servo anssteuerung von Dirk frage
    Von Christian3 im Forum Robby RP6
    Antworten: 1
    Letzter Beitrag: 16.06.2009, 13:31
  5. @Dirk Gemeinsames Modul
    Von UweMD im Forum Robby CCRP5
    Antworten: 2
    Letzter Beitrag: 21.09.2004, 07:21

Berechtigungen

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

Labornetzteil AliExpress