- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 48

Thema: RP6 Kompass

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.09.2010
    Alter
    30
    Beiträge
    129
    Kompass wurde kalibriert?
    s. CMPS Anleitung
    ouu
    Ja das hab ich vergessen ^^ werd ich dann mal so schnell wie möglich machen.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.09.2010
    Alter
    30
    Beiträge
    129
    @SlyD: Ich habe den LSM303DLH und nicht den CMPS ^^


    Also ich habe den Kompass wie in diesem beispiel Kalibriert:

    Code:
    // Returns a set of acceleration and raw magnetic readings from the cmp01a.
    void read_data_raw(vector *a, vector *m)
    {
        // read accelerometer values
        i2c_start();
        i2c_write_byte(0x30); // write acc
        i2c_write_byte(0xa8); // OUT_X_L_A, MSB set to enable auto-increment
        i2c_start();          // repeated start
        i2c_write_byte(0x31); // read acc
        unsigned char axl = i2c_read_byte();
        unsigned char axh = i2c_read_byte();
        unsigned char ayl = i2c_read_byte();
        unsigned char ayh = i2c_read_byte();
        unsigned char azl = i2c_read_byte();
        unsigned char azh = i2c_read_last_byte();
        i2c_stop();
    
        // read magnetometer values
        i2c_start(); 
        i2c_write_byte(0x3C); // write mag
        i2c_write_byte(0x03); // OUTXH_M
        i2c_start();          // repeated start
        i2c_write_byte(0x3D); // read mag
        unsigned char mxh = i2c_read_byte();
        unsigned char mxl = i2c_read_byte();
        unsigned char myh = i2c_read_byte();
        unsigned char myl = i2c_read_byte();
        unsigned char mzh = i2c_read_byte();
        unsigned char mzl = i2c_read_last_byte();
        i2c_stop();
    
        a->x = axh << 8 | axl;
        a->y = ayh << 8 | ayl;
        a->z = azh << 8 | azl;
        m->x = mxh << 8 | mxl;
        m->y = myh << 8 | myl;
        m->z = mzh << 8 | mzl;
    }
    
    // Returns a set of acceleration and adjusted magnetic readings from the cmp01a.
    void read_data(vector *a, vector *m)
    {
        read_data_raw(a, m);
    
        // shift and scale
        m->x = (m->x - m_min.x) / (m_max.x - m_min.x) * 2 - 1.0;
        m->y = (m->y - m_min.y) / (m_max.y - m_min.y) * 2 - 1.0;
        m->z = (m->z - m_min.z) / (m_max.z - m_min.z) * 2 - 1.0;
    }
    
    ...
    
    read_data_raw(&a, &m);
    if (m.x < cal_m_min.x) cal_m_min.x = m.x
    if (m.x > cal_m_max.x) cal_m_max.x = m.x;
    if (m.y < cal_m_min.y) cal_m_min.y = m.y;
    if (m.y > cal_m_max.y) cal_m_max.y = m.y;
    if (m.z < cal_m_min.z) cal_m_min.z = m.z;
    if (m.z > cal_m_max.z) cal_m_max.z = m.z;
    Das Problem bei dieser Methode ist, dass ich zum Teil falsche Werte schon beim lesen der "raw" daten wirre Sachen wie 0 oder so bekomme. Daher bringt die Kalibrierung nicht wirklich etwas.
    Nach dem Kalibrieren verwende ich natürlich die read_data Methode sonst würde das Kalibrieren nichts bringen.

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    Hallo,

    Wo kalibrierst Du den Kompass?
    Auf dem RP6 oder irgendwo weit daneben?
    (die Motoren erzeugen ein Magnetfeld - kann ja sein das Du den Kompass zu nah dran hast... )

    Das Teil ist ja 3.3V also 3.3V<->5V Levelshifter hast Du drin bzw. sind auf der fertigen Platine die Du verwendest?


    MfG,
    SlyD

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.09.2010
    Alter
    30
    Beiträge
    129
    Hallo,

    Die sind schon auf der Platine genau so wie die Pull-Up Wiederstände.
    Der Kompass ist etwa 11-12 cm über der RP6 Platine und die Motoren steuere ich nicht an, gerade wegen dem Magnetfeld.

    MFG,
    Berghuhn

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.09.2010
    Alter
    30
    Beiträge
    129
    Also ich habe einen Rundungsfehler gefunden und bekomme nun folgende Werte:

    x: 130.15
    y: 211.51
    z: 154.95

    diese verändern sich aber wie zuvor nicht.

    MfG Berghuhn

Ähnliche Themen

  1. Kompass für RP6
    Von axel88 im Forum Robby RP6
    Antworten: 40
    Letzter Beitrag: 04.08.2008, 18:01
  2. Kompass für nur 5€?
    Von Rohbotiker im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 03.07.2007, 21:11
  3. Kompass
    Von sulu im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 14
    Letzter Beitrag: 15.08.2005, 10:06
  4. Kompass???
    Von Static im Forum Sensoren / Sensorik
    Antworten: 30
    Letzter Beitrag: 18.01.2005, 23:58
  5. !!!KOMPASS!!!
    Von phönix im Forum Sensoren / Sensorik
    Antworten: 12
    Letzter Beitrag: 17.05.2004, 17:14

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress