如何防止光线投射的车轮侧滑?


11

我一直在使用本文作为参考来编写一个非现实的汽车物理引擎作为学习练习。

我有一辆可以正确地与地形碰撞并为每个车轮施加正确的悬架力的汽车。我的下一个问题是防止车轮横向移动。例如,如果我将汽车停在斜坡上,它将在斜坡上向侧面滑动,然后再从侧面停止滑动(因为没有任何形式的摩擦)。

链接的文章说,必须施加“侧向力”,再加上向前的力,但它掩盖了该侧向力的计算方式。

给定每个车轮的碰撞信息(相交法线等)以及有关汽车刚体的信息,如何计算施加到刚体上的适当侧向力以防止侧向运动?

Answers:


10

侧向力是道路法线相对于汽车前进方向的水平分量。就像您正在讨论的那样,道路是倾斜的,以加快转弯速度,而不会因将其推到外侧拐角而失去动力。胎侧向轮胎不能自由旋转且可以抵抗的方向推回;如果倾斜度足够高,重心足够高或速度足够慢,那么汽车本身就可以像一个轮子一样简单地翻身。

轮胎的转向范围有限。垂直于纵轴(从前到后)作用的力被部分抵抗,因为轮胎不会那样旋转。您可以根据重力和前进速度来计算在路面上作用在侧面的力,然后在轮胎擦掉一些摩擦力后计算剩余力。如果剩余力足够大,可以克服将汽车推入道路的力,则汽车将滑动/打滑。

以下内容对此进行了说明,并 此进行了讨论(有无摩擦)

   https://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Banked_turn.svg/375px-Banked_turn.svg.png

水平作用力在这里特别有意义。在静止状态下(只有作用在其上的力是由于重力作用),除非摩擦系数极低(例如,结冰的道路),否则轿厢将不会沿着垂直行驶的斜坡滑行。


7

安东的答案并没有给我解决方案,但绝对可以使我走上正轨!

一旦我开始考虑到轮子在自己的平面上(法线是从中心伸出的向量-我将其称为轮子的“法线”),我就意识到侧向力就是将汽车的速度“推”到该平面上。该向量只是车轮的“法线”乘以标量,标量是速度与“法线”之间的点积。

这是我确定的可以完美运行的代码:

            // 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”是车轮碰撞的地形的法线,在计算车轮的“法线”时,该法线用作“向上”向量。


2
是的,我并不是真的认为这不会给您所需的答案,但是发表评论的时间太长了;)
Andon M. Coleman 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.