Petit partage des avancées sur le développement d'un simulateur dynamique d'Aile d'eau.
Dans un premier temps, j ai fait un état de l'art des outils de simulation existant. Puis j ai testé certains outils sur des cas simples (pendule ou double pendule). Souvent en demandant à Chatgpt de générer le code.
J'ai eu des difficultés d'installation pour plusieurs outils.
J'ai finalement retenu Exudyn.
J'ai ensuite vérifié la capacité d'Exudyn à simuler 3 corps relié par deux poutres flexibles.
J'ai appliqué une force constante à une extrémité pour modéliser le kite. À l autre extremité, j si ajouté un feedforward pour contrer cette force plus un contrôleur PID pour stabiliser le système à la fois en altitude et en antiderive.
Les 3 corps et les lignes sont également soumises à la gravité.
On observe un mouvement d'oscillations notamment de la nacelle, avant un amortissement.
Dans un deuxième temps, j'ai testé un pendule simple avec des forces d'amortissement liées á une pure trainée aerodynamique
Dans un troisième temps, j'ai modélisé les efforts aérodynamiques sur un corps, puis associé ces efforts au bout d' un pendule rigide pour créer un kite.
Puis un foil. Puis lié les deux.
Pour l'instant, une liaison a été rajoutée pour limiter le mouvement à 2 dimensions. On peut voir si dessous un exemple de simulation avec un vent venant de droite. Le grand repère á droite représente le kite. Le rectangle représente une nacelle. Le foil est en petit á gauche de la nacelle
Pas de modification significative du setup, j'ai seulement rallongé la le fil de pêche.
Lors d'une première série de test avec plus de longueur, j'ai pu constater qu'à partir d'une certaine vitesse, le foil sortait de l'eau par le bord de fenêtre, et avait un comportement assez oscillant de droite à gauche. En ramenant le foil, j'ai pu constater que le fil de fer d'accroche n'était pas bien fixé.
Malheureusement, j'ai posé le drone un peu vite aussi de l'avion et le fil de pêche s'est enroulé dans un des rotors du drone. J'ai heureusement pu le couper et l'enlever.
J'ai installé un nouveau fil de pêche (un peu plus long), et je suis reparti pour une série d'essais. Le vol était plus stable.
Malheureusement, je me suis rendu compte que l'avion s'était décroché.
Des personnes sur la plage m'ont prêté un masque et je suis allé balayer la zone où j'avais volé, mais sans succès.
De retour, j'ai regardé la vidéo du drone. Le foil s'est décroché après être sorti de l'eau sur un saut lors de l'atterrissage. La vidéo permettait de localiser plus précisément où s'était décrocher le drone (l'eau est clair). Malheureusement, j'avais trop froid pour repartir.
J'y suis retourné aujourd'hui avec Stefano, qui a retrouvé l'avion !
Il va falloir que je revois mes nœuds de pêche (cette fois j'avais fait un cabestan + demi clé) !
J'aurai peut-être le temps de rajouter une vidéo ce WE.
En partant de cette version (assez proche du simple kitefoil, avec juste deux dérives en plus)
elle a besoin de faire demi-tour
avec un bridage simple, il n'y a pas non plus de garantie que le fuselage restera sous l'eau
C'est deux problèmes peuvent-être réglés juste avec une patte d'oie fixée aux extrémités des ailes (comme sur mes derniers essais) et un contrôle du différentiel de longueur depuis le pilote (ce qui me manquait sur mes derniers essais).
Le contrôle du différentiel permet à la fois de régler la hauteur de vol et de faire tourner le foil en le faisant plonger lors d'un changement d'amure (pour cela il faut suffisamment d'autorité de contrôle pour vaincre la stabilité naturelle).
La subtilité va résider dans le fait que la patte d'oie ne peut pas être ramenée au niveau de pilote (en théorie il faut que le point du bridage soit à l'intérieur du cercle défini par la courbure du foil). Il faut donc prévoir par exemple un anneau accroché à une des lignes et dans lequel passera l'autre ligne.
La dérive sur le foil principal ne semble pas non plus indispensable (la raideur verticale est assurée par le foil courbe) et risque même de dégrader la stabilité à mon avis (peut-être qu'elle amortit dans les vagues ?). La dérive au niveau du stabilisateur me parait par contre indispensable.
J'ai également réfléchi à d'autres moyens de retournement du foil (avec un stabilisateur mobile sur un rail d'avant en arrière et des palpeurs plus en avant pour améliorer le couplage tangage/pilonnement), mais c'est très complexe.
J'ai également réfléchi à un retournement autour de l'axe longi, mais c'est aussi trop complexe.
D'autant plus, que l'idée actuelle peut-être couplée avec celle d'un palpeur à l'avant :
au lieu d'avoir un seul fuselage, on place un fuselage à chaque extrémité, cela va permettre au foil de voler plus haut et d'avoir la surface de l'eau au niveau du milieu du foil sans perdre la stabilité apportée par le stab.
un autre foil courbe est mis plus en avant du foil principal entre les deux fuselages, avec une section réduite avec un arc de cercle prononcé afin de servir de palpeur
Un arc de cercle moins prononcé est utilisé pour le foil principal.
Ma tante prof de dessin doit avoir honte de moi, mais l'idée est là.
Edit 2024/12/11 : cette solution a par contre peut-être l'avantage de ne pas marcher... En effet la stabilité sur le foil principal grâce à la courbe est possible car le foil va prendre du roulis lorsqu'il sort de l'eau ce qui va augmenter la force faire et assurer la stabilité. Ici mon palpeur ne sera pas forcément suffisant pour faire tourner le foil, et surtout, il ne crééra peut-être pas le couplage tangage-pilonnement qui le justifie... Je pense que j'arrive à un moment où un outil de simulation prenant en compte les différents degrés de liberté serait intéressant !
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é.
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;
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 ?
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 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.
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 :