[ManiaCrash] Tonton fennec simule un pneu avec Pacejka (part 2)

Je continue mes recherches sur le développement de la suite de ManiaDrive, et mon attention s’est vite fixée sur la modélisation des pneumatiques, qui représente une importante partie de la physique des véhicules pour ce style de jeux.

L’objectif de cet article est de défricher autant que possible ce domaine, très mal couvert au niveau francophone, et ou les explications sont souvent peu pédagogiques et complètement noyées dans des justifications mathématiques incompréhensible pour le commun des mortels. Il s’agit de la synthèse de quelques semaines de recherches sur ce sujet.

Présent : ManiaDrive

Pour l’instant, ManiaDrive utilise exclusivement ODE pour gérer les contacts roues-sol, à l’aide de coefficients FDS (Force Dependent Slip). L’idée de base est très simple : les contacts FDS glissent plus ou moins en fonction de la force appliquée de manière tangentielle à la surface de contact (la route, pour nous). Ça passe mieux en images, agad’ :

Ça, c’est une voiture (nulle) qui tourne. Ce faisant, elle génère une force vers l’extérieur du virage (la fameuse force centrifuge mais que en fait non pas du tout), en bleu sur l’image. Les pneus « retiennent » la voiture, empêchant cette force de devenir un mouvement, au niveau des surfaces de contact avec la route (contact patch). Pour des raisons de performances, il est possible de simplifier ces surfaces à l’aide de points (un par roue, point de départ des flèches vertes sur l’image).

Un contact FDS va donc glisser proportionnellement à la force bleue, et dans la direction de cette force, tout simplement. Notez que la force appliquée le long de la normale du contact (la « longueur » des flèches vertes) n’est pas du tout prise en compte dans ce calcul.

Plus je tourne fort, plus ça glisse. Si ça glisse, ça tourne moins, donc ça glisse moins (mais si, réfléchissez bien). En d’autres termes, la voiture de ManiaDrive commence à slider quand on tourne un peu fort, jusqu’à atteindre une sorte de seuil, entre virage et dérapage. La même chose s’applique simultanément à la motricité du pneu (sa capacité à « poser la puissance du moteur » sur la route sans déraper) qui se détériore jusqu’à un seuil « naturel » d’équilibre (~85 km/h pour la Clio de ManiaDrive)

Pour arriver à ce résultat, il a été nécessaire de trouver un équilibre assez complexe entre la masse de la voiture (qui engendre la force centrifuge) et le coefficient FDS des pneus. Plus ce coef est élevé, plus ça glisse. A contrario, un coefficient très proche de zéro va engendrer un pneu très adhérant, limite « gluant ».

En pratique, ManiaDrive utilise un coef fixe, empirique, qui est assez faible pour offrir une conduite efficace (du style « pneu slick ») mais suffisamment élevé pour la voiture glisse un minimum dans un virage brusque … à défaut de quoi elle se retournerait ! (ce qui ne manque pas d’arriver quand on pousse la voiture un peu loin dans ses limites. Ex : je braque à fond dans une ligne droite à 160 km/h)

Ça offre une conduite plutôt stable, arcade mais pas trop (il faut « sentir » le comportement des pneus pour maitriser la voiture) et plutôt linéaire. C’est grosso modo le « feeling » que je souhaitais pour le jeu.

Mais pour ManiaCrash, je souhaite aller beaucoup plus loin dans la simulation des pneumatiques.

Modèles de simulation semi-empiriques

C’est là qu’entre en jeu Hans. Hans, c’est un mec cool qui a décidé un jour de chercher une solution pour déterminer toutes les caractéristiques précises d’un pneu de manière mathématique. Alors bien sûr, j’imagine que la seule chose qui vous passe par la tête pour l’instant, c’est de savoir à quel point vous ne souhaiteriez pas tomber sur ce type à table lors d’un repas de famille, mais il n’empêche que la méthode classique pour déterminer ces informations consiste à torturer très longuement des pneus sur des bancs d’essai dédiés, à l’aide de multiples pneus du même modèle, et ça coute super cher. Tout cela est nécessaire dans divers domaines, de la course auto à la conception de systèmes ABS, par exemple.

