-
        

Ergebnis 1 bis 4 von 4

Thema: Linienverfolgung klappt nicht besonders gut -- Verbesserung?

  1. #1

    Linienverfolgung klappt nicht besonders gut -- Verbesserung?

    Anzeige

    Hallo.
    Ich habe diese Version des Linien-Verfolgungsprogramms getestet und bin nur mäßig zufrieden. Zum Testen habe ich zusätzlich die "Arena" von dalmator genommen, die aus 9 DinA4-Blättern besteht und außen einen kurvigen Parcours und innen 2 große Kreise bildet. Mein Asuro folgt momentan nur einem der Kreise -- und das auch nur in eine Richtung (in der Gegenrichtung kommt er sehr schnell vom Kurs ab). Ich habe in dem Code schon den Speed runtergedreht aber mir kommt es eher so vor, als wenn die Messung des schwarzen Strichs zu fehlerhaft läuft. Der Asuro verliert die Linie sehr oft aus den "Augen" und fährt dann so lange im Kreis, bis er wieder selbst irgend etwas schwarzes gefunden hat. Daran orientiert er sich dann wieder -- aber auch das nicht sehr treffsicher. Der Code ist also irgendwie fehlerhaft oder zumindest bescheiden. Wo kann man nachbessern?
    Danke f. Tipps,
    W.R.

    Code:
    #include "asuro.h"
    
    #define SPEED  0x5a
    
    int speedLeft,speedRight;
    unsigned int lineData[2];
    int ADOffset;
    
    void LineLeft (void)
    {
       //speedLeft  += 1; if (speedLeft > 0x8E)  
       speedLeft = 0xb6;
    }
    
    void LineRight (void)
    {
       //speedRight  += 1; if (speedRight > 0x8E) 
       speedRight = 0xb6;
    }
    
    int main(void)
    {
    int i;
    unsigned char j;
    
       Init();
    
       FrontLED(ON);
       for (j = 0; j < 0xFF; j++) {
       LineData(lineData);}
       LineData(lineData);
       ADOffset = lineData[0] - lineData[1];
       speedLeft = speedRight = SPEED;
       while (1) {
          LineData(lineData);
          i = (lineData[0] - lineData[1]) - ADOffset;
          if ( i > 4) {
             StatusLED(GREEN);
             LineLeft();
          }
          else if ( i < -4) {
             StatusLED(RED);
             LineRight();
          }
          else {
             StatusLED(OFF);
             speedLeft = speedRight = SPEED;
          }
          MotorSpeed(speedLeft,speedRight);
       }
       return 0;
    }

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    Bitte nutze die suchfunktion. es gibt unendlich viele linienfolgeprogramme im forum.
    das problem könnte evtl sein, dass die räder des asuro nicht gleich schnell drehen. der asuro fährt also immer eine kurve, auch wenn er eigentlich geradeausfahren sollte. das programm muss entsprechend angepasst werden oder so verändert werden, dass die odometriewerte mit einbezogen werden.

    dem kreis wird nur in eine richtung gefolg, weil diese richtung wahrscheinlich mit dem normalen krumm-fahr-faktor des asuro leichter zu schaffen ist als die andere richtung. wenn der asuro dauernd ne rechtskurve fährt, muss nicht viel angepasst werden um einem kreis rechtsrum zu folgen. dagegen muss extrem viel angepasst werden, um dem kreis linksrum zu folgen.

    also: bitte such mal im forum, am ende haben sies alle geschafft auf der linie zu bleiben...

    daMALtor
    kleinschreibung ist cool!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    21.03.2004
    Ort
    73061 Ebersbach
    Alter
    48
    Beiträge
    52
    wenn ich den code richtig verstehen hast du in den funktionen etwas auskommentiert

    void LineLeft (void)
    {
    //speedLeft += 1; if (speedLeft > 0x8E) <<<---HIER
    speedLeft = 0xb6;
    }

    void LineRight (void)
    {
    //speedRight += 1; if (speedRight > 0x8E) <<<---HIER
    speedRight = 0xb6;
    }

    und das hat doch zur folge, dass du die speed NUR einmalig auf einen anderen wert setzt.
    dann kann es sein, dass die kurve genau der Speed entspricht, dann läuft dein asuro um die ecke, andernfalls......

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    hmmm... das ist richtig... nach zwei schrägstrichen ist die ganze Zeile auskommentiert, auch wenn ein semikolon dazwischen ist. wie siehts aus, ist das auch in dem code so der auf dem asuro läuft?

    sag mal warum machst du dir eigentlich das leben unnötig schwer und schreibst in hexadezimalzahlen, wenn du auch einfach dezimalzahlen nehmen kannst? das macht den code übersichtlicher, spart dir das umrechnen und mach es für jeden anderen leichter zu lesen...
    kleinschreibung ist cool!

Berechtigungen

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