PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : S Bewegungsprofil S Trapez



jojo45
23.06.2012, 19:02
Hallo,

es geht mir um einen Sollwertgenerator der ein S Kurvenförmiges Bewegungsprofil für meinen Regler erzeugen soll.
Trapez ist kein Problem. Aber die S Profil will nicht bei mir. Gibt es irgenwo eine Beschreibung zur Mathematik, Beispielcode Open Source Projekte etc?
Hat jemand von euch schonmal sowas gemacht?

ranke
24.06.2012, 11:39
Soll es digital realisiert werden?
Mit S-förmig meinst Du, dass die schräge Rampe des Trapez mehr oder weniger abgerundete Ecken bekommen soll?
In der schrägen Rampe des Trapez ist die Änderung des Sollwerts mit der Zeit konstant. Wenn man die Ecken ausrunden will, kann man während des Einlaufs in das Trapez die Sollwertsänderung in einer (z.B. linearen) Rampe ansteigen lassen, für den Auslauf aus dem Trapez nutzt man zweckmäßigerweise die Symmetrie zum Einlauf.
Besser plaziert wäre der Thread in "Algorithmen und KI"

jojo45
24.06.2012, 12:02
Hallo, ja es soll digital realisert werden. Berechne das Profil mit meinem µC.
Genau, ich meine eine Ruckbegrenzte Bewegung.

An meinem Kurvenprofil soll der Ruck angegeben werden j = s/t³
Die Positive und "Negative" Beschleunigung
Die Maximalgeschwindigkeit die von der zu fahrenden Strecke abhängt.

Hast du sowas schonmal umgesetzt?

ranke
24.06.2012, 15:24
Soweit ich das bis jetzt verstanden habe ist die Regelgröße eine Strecke (Start- und Endpunkt vorgegeben) die so durchfahren werden soll, dass der maximale Ruck (also die zeitliche Ableitung der Beschleunigung) im Betrag konstant ist?
Ich muss das jetzt nochmals fragen, Du sagst ja nicht, worum es geht.
Wenn es so ist, dann ist der Ruck für das erste und letzte vierten der Bewegung konstant j=c und dazwischen konstant negativ j=-c.
Die Beschleunigung ist dann im erten und letzten Viertel der Bewegung linear ansteigend, dazwischen linear fallend. Die Geschwindigkeit entsprechend parabolisch und die Strecke entsprechend kubisch.
Vielleicht habe ich aber alles falsch verstanden. Warum schreibst Du nicht einfach was Du konkret machen willst?

PICture
24.06.2012, 18:01
Hallo!


Hat jemand von euch schonmal sowas gemacht?

Ich habe mal für meinen Funktionsgenerator einfachen (1 OPV + ein paar Dioden und R's) nur analogen Wandler einer dreieckiger in sinusoidale Spannung gebastelt: https://www.roboternetz.de/community/threads/48099-D%C3%A4mpfung-von-Schwingungen-mit-OpAmp-LM324?p=463135&viewfull=1#post463135

Ich denke, dass es digital am einfachsten mit einer Sprungtabelle ("lookup table") z.B. im EEPROM eines µC's für evtl. Experimentierung wäre. ;)

jojo45
24.06.2012, 18:02
Warum schreibst Du nicht einfach was Du konkret machen willst?




Sorry, da gebe ich dir recht. Also dann schreibe ich mal:
Ich möchte einen DC Motor mit Positionsrückführung über eine S Förmiges Bewegungsprofil auf eine Zielposition regeln.

Die Kurve dient als Sollwertgenerator der die Distanz des Weges übermittelt wird.
Dann kommt die Regelung vom Motor (Geschwindigkeit) um die geht es mir aber noch nicht.


Wenn es so ist, dann ist der Ruck für das erste und letzte vierten der Bewegung konstant j=c und dazwischen konstant negativ j=-c.
Die Beschleunigung ist dann im erten und letzten Viertel der Bewegung linear ansteigend, dazwischen linear fallend. Die Geschwindigkeit entsprechend parabolisch und die Strecke entsprechend kubisch.


Korrekt. So ist es.

Das Bewegungsprofil hat bestimmte Phasen bei einer kurzen Bewegung (ohne erreichen von V max) besteht das Profil aus 6 Teilen.

1. Beschleunigung mit konstantem positiven Ruck
2. Kontstante Beschleunigung
3. Beschleunigung mit konstantem negativen Ruck

4. Verzögerung mit konstantem negativen Ruck
5. Kontstante Verzögerung
6. Verzögerung mit konstantem positiven Ruck

Ich habe bereits einige Formeln für die Phasen aufgestellt:

jerk = Ruck [m/s³]
a_pos = Beschleunigung
a_neg = Verzögerung
t = Aktuelle Zeit

tjerk_pos = Ruckzeit von Beschleunigung
tjerk_neg = Ruckzeit von Verzögerung

1. v = a_pos + jerk/2 * t * t
2. v = a_pos + jerk / 2 * tjerk_pos * tjerk_pos
+ a_pos * (t - tjerk_pos);
3. v = a_pos + jerk / 2 * tjerk_pos * tjerk_pos
+ a_pos * ta_pos
+ a_pos * (t - tjerk_pos - ta_pos) + -jerk / 2 * (t - tjerk_pos - ta_pos) * (t - tjerk_pos - ta_pos);

An der 4. wo es wieder Richtung v0 geht scheitert es jetzt. Sind die Formeln oben überhaupt richtig?
Ich habe die mal geplottet:

ranke
24.06.2012, 19:36
Um Deine Frage von vorhin zu beantworten: Nein, das habe ich auch noch nicht gemacht.
Die Formeln können formal so nicht richtig sein: Die linke Seite beschreibt eine Geschwindigkeit, deshalb müssen die Einzelsummanden auf der rechten Seite auch jeweils die Dimension einer Geschwindigkeit haben, der jeweils erste Term hat aber die Dimension einer Beschleunigung. Da muss man also wohl nochmal nachbessern.
Wenn es aber gelingt die ersten drei Abschnitte zu beschreiben dann sollte die Arbeit eigentlich schon gemacht sein: aus Symmetriegründen sollten die folgenden Abschnitte damit auch definiert sein, mit jeweils umgekehrten Vorzeichen bei der Beschleunigung. (Eine Ausnahme bildet der Fall, dass sich der Zielwert während der Bewegung noch ändern kann.)

jojo45
24.06.2012, 21:16
Die Formeln können formal so nicht richtig sein
Da hast du recht. Jetzt verstehe ich gar nichts mehr ... :(

jojo45
27.06.2012, 22:49
So, jetzt nochmal. Welche Motionprofil verwendet ihr denn alle um euere Roboter zu steuern? Verwendet ihr nur Trapezprofile?
Habe Mein S-Profil fertig, muss jedoch noch mathematisch optimiert werden.