- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 9 von 9

Thema: Liniensensoren funktionieren nicht richtig

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied Avatar von Herbert A.
    Registriert seit
    24.02.2010
    Alter
    28
    Beiträge
    46
    Ich habe das Programm etwas abgeändert, sodass es die Kurven in der Linientestarena schafft, aber das ruckelt ziemlich und ist nicht so schnell.
    Hat jemand eine Idee,wie manb das verbessern könnte(Geschwindigkeit/Ruckeln)?
    Das Programm sieht so aus:
    PHP-Code:
    #include "asuro.h" // Linienverfolgung auf die einfachste Art

    #define tol 15

    int main(void
    {
    unsigned int data[2]; //Speicher bereitstellen
    Init();

    FrontLED(ON);         // Linienbeleuchtung einschalten
    MotorDir(FWD,FWD); // Beide Motoren auf vorwärts

    while(1)            // Endlosschleife, ASURO soll beliebig
                        // lang einer Linie nachfahren
    {             
    LineData(data);     // aktuelle Helligkeitswerte der
                        // Fototransistoren einlesen

    if (data [0] > data [1] + tol )      // links heller als rechts...
    {MotorSpeed(140,80);

    MotorDir(FWD,RWD);}     // ... dann links mehr Gas geben...

    LineData(data);     // aktuelle Helligkeitswerte der
                        // Fototransistoren einlesen

     
    if (data [1] > data [0] + tol )      // links heller als rechts...
    {MotorSpeed(80,140);

    MotorDir(RWD,FWD);

    }     
    // ... dann links mehr Gas geben...

    else
    {
    MotorSpeed(120,120);}     // ... sonst rechts mehr Gas geben!

    }

    return 
    0;

    mfG
    while (!asleep()) sheep++;

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    34
    Beiträge
    1.192
    Habe mal den Code überarbeitet (ungetestet) - die if-Konstruktionen überarbeitet und ein LineData entfernt, da es ja sowieso bei jedem Schleifendurchlauf neu eingelesen wird.

    Code:
    #include "asuro.h" // Linienverfolgung auf die einfachste Art
    #define tol 15
    
    int main(void) 
    {
        unsigned int data[2]; //Speicher bereitstellen
        Init();
    
        FrontLED(ON);         // Linienbeleuchtung einschalten
        MotorDir(FWD,FWD);     // Beide Motoren auf vorwärts
    
        while(1)            // Endlosschleife, ASURO soll beliebig
        {             
            LineData(data);     // aktuelle Helligkeitswerte der
                                // Fototransistoren einlesen
            if (data [0] > data [1] + tol )
            {
                MotorSpeed(140,80);
                MotorDir(FWD,RWD);
            }
            else if (data [1] > data [0] + tol )
            {
                MotorSpeed(80,140);
                MotorDir(RWD,FWD);
            }
            else
            {
                MotorSpeed(120,120);
                MotorDir(FWD,FWD);
            }
        }
        return 0;
    }
    Am Programm selber kann man nicht mehr viel Laufzeit optimieren.
    Du kannst noch ein wenig mit den Geschwindigkeitswerten und der Toleranz spielen, dadurch lässt sich das noch optimieren.
    Außerdem ist das Rückwärtsdrehen der Motoren kontraproduktiv. Du willst ja voran kommen. Wenn er oft die Drehrichtung FWD/RWD ändern muss, bleibt er eher auf der Stelle stehen. Also lieber den Motor, der bisher rückwärts fuhr in Vorwärtsrichtung drehen lassen, vielleicht mit geringer Geschwindigkeit.
    Da musst du viel probieren. Aber Versuch macht klug
    Ansonsten stößt dieses Regelverhalten halt irgendwann an seine Grenzen. Ist ja ein Zweipunktregler. Man könnte es einmal mit einem P-Regler (Software) versuchen.
    Auch eine andere Anordnung der Sensoren (Abstand) kann viel am Regelungsverhalten ändern. Frage ist eben: willst du der Linie sehr präzise und langsam folgen oder grob und schnell ? Je schneller man folgen will, desto weiter sollten die Sensoren auseinander.

    Grüße,
    Bernhard

  3. #3
    Benutzer Stammmitglied Avatar von Herbert A.
    Registriert seit
    24.02.2010
    Alter
    28
    Beiträge
    46
    Jipiiiiiii es funktioniert.
    und danke für die schnelle Antwort.
    ich habe schon sehr viel mit den Werten rumprobiert.
    wenn ich beide Motoren in der Kurve auf vorwärts setze, schafft er aber nicht so enge Kurven.
    und wenn er vorwärts und rückwärts dreht, korrigiert er schnerller.
    ich habe die Werte jetzt so optimiert, dass der bot der Linie sehr ruhig folgt.

    mfG
    Geändert von Herbert A. (08.03.2011 um 16:19 Uhr)
    while (!asleep()) sheep++;

Berechtigungen

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

12V Akku bauen