Et donc le Professeur Hans Bastiaan Pacejka a étudié minutieusement absolument tout ce qui concerne la physique des pneus (déformations, surfaces de contact, cisaillements internes, vibrations, comportement de la gomme, …) pour tenter de modéliser le tout, mathématiquement parlant.

A l’image de ce que les aérodynamiciens ont réussi à faire dans leur domaine, l’idée géniale de Pacejka a été d’utiliser des coefficients non dimensionnels, c’est à dire des grandeurs qui n’ont pas de sens réel mais qui sont des combinaisons/rapports de ces unités réelles (mètre, newton, seconde, …). Il a ainsi développé des formules semi-empiriques, donc sans réelle justification mathématique, mais qui reproduisent la réalité avec succès. Ça lui a demandé plus de 20 ans, tout de même, hein. Soit assez pour couvrir 642 pages d’équations.

Voilà le genre de degré de précision que peut atteindre une telle formule :

Les symboles représentent les mesures réelles effectuées sur un banc de test pour un pneu 195/70R14 et le trait continu représente le résultat de la formule « latérale » (4.E19) de Hans Pacejka. Hallucinant, non ? D’ailleurs, on donne à ses travaux le nom de « magic formula » …

Donc en résumé, pour simuler le comportement d’un pneu de manière particulièrement précise, il faut les formules magiques adéquates, des paramètres d’entrée (force verticale, taux de virage, …) un peu bricolés, et les paramètres non dimensionnels spécifiques au pneu (B’, C’, D’ et E’ ici).

Ces paramètres n’ont pas d’unité particulière (sauf exception), et sont souvent déterminés de manière empirique, à l’aide d’un banc de test. Mais une fois ces paramètres (entre 11 et 15 pour les formules les plus complètes de Pacejka) connus pour un pneu, il est possible de calculer à peu près n’importe quoi sur ce pneu (motricité, adhérence, … et ce en fonction du poids de la voiture, du carrossage, …). Notez que ces valeurs sont très difficile à obtenir, jalousement gardées par les constructeurs de pneus et les entreprises qui ont eu les moyen d’acheter des séances de tests (constructeurs, écuries auto, équipementiers … et même des boites de jeu vidéo, ce qui est finalement assez logique).

Trois équations m’intéressent tout particulièrement dans cet océan de formules :

  • force longitudinale, qui travaille en gros dans l’axe de la voiture (« vers l’avant »). On cherche à répondre à la question « On est en plein burn ou pas ?« .
  • force latérale, qui s’occupe de faire tourner la voiture et de « contrer l’inertie ».  Problématique : « On est en train de slider ou pas ?« .
  • couple d’alignement, pour tout ce qui touche à la « force de centrage » des roues … et donc qui permet d’alimenter le retour de force du volant.

Pour résoudre ces équations, il faut être capable de déterminer principalement deux choses : le slip ratio et le slip angle. J’ai eu du mal à comprendre ces grandeurs, en partie à cause de leur trompeuse ressemblance. Le slip ratio est le plus simple, et est utilisé uniquement pour la première formule, longitudinale. On lit souvent qu’il s’agit du ratio entre la vitesse de rotation actuelle de la roue et sa vitesse de roulement libre, mais je trouve que l’idée de vitesse relative au point de contact avec la route est plus simple :

Roue en rouge, route en vert, point de contact en jaune.

Si les longueurs des deux flèches bleues sont identiques, le slip ratio est de 0. L’autre possibilité, lors d’une accélération, est que la flèche de la roue soit plus longue que celle de la route, ce qui signifie alors que la roue tourne plus que nécessaire et dérape : le ratio augmente. L’inverse peut évidement arriver lors d’un freinage.

En ce qui concerne le slip angle, les choses sont un peu plus compliquées : il s’agit de l’angle entre l’axe de la roue et la direction du mouvement. Attention, il ne s’agit pas de l’angle de braquage des roues, mais bien du léger « pincement » de la surface du pneu en contact avec la route.

Voilà très concrètement à quoi ressemblent des courbes générées depuis ces 3 formules magiques :

Image tirée de l’éditeur de courbes de Pacejka du jeu Racer.

