Ok, ich bin zurück mit Ergebnissen!
Ich habe zwei Ansätze ausprobiert:
Unter Verwendung der Festkörpermechanik wird eine Differentialgleichung abgeleitet, die die Bewegung der Radmitten regelt: Die Eingaben des Systems "Fahrrad" sind das Drehmoment am Hinterrad und der Winkel des Vorderrads, und die Ausgänge sind die Kinematik der Zentren der Räder. Aber ich habe aufgegeben, es war schwer!
Der Versuch zu erraten, was unter geometrischen Gesichtspunkten passiert, wenn das Hinterrad das Vorderrad nach vorne "drückt", wobei das Vorderrad nicht gerade ist. Diese Methode liefert direkt eine Gleichung mit infinitesimalen Inkrementen (siehe unten), aus der Sie eine tatsächliche Differentialgleichung erhalten können. Ich habe nicht versucht, diese erste Gleichung zu manipulieren, um die ODE zu erhalten, aber ich vermute, dass ich dieselbe ODE mithilfe der Festkörpermechanik erhalten hätte. Es fühlt sich einfach richtig an.
Notationen und Hypothesen:
Wir sind in der Ebene mit Basisvektoren ex und ey .
A ist die Mitte des Hinterrads. B ist die Mitte des Vorderrads. Die Länge des Motorrads L ist der Abstand zwischen A und B . Der Winkel zwischen ey und dem Vektor AB beträgt φ . Der Winkel zwischen AB und dem Vorderrad beträgt θ .
Intuitive Begründung:
Wir gehen davon aus, dass zu einem bestimmten Zeitpunkt t , A (t) eine Geschwindigkeit V (t) kolinear mit AB . Daher ist für einen infinitesimalen Zeitschritt dt ,
A (t + dt) = A (t) + V (t) .dt .
Wir nehmen auch an, dass zum Zeitpunkt t das Vorderrad nicht driftet, dh die Geschwindigkeit von B ist kolinear zur Richtung des Vorderrads, dh es bildet mit AB einen Winkel θ . Wir nennen Uθ den Einheitsvektor, der mit AB einen Winkel θ bildet , dh den Einheitsvektor mit der gleichen Richtung wie das Vorderrad.
Daher wird bei t + dt ,
B (t + dt) = B (t) + λ.Uθ
für ein bestimmtes reales, positives λ, so dass die Länge des Fahrrads L erhalten bleibt:
Abstand (A (t + dt), B (t + dt)) = L.
Berechnungen:
Diese letzte Gleichung übersetzt in
Norm² (B (t) + λ.Uθ - A (t) - V (t) .dt) = L²
aber B (t) ist per Definition A (t) + L.Uφ , so dass λ die Gleichung erfüllen muss
norm² (L.Uφ + λ.Uθ - V (t) .dt) = L² .
Die Lösung ist natürlich unabhängig von φ, da das Problem dasselbe ist, wenn das Fahrrad auf positives y zeigt . Wenn wir also R die Rotationsmatrix mit dem Winkel -φ nennen , muss λ die positive Lösung von sein
norm² (L.ey; + λ.Uθ - RV (t) .dt) = L² .
Wenn wir nach einigen Berechnungen v die Norm von V nennen , erhalten Sie
λ = L. (sqrt (1 - (sin (θ). (1-v.dt / L)) ²) - cos (θ)) + v.dt.cos (θ) .
Hier ist der Pseudocode, mit dem ich die obige Animation erhalten habe (anstelle von Uθ verwende ich u = U (θ + φ), weil es einfacher war):
// I start at i=1 because i=0 contains the initial values
for (int i=1; i<=N; i++)
{
// the array in which I stored the successive A points
Aarray[i] = Aarray[i-1] + dt*V;
float lambda = L*( sqrt(1 - (sin(theta)*(1-v*dt/L))**2) - cos(theta) )
+ cos(theta)*v*dt;
// the array in which I stored the successive B points
Barray[i] = Barray[i-1] + lambda*u;
// the AB vector normalized
AiBiUnit = (Barray[i] - Aarray[i])/L;
// Refreshing the velocity of A
V = v*AiBiUnit;
// Refreshing u.
// u is indeed a unit vector separated from AiBiUnit by an angle theta,
// so you get it by rotating the newly computed AiBiUnit by an angle
// of +theta:
u = AiBiUnit.rotate(theta);
}
Wenn Sie viel wiederholen und / oder den Lenkwinkel vergrößern, ist die Flugbahn ein Kreis, der meiner Meinung nach kohärent ist.