Épisodes précédents, par ordre chronologique :
- Faire une suite, c’est compliqué
- Expérimentations
- Physique de la voiture, part 1 (base)
- Physique de la voiture, part 2 (pneus)
- Pacejka, les bruits moteur
- Pacejka et ODE
La situation actuelle et le problème
J’ai recommencé à me pencher sur la physique des voitures de la future suite de ManiaDrive, après une longue période d’inactivité sur le projet. J’ai en effet dépensé énormément d’énergie à coder la physique des pneus (qui reste le point le plus important d’une simulation de véhicule, selon moi) ce qui fait que dès la première grosse difficulté suivante (celle qui nous intéresse aujourd’hui, donc), ma motivation s’est effondrée d’un seul coup.
Sauf que là, paf, 6 mois après, ça me reprend. Et pour ne pas retomber dans les mêmes travers, j’essaye de décortiquer mon sujet autant que possible avant de me plonger trop dans le code.
Le problème de base est en définitive très simple : mes voitures calent. Quoi que je fasse, quelle que soit la puissance du moteur, elles calent lamentablement dès que j’engage la première vitesse.
L’explication est elle aussi toute simple quand on se penche sur la manière dont j’ai implémenté le moteur et la transmission pour l’instant. En effet, je dois interagir avec le moteur physique ODE (j’en ai déjà longuement parlé), et en l’occurrence mon point d’entrée vers ODE se situe au niveau des liaisons hinge2 de la suspension. Pour schématiser, pour chaque roue (motorisée, donc) je dois fournir à ODE deux informations : dParamVel et dParamFMax. La première indique à quelle vitesse je souhaite que la roue tourne (vélocité angulaire) et le second indique quelle est la force maximum (couple max, ici) que j’autorise pour essayer d’arriver à cette vitesse.
Dans la simulation, le temps est « découpé »en toutes petites étapes (timesteps) et il devient alors facile de simuler l’action d’un moteur en demandant une vitesse angulaire élevée (le pilote écrase l’accélérateur -> il souhaite aller à la vitesse max de la voiture) mais en autorisant une force max relativement faible (en fonction de la « puissance »du moteur) à chaque timestep. Ainsi, le moteur doit accélérer petit à petit la roue, mimant alors l’accélération du véhicule.
Bien sûr, on va intercaler des calculs supplémentaires pour simuler divers équipements nécessaires au bon fonctionnement du tout, et tout particulièrement :
- Un différentiel, qui va permettre de répartir la force du moteur entres les différentes roues motrices. Un différentiel de base va autoriser les roues à tourner à des vitesses différentes (lors d’un virage à gauche, les roues de droite doivent parcourir plus de chemin que les roues de gauche, qui doivent donc tourner moins vite) alors qu’un différentiel plus évolué (à glissement limité) va aller plus loin, en bloquant plus ou moins une roue qui tournerait nettement plus vite que l’autre, signe qu’elle est train de « glisser ». Imaginez une voiture, dont les roues motrices sont à l’arrière, dans un virage très serré à gauche, à grande vitesse. Dans cette situation, il est tout à fait probable que la roue arrière gauche n’ai que très peu d’adhérence, voire même qu’elle ne touche plus le sol (typiquement avec des suspensions indépendantes). Un différentiel de base va alors envoyer toute la puissance sur la roue qui « tourne le plus facilement », c’est à dire sur celle qui n’est pas capable de poser cette puissance au sol. Résultat : crissements de pneus, fumée, voiture qui n’avance plus et difficilement contrôlable. Un différentiel à glissement limité va bloquer en partie cette roue pour que la puissance soit bien envoyée à la bonne roue.
- Une boite de vitesses, pour changer la démultiplication de l’effort du moteur. Pour revenir à nos variables, on va multiplier la vitesse dParamVel par la rapport de boite (typiquement inférieur à 1) et diviser dParamFMax par ce même rapport. Tout bêtement.
Jusque là, tout va bien dans notre simulation. Pour déterminer dParamVel, il suffit de prendre la vitesse de rotation du moteur (celle indiquée sur le compte-tours [par la suite, on va dire RPM]), d’appliquer le rapport de boite (et celui du pont, dans l’absolu) et hop. En revanche, pour dParamFMax les choses se compliquent un peu. En effet, sur un moteur thermique, cette valeur varie en fonction de la vitesse de rotation du moteur.
C’est là que les courbes de couple entrent en jeu. Voilà une courbe typique, ici pour un moteur 2L essence 16 soupapes de chez Peugeot :
A partir de la courbe verte (courbe de couple), il est facile de déterminer le couple du moteur (dParamFMax donc) en fonction des RPM.
Et c’est là que je commence à coincer sérieusement. Quand on regarde ces courbes, elles sont typiquement très plates. Même avec mon petit moteur de test, celui d’une Fiat Panda 45cl, un ridicule moulin de même pas 1L, on arrive à une courbe encore très acceptable :
~ 50 Nm au ralenti, ~70 au max.
Voilà pourquoi ça me gène : Je ne vais pas vous apprendre que pour lancer une voiture à l’arrêt, on monte un peu le régime moteur, et on « distribue » petit à petit la force du moteur avec l’embrayage. Pour moi, l’utilisation de l’embrayage a donc pour but d’aider le moteur qui n’a pas assez de couple à bas régime pour démarrer la voiture sans caler. Si je résume ma vision d’un embrayage pas complètement relâché : le moteur ne supporte pas toute la charge de la voiture, mais en contrepartie ne peut pas fournir tout son couple à la transmission.
Et c’est pourquoi dans un simulateur comme rFactor, on se permet en général de monter le régime à mort et de lâcher d’un coup sec l’embrayage lorsque le feu passe au vert, comme un dégueulasse, pour faire un départ en trombe et en fumée. On a été chercher le couple très haut dans les tours. J’ai aussi l’impression de voir ça lors du départ d’une course de voiture IRL.
Sauf que ça colle absolument pas avec les fameuses courbes de couple : il n’y pas plus de couple dans les hauts régimes qu’au ralenti. Il y a plus de puissance, certes (Puissance = couple * RPM), mais le couple est sensiblement le même.
Alors pourquoi une voiture cale si on lâche l’embrayage d’un seul coup au ralenti alors que ça ne semble pas être le cas si on fait la même chose à plein régime ?! (notez que je n’ai jamais eu le courage de faire le test sur une vrai voiture, de peur de laisser l’embrayage et la moitié de la boite de vitesses par terre)
Du coup, dans ma simulation actuelle, on commence à comprendre pourquoi la voiture cale systématiquement. J’accélère à plein régime, je passe la première, et comme je n’ai pas encore implémenté l’embrayage, toute la patate est directement balancée à la boite de vitesses puis dans les roues. Sauf que « la patate », c’est quelques dizaines de Nm * le rapport de boite, c’est à dire pas de quoi faire réellement bouger la voiture. Tout pareil qu’au ralenti en fait.
Résultat, au timestep suivant, je regarde la vitesse de rotation des roues motrices, histoire de mesurer « l’impact » du moteur lors du timestep précédent, je constate que la roue tourne à peine, je traduis ça en RPM moteur (là encore, le ratio de la boite intervient) et j’arrive à peu près à 0 RPM : le moteur cale.
Accessoirement, le fait d’attendre le timestep suivant pour mesurer la charge du moteur semble probablement une méthode immonde, mais ODE ne me donne pas directement cette info (charge moteur), c’est donc la seule idée qui m’en venue pour l’instant.
Bref, résultat : je suis incapable de faire des « smoking starts » avec ma Ford Fiesta et son moteur de Fiat Panda, et ça c’est frustrant.
Les pistes
Je n’ai pour l’heure trouvé que deux explications possibles, peut-êtres complémentaires.
- l’embrayage
- l’inertie du moteur et de la transmission
En effet, une supposition serait qu’un embrayage, aussi sport soit-il, ne se « solidarise » pas tout de suite lorsqu’on embraye, même de manière violente. Dans mon exemple précédent, l’embrayage pourrait patiner un peu lorsqu’on relâche la pédale, permettant au moteur de ne pas subir tout de suite toute la charge de la voiture. Cela signifie que les RPM tombent toujours, mais moins rapidement, ce qui donnerait effectivement un avantage à un départ « à fond ». Mais je ne suis pas persuadé que cela suffise pour faire un démarrage en burn, puisqu’avec cette solution, on ne transmet aux roues qu’un couple encore amoindri (puisque l’embrayage patine).
C’est pour ça que la seconde piste m’intéresse un peu plus : un moteur lancé à pleine vitesse possède une inertie. Cette inertie, c’est du couple en plus, non ? En clair, je lance le moteur à fond, j’embraye, il devrait caler (= tomber à 0 RPM) mais avant ça il doit perdre son inertie, générant alors un couple en plus de son couple « nominal » (celui qui est sur les courbes). Mais d’après mes permiers tests, qui peuvent très bien êtres faux, pour faire un démarrage en faisant patiner les pneus, ce n’est pas quelques Nm en plus qu’il faut, mais bien quelques centaines ! (et encore, avec mes pauvres petits pneus de Fiat Panda [135/80/13 !]) Est-ce possible ? Comment calculer ce couple ? A partir de quelles données techniques ? Tout ce que j’ai concrètement à l’heure actuelle, c’est les RPM moteur au timestep n et ceux au timestep n+1, l’écart entre ces deux valeurs ayant probablement quelque chose à voir avec ce fameux « couple inertiel ».
J’ai aussi des interrogations du même genre sur la vitesse avec laquelle un moteur monte et descend dans les tours à vide (embrayage enfoncé, donc) … il doit bien y avoir une histoire d’inertie là aussi.
Bref, que ce soit sur ce dernier point ou sur d’autres pistes, si vous avez des idées sur tout ça, je serais heureux de les lire, et si vous avez des compétences en mécanique, tout pareil. Bref, HALP§
Laisser un commentaire
Vous devez vous connecter pour publier un commentaire.