On voit ici la puissance générée par le pneu (axe vertical) en fonction du slip ratio/angle (axe horizontal). Ces courbes s’avèrent particulièrement intéressantes ! Il est possible de commenter plusieurs aspects :

  • La zone d’efficacité du pneu à l’accélération ou au freinage (courbe noire) est extrêmement limitée. On a un pic lorsque le slip ratio est de l’ordre de quelques %, et la courbe retombe très vite ensuite.
  • Cette même courbe montre à l’inverse que passé une dizaine de %, l’efficacité est certes mauvaise, mais constante. Un gros burn n’est pas spécialement moins efficace qu’un petit.
  • Les courbes commencent toutes à zéro ! Pas de slip ratio/angle, pas d’adhérence. C’est assez tordu, mais finalement assez logique. En pratique, il y a toujours toujours un petit peu de « dérapage », ce qui permet au pneu d’avoir un petit peu d’adhérence … ce qui permet par exemple à un véhicule à l’arrêt de ne pas, tel un aéroglisseur, dévaler la pente sur laquelle il est garé ! Et si je pousse à la main ce véhicule à l’arrêt, le pneu se met à glisser … mais génère du coup de l’adhérence. Tout cela se passe à une micro échelle et est imperceptible, sauf lorsque les efforts impliqués sont énormes. Ça explique également en partie le phénomène d’aquaplaning, ou l’eau forme une fine pellicule qui bouge en même temps que le pneu … plus de slip ratio/angle et donc plus d’adhérence.
  • La courbe qui donne la force d’alignement (en vert) peut être directement assimilée à la résistance que l’on va envoyer au volant du joueur. On voit que la courbe retombe à zéro (aucune sensation) dès que le pneu perd son efficacité, ce qui correspond bien au « coup de mou » très sensible que l’on ressent au volant lorsqu’une voiture (traction) part en sous-virage, par exemple. On constate même que la courbe passe au dessus de zéro lorsqu’on abuse vraiment, ce qui signifie que le volant se met à forcer dans le sens du virage lors d’un fort dérapage ! Je ne l’ai personnellement jamais constaté, mais il semble que cet effet existe bien en réalité.

Notez que cette courbe est valable pour une charge verticale donnée, fixe. Il faut compléter le calcul à l’aide de cette information (représentée par des flèches vertes dans la première image). Cette image montre le résultat : plus la charge est importante, plus le pneu est efficace.

(charge en kN sur l’axe de profondeur)

Futur et réflexions : ManiaCrash

J’en suis à un point ou je pense avoir décodé les grandes lignes de ces modèles pneumatiques, et où je dois les implémenter. La difficulté supplémentaire ici est que je souhaite utiliser ODE au maximum. Les quelques projets libres qui font appel à Pecejka dont j’ai lu le code source (TORCS et Racer) ont une approche très différente, n’utilisant un moteur physique que pour la détection de collision, et gérant tout le reste par leurs propres moyens. Contrairement à ces projets, orientés vers la course, ManiaCrash met fortement en avant la notion de cascade, ce qui m’oblige à disposer d’un moteur physique complet. A moi de me débrouiller pour intégrer un modèle pneumatique dans tout ça.

Dans le détail, ça signifie que je dois pouvoir prendre de l’information auprès d’ODE, essentiellement pour calculer le slip angle et le slip ratio. Cela s’avère relativement compliqué, tout particulièrement pour le slip angle à cause des divers repères qui interviennent. Le second point, c’est qu’une fois la formule appliquée, la sortie est une force, et il faut retransmettre ce résultat à ODE lors de la création du contact, et absolument rien n’est prévu pour ça dans ce moteur physique. J’ai actuellement deux pistes : tricher à mort en utilisant toujours des coefficients FDS, variables, à la place des fameuses forces, en suivant la forme des courbes de Pacejka, ce qui n’a aucun sens du point de vue mathématique (mais vraiment hein), mais qui me permet d’imiter très grossièrement les formules magiques en conservant intact le reste de la physique (exemple tout con : ça prend en compte les sols « non-plats »). L’autre piste, c’est d’utiliser les drapeaux dContactMotion d’ODE, qui servent d’habitude à simuler des surfaces mobiles (tapis roulants, typiquement). Ainsi, on pose la voiture sur une sorte de plateforme mobile virtuelle, cette dernière se déplaçant selon les forces calculées. On implémente ainsi complètement le modèle pneumatique de Pacejka, mais les effets de bords sont très nombreux, et le tout demande (beaucoup) plus de code supplémentaire que la première option. Sachant que ManiaCrash ne cherche pas du tout à être une simulation, mais que je souhaite simplement offrir un modèle pneumatique intéressant à jouer, le choix est difficile.

