Answers:
侧向力是道路法线相对于汽车前进方向的水平分量。就像您正在讨论的那样,道路是倾斜的,以加快转弯速度,而不会因将其推到外侧拐角而失去动力。胎侧向轮胎不能自由旋转且可以抵抗的方向推回;如果倾斜度足够高,重心足够高或速度足够慢,那么汽车本身就可以像一个轮子一样简单地翻身。
轮胎的转向范围有限。垂直于纵轴(从前到后)作用的力被部分抵抗,因为轮胎不会那样旋转。您可以根据重力和前进速度来计算在路面上作用在侧面的力,然后在轮胎擦掉一些摩擦力后计算剩余力。如果剩余力足够大,可以克服将汽车推入道路的力,则汽车将滑动/打滑。
水平作用力在这里特别有意义。在静止状态下(只有作用在其上的力是由于重力作用),除非摩擦系数极低(例如,结冰的道路),否则轿厢将不会沿着垂直行驶的斜坡滑行。
安东的答案并没有给我解决方案,但绝对可以使我走上正轨!
一旦我开始考虑到轮子在自己的平面上(法线是从中心伸出的向量-我将其称为轮子的“法线”),我就意识到侧向力就是将汽车的速度“推”到该平面上。该向量只是车轮的“法线”乘以标量,标量是速度与“法线”之间的点积。
这是我确定的可以完美运行的代码:
// Now calculate the side force. Get the linear velocity
auto vel = car->body()->linear_velocity();
auto side_force = car->wheel_right_axis(i, closest_normal);
// Find the length of the vector necessary to nullify the horizontal movement
auto dot = kmVec3Dot(&vel, &side_force);
// Scale the right vector to that length
kmVec3Scale(&side_force, &side_force, -dot);
在上面的代码中,“ closest_normal”是车轮碰撞的地形的法线,在计算车轮的“法线”时,该法线用作“向上”向量。