• Aucun résultat trouvé

3.4 R´ esolution

3.4.6 Convergence de l’algorithme

La r´esolution des contraintes suit donc un processus it´eratif, dont le r´esultat `a chaque it´eration doit normalement se rapprocher de la solution th´eorique. Bien ´evidemment nous ne connaissons pas cette solution th´eorique, et ne pouvons pas savoir exactement `a quelle distance s’en trouve la solution calcul´ee par l’algorithme `a une it´eration donn´ee. Nous nous basons alors sur l’erreur d’une it´eration `a l’autre pour d´eterminer lorsque le Gauss-Seidel aura

converg´e. Elle correspond `a la distance parcourue par le point de contrainte durant l’it´eration. Pour une contrainte donn´ee, situ´ee `a la ligne l et de dimension n, nous calculons l’erreur de la fa¸con suivante :

Erreur = v u u t n X i=0 n X j=0 h Wl+i,l+j(fi(t)− fi(t−1))i2 (3.7)

Pour une contrainte de dimensions 1, le calcul se simplifie : Erreur = Wl,l(fl(t)− fl(t−1)) . D’autres travaux pr´econisent de calculer une erreur relative (en pourcentage) en calculant

fl(t)−fl(t−1) fl(t)

. Nous pr´ef´erons cependant avoir une contrainte homog`ene `a une distance, qui est souvent plus facile `a param´etrer.

Nous ´etablissons alors un crit`ere sur l’erreur pour choisir le moment d’arrˆeter l’algorithme. Trois choix s’offrent `a nous :

– Le total des erreurs de chaque contrainte est inf´erieur `a une tol´erance pr´ed´efinie. Lorsque le nombre de contraintes augmente, l’algorithme prendra plus de temps `a converger. – La moyenne des erreurs est inf´erieure `a la tol´erance. Cela revient `a augmenter la tol´

e-rance au fur et `a mesure que l’on ajoute des contraintes. Ce calcul de l’errer pr´esente le mˆeme soucis que la m´ethode pr´ec´edente, `a savoir qu’une contrainte peut ne pas ˆetre v´erifi´ee si les autres ont d´ej`a converg´e.

– L’erreur de chaque contrainte est inf´erieure `a la tol´erance. La m´ethode la plus pr´ecise qui s’assure que chaque contrainte est v´erifi´ee, qui offre le plus de garantie de ne pas arrˆeter la r´esolution sur un minimum local, mais ´egalement la plus longue `a converger dans la majorit´e des cas.

Nous utilisons en g´en´eral la moyenne de l’erreur pour les sc`enes faisant intervenir prin-cipalement des objets solides et des contraintes de contact car la convergence est rapide et les erreurs ont une influence minime et sont souvent corrig´ees au pas de temps suivant. Ce-pendant, pour la suite de ce travail portant sur l’insertion d’aiguille et la suture, et faisant intervenir des contraintes dans des objets d´eformables en mˆeme temps que de l’autocollision de mod`eles fins, nous cherchons `a garder une erreur par contrainte qui soit stable. En effet, autoriser ne serait-ce qu’une contrainte `a ne pas ˆetre v´erifi´ee peut avoir des cons´equences im-portantes sur la simulation, tel qu’un fil de suture qui passe `a travers lui-mˆeme au niveau d’un nœud car la contrainte de contact g´erant son autocollision pr´esente une erreur ponctuellement sup´erieure `a la distance de contact.

L’algorithme du Gauss-Seidel convergera toujours lorsque le syst`eme est bien pos´e (d`es lors qu’il n’y a pas de contraintes antagonistes), mais sa vitesse de convergence est souvent plus lente que celle d’autres algorithmes. Plusieurs techniques peuvent ˆetre mises en place selon les cas pour am´eliorer la vitesse de convergence de la r´esolution des contraintes. Nous avons test´e principalement deux m´ethodes, `a savoir le d´epart `a chaud du Gauss-Seidel et la sur-relaxation successive.

