Objectifs
Le simulateur réalisé en 2004 (voir l’article précédent) ne prenait en compte que l’aspect géométrique de l’environnement et des interactions entre les objets. C’est suffisant dans des contextes simples tel que celui dans lequel nous l’avions utilisé (Coupe de France 2004 - Coconut Rugby) L’environnement du scénario 2005 (le bowling) introduisait différents aspects que cette version ne prend pas en compte, tels que :
un terrain non uniforme (fossé, ponts, socles des quilles)
des objets à manipuler (les balles de GRS) et à bousculer (les quilles)
Il était donc temps de revoir la copie pour prendre en compte ces nouvelles exigences, et introduire la simulation de la dynamique des corps .
Travaux effectués
Soyons honnêtes : à la date de rédaction de cet article, cette nouvelle version n’est pas terminée. Plusieurs de ses composants sont par contre fonctionnels, chacun d’entre eux ayant servi à expérimenter les solutions aux divers problèmes à traiter.
L’environnement
Le format du descripteur d’environnement de la version précédente était insuffisant pour les nouveaux besoins. En effet, il fallait être capable de décrire des hiérarchies d’objets, pour l’assemblage des différents volumes élémentaires des ponts et de la table de jeu par exemple. Il fallait également introduire les définitions des matériaux, afin d’obtenir les couleurs les plus proches de la réalité, les teintes RAL étant converties en leur équivalents RGB dans ce but. Le robot 2005 intégrant une caméra embarquée pour la détection des ponts, quilles à abattre, quilles à relever, nous voulions aussi que le simulateur puisse nous fournir des images proches de ce que verrait la caméra réelle.
Conclusion : un nouveau format, basé sur XML, a été défini pour décrire l’environnement.
La dynamique
L’introduction d’un moteur de dynamique devenait nécessaire pour deux raisons :
gérer correctement les collisions entre les objets (et non de manière simpliste et au cas par cas comme jusqu’alors)
animer les objets de manière réaliste, en fonction de leurs interactions respectives (collisions, lancer,...)
Une première expérimentation a été faite avec ODE (Open Dynamics Engine), moteur open-source disponible sur le site ode.org. Bien que de bon niveau, il a posé quelques soucis, notamment par des comportements erratiques des cylindres : impossible de faire tenir debout les pyramides de quilles posées sur les socles (eux aussi cylindriques), car elles explosaient sans raison, comme si des ressorts comprimés avaient été placés entre elles. Après moult recherches, il semble que les cylindres à faces plates ne sont pas des objets faciles à vivre, et qu’ils font preuve d’instabilité selon l’ordre de grandeur de leurs dimensions. De plus, les bordures des ponts avaient parfois tendance à pénétrer les flancs des cylindres qui entraient en collision avec.
Bon, ben on cherche autre chose. Et c’est là que ma pomme est tombée sur Newton (d’habitude c’est l’inverse !!). Newton est un autre moteur de dynamique gratuit et libre d’utilisation (ses sources ne sont pas disponibles cependant), initialement écrit pour le développement de jeux. Il est disponible sur le site www.newtondynamics.com, et existe actuellement pour Windows, Linux et Mac OS-X. Il repose sur une approche un peu différente de la dynamique par rapport à la plupart des autres moteurs, qui le rend d’une part très efficace, mais surtout très réaliste. Sans entrer dans les détails, la différence de comportement peut être mise en évidence en construisant un pile de cubes, et en appliquant une impulsion horizontale à l’un des cubes pour le chasser de la pile. La plupart des moteurs donneront un comportement identique quel que soit le cube. Avec Newton, l’influence de l’ensemble des objects de la pile sitéus au-dessus du cube chassé est prise en compte (au travers des forces de frottements notamment), et celui-ci ne se comportera pas de la même manière selon qu’il sera tout en bas, au mileu ou vers le haut de la pile.
En conclusion, et comme beaucoup de ses utilisateurs le disent dans le forum qui lui est dédié : Newton rocks.
Ca a donc donné ceci :
Cette version intègre les possibilités suivantes :
description de l’environnement statique et des objets via un fichier XML
intégration du moteur de dynamique
caméras multiples
Elle n’a pour finalité que de tester ce premier niveau d’intégration, en permettant à l’utilisateur de shooter l’une des balles de GRS pour aller culbuter les empilements de quilles. Et ça marche nickel :-)
Remarque : le développement a été fait en Delphi et la 3D est gérée par GLScene comme précédemment (on ne change pas une équipe qui gagne)
La dynamique du robot
OK. Maintenant qu’on peut disposer d’un environnement de jeu vivant, il faut s’attaque au robot. Plus question en effet de se contenter de déplacer l’objet graphique représentant le robot comme dans la version précédente. Celui-ci va donc avoir une forme géométrique quelconque, des roues motrices, des stabilisateurs (ball-casters) et des moteurs. Il va se déplacer par application de couples sur les roues motrices, et va donc simuler les éventuels patinages ou glissements selon les accélérations ou les obstacles rencontrés.
Une deuxième application d’expérimentation a été développée, avec les mêmes outils de base : GLScene pour la 3D et Newton pour la dynamique. Là encore, c’est bluffant de réalisme, et en changeant les caractéristiques des matériaux (coeeficents d’élasticité, de friction statique, de friction dynamique,...), on peut s’amuser à toutes les variantes, y compris le Trophée Andros (courses auto sur glace pour ceux qui ne connaissent pas) avec un robot !
Et voilà le travail :
On peut constater que le robot a une forme complexe, la cavité contenant le releveur de quilles de la version réelle (ok, il n’a pas servi lors de la Coupe, comme beaucoup d’autres...)
Les modèles géométriques complexes
Now entering le terrain de golf de la Coupe 2006. Impossible à modéliser par assemblage de primitives géométriques simples, à cause des trous. En plus, il y a les distributeurs de balles.
Qu’à cela ne tienne : le terrain sera modélisé sous forme d’un maillage, chargé par le simulateur afin de définir un collider (forme géométrique utilisée pour la détection de collision) complexe. Ca encore, Newton sait le faire. Le format retenu pour le maillage est celui de 3D Studio Max car très répandu et directement reconnu par GLScene. Qui plus est, il est possible d’assigner des matériaux différents pour chaque facette, ce qui permet de définir simplement la couleur des trous et d’exploiter ensuite cette information pour le décompte des points.
Le nouveau bébé est ici :
Il permet de jouer au golf (ou plutôt au billard américain) avec les balles de ping pong (dont le comportement physique a été reconstitué via la définition de leur matériau). De plus, les distributeurs sont actifs, et on peut en libérer le contenu à volonté.
Et maintenant
Et bien, il faut assembler tout cela, et y ajouter la couche de gestion du contrôleur de robot de la version 2004. Il y a encore pas mal de boulot, mais je reste confiant :-)
Répondre à cet article
