- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 13 von 15 ErsteErste ... 31112131415 LetzteLetzte
Ergebnis 121 bis 130 von 144

Thema: Asuro: Linienfolger mit PD-Regler

  1. #121
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.05.2005
    Beiträge
    734
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Ja, genau das habe ich damit gemeint.

    Gruß Waste

  2. #122
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    WOW!

    Da kann ich nur noch staunen. Ein beeindruckender und lehrreicher Thread. Dank an alle Mitwirkenden.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #123
    Benutzer Stammmitglied
    Registriert seit
    27.12.2006
    Ort
    Minneapolis
    Beiträge
    30

    PID Line following - new version to WASTE's original code

    Waste,

    ich habe Deinen Code leicht modifiziert, da Dein Programm bei mir keiner Linie folgte.

    Folgende Aenderungen habe ich vorgenommen:
    1.) die Variablen drest, xsum und xalt in MAIN, da diese Variablen sonst nicht initialisiert werden
    2.) Linedata mit LED off zur Initialisierung von doff in MAIN, da bei mir die LED beim Ein- und Ausschalten in FollowLine zu traege ist und scheinbar immer an bleibt.
    3.) Implementierung mit Lib Ver. 2.70

    Das war's. Nun folgt mein Asuro brav der Linie und der PID-Regler ist viel sensibler als der einfache P-Regelkreis!

    Ich habe noch eine Frage:
    Ich verstehe die Logik beim abbremsen nicht.

    Links von der Linie (rechts bremsen)ist der Code:
    speedRight = speed - y; // rechts abbremsen
    Links dagegen
    speedLeft = speed + y; // links abbremsen
    Kannst Du mir das mal erklaeren. Besten Dank im voraus.

    Hier ist der neue Code:
    Code:
    /*******************************************************************************
    *
    * Description: Asuro Linienverfolgung mit PID-Regler
    * Version 1: Korrektur auf beide Motoren verteilt
    * Author: Waste	26.8.05
    *
    * Version 2: initialization of parameters in Main, measurement with LED off in Main
    * Author: irobot22587 11.03.2007
    *
    *****************************************************************************/
    #include "c:/WinAVR/avr/include/asuro.h"			// ver 2.70
    
    unsigned char speed;
    int speedLeft,speedRight;
    unsigned int lineData[2];
    int x, xalt, don, doff, kp, kd, ki, yp, yd, yi, drest, y, y2, isum;
    
    void FollowLine (void)
    {
    unsigned char leftDir = FWD, rightDir = FWD;
       LineData(lineData);                  // Messung mit LED ON
       don = (lineData[0] - lineData[1]);   
       x = don - doff;                  // Regelabweichung
       isum += x;
       if (isum > 16000) isum =16000;         //Begrenzung um Überlauf zu vermeiden
       if (isum < -16000) isum =-16000;
       yi = isum/625 * ki;               //I-Anteil berechnen
       yd = (x - xalt)*kd;               // D-Anteil berechnen und mit
       yd += drest;                     // nicht berücksichtigtem Rest addieren
       if (yd > 255) drest = yd - 255;      // merke Rest
       else if (yd < -255) drest = yd + 255;
       else drest = 0;
       if (isum > 15000) BackLED(OFF,ON);   // nur zur Diagnostik
       else if (isum < -15000) BackLED(ON,OFF);
       else BackLED(OFF,OFF);
       yp = x*kp;                        // P-Anteil berechnen
       y = yp + yi + yd;                  // Gesamtkorrektur
       y2 = y/2;                        // Aufteilung auf beide Motoren
       xalt = x;                        // x merken
       speedLeft = speedRight = speed;
       MotorDir(FWD,FWD);
       if ( y > 0) {                     // nach rechts
          StatusLED(GREEN);
          speedLeft = speed + y2;         // links beschleunigen
          if (speedLeft > 255) {
             speedLeft = 255;            // falls Begrenzung
             y2 = speedLeft - speed;      // dann Rest rechts berücksichtigen
          }
          y = y - y2;
          speedRight = speed - y;         // rechts abbremsen
          if (speedRight < 0) {
             speedRight = 0;
          }
       }
       if ( y < 0) {                     // nach links
          StatusLED(RED);
          speedRight = speed - y2;         // rechts beschleunigen !!!was speed - y2!!
          if (speedRight > 255) {
             speedRight = 255;            // falls Begrenzung
             y2 = speed - speedRight;      // dann Rest links berücksichtigen !!was speed - speedRight!!
          }
          y = y - y2;
          speedLeft = speed + y;            // links abbremsen  !! was speed + y!!!
          if (speedLeft < 0) {
             speedLeft = 0;
          }
       }
       leftDir = rightDir = FWD;
       if (speedLeft < 20)  leftDir = BREAK; // richtig bremsen
       if (speedRight < 20) rightDir = BREAK;
       MotorDir(leftDir,rightDir);
       MotorSpeed(abs(speedLeft),abs(speedRight));
    }
    
    int main(void)
    {
    unsigned char sw;
       Init();
       MotorDir(FWD,FWD);
       StatusLED(GREEN);
       speed = 150;
       kp = 3; ki = 10; kd = 70;      // Regler Parameter kd enthält bereits Division durch dt
       drest=0;
       isum=0;
       xalt=0;
       sw=0;
    /*
       sw = PollSwitch();
       if (sw & 0x01)
          {ki=20;}
       if (sw & 0x02)
          {speed = 200;}
       if (sw & 0x04)
          speed = 100;
       if (sw & 0x08)
          kd = 35;
       if (sw & 0x10)
          kd = 70;
       if (sw & 0x20)
          kd = 140;
    */
       FrontLED(OFF);
       Msleep(50);
       LineData(lineData);                  // Messung mit LED OFF
       doff = (lineData[0] - lineData[1]);   // zur Kompensation des Umgebungslicht
       FrontLED(ON);
       Msleep(100);
       speedLeft = speed;
       speedRight = speed+25;
       while(1){
          FollowLine();
       }
        return 0;
    }

  4. #124
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.05.2005
    Beiträge
    734

    Re: PID Line following - new version to WASTE's original cod

    Zitat Zitat von irobot_22587
    Ich habe noch eine Frage:
    Ich verstehe die Logik beim abbremsen nicht.

    Links von der Linie (rechts bremsen)ist der Code:
    speedRight = speed - y; // rechts abbremsen
    Links dagegen
    speedLeft = speed + y; // links abbremsen
    Kannst Du mir das mal erklaeren. Besten Dank im voraus.
    Wenn y>0 ist, soll er rechts bremsen, also speedRight soll kleiner werden, das passt mit -y.
    Wenn y<0 ist, dann soll er links bremsen, speedLeft soll kleiner werden. Da y schon negativ ist, muss also +y da stehen.

    Waste

  5. #125
    Hallo an Alle, die zu diesem Artikel beigetragen haben...

    Ich hätte allerdings nur noch eine Bitte:

    Kann man das ganze Thema (ASURO mit PID-Regler) so kompensieren und kurz Beschreiben, dass auch Leute, die wenig Ahnung von Reglern haben einen Überblick bekommen???
    (Besonders die Berechnung der P I und D Anteile mit den ganzen Variablen und Konstanten)

    MfG

    PS: Sozusagen "ASURO mit PID-Regler für Dummies"

  6. #126
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hi,

    vielleicht schaust du mal hier rein:

    https://www.roboternetz.de/wissen/in...gelungstechnik
    gruß inka

  7. #127
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.07.2004
    Ort
    bei Stuttgart
    Alter
    41
    Beiträge
    760
    Hi,
    Hallo an Alle, die zu diesem Artikel beigetragen haben...

    Ich hätte allerdings nur noch eine Bitte:

    Kann man das ganze Thema (ASURO mit PID-Regler) so kompensieren und kurz Beschreiben, dass auch Leute, die wenig Ahnung von Reglern haben einen Überblick bekommen???
    (Besonders die Berechnung der P I und D Anteile mit den ganzen Variablen und Konstanten)

    MfG

    PS: Sozusagen "ASURO mit PID-Regler für Dummies"
    Denke schon, dass man das kann also leg los, es hält dich bestimmt keiner davon ab das zu machen.

    mfg jeffrey

  8. #128
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo fh_frankfurt,
    druck dir alle Seiten dieses Threads aus.

    Hier ist die Zusamenfassung von Waste
    Hier ist eine Zusammenstellung, evl. schwirig zu verstehen da von mir, um Beiträge im Thread zu finden.

    Viel Erfolg
    Gruß Sternthaler
    Lieber Asuro programieren als arbeiten gehen.

  9. #129
    Neuer Benutzer Öfters hier
    Registriert seit
    06.11.2007
    Ort
    Prichsenstadt
    Alter
    39
    Beiträge
    29
    der PID Regler funktioniert wunderbar... hab noch nie eine so saubere Linienverfolgung hinbekommen. Werde mal ein Video demnächst reinstellen.

  10. #130
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.02.2005
    Ort
    Hannover
    Beiträge
    174
    Mich interessiert das Thema auch, jedoch habe ich keinen Asuro zum Testen.
    Kann daher nochmal jemand ein Video vom Asuro mit PID-Regler reinstellen? Die Videos hier aus dem Thread sind leider nicht mehr verfügbar.

Seite 13 von 15 ErsteErste ... 31112131415 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests