Jak zapobiec przesuwaniu się kół samochodu Raycast na boki?

11

Pisałem nierealistyczny silnik fizyki samochodu jako ćwiczenie edukacyjne, wykorzystując ten artykuł jako odniesienie.

Mam samochód, który poprawnie zderza się z terenem i przykłada odpowiednie siły zawieszenia dla każdego koła. Moim następnym problemem jest zapobieganie bocznemu ruchowi kół. Na przykład, jeśli upuszczę samochód na pochyłości, ześlizgnie się on bokiem w dół zbocza, a następnie nigdy nie przestanie się przesuwać na boki (ponieważ nie ma żadnego tarcia).

W powiązanym artykule stwierdzono, że należy zastosować „siłę boczną” w połączeniu z siłą skierowaną do przodu, ale zastanawia się nad sposobem obliczania tej siły bocznej.

Biorąc pod uwagę informacje o zderzeniu dla każdego koła (normalne skrzyżowanie itp.) Oraz informacje o sztywnym nadwoziu samochodu, jak mogę obliczyć odpowiednią siłę boczną przyłożoną do sztywnego nadwozia, aby zapobiec ruchowi na boki?

Kazade
źródło

Odpowiedzi:

10

Ta siła boczna jest poziomym składnikiem normalnej drogi w odniesieniu do ruchu samochodu do przodu. Drogi są przechylone, tak jak dyskutujesz, aby ułatwić pokonywanie zakrętów przy wyższych prędkościach bez odrywania się od toru od momentu pchnięcia ich na zewnętrzny róg. Zespół przechyla się z powrotem w kierunku, w którym opony nie obracają się swobodnie i mają nadzieję, że mogą się oprzeć; Gdyby przechylenie było wystarczająco strome, środek ciężkości wystarczająco wysoki lub prędkość wystarczająco wolna, sam samochód działałby jak koło i po prostu przewróciłby się.

Opony mają ograniczony zakres sterowania. Siły działające prostopadle do osi wzdłużnej (od przodu do tyłu) są częściowo przeciwstawiane, ponieważ opony nie obracają się w ten sposób. Możesz obliczyć siłę działającą na boki względem drogi na podstawie siły ciężkości i prędkości jazdy, a następnie obliczyć pozostałą siłę po tym, jak opona otrze część tego tarcia. Jeśli pozostała siła jest wystarczająco duża, aby pokonać siłę popychającą samochód na drogę, samochód ześlizgnie się / poślizgnie.

Ilustruje to i zostało omówione tutaj (z tarciem i bez) :

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

Szczególnie interesująca jest siła działająca poziomo. W spoczynku (siła działająca tylko na nią jest spowodowana grawitacją) samochód nie ześlizguje się po zboczu biegnącym prostopadle, chyba że współczynnik tarcia jest wyjątkowo niski ( np. Droga lodowa).

Andon M. Coleman
źródło
7

Odpowiedź Andona nie dała mi rozwiązania, ale zdecydowanie postawiła mnie na dobrej drodze!

Kiedy zacząłem myśleć o kołach znajdujących się na ich własnej płaszczyźnie (normalną jest wektor wystający ze środka - będę to określać jako „normalną” koło), zdałem sobie sprawę, że siła boczna jest tylko wektorem wymaganym do „pchnij” prędkość samochodu na ten samolot. Wektor ten jest po prostu „normą” koła pomnożoną przez skalar, który jest iloczynem kropki między prędkością a „normą”.

Oto ustalony przeze mnie kod, który działa idealnie:

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

W powyższym kodzie „najbliższa_normalność” jest normalną powierzchnią, z którą zderzyło się koło, która jest używana jako wektor „do góry” podczas obliczania „normalności” koła.

Kazade
źródło
2
Tak, tak naprawdę nie sądziłem, że dostarczy ci odpowiedzi, której potrzebujesz, ale komentarz był zbyt długi;)
Andon M. Coleman