Compensateur de Tip Tilt

Description:

L’objet de cet article est la description d’un système d’optique adaptative « low-cost » dont les performances doivent être suffisantes pour permettre la stabilisation d’une image avec un impératif de traitement en temps réel compatible avec les caractéristique physiques de la turbulence. Quand on parle d’optique adaptative, il faut bien évidemment distinguer les optiques professionnelles destinées à corriger la structure du front d’onde incident sur des ordres de déformations dits « élevés », c’est à dire pour lesquels l’ordre des polynômes de Zernike associés est grand.

Cela veut dire en clair qu’une optique adaptative professionnelle est capable de compenser des défauts de type mise au point, coma, astigmatisme, tréfoils, etc…. avec une dynamique temporelle proche voir meilleure que les temps de cohérence de la turbulence. Ces optiques nécessitent des miroirs déformables ayant la possibilité de se déformer à des échelles de l’ordre d’une fraction de leur diamètre. C’est donc des pièces optiques difficiles à concevoir, régler et contrôler, ce qui en fait des éléments bien au delà du budget d’un astronome amateur.

Figure 1 : Structure du Correcteur de Tip Tilt

Toutefois, si l’on regarde dans le détail la structure de la turbulence que l’amateur doit être en mesure de compenser en vue d’améliorer ses images, ou autres applications, on s’aperçoit que les ordres de turbulence les plus bas (dans l’ordre des polynômes de Zernike) correspondants aux ordres 0 à 2 (piston et inclinaison X et Y), permettent d’améliorer significativement le rapport de Strehl d’un instrument de petit diamètre. Un compensateur de Tip/Tilt sera en mesure de compenser dans des instruments de petite diamètres et en fonction du paramètre de Fried r0, jusqu’a près de 60% de la turbulence limitant le rapport de Strehl. Il y a donc là un domaine d’amélioration des conditions d’imagerie pour lequel un système de compensation de ce type tilt semble être intéressant et surtout bien plus abordable qu’une optique adaptative complète.

Il ne faut pas perdre de vue toutefois, que ce type de compensation n’est valable que pour des angles petits, et donc pour des champs faibles, et donc difficilement transposable pour de l’imagerie du ciel profond…..

