Ich versuche, ein Auto mit korrekten Physikmodellen zu simulieren. In diesem Beispiel lassen wir das Auto eine konstante Geschwindigkeit haben, und es gibt keine Kräfte (Reibung und Widerstand), um die Geschwindigkeit zu verlangsamen.
Hier ist ein Video, das mein Problem zeigt. Als ich die Kurve verlasse, indem ich das Vorderrad gerade drehe, folgt die Geschwindigkeit des Autos nicht. Video: https://vid.me/XrSJ . Die Geschwindigkeit des Autos wird mit einem blauen Pfeil angezeigt, die Zentripetalkraft mit einem grünen und die Beschleunigung mit einem roten Pfeil.
Der Simulation fehlt also etwas, was dazu führen würde, dass die Richtung der Geschwindigkeit der Richtung des Vorderrads folgt, wenn sich das Vorderrad gerade richtet. Was ist dieses fehlende Stück, woher kommt es und wie wird es berechnet?
AKTUALISIEREN
Das folgende Bild veranschaulicht, wie ich die auf das Auto wirkenden Kräfte berechnet habe. Das Auto hat gerade eine Linkskurve gemacht, aber sein Vorderrad wurde sofort nach rechts gedreht. Deshalb haben Hinter- und Vorderrad unterschiedliche Kurvenmittelpunkte.
Der Kurvenpunkt des Hinterrads wird immer relativ zur Geschwindigkeit des Autos berechnet (beachten Sie die 90 Grad zwischen der Geschwindigkeit des Autos und dem Radius zum Kurvenpunkt. Ich bin mir nicht sicher, ob er stattdessen relativ zur Geschwindigkeit des Vorderrads berechnet werden sollte.
Es passieren mehrere interessante Dinge, wenn ein Auto abbiegt.
Nehmen wir zunächst das einfache Diagramm von zwei um 45° gedrehten Vorderrädern:
Wie Sie sehen können, möchte der obere Reifen, dass das Auto um den Punkt dreht , aber der untere Reifen (im gleichen Winkel) will sich umdrehen . Dies bedeutet, dass in Wirklichkeit beide Reifen einen gewissen seitlichen Schlupf erfahren werden. In gewöhnlichen Autos wird dieses Problem normalerweise mit der sogenannten Ackermann-Lenkgeometrie gelöst , bei der sich die Räder um einen geringfügig anderen Betrag drehen, sodass beide den gleichen Drehpunkt "wollen". Das bedeutet, dass das innere Rad in Wirklichkeit etwas stärker gedreht wird als das äußere Rad:
Dies ist eine kleine Vereinfachung, aber ich hoffe, Sie verstehen, dass Räder im Allgemeinen nicht in die gleiche Richtung zeigen sollten, wenn Sie abbiegen (tatsächlich zeigen sie aus Stabilitätsgründen nicht in die gleiche Richtung, wenn Sie geradeaus fahren, entweder - dies wird als Spur bezeichnet und muss von Zeit zu Zeit angepasst werden, wenn Sie eine Achsvermessung an Ihrem Auto durchführen lassen).
Betrachten wir nun die auf die Räder wirkenden Kräfte.
Der Einfachheit halber werde ich nur zwei Räder zeichnen, wie Sie es in Ihrer Simulation getan haben. Wir sehen, dass das innere Rad eine engere Kurve macht als das äußere Rad; Die Nettokraft auf das Auto muss so sein, dass der Schwerpunkt macht einen Kreis mit Radius ungefähr Punkt :
Nehmen wir nun zunächst an, dass die Räder nur Seitenreibung haben, das heißt, sie rollen perfekt und die Kraft auf sie wirkt senkrecht zur Richtung, in die sie zeigen. Die resultierende Kraft muss auf das Massenzentrum zentriert sein und auf das Rotationszentrum zeigen. Mit anderen Worten - können wir lösen für Und ? Ausweitung der Kräfte Und Entlang ihrer Richtung erhalten wir das folgende Diagramm und sehen, dass es eine Beziehung zwischen ihnen gibt Und :
Wenn nun das Vorderrad die Richtung ändert, in die es zeigt, ändern sich Betrag und Richtung der Kraft, die es liefert. Aber bis das Auto seine Bahn ändert, wird die Kraft auf das Heck ( ) ändert sich nicht.
Was Sie tun müssen, ist dies.
Indem Sie den Winkel der Vorderräder ändern und die Rotation im stationären Zustand auflösen (im Grunde das Parallelogramm der Kräfte lösen, das ich oben gezeichnet habe), erhalten Sie eine Beziehung zwischen den Kräften Und und der Winkel zwischen dem Rad und dem Geschwindigkeitsvektor (tatsächlich ist dieser genauso groß wie die Winkel Und in meinem Diagramm).
Wenn das Vorderrad die Richtung ändert, ändern Sie den Winkel zwischen ihm und dem Geschwindigkeitsvektor; Wenn Sie jedoch das Vorderrad plötzlich auf "gerade" stellen, befindet sich das Hinterrad (noch) in einem Winkel zum Geschwindigkeitsvektor. Dies bedeutet, dass es eine Seitenkraft gibt (die Sie aus der obigen Beziehung berechnen können) und ein Drehmoment, das das Auto gerade richtet.
UPDATE Eine bessere Möglichkeit, die Bewegungsgleichung zu betrachten, besteht darin, rückwärts zu arbeiten: Sie wissen, dass die Bewegung der Schriftart des Autos der Richtung folgen muss, in die das Rad (augenblicklich) zeigt; Ebenso muss der Rücken der Richtung folgen, in die das Hinterrad zeigt. Dies sagt Ihnen, welche Position das Auto danach einnehmen wird , und daraus können Sie die momentane Beschleunigung und damit die Kraft / das Drehmoment der Räder berechnen. Ein solches Modell gibt Ihnen sowohl die richtige Bewegung als auch die richtigen Kräfte.
Ich habe eine einfache Implementierung der Bewegung (nicht der Kraftberechnung) in Python geschrieben:
# simple car simulation
# one front wheel, one back wheel
import math
import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
def sind(x):
return math.sin(x*math.pi/180.)
def cosd(x):
return math.cos(x*math.pi/180.)
def atan2d(y,x):
return 180/math.pi*math.atan2(y,x)
# dimensions:
length = 2 # axis to axis
# time when wheel is turned, and by how much:
timePoints = [0, 1, 5, 9, 12, 15]
thetaPoints = [0, 0, 15, 15, 0, 0]
theta = interpolate.interp1d(timePoints, thetaPoints)
# time step for simulation:
dt = 0.05
# show that it worked:
plt.figure()
t = np.arange(0, 15, dt)
plt.plot(t, theta(t))
plt.xlabel('time')
plt.ylabel('steering angle')
plt.title('steering angle vs time')
plt.show()
# position of rear wheel of car at time t:
x = 0
y = 0
# velocity of rear wheel
v = 5
# angle of car body
alpha = 0
plt.figure()
for T, th in enumerate(theta(t)):
dx = v * dt * cosd(alpha)
dy = v * dt * sind(alpha)
vf = v / cosd(th)
dxf = vf * dt * cosd(th+alpha)
dyf = vf * dt * sind(th+alpha)
yl = dyf - dy + length * sind(alpha)
xl = dxf - dx + length * cosd(alpha)
alpha = atan2d(yl, xl)
plt.plot(x,y,'.b')
if (T%50==0):
plt.plot([x, x+xl], [y,y+yl], 'r', linewidth=5)
x = x + dx
y = y + dy
plt.xlabel('x')
plt.ylabel('y')
plt.title('trajectory')
plt.axis('equal')
plt.show()
In diesem Fall wird das Rad langsam gedreht - gemäß folgendem Diagramm:
und die Flugbahn wird durch dieses Diagramm angegeben (die rote Linie entspricht der Richtung, in die das Auto alle 2,5 Sekunden zeigt - Sie können sehen, dass das Auto bei geradem Rad der Richtung der Räder folgt):
Ich verstehe nicht, warum diese Frage nicht in den Kommentaren beantwortet wurde. Wenn keine Reibung vorhanden ist, kann die "Richtung der Räder" das Auto nicht drehen. Es ist, als stünde das Auto auf einer glatten Eisfläche. (Diejenigen von uns, die schon einmal bei Winterwetter gefahren sind, kennen das Gefühl, auf eine Stelle mit „Schwarzeis“ zu stoßen.)
Um Ihre Frage direkt zu beantworten: Wenn die Richtung der Geschwindigkeit der Vorderseite des Autos nicht mit der Richtung der Vorderräder übereinstimmt, verformt sich der Reifen und wirkt wie eine Feder, die eine Seitenkraft auf das Auto ausübt. Die Abweichung zwischen diesen Richtungen wird Schräglaufwinkel genannt, und die Seitenkraft auf den Reifen ist in erster Näherung proportional zu diesem Schräglaufwinkel.
In Ihrem Modell sieht es so aus, als würden die Kräfte unter der Annahme berechnet, dass sich das Auto bereits in die richtige Richtung bewegt. Dies funktioniert gut, wenn sich das Auto in die richtige Richtung bewegt , aber sobald es eine Abweichung gibt (z. B. verursacht durch eine plötzliche Änderung der Radposition), werden die berechneten Kräfte falsch sein. Als spezifisches Beispiel: Wenn das Rad gerade ausgerichtet ist, "sollte" die Bewegung gerade sein, also "sollte" die Kraft null sein, und Ihr Modell gibt Ihnen treu null Kraft, ohne das Auto tatsächlich gerade zu richten.
Um Ihre Kräfte korrekt zu modellieren, könnten Sie eine Gleichung in der Art von verwenden
Wo ist eine Konstante, ist die Geschwindigkeit der Front des Autos, und ist ein Einheitsvektor in Richtung der Achse des Vorderrads (Beachten Sie, dass es keine Rolle spielt, in welche Richtung entlang dieser Achse er zeigt, als ob Sie ihn umdrehen, die Größe wird sich auch umdrehen)
Dies funktioniert auch für das Hinterrad
Natürlich sind die Kräfte jetzt nicht mehr senkrecht zu den Geschwindigkeiten, so dass Sie Reibungsverluste bekommen. Auf der positiven Seite wären dies realistische Reibungsverluste, aber wenn Sie wollten, dass Ihr Auto unbegrenzt in Kurven rollt, würde diese Behandlung der Räder dies nicht zulassen.
Ich habe eine Simulation erstellt, die diese Kräfte integriert, um einen Fahrzeugpfad zu ergeben, aber die naive Implementierung ist numerisch sehr instabil und erfordert einen Zeitschritt von 0,0005 s, um ein stabiles Ergebnis mit Schlupfkoeffizienten zu erhalten, die vernünftige Ergebnisse zu liefern scheinen.
Dies verwendete das gleiche Setup wie Floris, um Ihnen einen Vergleich der Ergebnisse zu ermöglichen.
Radstand 2 m, Anfangsgeschwindigkeit 5 m/s und gleiches Lenkwinkelprofil.
Angesichts der Probleme mit der numerischen Stabilität bei der Verwendung dieser Methode würde ich empfehlen, den Weg zu gehen, den Floris erkundet hat.
Wenn ich einen Weg finde, die Methoden einfach zu kombinieren, werde ich aktualisieren.
Wenn Sie das Fahrzeug beschleunigen und wenden, verschiebt sich der Schwerpunkt von verschiedenen Teilen der Karosserie. Vielleicht interpretiere ich deine Frage aber falsch..
Floris
Gesetze
Gesetze
Floris
Xeren Narcy
Gesetze
Floris
John Alexiou