- 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
    Da ich in letzter Zeit etwas viel zu tun hatte kann ich nun endlich die Arbeit mit dem Kompass fortsetzen .
    Ich habe das Beispiel so wie es ist einfach mal so übernommen und die Speicheradressen angepasst.
    Nun bekomme ich in unregelmäßigen abständen folgende Werte:

    819.2 Grad
    003.2 Grad
    000.0 Grad

    immerhin nicht immer das gleiche aber wirklich Sinn ergibt das ganze noch nicht Bild hier  
    Geändert von Berghuhn (06.02.2012 um 06:12 Uhr)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.09.2010
    Alter
    30
    Beiträge
    129
    Edit: Okay die Werte kommen doch in einem regelmäßigen Abstand. Kann es sein, dass der Kompass defekt ist?

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.04.2008
    Beiträge
    384
    Was sind die Register Werte die du auslest ? Kann es sein das die Berechnung nach Graden nicht stimmt ?

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.09.2010
    Alter
    30
    Beiträge
    129
    Dass die Berechnung nach Graden nicht stimmt, kann gut sein. Aber es müssten doch trozdem verschiedene Werte kommen wenn ich den Kompass nieige/kippe.

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    Kompass wurde kalibriert?
    s. CMPS Anleitung

  6. #6
    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.

  7. #7
    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.

Ä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
  •  

12V Akku bauen