Au rang des complications et incompréhensions :

  • Les formules de Pacejka sont là pour calculer une force. elle représente une sorte de maximum (la capacité du pneu), et non la force à appliquer à appliquer pour telle ou telle situation. Comment déterminer cette dernière ? Que faire si elle dépasse celle calculée par les formules magiques ? Je n’ai pas encore réfléchi à tout ça …
  • Les forces calculées indépendamment par les deux formules « de motricité » (longitudinale et latérale) peuvent, une fois additionnées, dépasser ce que le pneu est capable de produire. Il faut donc utiliser de nouvelles formules pour combiner ces deux forces, ce qui pose d’autres problèmes (on privilégie une des deux forces ? on fait une moyenne ? …)
  • J’ai du mal à comprendre l’effet de charge verticale : « plus on charge, plus le pneu est efficace« , c’est ce qu’on peut déduire de la formule magique. Mais lors d’un virage très serré, on engendre une charge énorme sur les pneus extérieurs, alors pourquoi la voiture partirait en dérapage dans ce genre de conditions ? L’effet des slip ratio/angle dans une telle situation est-il puissant au point d’occulter l’effet de la charge ?
  • La vitesse ne semble jamais prise en compte dans les formules ! La puissance générée par un pneu ne varie pas selon la vitesse de ce dernier ?! Il manque un truc pour accepter que ce soit normal …
  • Les équations sont très instables à basse vitesse. J’imagine que les arrondis du FPU sont responsables … Mais en attendant, la plupart des implémentations de Pacejka sur lesquelles je suis tombé désactivent les formules sous un certain seuil de vitesse, ou injectent des valeurs empiriques dans les formules pour les stabiliser. A quoi ça sert d’avoir un modèle extrêmement réaliste si c’est pour faire des choses pareilles avec …
  • La nature du sol ou les effets de la météo ne sont mentionnés nul part ! C’est bien une attitude de mathématicien que de bosser pendant 20 ans à la rédaction de telles théories et d’oublier que (des fois, certes) il pleut. Les notions de pression et de température ne sont pas très bien couvertes non plus, en tout cas par les principales formules.

Bref, il reste encore beaucoup de choses à creuser et à comprendre. Mais assez de lecture pour l’instant, place à l’expérimentation !

/!\ Big Warning : Je n’ai aucune compétence particulière en mathématique, ni en physique, tout ceci n’est que mon interprétation après lecture d’une toute petite partie d’une littérature qui m’est complétement inconnue à la base, et pour laquelle je n’ai clairement pas le niveau. Dans le meilleur des cas, tout ceci est plein d’approximations honteuses, tant dans la formulation que dans le vocabulaire, au pire il s’agit d’un gros tas d’erreurs. A vous de voir.


Publié

dans

par

Étiquettes :

Commentaires

