Anhängernachführung
-
Guten Tag liebe Mitmenschen!
Und zwar habe ich einmal einen LKW-Simulator programmiert, natürlich alles schön idealisiert und festen Zeitschritten, in denen alle Einflussgrößen für die "Simulation" als konstant angenommen werden. Während ich die Mathematik für die Zugmaschine (zumindest in ihren Einschränkungen) exakt ausführen konnte, hatte ich mit der Simulation eines angekoppelten Anhängers mehr Probleme. Ich bin dann dazu übergegangen, dass die Kupplung am Anhänger der Kupplung an der Zugmaschine "auf geradem Weg" folgt und selbst dies habe ich dadurch vereinfacht, dass er sich in einem ersten Schritt zur Zugmaschine ausrichtet und im zweiten Schritt so weit in seine Richtung bewegt wird, bis die zwei Kupplungen sich wieder decken. Allerdings ist klar, dass das nicht 100% genau ist - man könnte ja auch erst verschieben und dann drehen. Da man aber mit bloßem Auge nichts ungenaues erkennen konnte, habe ich mich darauf beschränkt, mir zu überlegen, wie groß der Fehler der Berechnung maximal werden könne, natürlich in Abhängigkeit der Einflussgrößen (Winkel, Anhängerlänge, Weg pro Zeitschritt).
Allerdings wurmt es mich immer noch, eine exakte Formel zur Positionsbestimmung zu finden. Ich habe hier mal die beiden oben erwähnten Ansätze zu einer Zeichung zusammengefasst:
http://img11.imageshack.us/img11/6784/anhnger.pngNun muss ja offenbar die wahre Position des Anhängerhecks auf dem roten Kreissegment sein und "a" gibt den maximalen Winkelfehler meiner bisherigen Herangehensweise an. Mein Gedanke war jetzt, dass man ja natürlich die dargestellte geradlinige Bewegung des Kupplungspunkts in unendlich viele kleine Schritte unterteilen kann (wobei dann für jeden Schritt die beiden Möglichkeiten der Berechnung "konvergieren") und hinterher das ganze irgendwie aufintegrieren, um auf eine exakte Position auf dem roten Kreissegment zu kommen.
Macht das Sinn? Wie macht man das am besten? Oder gibt es gar noch eine viel einfachere Argumentation die leicht auf das richtige Ergebnis führt?Viele Grüße,
Michael
-
du hast folgende bedingungen:
a ~ anhängerposition x ~ lkw-position
|a - x| = const. da/dt parallel zu (x-a)
das kann man umformulieren zu
0 = d/dt |a - x| = (a-x)/|a-x| d/dt a - (a-x)/|a-x| d/dt x |da/dt| * |x-a| = |da/dt * (x-a)|
nach einer simplen umformung
d/dt a = |(a-x) d/dt x|/|a-x| (x-a)/|x-a| = |(a-x) d/dt x| (x-a)/(x-a)^2
das ist die differenzialgleichung, die du lösen willst. ich sehe gerade keine algebraische lösung, aber es gibt auch schöne numerische verfahren.
-
Hallo!
da/dt parallel zu (x-a)
Ich musste da bestimmt eine Minute draufschauen, bis es mir wie Schuppen von den Augen fiel, na klar!
Vielen Dank für die Erklärung, ich werde mal schauen, ob ich die DGL gelöst bekommeNumerisch wär ja auch schon gut, dann kann ich die Fehlerberechnung wenigstens präzise ausführen.
Viele Grüße,
Michael
-
Also ich habe weiter zu dem Thema rumgeforscht und komme zu dem Ergebnis, dass das ganz schön kompliziert ist. Wie ich herausgefunden habe, bezeichnet man solche Kurven als Traktorix (oder wie auch immer davon die Mehrzahl lautet). Allerdings werden diese in allen Beispielen stärker vereinfacht, als es in meinem Beispiel möglich ist, um überhaupt auf eine schöne Lösung zu kommen. Ich habe es dann mal in Maxima per Laplace-Transformation versucht, führte aber zu nix. Wie man damit Differentialgleichungssysteme mit Wurzeln lösen könnte, war auch schwer herauszufinden. Als reines CAS kann das leider numerisch auch nix.
Also bleibt mir nix anderes, als diese numerische Lösung selber zu betreiben, meinen Fähigkeiten entsprechend.
Die allgemeine Gleichung, die ich jetzt betrachte, lautet:a(t) = p(t) + d * p'(t) * 1 / abs(p'(t)) (im bewegten Fall, also abs(p'(t)) > 0)
Wenn ich mir nun die Betrachtungsweise aus meiner Zeichnung so zurechtlege, dass ich die Bewegung des führenden Punkts in beliebig viele (x) Teilbewegungen unterteile und deren resultierenden Drehungen und Verschiebungen aufsummiere, dann würde ich ja die gesuchte Kurve erhalten, wenn x->unendlich. Das begründe ich jetzt dadurch, dass der Winkel zwischen tatsächlicher Bewegungsrichtung und der durch meinen Ansatz berechneten beliebig klein wird. Oder anders betrachtet, der Drehwinkel geht gegen 0 und die Bewegung des nächsten Schritts geht FAST in dieselbe Richtung wie die Ausrichtung diesen Schritts.
Also falls nicht noch jemand eine Idee hat, wie ich die Gleichung oben zB. mit Maxima oder irgend einer anderen (eher kostenlosen) Software lösen kann, ist der Gedankengang soweit richtig? Dann würde ich einfach ein kleines Programm schreiben, dass x schrittweise erhöht, bis sich an der Kurve nichts wichtiges mehr signifikant ändert.
Viele Grüße,
Michael
-
Hi,
du kannst es so machen, aber diese Art der Integration ist nicht sehr gut.
Schau dir am besten http://de.wikipedia.org/wiki/Runge-Kutta-Verfahren an.Du musst das problem in der Form
dy/dt = f(t, y(t))
formulieren. Dann wendest du z.B. das Heun-Verfahren 2. Ordnung (steht unten bei den Beispielen) an.
-
Hi, vielen Dank für Deine Antwort!
dy/dt = f(t, y(t))
Es auf diese Form zu bringen, ist leider mein Hauptproblem. Die Gleichungen (es sind ja zwei, in meinem Fall) sind ja über die Norm der Ableitung gekoppelt. Wenn sie linear gekoppelt wären, könnte ich sie ja über die Eigenvektor-Eigenwert-Diagonalisierung entkoppeln. Aber genau das geht ja hier nicht (zumindest weiß ich nicht wie). Wenn ich auf die Form käme, wäre mein Problem praktisch gelöst, denn ich habe inzwischen rausgefunden, wie ich das mit Octave berechnen lassen könnte.
Viele Grüße,
Michael
-
Decimad schrieb:
Hi, vielen Dank für Deine Antwort!
dy/dt = f(t, y(t))
Es auf diese Form zu bringen, ist leider mein Hauptproblem. Die Gleichungen (es sind ja zwei, in meinem Fall) sind ja über die Norm der Ableitung gekoppelt. Wenn sie linear gekoppelt wären, könnte ich sie ja über die Eigenvektor-Eigenwert-Diagonalisierung entkoppeln. Aber genau das geht ja hier nicht (zumindest weiß ich nicht wie). Wenn ich auf die Form käme, wäre mein Problem praktisch gelöst, denn ich habe inzwischen rausgefunden, wie ich das mit Octave berechnen lassen könnte.
Viele Grüße,
Michaelwas ist bei dir a(t) und was p(t)?
-
a(t) ist der Punkt, dem der verfolgende Punkt in festem Abstand folgen soll. Hier wollte ich dann evtl. mal Kreisbögen oder geraden im bestimmten Winkel ansetzen.
p(t) ist das Zentrum der Hinterachse des Anhängers, also "die verfolgende" Funktion.
Beide sind parametrisch vektoriell und in meinem Fall halt 2-dimensional.
Viele Grüße,
Michael
-
warum nimmst du nicht die formel aus dem zweiten beitrag?
-
Ich hätte sie von anfang an nehmen wollen, allerdings ist das 2D-System (Die Komponentengleichungen) nichtlinear gekoppelt und ich konnte sie deshalb nicht entkoppeln, was für die ersten Programme, mit denen ich es versucht habe, nötig gewesen wäre.
Inzwischen habe ich es geschafft, nach Probiererei mit mehrere Paketen. Mathematica konnte sie schließlich numerisch lösen.Viele Grüße,
Michael