D´epart `a chaud

Cette m´ethode consiste `a corriger le fait que le Gauss-Seidel recommence `a z´ero `a chaque pas de temps. Plutˆot que d’initialiser les forces `a 0 pour toutes les contraintes, on veut repartir de leur valeur au pas de temps pr´ec´edent. On se base sur le principe de la coh´erence temporelle, dans le sens o`u on peut consid´erer que la simulation change peu d’un pas de temps `a l’autre. Lorsque deux objets sont en contact, la force permettant de r´esoudre la collision une fois sera certainement tr`es proche de celle calcul´ee pour la fois suivante, d’autant plus si les objets sont immobiles. L’algorithme de r´esolution des contraintes repart donc d’une position plus proche de la solution th´eorique, et n´ecessite alors en g´en´eral moins d’it´erations pour converger. En pratique, on fera en sorte que chaque contrainte enregistre les forces qui lui sont appliqu´ees apr`es r´esolution, et on les lui redemandera au pas de temps suivant.

Pour les contraintes statiques (d´efinies au d´ebut de la simulation), cette m´ethode est efficace et facile `a mettre en œuvre. Il faut cependant que la direction des contraintes reste la mˆeme ou change tr`es peu d’un pas de temps `a l’autre afin que les valeurs des forces que l’on enregistre gardent leur coh´erence. On gardera donc ´egalement en m´emoire les directions de ces contraintes afin de pouvoir les mettre `a jour selon la rotation la plus petite possible.

Le cas des contraintes de contact est plus d´elicat `a g´erer. En effet, elles sont cr´e´ees di-rectement par l’algorithme de d´etection de collision, et sont supprim´ees `a chaque fin de pas de temps. De plus, mˆeme en consid`erant un point de contact en particulier, celui-ci peut se d´eplacer sur la surface des objets et ainsi changer de primitive de collision. D´etecter que la nouvelle contrainte correspond `a celle qui a ´et´e supprim´ee pr´ec´edemment sur le triangle voi-sin n’a rien de direct et rallongerait les calculs, ce qui est `a l’oppos´e de ce que l’on cherche `

a faire. La normale du contact elle mˆeme peut changer, et initialiser cette contrainte avec la valeur calcul´ee pour une direction diff´erente peut ˆetre contre-productive. Nous n’avons pas `a ce jour de m´ethode correcte pour initialiser les contraintes de contact, l’approche na¨ıve mais rapide que nous avons choisie (consistant `a choisir des directions lat´erales pseudo-al´eatoires7) est suffisante dans les cas o`u les contacts ne changent pas trop d’un pas de temps `a l’autre, mais est inefficace pour le d´epart `a chaud lorsque les objets sont en mouvement. Comme les mesures le montrent, il peut arriver qu’en initialisant les contraintes avec des valeurs fauss´ees, le nombre d’it´erations n´ecessaires pour que le Gauss-Seidel converge soit plus grand que si on avait initialis´e les forces `a 0.

Relaxation

Le principe de la relaxation consiste `a exag´erer artificiellement la correction qui est faite lors d’une it´eration du Gauss-Seidel. En partant de la valeur de la force `a l’it´eration pr´ec´edente ft

i et du r´esultat courant de l’algorithme fi(t+1), on calcule la valeur de cette it´eration en appliquant un coefficient ω de relaxation : ˜fit+1= (1 − ω)fit+ ωfit+1. Lorsque ω = 1 on garde le r´esultat du Gauss-Seidel ; en choisissant ω < 1 on est en sous-relaxation (convergence plus lente) ; la sur-relaxation correspond `a ω > 1.

7. Les directions lat´erales sont obtenues par un calcul simple se basant sur la direction normale. Lorsque celle-ci change, les deux vecteurs tangentiels calcul´es n’ont aucune coh´erence temporelle.

Figure 3.10 – Influence de ω sur la vitesse de convergence pour une simulation d’insertion d’aiguille similaire `a la figure 3.13. Pour des valeurs > 1.6, des oscillations commencent `a apparaˆıtre.

La sur-relaxation successive (SOR) permet pour des valeurs de ω sup´erieures `a 1 d’obtenir une convergence plus rapide. Cependant, il faut ´egalement ´eviter les valeurs trop ´elev´ees, car on observerait rapidement des oscillations de l’erreur. Celles-ci sont dˆues au fait que les contraintes ne peuvent pas atteindre leur solution, la d´epassant d’un cˆot´e puis de l’autre. Les valeurs optimales de ω d´ependent certainement du type des contraintes utilis´es ainsi que du rapport masse/raideur. Suite aux mesures que l’on pr´esente `a la section suivante, on remarque des oscillations `a partir de ω = 1.7 tout en ayant encore une am´elioration de la vitesse de convergence (voir figure3.10), qui vont en augmentant jusqu’`a ce que la solution diverge pour ω = 2. En pratique, nous choisissons une valeur de 1.5, pour laquelle on obtient de bons r´esultats pour l’ensemble des sc`enes test´ees, tout en ne voyant pas apparaˆıtre d’oscillations.

Mesures

Pour mettre en ´evidence l’int´erˆet des m´ethodes que nous venons de pr´esenter, nous avons r´ealis´e des mesures sur des simulations assez simples en activant s´electivement certaines d’entre elles. Trois sc`enes ont ´et´e retenues : un collier de cubes rigides li´es par des contraintes de point fixe (figure 3.11) ; une pile d’objets rigides o`u des contraintes de contact sont cr´e´ees automatiquement (figure 3.12) ; l’insertion d’une aiguille souple dans un objet d´eformable, avec traction lat´erale de celle-ci une fois qu’elle a ´et´e ins´er´ee (figure 3.13).

Afin que le nombre d’it´erations de l’algorithme de r´esolution soit significatif pour obser-ver l’impact des m´ethodes d’acc´el´eration, nous avons d´elib´erement choisi une valeur d’erreur tol´er´ee tr`es basse. Pour chaque sc`ene, on mesure le nombre d’it´erations requises pour que l’erreur moyenne des contraintes devienne inf´erieure `a une valeur de tol´erance d´efinie. Nous

Figure 3.11 – Mesures pour un ensemble d’objets rigides li´es par des contraintes de point fixe, repr´esentant 12 contraintes bilat´erales.

Figure 3.12 – Mesures pour une pile d’objets rigides en contact permanent. Le nombre de contraintes lors des mesures est d’environ 250. Cette sc`ene requiert une erreur tr`es basse pour que l’empilement ne se mette pas `a osciller.

r´ealisons une moyenne sur 1000 pas de temps lorsque le nombre de contraintes reste stable, sur le mˆeme intervalle de temps quelque soit la m´ethode test´ee. On choisi arbitrairement ω = 1.5 pour les tests de sur-relaxation. Les sch´emas suivant pr´esentent donc pour chaque sc`ene : la valeur normale sans m´ethode d’acc´el´eration de la convergence ; avec de la sur-relaxation (SOR pour successive over-relaxation) ; avec la m´ethode du d´epart `a chaud (hotstart) ; et enfin avec les deux m´ethodes actives simultan´ement.

Chaque m´ethode pr´esent´ee pr´ec´edemment am´eliore donc sensiblement la vitesse de conver-gence du Gauss-Seidel, et donc le temps n´ecessaire pour r´esoudre nos contraintes. De plus, l’utilisation des deux m´ethodes conjointement donne les meilleurs r´esultats pour chaque sc`ene test´ee.

Cependant, on remarque que le d´epart `a chaud peut ˆetre inefficace dans le cas des contraintes de contact, pour les raisons ´evoqu´ees plus haut. Bien qu’elle soit peut utile dans cette sc`ene en particulier, on observe des temps de calcul au moins similaires dans la plupart

Figure 3.13 – Mesures pour une insertion d’aiguille souple dans un objet d´eformable. On r´ealise les mesures `a la fin de l’insertion, lorsque l’aiguille est immobile et que 34 contraintes ont ´et´e cr´e´ees.

des cas. Au d´efaut d’avoir une m´ethode de m´emorisation des forces exacte, on d´esactivera le d´epart `a chaud dans certains sc`enes, et ce uniquement pour les contraintes de contact.

Pourtant, la meilleure fa¸con pour obtenir un faible temps de calcul reste de choisir une tol´erance adapt´ee `a la sc`ene. En effet, comme on peut l’observer sur le sch´ema de la figure3.14, la vitesse de convergence n’est pas lin´eaire. D`es lors que les contraintes sont interd´ependantes et connect´ees `a des mat´eriaux d´eformables, on se rapproche plus d’une courbe en y = 1/x. Ainsi, on remarque pour cet exemple pr´ecis qu’il faut multiplier par 10 le nombre d’it´erations si on veut diviser par 10 l’erreur sur la violation des contraintes. Cependant, le temps de calcul par it´eration du Gauss-Seidel reste sensiblement constant. Il faut donc trouver pour chaque sc`ene un compromis entre l’erreur accept´ee, et le temps de calcul. Les contraintes de contact requi`erent dans certains cas une tr`es faible erreur, par exemple lorsque l’on manipule des objets fins en collision qui pourraient facilement passer au travers l’un de l’autre si la contrainte n’est pas exactement v´erifi´ee. La solution sera alors d’utiliser deux m´ethodes de tol´erance simultan´ement : on demandera que l’erreur de chaque contrainte de contact pouvant poser probl`eme soit inf´erieure `a la tol´erance, mais on calculera la moyenne de l’erreur pour toutes les autres contraintes afin que le probl`eme ne soit pas plus long `a r´esoudre au fur et `a mesure qu’il gagne en taille.