Estoy tratando de simular un automóvil con modelos físicos correctos. En este ejemplo, dejamos que el automóvil tenga una velocidad constante y no hay fuerzas (fricción y arrastre) para reducir la velocidad.
Aquí hay un video que muestra mi problema. Cuando salgo de la curva girando la rueda delantera en línea recta, la velocidad del automóvil no me sigue. Vídeo: https://vid.me/XrSJ . La velocidad del carro se muestra con una flecha azul, la fuerza centrípeta con una verde y la aceleración con una flecha roja.
Por lo tanto, a la simulación le falta algo que haría que la dirección de la velocidad siguiera la dirección de la rueda delantera a medida que la rueda delantera se endereza. ¿Qué es esta pieza que falta, de dónde viene y cómo se calcula?
ACTUALIZAR
La siguiente imagen ilustra cómo calculo las fuerzas que actúan sobre el automóvil. El automóvil acaba de girar a la izquierda, pero su rueda delantera giró instantáneamente a la derecha. Es por eso que las ruedas traseras y delanteras tienen diferentes puntos de centro de curva.
El punto de la curva de la rueda trasera siempre se calcula en relación con la velocidad del automóvil (tenga en cuenta los 90 grados entre la velocidad del automóvil y el radio hasta el punto de la curva. No estoy seguro si debe calcularse en relación con la velocidad de la rueda delantera).
Hay varias cosas interesantes que suceden cuando un automóvil gira.
Primero, tomemos el diagrama simple de dos ruedas delanteras giradas 45 °:
Como puede ver, a la llanta superior le gustaría que el auto diera la vuelta al punto , pero el neumático de abajo (en el mismo ángulo) quiere dar la vuelta . Esto significa que, en realidad, ambos neumáticos experimentarán algún deslizamiento lateral. En los automóviles comunes, este problema normalmente se resuelve con algo llamado geometría de dirección de Ackermann , que hace que las ruedas giren en una cantidad ligeramente diferente, por lo que ambas "quieren" el mismo centro de rotación; esto significa que, en realidad, la rueda interior gira un poco más bruscamente que la rueda exterior:
Esto es un poco simplificado, pero espero que se dé cuenta de que, en general, las ruedas no deben apuntar en la misma dirección cuando gira (de hecho, por razones de estabilidad, no apuntan en la misma dirección cuando conduce en línea recta, cualquiera de los dos: esto es algo que se llama puntera y necesita ajustarse de vez en cuando cuando realiza una alineación de las ruedas en su automóvil).
Ahora veamos las fuerzas que actúan sobre las ruedas.
Para simplificar las cosas, voy a dibujar solo dos ruedas como hiciste en tu simulación. Vemos que la rueda interior está haciendo un giro más cerrado que la rueda exterior; la fuerza neta sobre el automóvil debe ser tal que el centro de masa hace un circulo de radio sobre el punto :
Ahora supongamos inicialmente que las ruedas solo tienen fricción lateral: es decir, ruedan perfectamente y la fuerza sobre ellas es perpendicular a la dirección en la que apuntan. La fuerza resultante debe estar centrada en el centro de masa y apuntar al centro de rotación. En otras palabras, ¿podemos resolver para y ? Extendiendo las fuerzas y a lo largo de su dirección, obtenemos el siguiente diagrama y vemos que hay una relación entre y :
Ahora, si la rueda delantera cambiara la dirección en la que apunta, la cantidad y la dirección de la fuerza que proporciona cambiarán. Pero hasta que el automóvil cambie su camino, la fuerza en la parte trasera ( ) no cambia.
Lo que tienes que hacer es esto.
Cambiando el ángulo de las ruedas delanteras y resolviendo la rotación en el estado estacionario (básicamente, resolviendo el paralelogramo de fuerzas que dibujé arriba) obtendrás una relación entre las fuerzas y y el ángulo entre la rueda y el vector velocidad (de hecho, este es el mismo en magnitud que los ángulos y en mi diagrama).
Cuando la rueda delantera cambia de dirección, está cambiando el ángulo entre ella y el vector de velocidad; pero si de repente cambia la rueda delantera para que apunte "recto", la rueda trasera (todavía) se encuentra en un ángulo con el vector de velocidad. Esto significa que habrá una fuerza lateral (que puedes calcular a partir de la relación anterior) y un par que enderezará el auto.
ACTUALIZAR una mejor manera de ver la ecuación de movimiento es trabajar al revés: sabe que el movimiento de la fuente del automóvil debe seguir la dirección en la que apunta (instantáneamente) la rueda; del mismo modo, la parte trasera debe seguir la dirección en la que apunta la rueda trasera. Esto le dice cuál será la posición del automóvil después , y a partir de esto puede calcular la aceleración instantánea y, por lo tanto, la fuerza/par de las ruedas. Tal modelo le dará el movimiento correcto así como las fuerzas correctas.
Escribí una implementación simple del movimiento (no el cálculo de la fuerza) en Python:
# 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()
En este caso, la rueda gira lentamente, de acuerdo con el siguiente diagrama:
y la trayectoria viene dada por este gráfico (la línea roja corresponde a la dirección en la que apunta el automóvil cada 2,5 segundos; puede ver que cuando la rueda está recta, el automóvil sigue la dirección de las ruedas):
No entiendo por qué esta pregunta no ha sido respondida en los comentarios. Si no hay fricción, entonces la "dirección de las ruedas" no puede hacer girar el automóvil. Es como si el coche estuviera sobre una pista de derrape de hielo puro. (Aquellos de nosotros que hemos conducido en clima invernal conocemos la sensación de encontrar un parche de "hielo negro").
Para responder a su pregunta directamente, cuando la dirección de la velocidad de la parte delantera del automóvil no coincide con la dirección de las ruedas delanteras, la llanta se deforma y actúa como un resorte que ejerce una fuerza lateral sobre el automóvil. La desviación entre estas direcciones se denomina ángulo de deslizamiento y, en una aproximación de primer orden, la fuerza lateral sobre el neumático es proporcional a este ángulo de deslizamiento.
En su modelo, parece que las fuerzas se calculan suponiendo que el automóvil ya se está moviendo en la dirección correcta. Esto funciona bien cuando el automóvil se mueve en la dirección correcta, pero tan pronto como haya una desviación (por ejemplo, causada por un cambio repentino en la posición de la rueda), las fuerzas calculadas serán incorrectas. Como un ejemplo específico, si la rueda apunta en línea recta, el movimiento "debería" ser recto, por lo que "debería" haber cero fuerza, y su modelo fielmente le da cero fuerza, sin poder enderezar el automóvil.
Para modelar correctamente sus fuerzas, podría usar una ecuación a lo largo de las líneas de
Dónde es una constante, es la velocidad de la parte delantera del automóvil, y es un vector unitario en la dirección del eje de la rueda delantera (Tenga en cuenta que no importa en qué dirección a lo largo de ese eje apunte, ya que si lo voltea, la magnitud también cambiará)
Esto también funciona para la rueda trasera.
Por supuesto, ahora las fuerzas ya no son perpendiculares a las velocidades, por lo que obtendrá pérdidas por fricción. En el lado positivo, estas serían pérdidas por fricción realistas, pero si quisiera que su automóvil girara indefinidamente en las curvas, este tratamiento de las ruedas no lo permitiría.
Creé una simulación que integra estas fuerzas para dar una trayectoria al vehículo, sin embargo, la implementación ingenua es muy inestable numéricamente y requiere un paso de tiempo de .0005 s para obtener un resultado estable con coeficientes de deslizamiento que parecen producir resultados razonables.
Esto estaba usando la misma configuración que Floris para darle una comparación de los resultados.
Distancia entre ejes de 2 m, velocidad inicial de 5 m/s y el mismo perfil de ángulo de dirección.
Dados los problemas de estabilidad numérica con este método, recomendaría intentar seguir la ruta que ha explorado Floris.
Si encuentro una manera de combinar fácilmente los métodos, actualizaré.
cuando acelera el vehículo y gira, el centro de gravedad se desplaza desde diferentes partes de la carrocería. Aunque tal vez estoy malinterpretando tu pregunta...
floris
leyes
leyes
floris
Narcy Xeren
leyes
floris
Juan Alexiou