8 réponses à “[ManiaCrash] Tonton fennec simule un pneu avec Pacejka (part 2)”

  1. Avatar de lanael
    lanael

    Pour info, les gars de the easy co. utilisent ODE pour leur motorm4x. ( 5 devs dont 1 seul programmeur ).
    Sinon, j’utilise vaguement ODE pour mon projet, mais il n’y a pas de roues.

  2. Avatar de PopHip
    PopHip

    Hmm, un truc con, l’usure des pneus entre en compte aussi ?

  3. Avatar de Lok
    Lok

    J’ai du mal à comprendre l’effet de charge verticale : “plus on charge, plus le pneu est efficace“, c’est ce qu’on peut déduire de la formule magique. Mais lors d’un virage très serré, on engendre une charge énorme sur les pneus extérieurs, alors pourquoi la voiture partirait en dérapage dans ce genre de conditions ? L’effet des slip ratio/angle dans une telle situation est-il puissant au point d’occulter l’effet de la charge ?

    ca depend aussi de l’appui aérodynamique généré par le design de la voiture… puisque la charge verticale générée lors de l’accélération du pneu (et donc de la voiture) est augmentée par l’appui aérodynamique (croissant en fonction de la vitesse, jusqu’a un certain seuil suivant le CX de la voiture et les trainées d’air qui en resultent)

    dans le cas d’un virage très serré, il y’a un point ou la masse engendrée par la force centrifuge dépasse la force d’appui du pneu. le slip ratio/angle est fortement dépendant du poids de la voiture et de la vitesse.
    il y’a je pense relation entre la charge verticale engendrée par l’acceleration dans le virage et la force centrifuge. en accelerant si la charge verticale augmente trop le poids de la voiture va partir vers l’arriere latéralement le poids est donc concentré sur la roue arriere qui est à l’exterieur du virage, ou vers l’avant si on est en situation de freinage… c’est je pense la difference de repartition du poids (décélération/freinage vs accélération ou maintient de la vitesse) qui va provoquer le glissement du pneu.

  4. Avatar de Xfennec
    Xfennec

    lanael : Info intéressante, merci. Dommage qu’ils n’en disent pas plus sur les détails techniques du projet.

    PopHip : Non, effet, ça fait partie des choses qui doivent être gérées en dehors de la formule magique, probablement en modifiant quelques coeffs à la volée, tout comme les conditions de surface de la route.

    Lok : Justement, si la charge augmente avec l’appui aéro, alors le pneu devrait être encore plus efficace (et il l’est d’ailleurs). Mais manifestement, pas assez pour contrer la charge horizontale. D’ailleurs quand on y pense, c’est souvent le pneu le plus chargé qui va déclencher le drift … Peut être supporte t-il une une charge horizontale plus forte que les autres pneus ? C’est ce que semble montrer mes premières mesures, mais je n’ai pas encore cherché d’explication.

  5. Avatar de Falco
    Falco

    Avec la charge la pression est théoriquement chargé en plusieurs points, sinon ça partirait toutes les 30secondes en >Tête-à-queue.

  6. Avatar de Xfennec
    Xfennec

    Falco : Je ne sais pas si tu parles de « plusieurs roues » ou de plusieurs « points de contact par roue ». Dans ce dernier cas, la charge est appliquée en réalité sur un « contact patch » (surface de contact) qui peut être simplifié par un point pour les calculs d’adhérence (en tout cas quand on utilise les modèles dont on parle ici).

  7. Avatar de Lok
    Lok

    Xfennec a dit :
    Lok : Justement, si la charge augmente avec l’appui aéro, alors le pneu devrait être encore plus efficace (et il l’est d’ailleurs). Mais manifestement, pas assez pour contrer la charge horizontale. D’ailleurs quand on y pense, c’est souvent le pneu le plus chargé qui va déclencher le drift … Peut être supporte t-il une une charge horizontale plus forte que les autres pneus ? C’est ce que semble montrer mes premières mesures, mais je n’ai pas encore cherché d’explication.

    A première vue il supporte une charge horizontale plus forte que les autres en fonction de la charge verticale (freinage/décéleration en virage ou réacceleration) ce qui transmet les masses plus à l’avant ou à l’arrière suivant le cas et fait atteindre au pneu le plus en appui (coté exterieur au virage) un point critique ou le grip maximum du pneu ne peut contenir la force centrifuge (centripète?).

    Exemple : tu réaccelere tranquillement en sortie de virage gauche rapide (acceleration savamment dosée pour ne pas burner…) en fonction de la vitesse de passage dans la courbe le risque de dérapage augmente fortement avec la vitesse. l’accéleration de la voiture va entrainer les masses vers l’arriere-droit sollicitant plus ce pneu précis que les 3 autres.

    dans le cas d’un traction, la roue avant droite va manquer de grip (car moins de poids dessus) et la voiture va partir tout droit. (cas le plus probable avec une traction)

    dans le cas d’une propulsion l’excès le poids sur la roue arrière droite va
    -faire gripper la voiture (si l’accéleration n’est pas trop franche)
    -entrainer un magnifique tête à queue.

    D’autant plus qu’en réalité le pneu est soumis à une forte déformation quand il est en appui dans un virage… peut être quelque chose de ce côté là? c’est bien sur impossible à simuler en temps réel mais ca peut peut-être te servir pour la modelisation.

    (j’espere pas dire trop de conneries…)

    Sinon c’est très bien vu le coup de la masse de centrage en « pendule » sous la voiture!

Laisser un commentaire