Как я могу предотвратить скольжение колес автомобиля raycast вбок?

11

Я писал нереалистичный автомобильный физический движок в качестве учебного упражнения, используя эту статью в качестве справочного материала.

У меня есть машина, которая правильно сталкивается с рельефом и применяет правильные силы подвески для каждого колеса. Моя следующая проблема - предотвратить боковое движение колес. Например, если я уроню свою машину на склон, она будет скользить в сторону вниз по склону, а затем никогда не перестанет скользить в сторону (поскольку никакого трения нет).

В связанной статье говорится, что «боковое усилие» должно быть приложено в сочетании с передним усилием, но в нем не указано, как рассчитывается это боковое усилие.

Учитывая информацию о столкновении для каждого колеса (нормальное пересечение и т. Д.) И информацию о твердом теле автомобиля, как я могу рассчитать соответствующую боковую силу, которая будет приложена к твердому телу для предотвращения бокового движения?

Kazade
источник

Ответы:

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» - это нормали местности, с которой столкнулось колесо, которая используется в качестве вектора «вверх» при расчете «нормали» колеса.

Kazade
источник
2
Да, я действительно не думал, что это даст вам нужный вам ответ, но это было слишком долго, чтобы добавить комментарий;)
Andon M. Coleman