Ce système d’optique adaptative est basé sur un miroir basculant que j’ai eu l’occasion de décrire sur cette page. Ses caractéristiques propres sont de pouvoir déplacer l’image d’un objet en X et en Y à une fréquence maximale de l’ordre de 200 (au delà on tombe aux environs de 250Hz sur la fréquence de résonance mécanique du miroir, ce qui pose des problèmes sur l’asservissement. Ce miroir est donc monté sur 3 actuateurs piezzo basse tensions montés à 120° (voir Figure 1).

Le miroir basculant est monté à la façon d’un renvoi coudé envoyant le faisceau incident verticalement vers le haut sur le schéma précédent. Le faisceau incident rencontre ensuite un cube séparateur 50/50 permettant de récupérer 50% de la lumière incidente dans chaque directions. Sur la voie verticale se situe la caméra d’imagerie ou d’acquisition (pour l’occasion une ASI224 pixels de 3.5µm) et sur la voie horizontale la camera permettant de récupérer la position de l’objet (ici une Balser 1920 ACA155um pixels de 5.6µm). Cette configuration, contrairement à celle ayant servi pour le test du miroir basculant, permet de faire fonctionner l’asservissement de la position de l’image selon un mode dit en « boucle fermée », via un nano ordinateur de type OdroidXU4. L’ensemble des pièces sont réalisées en impressions 3D (modélisés sous Google sketchup), et pour mémoire, le cube séparateur à été approvisionné chez Surplushed (environ 40 dollars) et le miroir plan (35 euros) a été approvisionnés chez Thorlabs. On trouve chez Thorlabs des cubes séparateurs pour environ 200 euros.

Figure 2 : Correcteur de Tip Tilt complet

Le principe de l’asservissement complet, déjà connu dans le domaine, est résumé sur le schéma suivant. L’originalité du système consiste principalement en l’utilisation du miroir basculant à cellules piezzo de type « Buzzer ».Le buzzers piezo utilisés sont des KPSG100 de chez Kingstate

Figure 2 : Principe de l’asservissement de Tip Tilt

Le boîtier de contrôle Odroïd que l’on peut voir sur la photo précédente, comporte donc ce nano ordinateur, ayant pour rôle de récupérer l’image de la caméra Basler, et de générer par un convertisseur numérique/analogique 16 bits, la tension de commande à injecter dans le boîtiers de contrôle du miroir mobile pour compenser la dérive de l’image. Trois potentionmètres permettent de plus d’injecter une tension supplémentaire pour décaler légèrement la position de consigne nulle et donc recentrer l’image sur le centre de rotation du miroir. La caractérisation de l’ensemble Odroïd+CNA fonctionnant comme un senseur numérique de position a été réalisée ici . Nous avons put voir que le relevé de position se faisait avec un taux de rafraîchissement de la commande pouvant aller jusqu’a 350Hz sans perte temporelle, sur une fenêtre de contrôle de la Basler de 320×320 Pixels

Figure 3 : Mode de réglage

L’Odroïd est doté d’un serveur de bureau distant de type vncviewer, et fonctionne sous linux (distribution Debian). Son adresse IP est fixe et l’on peut aussi travailler la configuration de la caméra de contrôle en ssh. On peut voir sur le cliché suivant la fenêtre de bureau distant, avec le logiciel de contrôle de la caméra PylonViewerApp, permettant de régler le temps d’exposition, le gain, la taille de la fenêtre de détection de mouvement. La deuxième fenêtre visible est celle de la caméra d’imagerie, utilisant le logiciel ASICAP.

Le réglage de base pour la camera Basler est à débit fixe de 300ips, pose de 1 à 3ms et l’on règle le gain en fonction de l’objet sur l’image de consigne.

Figure 4 : Balayage vertical et horizontal

Sur la vidéo précédente (Figure 4), réalisée au foyer d’un MAK 90 Apex Orion de 1250 mm de focale, on peut voir l’amplitude de balayage du miroir mobile en X et en Y lorsque l’Odroïd lui envoie une consigne de déplacement linéaire sur chacun des axes avec la caméra d’imagerie en « full frame ».

Les sauts apparents de vitesse sont dus à des images non sauvegardées lors de l’acquisition avec la ZWO. Le mouvement perçu à l’oeil est parfaitement linéaire.

Tests en labo

Figure 5 : Test en labo

Le reflet de la lampe sur le bureau vu par la caméra d’imagerie, présente une surface de plusieurs centaines de pixels. Caméra de détection de position et camera d’imagerie sont réglées de manière à minimiser la dimension du reflet et se rapprocher d’une PSF telle que l’on pourrait la distinguer dans un télescope (voir Figure 6).

Figure 6 : Cible en labo

Le logiciel de test que j’ai mis au point est un exécutable en C++ permettant d’activer la caméra Balser indépendamment du PylonViewerApp, la caméra conserve les paramètres défini via le PylonViewerApp. La détection de mouvement se fait en OpenCV et consiste en la recherche du photocentre de l’ensemble de l’image (pour mémoire, 320×320 pixels). Une fois la position du photo centre établie, l’erreur par rapport à une consigne de position prédéterminée (saisie au démarrage) ou calculée par une procédure de calibration (options choisie au démarrage), est injectée dans un régulateur PID numérique qui calcule la tension à réinjecter au miroir.

Figure 7 : Balayage vertical à 160Hz

Pour illustrer la commande de déplacement du miroir la vidéo de la figure 7 utilise une consigne de déplacement de +/-1024 pas codeurs sur la tension du convertisseur numérique/analogique (CNA). Le nombre de pas codeurs par pixel est de 175. On en déduit que le déplacement image est de 12 pixels. Le temps entre deux actualisations de la position du miroir est de 3ms. Donc l’arret aux deux positions extrêmes droite et gauche se fait a une fréquence de l’ordre de 160Hz (soit dans la bande passante du miroir). On visualise en fait ici le battement entre ces 160Hz et la fréquence d’acquisition de la caméra d’imagerie.

Figure 8 : Balayage vertical et horizontal total et blocage

Sur la vidéo de la figure 8, compte tenu de ces valeurs d’actualisation de la tension (3ms), le nombre de pas codeurs pour obtenir la pleine échelle de déplacement est de 374.5 soit un temps de parcours de la pleine échelle de 1.12 secondes. Cette remarque montre que le temps d’actualisation sera d’autant plus grand que l’erreur à compenser sera grande. Le PID avec un coefficient de proportionnalité fixé à 175 pas est une condition suffisante pour les déplacements de quelques pixels. Il faudra en tenir compte pour améliorer la vitesse de correction aux grands déplacement en établissant une loi de correction à coefficients adaptatifs en fonction de l’amplitude de l’erreur.

Figure 9 : Mouvement de Tip Tilt non compensé

Sur la Figure 9, on peut voir la perturbation de la couche d’air séparant le télescope de la cible, provoquant une variation de la position du photo centre calculé par l’Odroid. Cette vidéo est en mode non asservi. Pour se rendre compte du phénomène de variation de position du centroïde, il suffit de positionner la flèche de votre souris sur le point le plus brillant. On constate une dérive du motif par rapport à un repère fixe.

Figure 10 : Mouvement de Tip Tilt compensé

A contrario, sur la Figure 10, le motif reste systématiquement centré sur la position de son photo centre (centre de gravité des intensités lumineuses mesurées). Les tressautements sont dus à la fluctuation de position du centroïde intégré sur l’ensemble de l’image. C’est le résidu des déformations locales (polynomes de Zernike supérieurs à 2) qui perturbe le calcul de la position du centroïde. Cet effet devrait s’atténuer si l’on à une psf peu ou pas déformée comme ce doit être le cas dans un instrument de diamètre proche de la valeur du r0. Une chose assez remarquable, est que l’appui lent sur le tube du télescope, ou sur le dispositif lui même ne décentre pas l’image. Si on le fait trop rapidement l’asservissement décroche, mais la solution à été évoquée plus haut dans la modification de la loi de commande(ici le pas de correction est fixe, ce qui conditionne la vitesse de correction au premier ordre).

Une autre source de bruit résiduel sur la position est la différence de dimensions des pixels entre la Basler (5.6µm) et l’ASI224 (3.75µm). Le centroïde calculé est fait sur la caméra ayant les pixels les plus gros. Il y a donc une incertitude d’un facteur 1.5 sur la position physique du centroïde, juste dut à la différence d’échantillonnage entre la Basler et l’ASI. Il serait judicieux d’inverser la camera de consigne et la caméra d’imagerie, mais je ne sais pas si il est possible de figer le taux d’images (fps) sur la caméra chinoise, ainsi que de l’interfacer correctement en c++. Si quelqu’un a la réponse, l’appel est lancé…..

Figure 11 : Zoom sur la caméra d’imagerie

Pour se convaincre de l’efficacité de la correction, j’ai simplement filmé l’écran de mon PC portable recevant uniquement l’image de la voie d’imagerie. Le zoom est suffisant pour voir l’effet de stabilisation à quelques pixel près :

Figure 12 : Mouvement de Tip Tilt non compensé

Dans les deux vidéos suivantes, la flèche de la souris sur l’écran est immobile. L’impression de mouvement que l’on pourrait avoir viens du fait que j’ai filmé cette séquence avec mon téléphone portable…

Figure 13 : Mouvement de Tip Tilt compensé

Dans les deux vidéos précédentes, la flèche de la souris sur l’écran est immobile. L’impression de mouvement que l’on pourrait avoir viens du fait que j’ai filmé cette séquence avec mon téléphone portable…

La vidéo de la Figure 12 montre le photo centre bougeant au grès de la variation de l’indice de l’air le long du chemin séparant le télescope et la cible (environ 4m). Sur la vidéo de la figure 13, on voit l’image stabilisée, la séquence de « Lock » s’arrête avant la fin de la vidéo (vers la 20ème seconde). Détail amusant, on entend parfaitement quand on approche son oreille du dispositif les piezzo actuateurs crépiter au grès des tensions de correction qu’ils reçoivent.

La stabilisation est donc efficace sur une plage de 3×3 pixels (soit 2 »7 vu l’échantillonnage sur la Basler (on peut donc aller plus loin si on augmente la focale) avec une fréquence d’actuation de l’ordre de 160 corrections par secondes. C’est encourageant ! Le travail restant est donc l’amélioration de la loi de commande pour les grandes amplitudes, et voir comment ce système se comporte sur le ciel.

Premier essai sur le ciel

Pour ce test sur le ciel (02/08/2109), le système complet est monte comme d’accoutumée lorsque je teste des choses un peu particulières sur mon vieux C8 Powerstar PEC de 1991, dont la qualité optique n’est pas à la hauteur de ce que l’on pourrais attendre d’un 8 pouces. Toutefois, le but ici n’étant pas de faire de la belle image, il s’agit en premier lieu d’estimer ce que peut apporter le compensateur de Tip/Tilt en terme de stabilisation de cible, planétaire ou stellaire. En effet, nous avons vu que la composante de tip/tilt était intéressante à compenser, au voisinage de l’angle d’isoplanétisme, ce qui sous tend des angles faibles. Inutile de considérer le système utile dans le cas de l’imagerie du ciel profond….

Les runs d’asservissements sont fait sur des lots de 9000 images (voir détail de droite). Les vidéos présentées ci-dessous sont ralenties d’un facteur 2 environ.

Figure 14 : Zoom sur la caméra d’imagerie

On peut voir sur les clichés précédents l’installation complète. Sur le cliché de gauche, le boîtier Odroïd est relié à la camera de contrôle de position via un câble USB3 et au boîtier de contrôle du miroir basculant par un câble nappe. Le PC à droite ne sert qu’à communiquer avec l’Odroid via un câble Ethernet, et à piloter la caméra d’acquisition.

Premier essai sur Jupiter

Sur l’image suivante, capture d’écran du PC contrôlant la caméra d’imagerie, la fenêtre PylonViewer est obtenue via un tunnel ssh. on peut y régler facilement les paramètres de la caméra de contrôle de position tels la largeur de fenêtre, le débit en fps, le gain caméra, le temps d’exposition relatif à l’objet d’intérêt. La fenêtre ASICAP visible à droite est celle de la caméra d’imagerie sur le PC distant.

Figure 15 : Guidage et Imagerie sur le PC principal

Le deuxième moyen d’accès au paramétrage caméra de contrôle de position est via un serveur vnc qui recopie l’écran de la Debian installée sur l’Odroïd. Même remarque que précédemment pour ce qui est de la camera d’imagerie sur le PC distant à droite. Les vidéos de la voie d’imagerie seules sont présentées ici. En effet, pour de raisons bien compréhensibles de temps réel dans le code de calcul du centroïde image que nous avons écrit, l’Odroïd ne sauvegarde pas le flux vidéo, mais ne conserve que les positions des photos centres calculés (seuillage, extraction des moments en OpenCV).

Figure 16 : Guidage et Imagerie sur Jupiter

Acquisition sur Jupiter, mode asservi de 0m36s à 1m38s
Figure 17 : Corrections de Tip/Tilt sur Jupiter essai 1
Acquisition sur Jupiter, mode asservi de 0m35s à 1m36s
Figure 18 : Corrections de Tip/Tilt sur Jupiter essai 2

Sur les vidéos précédentes, le déplacement de Jupiter en X et en Y permet de calibrer la position centrale de la fenêtre de contrôle et d’attribuer une consigne de position (étape facultative on peut rentrer la consigne directement si besoin). Le temps d’asservissement dépend du nombre d’images définies dans le logiciel d’asservissement, et on comprends bien qu’en fonction de débit, ce temps sera plus ou moins long. En figeant le frames rate à 300fps et un nombre d’image max à 18000, on obtiens une stabilisation de 60 secondes…

On peut remarquer un résidu de fluctuation de position de Jupiter sur l’image : 2 causes. La première est la variation locale de position du centroïde d’une image sur l’autre, qui est calculée au pixel et non à la fraction de pixels. Il faut 2 images consécutives pour la stabilisation. A 6ms la turbulence locale a le temps, dans l’angle d’isoplanétisme, de faire bouger le photo centre d’un pixel ou deux. La deuxième cause est l’écart de dimension entre les pixels de la Basler (caméra de contrôle : 5.86µm) contre ceux de l’ASI224 (caméra d’imagerie : 3.5µm). Pour éviter cette incertitude, il faudrait inverser le rôle respectif de chaque caméras, c’est prévu à terme.

Après lecture des variations de centroïde de Jupiter, il semble que le bruit de position résiduel soit de l’ordre de 3×3 pixels.

Toutes les vidéos présentées sont des reconstructions N&B sous ffmpeg des lots d’images .tiff extraites des vidéos de la camera d’imagerie avec un débit de 60ips.

Essai sur Saturne

Les conditions d’acquisition de la caméra de contrôle de position se sont avérées plus délicates. Dans la mesure ou il a fallu augmenter le temps de pose, et forcer sur le gain d’acquisition, le frame rate de la caméra de contrôle pour un asservissement stable est descendu à 100 fps. Si ce dernier est trop élevé, le photo centre calculé est faux, l’asservissement décroche, et on voit le miroir vibrer dans tout les sens. Avec une commande de gain supérieure à 40db, l’asservissement accroche et l’essai est concluant.

Une piste ici pour améliorer la détectivité est de diminuer le seuil de calcul du centroïde dans le logiciel d’asservissement. Un ajout de cette option reste à prévoir dans les versions à venir du code.

Figure 19 : Guidage et Imagerie sur le Saturne
Acquisition sur Saturne, mode asservi de 1m02s à la fin
Figure 20 : Corrections de Tip/Tilt sur Saturne essai 1

Essai sur Altair

C’est l’essai qui m’intéresse le plus car ce compensateur de tip tilt entre pour partie dans mes essais en interférométrie optique (injection du flux dans une fibre optique). La cible choisie, quelques degrés au dessus de Saturne à la date de cette observation, est l’étoile Altair, Magnitude 0.77.

La brillance de l’étoile permet de ramener la pose à 3ms et le frame rate de la camera de contrôle de position à 300 fps (paramètres réglés sur l’image de gauche). Sur l’image de droite, on peut voir en arrière plan, le soft d’asservissement lancé en ligne de commande sur l’Odroïd.

Figure 21 : Guidage et Imagerie sur Altair
Acquisition sur Altair, mode asservi de 0m36s à la 1m44s
Figure 22 : Corrections de Tip/Tilt sur Altair essai 1
Acquisition sur Altair, mode asservi de 0m37s à 1m46s
Figure 23 : Corrections de Tip/Tilt sur Altair essai 2

Comme constaté précédemment, les fluctuations résiduelles sont de faible amplitude et principalement dus aux effets de speckles de l’étoile, le centroïde reste centré sur une carré de quelques pixels de coté pendant toute la durée de l’asservissement.

On peut remarquer sur la première vidéo (Figure 22), un léger coup que j’ai appliqué sur le télescope, à 1m10s. La stabilisation est rapide, mais pourrait encore être améliorée pour tenir compte de la réponse de l’asservissement aux grand déplacement (PID adaptatif).

Le système de stabilisation fonctionne, il reste malgré tout des points d’améliorations importants :

Défauts :

– La mise au point précise sur chaque voie est difficile à réaliser, les tubes coulissant à l’impression 3D ne sont pas optimums pour obtenir quelque chose de précis sur chaque voie.

– La positions actuelle du miroir mobile est légèrement décentrée par rapport à ce que j’avais prévu, entraînant un léger vignetage en sortie. Une mécanique plus précise doit être envisagée.

– La loi de commande du miroir pour le moment est figée a des déplacements de l’ordre du pixel. Sur les grands déplacements, il faut modifier ces coefficients, et faire un vrai PID adaptatif.

– La détermination du photo centre doit être plus flexible, et passer par un soft clé en main depuis le PC déporté. N’étant pas un codeur dans l’âme, si quelque se sens de me donner un coup de main 🙂 🙂

Avantages :

– Stabilisation à 160 images secondes

– Précision de stabilisation à 3 ou 4 pixels pour le centroïde, cela sous entend la capacité du système à corriger des défauts de monture dont l’entraînement est un peu « caoutchouteux » …

– Remplis la fonction de base pour lequel j’a défini ce projet : envisager de l’injection du flux stellaire en fibre optique pour l’interférométrie

Peut-être que ce projet présente d’autres intérêts en observation astronomique amateur, que je ne voit pas dans l’immédiat, mais peu être que d’autres idées pourraient être mise à l’épreuve (je suis en train de dupliquer le système pour toute personnes ayant envie de faire des tests avec).

Mesure de performance

Figure 24 : Analyse des positions guidage on/off essai 1
Figure 25 : Analyse des positions guidage on/off essai 2
Figure 26 : Histogramme des corrections X/Y guidage on/off essai 1
Figure 27 : Histogramme des corrections X/Y guidage on/off essai 2
Figure 28 : Spectre temporel des corrections X/Y guidage on/off essai 1
Figure 29 : Spectre temporel des corrections X/Y guidage on/off essai 2

Fabrication

Impression 3D

Définissons dans un premier temps la nomenclature des pièces mécaniques à réaliser

Figure 28 : Nomenclature du montage mécanique

La liste des éléments constifutifs du dispositif complet est la suivante :

Figure 29 : Synthèse des résultats d’impression sur Prusa Mini+

Sur la figure 29, chaque pièce a reçu un numéro de série commencant par le nombre 10 (10XX). Les pièces a approvisionner son désignées sur le schéma de la figure 28 sous les numéros 11XX. Nous détaillerons par la suite chacune de ces pièces. Pour valider le process d’impression à l’aide d’une machine que tout un chacun peut avoir chez soi (une Prusa Mini+), on peut voir la longueur de fil nécessaire à chaque éléments, ainsi que le volume de matériau en mm^3. En fonction du matériau choisi, le poids de l’ensemble risque de varier légèrement, mais dans tout les cas, si l’on fait la somme des volumes calculés connaissant la densité du plastique utilisé (PLA ou ABD), on voit immédiatement que l’ensemble est réalisable avec une seule bobine de 300 grammes.

Module 1010 : Tube voie imagerie

Le tube voie imagerie est la pièce de liaison entre un porte oculaire Baader (Focuser Eyepiece Holder 1 1/4″/T2 ref 2458125) et le bloc 1012. Il s’agit d’un pas de 42 à vis au pas de 0.75. En impression 3D, ce pas est facile à obtenir avec une épaisseur de slicing de 0.12.

Figure 30 : module 1010

Pour télécharger le modèle (.stl) cliquez sur le liens suivant

Module 1010 version .stl

Module 1011 : Tube voie Guidage

Le tube voie Guidage supporte la camera de guidage. Ce bloc fixe la mise au point de l’ensemble, nous verrons la procdure de réglage en suivant. Il se fixe latéralement sur le bloc 1012.

Figure 31 : module 1011

Pour télécharger le modèle (.stl) cliquez sur le lien suivant

Module 1011 version .stl

Module 1012 : Pièce séparatrice Up

La pièce séparatrice Up reçoit le cube séparateur 50/50 et renvoie donc la moitié du flux lumineux sur la voie imagerie (vers le haut) et la moitié du flux lumineux sur la vois de guidage. Sur cette pièce se fixe les pièces 1010 et 1011. La pièce 1012 est fixée sur l’élément 1013, pièce séparatrice Down.

Figure 32 : module 1012

Pour télécharger le modèle (.stl) cliquez sur le lien suivant

Module 1012 version .stl

Module 1013 : Pièce séparatrice Down

La pièce séparatrice Down est la liaison entre le télescope et le cube séparateur. Le flux lumineux est réfléchi par le miroir mobile qui se comporte comme un renvoi coudé. Sur cette pièce se fixe les pièces 1012 et 1014.

Figure 33 : module 1013

Pour télécharger le modèle (.stl) cliquez sur le lien suivant

Module 1013 version .stl

Module 1014 : Liaison séparatrice

La liaison séparatrice est la liaison entre le support miroir et la pièce de liaison avec le télescope. Le flux lumineux est réfléchi par le miroir mobile qui se comporte comme un renvoi coudé. Sur cette pièce se fixe les pièces 1013 et 1016.

Figure 34 : module 1014

Pour télécharger le modèle (.stl) cliquez sur le lien suivant

Module 1014 version .stl

Module 1015 : Support Miroir

C’est la pièce support du miroir de renvoi mobile. C’est une base de tripode, rendue la plus légère possible et reposant par collage sur les buzzer piezzo. Cette pièce existe en 2 modèle, en fonction du diamètre de miroir que l’on a approvisionné : 19mm ou 1pouce (25.4mm)

Figure 35a : module 1015

Pour télécharger les modèles (.stl) cliquez sur les liens suivants

Module 1015 19mm version .stl

Module 1015 25.4mm version .stl

Module 1015 jambes support .stl

Figure 35b : module 1015

Module 1016 : Support Buzzer

Le support des buzzer permet l’arrivée des tensions de commandes générées dans le boitiers électronique situé en arrière (1017). Les buzzers sont montés en forcant légèrement sur les ouvertures (voir figure), il peut être nécessaire de les coller, bien que l’essai présenté au paragraphe 3 ont été réalisés avec des buzzer justes pincés. Trois vis de réglages à 120° permettent de fixer 1016 sur 1014 et l’on ajuste l’axe du miroir de renvoi au mieux en intercalant des rondelles entre 1014 et 1016. Le défaut d’alignement résiduel est compensé par l’injection d’une tension d’offset (valeur continue) sur les buzzer. Il faut préalablement au montage, percer les 3 trous à 120° avec un diamètre de 3mm sur 1016 et 2.5mm sur 1014. Ces derniers trous sur 1014 doivent être taraudés M3

Figure 36 : module 1016

Pour télécharger le modèle (.stl) cliquez sur le lien suivant

Module 1016 version .stl

Module 1017 : Boîtier tensions XY

Ce boîtier contient la carte de génération des tensions de commande des trois buzzers piezzo. Cette carte sera détaillée dans le paragraphe concernant l’électronique. Il se fixe sur le module 1016 (support buzzer) et est refermé par le module 2018

Figure 37 : module 1017

Pour télécharger le modèle (.stl) cliquez sur le lien suivant

Module 1017 version .stl

Module 1018 : Couvercle Sub-D

Il s’agit du couvercle fermant l’électronique de génération des trois tensions des buzzers. C’est la dernière pièce de l’assemblage, dont la connectique électronique sera décrite u paragraphe électronique. Il se fixe sur la pièce 1017

Figure 38 : module 1018

Pour télécharger le modèle (.stl) cliquez sur le lien suivant

Module 1018 version .stl

Assemblage de la mécanique

L’ordre d’assemblage commence par la fixation de la pièce 1012 sur la pièce 1013 à l’aide de 2 vis THC M3 de 8mm de long pour les deux plus courtes, et 20mm pour les deux plus longues. Au fond de la cavité servant à acceuillir le cube séparateur, sont creusé les logements des 4 écrous pour vis de 3mm pemrettant de fixer 1012 et 1013

Figure 39 : Assemblage Modélisé

La partie suivante est l’assemblage de 1014 sur 1013 à l’aide de 4 vis têtes fraisées de 12mm. Il faut pour cela utiliser une perceuse pour creuser le passage de la tête de vis sur quelques mm, sachant que l’on peut difficilement utiliser les supports d’impressions proposé par les logiciels de slicing pour génére ces cavités. 2mm de creusage suffisent, mais sont nécessaires pour éviter que les mouvements du support du miroir soit impactés par la tête de vis. Attention, les trous perçés dans la pièce 1013 ne sont pas naturellement taraudés, il faut donc faire un taraudage M3 pour l’accroche des vis de fixations de 1014 sur 1013.

Figure 40 : 1014 sortie d’impression avant nettoyage et percage pour les têtes fraisées

Conformément au schéma de la figure 39, il faut prendre la précaution de placer les emplacements des deux buzzers horizontaux vers le haut, lors du pontage de 1014 et de 1013. Un fois fait, on obtiens le montage de la figure 41

Figure 41 : à gauche montage 1014-1013-1012 en rouge, 1010 et 1011 en bleu

A droite sur la figure 41, on voit 1015, pieds assemblés, reposant sur 1016.

La figure 42 nous montre le miroir inséré dans le support miroir, avec une légère couche d’Araldite sous le miroir. Le support de miroir (et les « jambes » qui le soutiennent) sont collés sur les buzzers insérés et collés eux aussi à l’Araldite

.
Figure 42 : module 1016 équipé
Figure 43 : Excitation directe des buzzer à 2 fréquences

Les fils de connexion des buzzers passent par le trou central de 1016. La fixation de 1016 sur 1014 se fait grace aux trois vis de fixations du boîtier 1017.

.

Une fois le boitier fixé, reste à placer le cube séparateur en respectant le positionnement de l’interface réfléchissante (conformément à la figure 39). Le bloc 1012 peut ensuite être refermé par la pièce 1010.

.
Figure 44 : Montage complet

Première chose à faire avant de fixer la carte électronique est de rallonger les fils de connections des buzzers en essayant d’identifier chauqe buzzer avec des fils de connection de couleur différentes (rouge-noir, vert-noir, jaune-noir). Nous verrons en détail sur la partie électronique l’importance de procéder à cette identification des trois buzzers.

.
Figure 45 : Identification des buzzers avant câblage

A l’heure actuelle, j’ai monté 2 systèmes complets en vue d’une expérience en interférométrie. Passons maintenant à la partie électronique.

.

Electronique

L’électronique se décompose en deux sous ensembles, le premiers est la carte de contrôle des buzzers, c’est la carte embarquée dans le module de renvoi et séparation du faisceau présenté dans le paragraphe précédent. Ce premier ensemble à pour vocation de convertir les tensions de commande en X et Y en tensions utiles sur chacun des buzzers disposés à 120°.

Le deuxième sous ensemble est la carte de génération des tensions XY calculées par le système de détection des déplacements de l’objet (PC de lecture de la camera de guidage). Nous séparerons donc les deux sous ensembles en « Carte Miroir », et « Cartes CNA »

.

Carte Miroir

Calcul des équations de conversion de coordonnées X, Y pour le miroir mobile et conception du circuit principal :

Le but est d’assurer la conversion des coordonnées issues du détecteur de tip/tilt (exprimé en X et Y), vers les tensions à injecter sur les 3 haut parleurs situés sous le miroir. On remarquera que les valeurs d’angle thêta étant petites, les équations restent linéaires.

Si on appelle E_1x, E_2x, E_3x les déplacements relatifs à l’évolution le long de l’axe des x sur les haut parleurs 1, 2 et 3, et de la même manière E_1y, E_2y, E_3y l’évolution le long de l’axe des y et E_1z, E_2z, E_3z l’évolution le long de l’axe des z, on associe pour chaque haut parleur en fonction des axes considérés, les tensions nécessaire à la conversion du mouvement par rapport aux 3 hauts parleurs..

Figure 46 : Calcul simplifié des valeurs de tensions Buzzers
Donc en appelant V_1, V_2, V_3 les tensions associées aux haut parleurs 1, 2 et 3 :

On voit donc que les tensions V_1, V_2 et V_3 ne sont que des combinaisons linéaires des tensions de commandes Vx, Vy et Vz. Un bon électronicien amateur sait faire un additionneur, un inverseur et des ponts diviseur de facteur 1/2. Il découle donc de ces relations le circuit analogique simple suivant :

Figure 47 : Calcul simplifié des valeurs de tensions Buzzers

Sur le schéma, les tensions de commandes Vx, Vy et Vz sont renommées (en vue de figurer l’asservissement PID) Delta_X, Delta_Y et Delta_Z

Le montage est extrêmement simple puisqu’il ne comporte que des résistaces de 10kohms, 2 ampli opérationnels quadruples de type TL084 (ou équivalent)et des condensateurs de filtrage d’alimentation de 100nF, sauf les deux condensateurs de filtrage du +/-15V qui sont des électrochimiques de 10µF

En bref, aucunes difficultés de montage. Les « jumpers » sont ici remplacés par des picots tulipes en barettes, permettant soit de remplacer les AOP en cas de pannes (ce qui ne m’est pour le moment jamais arrivé), soit de plugger ou déplugger les fils de connections.

Figure 48 : Détail de la réalisation de la carte Miroir

La figure 48 montre le câblage de la carte avec le + des connections des signaux d’entrée Delta_X, Delta_Y et Delta_Z et de sortie V_1, V_2 et V_3.

Pour télécharger les fichiers au format EAGLE (.sch et .brd) cliquez sur les liens suivants

Schéma Carte Miroir version .sch

Schéma Carte Miroir version .brd

La nomenclature est extrêmement simple puisqu’il y a 34 résistances de 10kohm, 4 condensateurs plastiques de 100nF, et 2 condensateurs électrochimiques de 10µF. Il est possibles sur la base des fichiers précédents, d’éditer des fichiers de type GERBER et de commander chez un fabriquant de PCB (printed circuit board) un exemplaire de cette carte pour pas très cher.

Figure 49 : Connection de la sudb-D de sortie

Une fois fermé, le boitier miroir ressemble à la figure 50

Dans les versions déjà montées, seules les connections de Delta_X, Delta_Y et Delta_Z sont réalisées. Les tensions Vx, Vy et Vz sont optionnelles et permettent, si elles sont utilisées d’injecter une tension de réglage fin de la position au repos. Ces tensions sont générées par la carte CNA que nous verrons plus loin. Les tensions d’alimentation +/-15V sont aussi amenées directement par le câble série 15 points.

Figure 50 : Boîtier miroir terminé

Carte CNA

Texte en Chantier….

Software

Les cameras CMOS rapides actuellement disponibles, sont susceptible d’une très grande sensibilité, à des temps de poses très court et donc de se rapprocher des temps de cohérence de la turbulence

Disposant actuellement d’une Basler ACA1920-150um, il me semblait possible d’envisager la réalisation d’un senseur numérique de tip/tilt paramétrable numériquement et qui permettrait, à terme, de piloter le miroir basculant décrit dans la page citée précédemment.

La condition de réalisation d’un tel système sous tendait aussi de disposer d’un PC low cost rapide entièrement dédié au calcul du centroïde de l’objet détecté par la caméra Basler, interfacée par un port USB3.

La solution m’as été signalée par mon collègue et ami François Colas, dans une note d’application de Basler Camera disponible sur ce lien . On peut en particulier y découvrir un microPC low cost (70euros ttc) nommé Odroïd XU4 , disposant d’un processeur 8 coeurs et de deux ports USB3.

Figure 51 : Odroid XU4
Figure 52 : Performances des produits concurrents

Cette petite machine semblant montrer des performances étonnante, j’ai donc cassé la tirelire pour m’en procurer un exemplaire et voir dans un premier temps comment se comporte cette machine face à la Basler. C’est sans trop de difficulté que j’ai put installer un visionneur de bureau distant (vnc4server ) pour me passer d’un ensemble clavier souris écran prenant les ports USB3 dont j’avais besoin. La distribution linux implantée sur cette carte est une Ubuntu Mate pour processeur Arm. J’ai ensuite implanté un IDE de programmation (codeblocks ), le Software Design Kit (SDK) Pylon5 propre à l’interfaçages des caméras Basler et la bibliothèque de traitement d’image OpenCv pour faire les traitements graphiques nécessaires. Basler fourni aussi directement dans une note d’application le moyen d’utiliser la bibliothèque OpenCV.

Après quelques heures de programmation (même si je déteste cela), je suis arrivé à contrôler, et acquérir les images de cette Basler ACA1920, et les résultats furent au delà de mes espérances. En sélectionnant sous PylonApplicationViewer (le logiciel de contrôle de la camera livré avec le SDK) le mode d’acquisition en Region Of Interest (ROI) d’une taille de 320×200 images, le débit réel, mesuré sur le nombre d’images acquise est de plus de 800 images par secondes (pose de 500µs) sans pertes (je n’annonce pas le chiffre exact, 800 images par secondes étant le chiffre raisonnable que j’ai forcé pour pour éviter de perdre des images sur la liaison USB3 (le nombre réel en ips est légèrement supérieur sans forçage du débit). Bref, l’ensemble Basler Aca/Odroid fonctionne parfaitement en haut débit, conformément au besoin et sans même en passer par un noyau linux temps réel. L’image présentée en suivant est une copie d’écran ou l’on voit dans le « viewer » de chez Basler l’image du mur de mon bureau sur lequel je projetait un laser vert, bien connu des montreur d’étoiles.

Figure 53 : Débit réel à 800fps sur un ROI de 320×200 sous PylonViewerApp

Quelques heures supplémentaire de codage en c++ plus tard, afin de réaliser le calcul de la position du centroïde de l’objet lumineux présent sur l’image (photocentre ou moment d’ordre 1 sous OpenCV) le code permet aussi, via la conception et la réalisation d’une carte de conversion numérique/analogique (utilisant un convertisseur AD5754 16 bits interfacé via un bus SPI de chez Analog Devices), de produire sur 3 voies des tensions de commandes du miroir dans la gamme +/-10V.

Figure 54 : Odroid XU4 + AD5754

La figure 54 droite présente les traces obtenues via le contrôle par le code c++ de génération des tensions Vx, Vy et Vz qui pour l’occasion se déclinaient comme suit : En bleu les tensions incrémentées de façon continue (CNA voie A), en rouge une génération de tensions aléatoires (CNA voie B) et en Jaune : lecture du niveau de bruit (CNA voie C)

Nous avons ensuite procédé à mesure de la vitesse d’actualisation des tensions en utilisant une fonction de time stamp des images pour comparer les temps d’actualisations aux variations effectives de la tension en sortie du convertisseur.

La vitesse maximale d’actualisation des tensions est directement dépendante de la vitesse de transmission des datas par le bus SPI de l’AD5754. Le schéma suivant montre les mesures faites aux différentes étages de l’électronique de commande. Visiblement (et c’est un problème connu sur l’Odroid, le bus de transmission SPI impose des délais inter octets très important). Il existe donc une limitation en vitesse de génération des tensions de commande.

J’ai noté les temps caractéristiques de transmissions relevé via les tags insérés dans le code de test, sur mon tableau blanc, je reproduit ici le schéma de la chaîne d’acquisition :

Figure 55 : Mesure des différents temps de calcul et génération des tensions du CNA

En l’état, la limitation mesurée (voir en suivant) est de 350 images secondes (cliquer sur les images pour le détail des mesures).

Figure 55 : Mesure des performances calcul/CNA

Dans cette configuration, il faudra donc se contenter d’une prise de donnée à 350 images par secondes au maximum (ce qui n’est pas si mal après tout !). Cela représente un temps de pose max de 3ms ou une cadence équivalent inférieure au temps de cohérence moyen de la turbulence sur un site correct. Malgré cela je réfléchi a une solution moins limitative pour contrer la limitation de ce temps d’écriture sur le bus SPI.

L’étape suivante à donc été de faire un test de relevé direct des positions d’un spot laser projeté dans le champs de la camera et sa restitution par le convertisseur de tension numérique/analogique.

Figure 55 : Mesure des performances calcul/CNA

La vidéo de la figure 56 montre la restitution de la génération des tensions Vx et Vy sur une oscilloscope analogique afin de rendre compte de la restitution temps réel de la lecture de position du spot laser.

Figure 56 : Réponse du calcul du photocentre

Pour qui souhaite se réaliser l’ensemble du système sans avoir a entrer directement dans le code, je tiens à disposition de qui le souhaite la copie d’une carte SD image de celle fonctionnant actuellement dans l’Odroid utilisé pour faire la démonstration des performances des paragraphes 3 et 4.

Je tiens cette image à disposition, et il suffit de ma la demander à l’adresse btregon@club-internet.fr

La structure du code de calcul et génération de tension pour compenser la fluctuations de position d’un photocentre est assez simple (enfin tout est relatif). Aussi, et même si je code avec les pieds, je laisse le code source à disposition sur ce lien

Si je veux en faire une résumé, il faut pour faire du développement sur le code, travailler directement sur l’Odroïd et y avoir implanté un certain nombre de bibliothèques : pylon5 dans (/opt) pour les communications avec la caméra Basler, opencv2 pour les algorithmes de traitement d’images, les bibliothèques wiringPi et wiringOdroid pour la liaison avec le convertisseur Numérique/Analogique de génération des tensions de commande.

Il faut aussi implanter les fichiers pid.h et pid.cpp dans le répertoire de compilation.

Le code source en l’état dispose de trois groupes de fonctions distinct : 1- Acquisition et datation image. 2-Calcul du photocentre et asservissement de position, 3- contrôle et génération de la tension actuateur

La mise en oeuvre est donc la suivante :

Au démarrage de l’Odroïd de contrôle, se lance sur la machine distante un serveur de bureau à distance auquel on peut accéder à l’adresse (codée en dur) 192.168.1.10. On se connecte donc via un PC distant grâce à un logiciel classique de bureau à distance. Sous linux, j’utilise Remmina ou Vncviewer.

Une fois rentré sur l’Odroïd, il faut démarrer le logiciel de visualisation du fabricant de la camera (ici Basler), avec la commande « /opt/pylon5/bin/PylonViewerApp ». Une fois la caméra connectée, il faut régler (si les paramètres ne sont pas définis par défaut) la dimension de la fenêtre d’analyse à 320×320 centré en X et en Y. On fige ensuite le nombre d’images par secondes, dans la bande passante de réponse du miroir. Du point de vue pratique, les tests publiés plus haut ont été réalisés à 160 images secondes (160fps). Puis adapter le temps de pose et le gain ADC en fonction de l’étoile guide, sans la saturer, sachant que ce temps de pose doit nécéssairement être inférieur à la fois au temps de cohérence de la turbulence, mais aussi au temps séparant 2 images au débit fixé précédement. A 160fps, la pose doit être inférieure à environ 6ms.

Une fois les calages terminés, on peut lancer l’exécutable de stabilisation (obtenue après compilation du code) en ouvrant un terminal de commande en ligne. La commande est assez tordue, je la ré écrit ici : « sudo xterm -T AO_PID_NUM_Test_code -e /usr/bin/cb_console_runner LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.:/opt/pylon5/lib:/usr/lib:/usr/local/include/opencv:/usr/local/include/opencv2:/usr/include:/usr/local/include:/opt/pylon5/lib:/usr/lib:/usr/include:/usr/local/include /home/odroid/c++/AO_PID_NUM_Test_code_calibration/bin/Release/AO_PID_NUM_Test_code_v2 ». La commande « sudo » nécessite de saisir le mot de passe root sur l’Odroïd. Ce mot de passe est « odroid ».

Une fois la commande lancée, une fenêtre s’ouvre demandant si l’on souhaite procéder à une calibration pour retrouver la position du centre des déplacements de l’image. Répondre « O » à la question lance un balayage en X puis un balayage en Y, afin de déterminer la position du centre (X0,Y0) des tensions électriques injectées dans le miroir. Puis le miroir se centre sur la position défini par la calibration et reste stable sur la durée définie par le nombre d’image défini dans le code. Apèrs plusieurs essais, il apparaît que la camera manque des images au delà d’un certain taux d’images par secondes, j’ai donc limité le nombre d’images total à 18000 soit environ 60 secondes si l’on monte le débit à 300fps.

Conclusion (temporaire)

Voila en substance le fonctionnement et les moyens de réaliser un compensateur de Tip Tilt à moindre frais (le total hors caméra de guidage n’excédent pas 400 euros.

Il reste à paufiner le software du PC distant, et je compte bien trouver un vrai codeur qui programmera l’ensemble bien plus proprement que je ne pourrais le faire, mais en l’état, ce prototype marche trés bien et les deux exemplaires que j’ai maintenant à ma disposition vont me permettre d’aller un peu plus loin sur une manip interférométrique que j’ai en tête depuis longtemps.

Une trés mauvaise nouvelles par contre, concernant les hauts parleurs servant pour positionner les miroirs. Les transducteurs piezo KPSC-100 apporvisionnés dans les années 2015 étaient munis d’une membrane acier de 0.2mm, et permettant des déplacements sous 10V de l’ordre du mm, or depuis quelques années, ces transducteurs piezzo sont montés sur une membrane en laiton plus épaisse, réduisant drastiquement l’amplitude de déplacement. La réduction d’amplitude angulaire réduit fortement la zone de correction dans le champ, je cherche actuellement une solution de remplacement simple, sachant que les deux modèles déjà réalisés vont permettre de comparer les amplitudes de correction. Les travaux sur ce sujet continuent donc, à asuivre…

Mesure des performances calcul/CNA

20210310_191325_reduit.jpg