Aujourd'hui je me plonge dans Exudyn, un simulateur dynamique prometteur.
La documentation fait 900 pages, probablement la rigueur autrichienne de ses auteurs universitaires.
Exudyn est open source et partagé sur github.
Exudyn permet de modéliser la dynamique d'un ensemble de corps rigides ou souples (intéressant pour les kites et les lignes).
C'est un module python basé sur du code C++ dédié (donc on a à la fois une interface pythonique et du code rapide).
Il utilise une formulation redondante des coordonnées du système, mais peut utiliser une formulation minimale dans le cas des arbres cinématiques ouverts.
Dans la formulation redondante, les contraintes (liaisons cinématiques) ne sont pas prises en compte pour réduire le nombre de coordonnées au nombre des degrés de liberté.
Un kite modélisé avec une simple ligne peut donc être modélisé avec la formulation minimale, mais un kite modélisé avec ces lignes de contrôle ou de bridage (ce qui crée des boucles cinématiques) pourra aussi être modélisé mais avec la formulation redondante.
Les concepts fondamentaux sont :
- les nœuds qui ajoutent les degrés de liberté au système,
- les objets qui ajoutent des équations au système (corps, contrôleurs, connecteurs et même éléments finis),
- les marqueurs qui permettent de placer les interactions (contraintes) sur les corps,
- les charges, statiques ou calculées ce qui permet de créer les contrôleurs,
- les capteurs qui permettent d'avoir des sorties au point de mesure souhaitée.
Un système est donc construit à partir de ligne de code python (pas de format de sauvegarde a priori, et pas d'interface graphique).
Par défaut, les sorties sont exportés dans un fichier texte (proche d'un csv, mais avec un header et footer).
Des fonctions de tracé et de visualisation 3D sont intégrées. La visualisation 3D utilise openGL (rapide) et permet de rajouter des formes (fichier .STL) et de visualiser des vecteurs et trajectoires pour une simple vérification des calculs en temps réel sans trop les ralentir. Une interface graphique permet de modifier les paramètres de visualisation (couleurs, transparence, etc...). Il est possible de définir un suivi des objets avec la caméra.
Il est possible d'interagir en temps réel avec les simulations de manière assez basique (commande python). Il n'est par contre pas possible de naviguer temporellement dans la simulation (retour en arrière, et bien sûr avance rapide) avant la fin.
La simulation est souvent plus rapide que le temps réel, voire trop rapide pour visualiser ce qui se passe. Réduire le pas de temps peut permettre de mieux interagir (pas d'autre mécanisme de synchronisation pour faire du vrai temps réel).
Si les états du systèmes ont été enregistrés, on peut naviguer temporellement après la fin de la simulation (à partir d'un fichier texte sauvegardé).
Des captures d'image peuvent également être faites lors de la simulation pour générer une animation (avec ffmpeg).
Des modèles de contact, intégrant une résistance de friction, sont disponibles (roues, navette sur câble, etc).
Tout cela permet de modéliser des câbles, poulies, palans...
Les modèles doivent être continus, mais des discontinuités peuvent être intégrés. Un pas de temps est donné par l'utilisateur, mais un pas variable est utilisé en interne.
L'utilisateur doit s'assurer du paramétrage pour permettre la convergence et avoir la précision souhaitée (solution approchée).
Des modèles python peuvent être intégrés mais ralentissent les calculs. Ils peuvent être convertis dans un code symbolique propre à Exudyn pour améliorer les performances (ce point n'a pas l'air très détaillé dans la documentation).
La parallélisation multicœur est possible pour des études de sensibilité.
Le principe des puissances virtuelles est utilisé pour définir les équations du mouvement.
Exudyn peut également aider à trouver les points d'équilibre et à linéariser le système et calculer les modes propres.
Exudyn a également un module robotique permettant par exemple de résoudre les problèmes de cinématique inverse.
Des algorithmes d'optimisation sont également intégrés pour jouer sur les designs ou pour faire un recalage par rapport à des essais (simple balayage et algorithme génétique).
La documentation est étoffée et il y a même une chaîne youtube, avec relativement peu d'exemples par rapport à tous ceux disponibles.
Je me suis amusé à faire tourner la centaine d'exemples.
Assez impressionnant, mais il y a peu d'exemples avec des fonctions utilisateurs et de couplage avec des modèles de portance ou traînée par exemple, ce qui va m'intéresser;