Je ne reviendrai pas sur les multiples essais qui ont conduit à cette façon de faire, et c'est dommage. Car a mon avis il y a plus a apprendre des tentatives et des erreurs, que d'une solution toute faite. Mais ce serait long, car il y a eu pas mal de tentatives, et c'est très difficile de raconter sans réécrire l'histoire.
Ceci dit, la solution que je présente par la suite est une des solutions possibles. Les équations de la physique concernant les frottements sont bien établies, et ce depuis longtemps. Et cela n'empêche pas que les codes de calcul pour, par exemple des simulations de mécanismes industriels, sont très nombreux, très différents, et très complexes.
Je vais tenter par la suite de montrer une solution. Plus exactement une des modélisations possibles. L'avantage de cette solution tient dans sa simplicité. Et, je l'espère, dans son élégance. En plus, la façon de faire peut être facilement généralisée à d'autres problèmes.
Mais, patience...
Dans notre cas, modéliser le choc sur une bande, c'est d'abord,
choisir la géométrie des objets. Pour la bille, pas de problèmes,
on la prendra ronde. Pour la bande, plusieurs choix s'offrent à
nous.
C'est vrai, quelque chose qui ressemble à la figure de droite est, a première vue "intellectuellement" plus satisfaisant.
Mais, si vous partagez (déjà) mon point de vue, vous allez espérer que la solution de gauche suffit pour reproduire le phénomène étudié. Premièrement, parce que cela sera plus simple à programmer, et surtout, parce que cela permet de comprendre plus facilement ce qui se passe.
Une des raisons pour lesquelles les bandes ont une forme " plus complexe " dans la réalité est sans doute qu'elles doivent éviter autant que faire se peut que les billes ne sortent du billard. Une autre est certainement liée à la fabrication même des bandes.
En tout cas, si c'est cela la raison principale, alors on dispose d'un superbe moyen pour restituer ce phénomène. Maintenir une vitesse verticale nulle. L'étape suivante, que j'ai franchi allègrement, et de ne pas considérer du tout la composante en Z. La solution la plus simple. Non pas celle qui assure les calculs les plus simples, mais celle qui contraint le plus, ou qui restreint le plus le problème. Et souvent, plus les contraintes sont fortes, plus la résolution est facile.
Au passage, on ne se rend compte de ce fait: les solutions les plus simples sont souvent les meilleures, qu'en essayant. Donc: partir du plus simple vers le plus complexe est une démarche raisonnable. La démarche inverse me semble malsaine, tout au moins quand on fait de telles choses pour ses loisirs...
A chaque étape, ou changement de modèle, il est prudent de vérifier que c'est mieux qu'avant. Il arrive quasiment toujours un moment où c'est pire que dans la version précédente. La, il faut appliquer la stratégie du serrage optimal. "serrer jusqu'à ce que ca pète, et desserrer d'un quart de tour.".
Pour notre problème de bandes, c'est la solution de gauche que j'ai adopte. Et je revendique ce choix doublement, car j'ai essaye de relever le point I, et la différence de comportement n'est pas sensible. Même en exagérant.
C'est d'ailleurs la une autre règle de base de la simulation. Pour vérifier l'importance des paramètres ou des choix dans les modèles, il est important de se donner la possibilité de faire varier ses paramètres. Quitte à les exagérer.
Par exemple, il faut essayer des bandes très très absorbantes, qui ne rebondissent pas, qui frottent beaucoup, qui ne frottent pas du tout...
Premièrement, c'est plaisant, ensuite, cela permet parfois de
se rendre compte que l'on a passé un temps fou à programmer
quelque chose qui ne sert à rien. Ca arrive. Une façon de
faire que cela n'arrive jamais, c'est de ne pas faire ce genre de tests?
La encore, à déconseiller si on fait de telles choses pour
occuper ses loisirs.
Rappel des conventions de repère.
La bande est orientée selon l'axe Ox
La normale à la bande est selon l'axe Oy
L'axe Z est dirige de haut en bas, verticalement.
Calculons tout d'abord la vitesse Vi du point I appartenant à la bille au contact de la bande.
Ce point est un point lie a la bille. La vitesse de ce point dans le référentiel lie à la bande va nous indiquer si il y a frottement (Vi diffèrent de 0), et va nous renseigner sur le sens de la force de frottement (oppose à la direction de glissement).
Omega est ici la vitesse de rotation de la bille. Ce vecteur nous donne
par sa direction, l'axe de rotation de la bille, et son intensité
nous renseigne sur la vitesse de rotation de la bille.
soit
Dans notre cas, seules les composantes de Vi dans le plan (I,y,z) contribuent au frottement. Au moment du contact, la composante Viy est nulle. On peut donc par la suite considérer que:
Pour calculer la force de frottement, il nous faut :
Le coefficient de frottement
La force avec laquelle les objets s'appuient l'un
sur l'autre.
Le coefficient de frottement va nous donner l'angle forme par la réaction de la bande sur la bille, par rapport à la normale a la bande. Par contre, le calcul de l'intensité de la force nous amène à calculer une sorte de force d'appui de la bille sur la bande.
Ainsi, le calcul du frottement sur la bande ressemble au calcul de la force de frottement d'une bille qui glisse sur le tapis. Chose qui n'est pas très compliquée.
Pourtant, lorsque la bille glisse sur le tapis, la force d'appui reste constante dans le temps. C'est son poids.
Ici, on est face à un problème, car on est dans un cas
de choc, et on ignore souvent ce qui se passe pendant un choc, même
si on est capable de bien prédire ce qui va se passer après,
connaissant les conditions d'avant le choc.
Donc, de quelle information dispose t-on ?
De la vitesse initiale de
translation de la bille.
De la vitesse initiale de
rotation de la bille.
De données physiques
sur la bande qui sont :
Son coefficient de frottement (bande/bille)
Son coefficient de restitution.
(le coefficient de restitution nous informe sur le comportement de la
bande au cours d'un choc. Si il est nul, alors le choc est mou. (bande
en guimauve?).
S'il est égal à 1, alors il n'y a pas de perte lors du
choc. (c'est presque le cas des chocs entre billes.)
Quelle sont les informations que l'on souhaite calculer ?
La vitesse de translation
après le choc
La vitesse de rotation après
le choc
Le principe fondamental de la physique (2em loi de Newton) nous permet de calculer la force nécessaire pour modifier la quantité de mouvement d'un objet. Cette loi s'écrit:
P est ici une grandeur vectorielle (F et V aussi) qui se nomme quantité de mouvement.
(A noter, cette équation vectorielle est équivalente à 3 équations scalaires. Une sur chaque axe. Ainsi, on peut écrire que Fx = m d(Vx)/dt )
En d'autres termes, on sait que si la vitesse V d'un corps varie de
V0 à V1 (sa masse restant constante) pendant un instant Dt, alors
tout se passe comme si le corps avait été soumis à
une force F = m (V1-V0)/ D t pendant cette même période.
Le tour semble joué.
On connaît la composante normale de la vitesse avant et après le choc (via le coefficient de restitution).
On connaît donc la force d'appui de la bille. Enfin, presque. Car on ne connaît pas le temps pendant lequel s'applique cette force. On sait simplement que c'est très court.
Mais il reste encore un autre aspect délicat.
Pendant ce temps très court, rien ne nous garantie qu'il n'y aura pas changement de nature du phénomène.
Imaginons quelqu'un qui freine très fort en voiture et qui perd 30km/h par seconde. Sa vitesse est de 55km/h, a t=0, et on décide de faire le calcul toutes les secondes. Pendant la première seconde, sa vitesse chute de 55 a 25 km/h. Mais pendant la seconde, la vitesse ne passe pas de 25km/h vers l'avant a 5km/h vers l'arrière?
On a eu un changement de nature du phénomène dans l'intervalle de temps durant lequel on considère des grandeurs constantes.
Dans notre cas, nous devrons être à même de distinguer 2 cas. Frottement ou pas frottement. Et il se peut que le frottement cesse en cours de choc.
Par exemple, une bille lancée avec très peu d'effet contraire sur une bande, dans un premier temps va voir sa rotation diminuer. Jusqu'à s'annuler. Et enfin, prendre de l'effet dans l'autre sens.
On ne pourra jamais simuler cela si on considère la force d'appui
et la vitesse du point I constantes au cours du choc.
Quand on désire "voir" et détecter des changements de nature de cette sorte, il est usuel de décomposer les phénomènes, et de "discretiser".
Ici, l'idée première qui vient est de discretiser le phénomène en temps. Soit de diviser le Delta T en quantités plus petites encore. Mais, on ne connaît même pas la valeur d'un Delta T raisonnable, et quand bien même, on ne connaît la force d'appui qu'en fonction de ce Delta T. Les seules connaissances sont: bien avant le choc, et bien après le choc. Et encore, on ne connaît que quelques valeurs après le choc.
Il faut chercher autre chose.
Un calcul complexe devient alors parfois une suite de petits calculs
simples. Ou un calcul impossible une suite de calculs complexes?
Ici, que peut-on discretiser, quelle est l'entité qui va nous permettre de mener à bien nos calculs.
La variation de quantité de mouvement.
On sait qu'avant le choc, la vitesse normale est Vy, et qu'après
le choc, cette vitesse est (-Vy*CoeffRestitution). La quantité de
mouvement selon l'axe normal a la bande varie dont de (1+CoeffRestitution)*Vy*m.
La masse m de la bille est constante, on peut donc raisonner sur une discrétisation
de la vitesse.
On va donc discretiser cette variation de vitesse.
Calcul du pas de discretisation.
Soit dVy
Pour Vy variant de Vy(initial) -> Vy(final)
Calcul de Vi
Si il y a frottement (Vi non nulle)
Calcul de la force d'appui apparente
Calcul de la force de frottement
Mise à jour des vitesses de la bille (de translation et de
rotation)
Fin Pour
Ceci ressemble à s'y méprendre à la gestion d'une
série de petits rebonds, dans lesquels la variation de vitesse Vy
est fixée.
Par contre, ce choix n intervient que peu dans l organisation des calculs.
On peut donc remettre à plus tard cette question.
avec Fapp la force d'appui apparente
Vi la vitesse du point de contact I, appartenant à la bille.
f' le coefficient de frottement.
l'expression de Vi et Fapp
s'expriment :
oú dVy est tel que :
Si on note nV et nW les nouvelles valeurs de V et W après
un pas de calcul,
alors :
J est ici le moment d'inertie d'une sphère homogène, soit
Voici à quoi ressemble le bout de programme qui traite du
choc sur la bande du haut, avec les conventions vues précédemment,
écrit en langage de description. J'espère que vous n'aurez
pas de problèmes pour établir la correspondance entre ce
bout de code et les formules précédentes.
Les constantes du programme sont, avec leurs valeurs par défaut
(Ce sont des valeurs qui conviennent pas trop mal, et sur lesquelles j'ai
procédé à pas mal de changements. Aujourd'hui, je
n'y touche plus trop, car je pense avoir atteint une version "stabilisée".
):
RESTITUTION_BANDE = 0.98
DISCRETISATION_VITESSE = 100
RAYON_BILLE = 0.0305 (3,05 cm)
LIMITE_Vi_NULLE = 0.025
FROTT = 0.23
CalculChocBande(EntreesSorties Vx,Vy,OmegaX,OmegaY,OmegaZ)
Début
DVy = -(1+RESTITUTION_BANDE)*VyFin CalculChocBande
DVy = DVy/DISCRETISATION_VITESSE
Pour i=0 jusqu a (DISCRETISATION_VITESSE-1)/* Calcul de la vitesse de glissement */FinPour
Vxi=Vx+RAYON_BILLE*OmegaZ
Vyi=0
Vzi=-RAYON_BILLE*OmegaX
/* et de la norme de la vitesse de glissement */
NormeVi=Sqrt(Vxi*Vxi+Vzi*Vzi)
Si i=0/* On sauvegarde la vitesse de glissement initialeSinon
pour détecter un éventuel changement de sens */
SVxi=Vxi
SVyi=VyiSi (NormeVi < LIMITE_Vi_NULLE)FinSinon
Ou
Si (SVxi*Vxi+SVzi*Vzi <=0)/* On est dans le cas ou la vitesse de glissementFinSi
devient nulle ou alors change de sens */
NormeVi=0;
SVxi=SVyi=0;
Si (Nvi>1e-8)/* Si la norme de Vi est plus petite, alors onSinon
risque de faire des erreurs si on livre a ces
calculs? */
DOmegaX=-2.5*FROTT*Dvy*OmegaX/NormeVi
DOmegaZ=-2.5*FROTT*(Vx/RAYON_BILLE+OmegaZ)/NormeVi
DVx=-FROTT*(Vx+RAYON_BILLE*OmegaZ)
*DVy/NormeV/* La norme de Vi est si faible que tout se passeFinSinon
comme si il n y avait pas de glissement */
DOmegaX=DOmegaz=Dvx=0
/* La phase d intégration proprement dite. */
OmegaX=OmegaX+DOmegaX
OmegaZ=OmegaZ+DOmegaZ
Vx=Vx+DVx
Vy=Vy+DVy
Maintenant, le cas général du choc sur une bande ne
réclame pas beaucoup de finesse. Par exemple, pour traiter le cas
du choc sur la bande droite de la boule d indice B, il suffit de quelques
lignes de ce style :
Vx = VitesseY[B]
Vy = - VitesseX[B]
OmegaX= OmegaY[B]
OmegaY= -OmegaX[B]
OmegaZ= -OmegaZ[B]
CalculChocBande(Vx,Vy,OmegaX,OmegaY,OmegaZ)
VitesseY[B]=Vx
VitesseX[B]=-Vy
OmegaY[B]=OmegaX
OmegaX[B]=-OmegaY
OmegaZ[B]=-OmegaZ
C'est fini.
D'une façon générale, et si j ai un conseil à donner, faites les calculs dans le repère le plus intéressant. Ensuite, il suffit de faire un changement de repère, le calcul, puis le changement de repère après.
L'avantage. C'est simple, et cela permet de tester de nombreuses options facilement (On peut faire des essais en s affranchissant du repère exact dans lequel on travaille.). Ensuite, on détecte facilement une erreur, et quand ca marche dans quelques cas, on est sur que c'est correct.
(Par exemple, je ne suis pas sur de savoir dans quels repères
j ai fait les différents calculs. Et en relisant mes sources, à
l'instant, la présence d'un OmegaZ= -OmegaZ[B] m'incite à
penser que j'ai du utiliser des repères un peu bizarres?
J'espère vous avoir convaincu tout au long de ce papier,
que la modélisation est quelque chose de passionnant. Et pas forcement
quelque chose d'obscur ou de difficile.
Ce n'est pas non plus une science exacte, et dix personnes sur le même problème vont sans doute donner plus de dix versions différentes.
Les étapes observation, mise en équation, programmation, comportent chacune des difficultés. Et il paraît raisonnable d'aller du plus simple au plus complexe. De l'observation d'un cas simple, vers la simulation de cas complexes.
Le "bonheur", c'est d avoir un modèle, et un simulateur qui soit capable d'aller au devant de ce que l'on a observé, qui soit capable de "prédictions".
Et le "bon bonheur", c'est de passer d'un modèle horriblement complexe qui peine à marcher, et qui marche à peine, à un modèle très très simple qui marche correctement.
Le traitement des chocs sur les bandes, avec les "errances" qui m'ont
conduit à cette façon de faire, fait partie de ces bons moments
passés sur un PC à réinventer un monde.
Copyright laurent Buchard 2001.