- LiFePO4 Speicher Test         
Seite 1 von 15 12311 ... LetzteLetzte
Ergebnis 1 bis 10 von 144

Thema: Asuro: Linienfolger mit PD-Regler

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734

    Asuro: Linienfolger mit PD-Regler

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo!

    Ich will den Linienfolger meines Asuros etwas aufpäppeln. Die 1. Version funktioniert zwar, ist aber nur mit einem einfachen P-Regler ausgeführt. Ich fragte mich, ob es nicht mit einem anderen Reglertyp (PI, PD, PID) besser gehen könnte. Dazu musste ich mich etwas in die Thematik einarbeiten. Ich habe zwar genügend Erfahrung mit Regelschleifen in der Elektronik, aber ein gemischtes System mit Mechanik und digital war auch für mich Neuland. Aus den vielen Nachfragen hier im Board, wie man eine klassische Regelung realisiert die über einen normalen P-Regler hinaus geht, weiss ich um den Wissensbedarf und habe mich entschlossen meine Erkenntnisse hier weiter zu geben. Das Projekt ist zwar noch nicht fertig, ich lege aber trotzdem schon mal los, weil ich sonst vielleicht einige Details wieder vergesse. Ausserdem können von Euch noch Anregungen kommen, die das Projekt in eine andere Richtung bringen. Ich habe zwar im Titel schon den PD-Regler vorweggenommen weil sich der nach einer 1. Analyse als sinnvoll herausstellte. Aber das heisst jetzt nicht, dass damit der PD-Regler schon als beste Lösung zementiert ist. Es kann sich durchaus im Laufe des Projekts ein anderer Reglertyp als bessere Lösung ergeben. Möglicherweise endet es sogar in einem Fuzzy-Regler. Wir werden sehen.

    Wer jetzt in Kürze schon einen funktionierenden Code erwartet, den muss ich enttäuschen, das wird noch eine Weile dauern. Zuerst muss einmal der Iststand aufgenommen werden, danach folgt dann die Analyse, Optimierung und Umsetzung. Für manche wird es zu sehr ins Detail gehen, für andere aber zu wenig. Bei der grossen Bandbreite an Lesern hier im Forum ist es wohl schwierig den Bedarf jedes Einzelnen genau zu treffen. Man möge mir das nachsehen, Wissensbegierige können ja nachfragen.

    Das Ziel ist klar: Die Regelung soll so optimiert werden, dass sie möglichst schnell und trotzdem stabil ist.

    Die Vorgehensweise:
    1. Analyse der Regelstrecke und Modellierung
    2. Auswahl des Reglertyps
    3. Simulation und Optimierung des Reglerentwurfs
    4. Parametrierung des Reglers und Umsetzung in Code
    5. Praxistest und Nachoptimierung

    Los geht's mit der Analyse der Regelstrecke!
    Die Regelstrecke enthält den Liniensensor, PWM-Steller, Motor und Getriebe. Der Liniensensor reagiert auf Abweichungen von der Linie, also auf Streckenänderungen. Damit ist schon einmal klar, dass es sich hierbei um eine Positionsregelung handelt. Das macht es für mich auch etwas leichter, da die Positionsregelung in der Literatur bereits vielfach abgehandelt wurde. Mit dem Motor lässt sich mittels PWM die Geschwindigkeit steuern. Es fehlt also noch ein Glied in der Kette um von Geschwindigkeit auf Wegstrecke zu kommen. Das ist der Integrator. Ein Integrator wird für die Modellierung gebraucht, weil die Wegstrecke das Integral der Geschwindigkeit über der Zeit ist. In der Mechanik gibt es noch mehr Beispiele mit Integralverhalten, wie z.B.:
    Schub -> Beschleunigung -> Geschwindigkeit -> Weg

    Als nächstes betrachten wir das Zeitverhalten der einzelnen Elemente. Der Liniensensor wird mit einem AD-Wandler ausgelesen. Das dauert etwas. Dafür müssen wir eine Verzögerung berücksichtigen. Weil dabei die Amplitude unverfälscht bleibt, ist es ein Verzögerungsglied 0. Ordnung. Der Einfachheit halber packen wir auch gleich die Rechenzeit des Prozessors da mit hinein. Es gibt auch Verzögerungsglieder höherer Ordnung, das werden wir gleich am Beispiel des Motors sehen. Ein Motor lässt sich nicht in beliebig kurzer Zeit beschleunigen, denn die Masse des Rotors hat eine Trägheit. Die physikalische Grösse dafür ist das Trägheitsmoment. Wenn man eine Spannung an einen Motor anlegt, dann beschleunigt der in einer e-Funktion, das ist wie bei einem RC-Glied, also wie ein Verzögerungsglied 1.Ordnung (PT1). Da das Trägheitsmoment bei Rotationsbewegungen äquivalent ist zur Masse bei geradliniger Bewegung kann man die Masse des Asuros auch gleich damit hinein packen. Damit hätten wir alle Elemente der Regelstrecke charakterisiert und können ein Modell der gesamten Regelschleife zeichnen (siehe Bild).

    Im Blockschaltbild ist der Regler noch eine Blackbox, den wollen wir ja herausfinden. Der nächste Block ist das Verzögerungsglied PT1, das stellt den Motor mit seinem Trägheitsmoment incl. Getriebe und Masse des Asuros dar. Die Schnittstelle zwischen PT1 und dem Integrator ist die Geschwindigkeit "v". Der Integrator errechnet daraus die Wegstrecke. Im Rückwärtszweig ist das Verzögerungsglied "delay", welches den Liniensensor und die AD-Wandlung modelliert. Danach steht der Istwert zur Verfügung. Der Istwert wird mit dem Sollwert verglichen (Subtraktion) und auf den Regler gegeben. Damit ist die Regelschleife geschlossen. Der Sollwert ist in unserem Fall 0, weil der Asuro möglichst ohne Abweichung der Linie folgen soll.

    Das reicht vorerst, ist genügend Stoff zum Verdauen. Eine Fortsetzung folgt, da werden dann die Kennwerte der einzelnen Blöcke (Liniensensor, Motor usw.) ermittelt.

    Gruss Waste
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken loop.gif  

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    19.07.2005
    Ort
    Nürnberg
    Alter
    44
    Beiträge
    54
    Uiuiuiuiuiiiii! Du meinst es ja echt ernst! Nicht schlecht! Freu mich schon auf eine Fortsetzung! Simuergebnisse wären auch echt interessant!

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Simulationen kommen noch, aber alles zu seiner Zeit.

    Aber wart's ab, wenn erst Differenzialgleichungen und Laplace-Transformation dran sind!
    Keine Angst, darauf werde ich verzichten. Ich bin da selbst nicht sattelfest.

    Gruss Waste

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Ups, ich hoffe ich greife jetzt nicht etwas vor.

    Teil 1, 2 und 3 habe ich mir so 'gedacht' und hab deshalb schon mal bei Punkt 4 angefangen. Dabei habe ich gleich das 'volle' Programm von P, I und D genutzt und einen PID-Regleger zusammengestellt und in C-Code umgesetzt. Punkt 5 ist bei mir funktionsfähig. (mein Gedanke zur Optimierung ist jetzt, dass ich in Kurven noch die Geschwindigkeit runterregeln möchte. Weiterer PID-Regler in Sicht. Aber wer weiss, was eine Kurve ist, wenn man nur 2 Detektoren hat?)

    In Datei gerade.c werden am Anfang Werte an die Variablen p1, p2, q0, q1 und q2 zugewiessen. Diese Werte habe ich mit Hilfe der im ZIP enthaltenen EXCEL-Datei ermittelt.
    Der Reiter 'Tabelle1' ist dafür zuständig.
    Der Reiter 'Tabelle2' kann die vom ASURO gesamelten Messwerte anzeigen. (Muster in PID.txt)

    Um die 'richtigen' Parameter zu finden habe ich mein Gefühl auf Reiter 'Tabelle1' losgelassen. Die grün hinterlegten Felder musste ich 'mal hier und mal dort' ändern um eine halbwegs 'schöne' Kurve zu bekommen.
    Dann habe ich die blauen Felder in gerade.c in die oben erwähnten Variablen (eigendlich Konstanten) übernommen.

    P.S.: Die kleine Formel unter /* Berechnung der Reglerausgangsgroesse */ ist der PID-Regler. Hier kann ich nur auf eine Z-Faltung der Summe aus proportionalem, integralem und differentialem Anteil in der Literatur hinweisen. Jedenfalls hat das da so gestanden. (Quelle ist leider im internet verloren gegangen. bzw. ich habe mal wieder keinen Bookmark gesetzt. sorry)

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018

    Jetzt mit ZIP?

    Ich versuche es nochmal mit der ZIP-Datei.
    So steigere ich wenigstens die Anzahl meiner Einträge

    Im übrigen fehlte folgendes:

    Schöne Grüße von Sternthaler
    Angehängte Dateien Angehängte Dateien

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.06.2005
    Ort
    DD
    Beiträge
    519
    Hi!

    Hab mich auch mal daran versucht einen PID-Regler in die von mir programmierte RoboterSimulation einzubauen, was aber irgendwie noch nicht richtig funktioniert.

    Vielleicht hat ja jemand Ahnung von Delphi oder es hilft sonst irgend jemandem.

    Beantworte gerne Fragen zum Programm!

    Grüße; ähM_Key
    Angehängte Dateien Angehängte Dateien

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Das sind ja interessante Programme!

    @Sternthaler
    Könntest du bitte dein Excelprogramm etwas näher erklären. Was bedeuten die Parameter? Kp, Ki, Kd, Ta sind klar, aber was bedeuten die anderen? Was kann man aus dem Diagramm ersehen? Wie geht man z.B. vor, wenn man eine möglichst schnelle und stabile Regelung haben will?

    Ich habe deinen PID-Linienfolger auf meinem Asuro kurz getestet. Kann es sein, dass der keine Rechtskurven mag oder bockt da wieder mal mein Asuro?

    @ähM_Key
    interessantes Programm, damit muss ich mich bei Gelegenheit noch näher befassen. Delphi kenn ich leider nicht, aber ansonsten will ich schon behilflich sein wo es geht, z.B. PID-Regler Theorie. Hast du eigentlich in dem Programm auch dynamische Prozesse berücksichtigt?

    Gruss Waste

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.06.2005
    Ort
    DD
    Beiträge
    519
    Hallo!

    Nein dynamische Prozesse sind leider nicht drinn, was mir ehrlich gesagt aber auch noch zu kompliziert ist.
    Das macht das gesammte Programm natürlich weniger tauglich, gerade, weil es sozusagen keine Ansprechzeit gibt.

    Hier mal der interessante Teil des Quelltextes vom Regler

    Code:
    procedure TForm1.followtrack;    /////////////////////////////////Spurverfolgung
    var
      m: integer;
      sensor1, sensor2, sensor, regel, yp, yi, yd: real;
    
    begin
      sensor1:=0;
      sensor2:=0;
      for m:=1 to sensoranzahl do begin
        if chk(m) and (sensor1=0) then begin
          if m<=sensoranzahl/2 then  sensor1:=-sensoranzahl/2-1+m
            else sensor1:=m-sensoranzahl/2;
          if m<>sensoranzahl then begin
            if chk(m+1) then begin
              if m+1<=sensoranzahl/2 then  sensor2:=-sensoranzahl/2+m
                else sensor2:=m+1-sensoranzahl/2;
            end;
          end;
        end;
      end;
    
      if sensor2<>0 then sensor:=(sensor1+sensor2)/2 else sensor:=sensor1;
    
      yp:=(kp/100)*(sensor/(sensoranzahl/2));
      yi:=yialt+(tast/100)/(ki/100)*sensor;
      yd:=(kd/100)*(sensor-sensoralt)/(tast/100);
    
      yialt:=yi;
      sensoralt:=sensor;
    
      regel:=yp+yi+yd;
    
      button6.caption:=floattostr(regel);
    
      if regel<0 then begin
        vr:=vr+abs(regel);
        if vr>=vmax then begin
          vr:=vmax;
          vl:=vl-abs(regel);
          if vl<0 then vl:=0;
        end;
      end;
      if regel>0 then begin
         vl:=vl+abs(regel);
         if vl>=vmax then begin
          vl:=vmax;
          vr:=vr-abs(regel);
          if vr<0 then vr:=0;
         end;
      end;     
    
    end;
    Der obere Teil berechnet nur, wo eine Linie unter den Sensoren liegt und im unteren werden die Motoren (L/R) angesteuert.

    Vielleicht kannst du ja was damit anfangen, ansonsten muss ich's halt noch mal genauer beschreiben.

    Grüße; ähM_Key

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Hallo ähM_Key,

    schade, dass keine dynamischen Prozesse drin sind, das wäre wirklich interessant gewesen. Ist aber trotzdem ein schönes Tool.

    Nun zu deinem Code:
    Die Formeln für den Regler sind im Prinzip ok, nur:
    ki wird normalerweise multipliziert, sollte aber trotzdem funktionieren, nur wirkt ki eben mit kleinerem Wert stärker
    warum wird bei yp zusätzlich durch sensoranzahl/2 geteilt und sonst bei yi und yd nicht?

    Für ein besseres Verständnis müsste ich noch wissen, welche Werte die Variable sensor annehmen kann bei typischen Abweichungen.

    Und noch was:
    Bei der Begrenzung bei vmax darfst du nur den Rest auf die andere Seite übertragen und nicht den vollen "regel"-Wert. Sonst ist es nicht linear. (Ausser es ist so gewollt)

    Gruss Waste

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.06.2005
    Ort
    DD
    Beiträge
    519
    Zitat Zitat von waste
    warum wird bei yp zusätzlich durch sensoranzahl/2 geteilt und sonst bei yi und yd nicht?

    Mein Fehler (dürfte an der Version liegen), natürlich sollte das entweder bei allen oder keinem sein.

    Zitat Zitat von waste
    Für ein besseres Verständnis müsste ich noch wissen, welche Werte die Variable sensor annehmen kann bei typischen Abweichungen.
    Also sensor kann bei 8 Sensoren die Werte -4 bis +4 annehmen;' sensor/sensoranzahl/2' dementsprechend -1 bis +1.

    Zitat Zitat von waste
    Bei der Begrenzung bei vmax darfst du nur den Rest auf die andere Seite übertragen und nicht den vollen "regel"-Wert. Sonst ist es nicht linear. (Ausser es ist so gewollt)
    Hmm, darüber habe ich mir noch gar keine Gedanken gemacht; werde ich bei Gelegenheit noch ergänzen!

    Grüße; ähM_Key

Seite 1 von 15 12311 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen