samedi 16 novembre 2024

Test simulateur dynamique multicorps Exudyn

 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;

dimanche 10 novembre 2024

Essai cerf-plongeant tiré par drone

Tester une aile d'eau miniature avec un drone : check !


La vidéo ci-dessus montre un peu le déroulement des essais.

Les objectifs étaient :

  • vol stable en mode pendule (stabilité au nadir)
  • obtenir une traction vers le bas suffisante

Par traction suffisante, je voulais obtenir au moins deux fois le poids du cerf-plongeant, ce qui permettrait de faire un vol sur le côté.

Le cerf-plongeant fait 45g dans l'air et 20-25g dans l'eau avec la poussée d'Archimède. J'ai donc rempli une petite bouteille en plastique de petites pièces afin d'avoir environ 2 fois ce poids. Une poulie a été attachée au drone, avec d'un côté le cerf-plongeant, et de l'autre côté le contrepoids. L'objectif était de trouver la vitesse à partir de laquelle, le contrepoids est soulevé.

La caméra du drone est utilisée pour voir les essais. La vidéo haute qualité est enregistrée directement sur le drone.

J'ai également enregistré la vidéo sur l'écran de mon téléphone (pour avoir une vidéo en cas de crash du drone et pour avoir les données incrustées directement, sans aller faire du reverse engineering). La vidéo présentée est une fusion des deux, ce qui permet d'avoir la vitesse GPS et une meilleure qualité. Des vitesses de 2.5m/s (5 kt) ont été atteintes avec un vol stable, mais sans que le contrepoids ne bouge. Pour des vitesses plus élevées, le foil sort de l'eau. Peut-être aurait-il été possible de voler un peu plus bas pour avoir plus de longueur dans l'eau, et ne pas sortir de l'eau lors de l'accélération.

Peut-être aussi le fil du contrepoids faisait-il un tour ce qui a rajouté du frottement ?

En tout cas, la traction sur le drone semblait significative, étant données les accélérations du drone quand le foil sort de l'eau.

Sur la vidéo prise sur l'écran on pourrait également estimer la finesse du drone (pas mesurer directement car pour l'instant le poids n'est pas négligeable). Pour cela une calibration de la caméra (stabilisée en tangage) serait nécessaire. Une recalibration pourrait être effectuée en mettant le pendule en l'air à la verticale.  Pour l'instant, on peut utiliser l'information de manière qualitative.

La prochaine étape ? Tracter deux cerfs-plongeants en simultanée pour comparer les performances et affiner les réglages ?


mercredi 6 novembre 2024

Essais jouet avion paravane dans la piscine du Vallon des Auffes

 

Hier soir j'ai fait une première série de tests dans un nouveau spot très adapté : la piscine naturelle du vallon des Auffes. Il y a peu de monde le soir et le matin, l'eau est peu profonde et claire ce qui est rassurant, et surtout il y a une grande longueur pour faire des essais en tirant l'aile d'eau à la main et prendre un peu de vitesse.

 

Par rapport aux essais précédents, j'ai rajouté deux vis attachée avec un fil de fer pour faire plus de poids sur le nez. Ce n'était cependant pas suffisant.

Le vol n'était pas très bon. L'avion avait tendance à se mettre travers à la route. S'il était dans la bonne direction au départ, il pouvait être assez stable, mais quand j'essayais de le faire accélérer un peu en travers, il se bloquait dans une position stable de travers. J'ai également observé une position stable sur le ventre avec un fort angle d'attaque.

 

Le soir après les essais, j'ai utilisé un poids plus conséquent sur le nez (un gros boulon, idéalement il faudrait un métal dense comme du plomb ou mieux du tungstene avec une densité de 19 ?). Un peu de duck tape a servi pour améliorer les formes.

Un crochet métallique plus rigide a été rajouté afin d'avoir un comportement plus reproductible. 

J'ai également changé la ligne (remplacement par fil de pêche très fin).

Ce matin, je suis retourné à la piscine. Cette fois, j'arrive à obtenir un vol satisfaisant. Il faut cependant que le point d'accroche soit bien avancé, sinon l'avion a tendance à ne pas suivre dans les virages et à se retrouver coincé dans une position stable en crabe.


La traction doit maintenant approcher la centaine de gramme pour une marche rapide.

Peut-être bientôt des essais avec le drone ?



dimanche 3 novembre 2024

Les essais du jour ont été décevants et les photos/vidéos effacées pour une raison inconnue. Pas trop le courage de détailler

 

 
 

 
 
 
 

 
 

Le foil :
Il s'agit d'un jouet acheté dans un supermarché à 5€ : un avion de chasse en métal fritté de 11cm de longueur.
J'ai découpé le train d'atterrissage et fixé un crochet en fil de fer fin.
J'espérais que cela allait me donner un certain depower automatique, mais c'était en fait une mauvaise idée, le fil de fer se plie et le réglage varie au cours d'un essai.

Un petit bonus : 

un vrai bateau tiré par hélicoptère 

Aucune description alternative pour cette image
Source


Et plus classique, un drone tirant un surfeur.

 


Un retour également sur les difficultés du drone a volé en rase-motte.

