- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: Odometrie Programm Probleme

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    31.01.2007
    Ort
    kerken
    Alter
    31
    Beiträge
    69
    Anzeige

    E-Bike
    hi
    also ich denke nicht, das die LED und der Empfänger vertauscht wurden, dann würde der mega8 ja gar nichts mehr messen ausserdem müsste doch dann td der eine motor langsamer werden.

    MfG

    Jan

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    23.10.2007
    Beiträge
    13
    Aber dann müsste im Programm ja trotzdem noch ein Fehler sein, das es ja eigentlich dann bei einem Rad funktionieren müsste. Und wenn ich das alles richtig verstanden habe, dann müsste ein Rad ja eigantlich ganz schnell langsamer werden da bei einem die Hilfsvariable ja nie großer wird, die andere aber schon.

    Eigentlich müssten die Werte wenn ich das Rad mit der Hand abbremse ja änder? - Das tun sie aber nicht.

    Mfg Chrise

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo Chrise,
    dein Programm rechnet sich meiner Meinung nach den 'Wolf' für nix und wieder nix.

    Du nutzt einmal vor der while-Schleife ein MotorDir(), aber deine Rechenergebnisse (Variablen c und d?) werden nirgendwo benutzt um mit MotorSpeed() irgendwo eine Wirkung zu erzielen.
    Habe ich da nun etwas total übersehen, oder ist dein geposteter Programmcode nur ein Ausschnitt?

    Gruß Sternthaler
    Lieber Asuro programieren als arbeiten gehen.

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    23.10.2007
    Beiträge
    13
    Ok.... das ein paar Sachen umsonst rechnet seh ich sofort ein (im neuen Programcode hab ich das alles mal weggelassen, wo ich der Ansicht war, dass es eigentlich nichts bringt).

    c und d werden aber verwendet. Sie stehen für die Geschwindigkeiten eines Motors (c fur den linken Motor und d für den rechten Motor). Am Ende des Programmes werden die beiden Variablen verkleinert, um eben den Asuro auf einer geraden Bahn zu halten. Es ollte eigentlich noch eine Funktion her, dass wenn beide Räder den gleichen weg zurücklegen, dass die Geschwindigkeit wieder erhöht wird, den sonst würde der Roboter bald einmal stehen.

    Und nein..... es ist das ganze Programm.

    Code:
    #include "asuro.h"
    
    int main (void)
    {
       unsigned int data[2];
       unsigned int L_alt_l[1];    //Letzte Wert des linken Fototransistors
       unsigned int L_alt_r[1];   //Letzte Wert des rechten Fototransistors
       int a;                            //Anzahl der gezählten Übergenge links von s zu w und w zu s
       int b;                            //Anzahl der gezählten Übergenge rechts von s zu w und w zu s
       unsigned char c;           //Wert für die Geschwindigkeit des linken Motors
       unsigned char d;          //Wert für die Geschwindigkeit des rechten Motors
       int dh_l;
       
       a = 0;
       b = 0;
       c = 140;               // Wert für linken Motor bestimmen      
       d = 140;               // Wert für rechten Motor bestimmen
       
       Init();
       
       OdometrieData(data);
       MotorDir(FWD, FWD);
       
       while(1)
       {
          MotorSpeed(c, d);
          L_alt_l[0] = data[0];
          L_alt_r[0] = data[1];
          OdometrieData(data);
          
          dh_l = data[0] - L_alt_l[0];
                
          if( dh_l > 200 || dh_l < -200)
          {
             a++;
          }
          
          if( data[1] - L_alt_r[0] > 200 || data[1] - L_alt_r[0] < -200)
          {
             b++;
          }
          
          if( a < b)
          {
             d--;            //Geschwindigkeit des rechten Motors verkleinern
             
          }
          
          if( a > b)
          {
             c--;            //Geschwindigkeit des rechten Motors verkleinern
          }
       }
    }
    mfg Chrise

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    31.01.2007
    Ort
    kerken
    Alter
    31
    Beiträge
    69
    hi

    also ich hab bei meinem asuro rausgefunden, dass in einem programm nur einmal OdometrieData(data) aufgerufen werden kann. alle weiteren ignoriert er einfach. ich weiß nicht, ob das immer so ist, oder ob ich was falsch mache, aber vllt solltest du das mal versuchen und das erste OdpmetrieData(data) weglassen.

    MfG

    Jan

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    23.10.2007
    Beiträge
    13
    Ich werds mal probieren, doch ich glaube nicht dass das zweite OdometrieData(data) ignoriert wird, da beim auslesen der Werte, diese sich immer wieder mal ein bisschen geändert haben, aber halt immer nur ca. 10. Das war meiner Ansicht nach nicht erwähnenswert, bereu ich aber eh schon, weil ich euch informationen vorenthalten habe.

    Sorry

    Mfg

  7. #17
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo Chrise,
    mein Fehler. Jetzt habe ich das MotorSpeed() auch im ersten Programm gefunden. Ist meinen wild suchenden Augen irgendwie entfleucht.

    Dann nun also zum eigendlichen Inhalt.
    Code:
          L_alt_l[0] = data[0];
          L_alt_r[0] = data[1];
          OdometrieData(data);
          dh_l = data[0] - L_alt_l[0];
    Hier in dh_l bestimmst du die Differenz zwischen 2 hintereinander gemachten ODO-Messwerten.

    Mit Folgendem untersuchst du diese Differenz auf einen Sprung um mehr als 200 Messeinheiten um a zu beeinflussen:
    Code:
          if( dh_l > 200 || dh_l < -200)
          {
             a++;
          }
    Ähnlich machst du das dann auch für die rechte Seite.

    Und schon fängt dein Programm wieder von vorne an.
    Unterm Strich hast du als größten Zeitfresser nur den Aufruf der Funktion OdometrieData(). Dort werden gerade mal 2 AD-Wandlungen gemacht, die so langsam auch nicht sind.

    Nun passiert also folgendes:
    - Die Odo-Scheiben drehen sich vor den Sensoren
    - Du misst kontinuierlich die Helligkeitsänderungen
    - Du untersuchst die Messwerte auf eine Differenz von mehr als 200 Einheiten
    - Du berechnest 'Geschwindigkeitsanpassungen' in d und c

    Ich glaube, dass dein Asuro startet, und dass sich die Geschwindigkeit überhaupt nicht ändert, so dass er in einem Bogen im Kreis fährt.

    Das wird daher kommen, dass die Differenzen zwischen 2 hintereinander gemachten Messungen keinesfalls größer als 200 Einheiten sein werden. (Ausnahmen bestätigen die Regel)

    Um dir hier nicht alles direkt zu verraten, nur mal ein Hinweis auf einen Thread zu diesem Thema: farratt weist auf einen
    Sinusverlauf der Daten hin.
    Und dazu dann auch ein Bildchen. Die oberen 10-Bit-Daten gelten für die Funktion OdometrieData().
    Es waren ungefähr 30 Messungen in einem Sinuszyklus!

    Gruß Sternthaler
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken blende-1_563.jpg  
    Lieber Asuro programieren als arbeiten gehen.

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    23.10.2007
    Beiträge
    13
    So.... ich hab jetzt mal die linke Seite der durchgecheckt und bin darauf gestoßen, dass der Fototransistor irgendwie kurzgeschlossen war(Ich weiße jede schuld von mir, da ich ihn nicht zusammen gebaut habe).
    Meine neuen Werte betragen: 325, 192, 826, 463

    Nun werd ich mal ein Programm schreiben, dass mir die Werte in gemessener Reihenfolge ausgibt und dann den wert beim wechsel von schwarz und weiß und weiß auf schwarz änder und schauen obs funzt

    mfg

    Edit: Also wenn ich die Daten auslese bekomm ich zwaar für die rechte Seite eine Halbwegs anständige Kurve, jedoch mit ein paar ausnahmen. Bei der linken Seite ist allerdings alles anders. Da sieht das ganze fast mehr nach einem Sägezahn aus, als nach einem Sinus^^.

  9. #19
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    ,ach mal ne grafik!
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  10. #20
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    @damaltor
    ja, grafik (und natürlich kleinschreibung) ist cool. Vor allem wenn Platz vorhanden ist

    @Chrise
    Kannst du mal deine ermittelten Daten posten. Muss keine Grafik sein.

    Gruß Sternthaler
    Lieber Asuro programieren als arbeiten gehen.

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen