Як запобігти ковзання коліс автомобіля Raycast ковзанням?


11

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

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

У пов'язаній статті йдеться про те, що потрібно застосовувати "бічну силу" в поєднанні з силою вперед, але вона визначає, як обчислюється ця бічна сила.

З огляду на інформацію про зіткнення для кожного колеса (перехрестя нормальне тощо) та інформацію про жорстке тіло автомобіля, як я можу розрахувати відповідну бічну силу, яка застосовується до жорсткого кузова, щоб запобігти рухомому боковому руху?

Відповіді:


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);

У наведеному вище коді "найближчий_нормальний" - це нормальність місцевості, в яку зіткнулося колесо, яка використовується як вектор "вгору" при обчисленні "нормального" колеса.


2
Так, я не дуже думав, що збирається дати тобі потрібну відповідь, але це було занадто довго, щоб викласти коментар;)
Андон М. Коулман,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.