J'ai incriminé la mesure de la pression statique, mais cela peut-également être lié à l'inclinaison du drone qui diminue sa portance, ce qui n'est peut-être pas bien compensé.

Cela peut-aussi être lié à la mesure du capteur ultrason qui se retrouve en diagonale à cause de l'inclinaison du drone. La mesure augmente ce qui peut faire descendre le drone. Il est cependant probable que le capteur ultrason décroche dans ces conditions.

Utilisaton d'un drone volant pour tester un engin flottant

Vidéo des tests du jour :
 
 

Date : 2 Novembre 2024

Localisation : Marseille Prado

Tracteur : Drone Parrot Bebop 2

Engin tracté : bouteille sèche flottante/étanche (Le Mousse) avec 2 mètres de laisse.

 

La caméra filmant vers l'arrière pour voir le comportement de l'engin tracté, je pilote en vue directe. En pratique, je ne vois pas assez bien le drone lorsqu'il est à la surface de l'eau, mais je peux vérifier qu'il n'y a pas de bateaux autour (il suffit de remonter le drone au-dessus de l'horizon pour le voir. Peut-être qu'avoir les yeux plus proches du niveau de l'eau pourrait aider).

Le drone est équipé d'un capteur ultrasonique de hauteur de vol et régulé grâce à ce capteur lorsqu'il est proche du sol. Le vol en rase-motte au-dessus de l'eau semble fonctionner. Avec 2m de ligne, je dois me mettre à environ 1m de hauteur. Ca fait un peu peur au début. La mer était calme heureusement (mais à l'échelle de mon engin, ça fait déjà une grosse mer).

L'engin tracté est attaché avant le décollage. Il se retrouve à pendouiller au décollage. Cela ne semble heureusement pas trop perturber le capteur ultrason (couplé à GPS et baromètre je pense).

Le drone a une petite tendance à perdre en altitude lorsqu'il accélère (voir vers la fin de la vidéo avant que je le remonte, c'est peut-être lié à une augmentation de la pression sur le capteur à cause d'un couplage avec la pression dynamique. Edit: ça peut aussi être lié à à l'inclinaison qui réduit la portance, ou augmente la distance mesurée par le capteur, voir à une désactivation du capteur dans certaines conditions). 

Il peut être tentant de réduire la longueur de la laisse afin d'avoir un meilleur zoom, mais peut-être faut-il mieux prendre un peu de marge...

D'autant que si on essaie de descendre le drone trop bas, il déclenche la procédure d'atterrissage et plus moyen de remonter à ce moment... Je pense qu'il y a une sorte de sécurité (il faut rester 1 seconde le joystick vers le bas pour atterrir). Je vais vérifier la prochaine fois en mettant juste des petits coups vers le bas.



Lorsque le drone va vite, le vent apparent créé fait décaler le pendule par rapport à la verticale. C'est assez pratique pour mieux voir dans quel sens vol le drone. D'habitude, j'ai un mal fou en pilotage en vue directe, mais là je vois plus facilement dans quelle direction le drone va (avec une incertitude lorsqu'il est de face, on ne peut dire s'il se rapproche ou s'éloigne).

 

Dans un futur pas trop lointain, on peut envisager d'avoir une petit IMU et une balance fixées sur la ligne de traction afin de mesurer la performance.


Et en bonus, voici un petit spoiler des prochains essais :




 

Simulateur dynamique

Le sujet revient régulièrement, mais peu d'avancées visibles depuis 3ans...

J'avais partagé il y a quelques années 2 petits simulateurs de kites maisons : 

 

 

 

J'avais également étudié il y a longtemps différents simulateurs, mais toujours en me limitant à un seul corps (et éventuellement un câble) :

Chez Airseas et Syroco, j'ai utilisé des simulateurs multicorps développés from scratch, sans être en charge du développement :

  • utilisant simulink
  • utilisant pydy

Aujourd'hui j'aimerais bien reprendre le développement d'un simulateur multicorps, en python, julia ou javascript. 

Le simulateur doit servir à la fois pour des études statiques, mais aussi pour de la visualisation et pour développer des algorithmes de contrôle. 

 

Au niveau inspiration, il y a par exemple le simulateur SYD de VPLP.

 

Je me lance donc dans un petit benchmark des frameworks existants dont j'ai essayé de dresser une liste ci-dessous. Je n'ai pas trouvé de comparaison.

 

C++ seulement

  • mbdyn
  • Flightgear

 

C++ et binding python

  • mujoco -> testé
  • simbody/pysimtk -> pas trouvé comment installé
  • xdyn-> pas multicorps
  • project chrono/pychrono - > j'ai laissé tombé l'install
  • rbdl -> pas réussi à installé avec poetry
  • OpenSim -> pas réussi à installer avec poetry


Python

  • SMBD/URAEUS -> pour les véhicules roulant
  • pydy
  • pybullet 
  • assimulo -> seulement un solveur
  • pyFMI  -> seulement interaction avec FMU
  • pyDrake -> encore incomplet
  • simupy -> plus dans le genre simulink
  • APMMonitor/gekko -> plus optimisation de trajectoire
  • exudyn -> flexible bodies

Julia


Voici aussi une liste de simulateurs spécialisés (Airborne Wind Energy) :

Ressources

https://www.moorepants.info/blog/npendulum.html