Documentation rust_ao

Installation

Le code est hébergé sur le gitlab de l’observatoire. Cloner le projet avec la commande

git clone https://gitlab.obspm.fr/HRAA/oeil/rust_ao

Le code est actuellement installé dans D:\rust_ao sur les deux pc de manip.

Le driver du DM ALPAO étant en 32bits, le rtc qui contrôle le DM doit être compilé en 32bits. Voir la documentation de rustup pour le changement de toolchain. Sur windows on utilisera stable-i686-pc-windows-msvc ou stable-x86_64-pc-windows-msvc respectivement pour compiler en 32 et 64bits.

Le code est organisé comme suit:

Dépendences

Pour la communication réseau via grpc voir Tonic

Linux

Pour le GUI installer les dépendances suivantes

sudo apt install -y libclang-dev libgtk-3-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev

Windows

TODO

Compilation/Lancement

Ouvrir une console et se placer dans le dossier de rust_ao.

Pour le programme de visualisation de camera

cargo run --release -p camgui -- -c config.json

Fichiers de configuration caméra existant sur le pc IHM:

Pour le programme de RTC

cargo run --release -p rtcgui -- -c config.json

Fichiers de configuration RTC existant sur le pc RTC:

Si rtcgui a besoin de communiquer avec camgui (par exemple pour de la diversité de phase) les deux programmes camgui et rtcgui doivent être compilé avec l’option --features rpc, par exemple:

cargo run --release -p camgui --features rpc -- -c config_cam2D.json

cargo run --release -p rtcgui --features rpc -- -c config_rtc_manip.json

Pour le programme de simu

cargo run --release -p simugui -- -c config.json

Pour la suite de test de rustao

cargo test -p rustao

Pour la documentation développeur de rustao

cargo doc -p rustao --open

Utilisation du DM Alpao avec compilation du RTC en 64bits

Il est possible de contourner le problème des drivers 32bits en utilisant deux programmes séparés pour le contrôle du DM et pour le reste du RTC, la communication entre les deux se faisant par le réseau (que les deux programmes soit lancés sur le même pc ou non).

Il faut d’abord lancer le programme de contrôle du DM, par exemple pour une utilisation des deux programmes sur le même pc (réseau local sur l’adresse 127.0.0.1 et sur le port 8080) :

cargo run --release -p rustao --features remote_dm --example dm_srv -- -h 127.0.0.1 -p 8080

puis lancer le RTC normalement (avec l’option de configuration dm_type: {"Remote": "http://127.0.0.1:8080"} )

Ordre de lancement

À cause de limitation du driver Hamamatsu, quand plusieurs caméras branchées sur le même ordinateur doivent être utilisées, il faut les allumer séquentiellement, par exemple sur le pc IHM:

  1. Allumer la manip, la caméra 3D s’allume automatiquement
  2. Vérifier que la caméra 2D est bien éteinte
  3. Lancer le programme de visualisation de la caméra 3D
  4. Allumer la caméra 2D
  5. Lancer le programme de visualisation de la caméra 2D

de même sur le RTC:

  1. Allumer la manip, la caméra du SH s’allume automatiquement
  2. Vérifier que la caméra pyramide est bien éteinte
  3. Lancer le RTC SH
  4. Allumer la caméra pyramide
  5. Lancer le RTC Pyramide

On veillera également à ce qu’un seul des RTC lancé ait le contrôle sur le DM.

Fichier de configuration

rtcgui, simugui et camgui utilisent tout les trois des fichiers de configurations en json dont la structure doit correspondre à des structures rust définis dans le code. Par défaut, si aucun nom de fichier n’est spécifié au lancement ils utiliseront, config_rtc.json, config_simu.json et config_cam.json respectivement (si ces fichiers n’existent pas il seront automatiquement créé avec une configuration par défaut).

La variante None du type Option s’écrit null en json. Pour la variante Some donner directement la valeur du type interne. Par exemple si on doit donner la valeur de

default_bias: Option<String>

pour donner None on écrira dans le fichier de configuration

"default_bias": null

pour donner Some("im.npy") on écrira

"default_bias": "im.npy"

RTCGUI

Fichier de configuration

Le fichier de configuration correspond à la structure Params défini dans rtcgui/src/main.rs. Les deux premiers paramètres rtc_config et im_params correspondent aux structures ConfRtc et ImTakerParams définis dans rustao/src/rtc.rs.

Les deux premiers paramètres de rtc_config, Wfs (pour Wavefront sensor) et Wfc (pour Wavefront corrector) correspondent au enum Wfs et Wfc définis dans le même fichier rustao/src/rtc.rs.

Les options pour Wfs sont

où les différentes structure correspondant au paramètres sont trouvables dans les fichiers du dossier rustao/src/wfs.

Les options pour Wfc sont

DmParams et SlmParams étant définis dans le même fichier rustao/src/rtc.rs.

Unseen offset zer

Liste de zernike à appliquer qui ne seront pas vu par le WFS (ils resteront appliqués même après une fermeture de boucle), c’est par exemple ici qu’il faut mettre les zernikes pour corriger l’effet de la vitre devant la caméra 2D.

Le format est le suivant :

[[numéro_zernike_noll, valeur_en_m_rms], [numéro_zernike_noll, valeur_en_m_rms]]

Il est important de conserver les doubles crochets même quand un seul zernike est appliqué, par exemple pour appliquer 50nm de défoc

[[4,50e-9]]

Seen offset zer

Liste de zernike à appliquer qui seront vu par le WFS (il seront corrigés par une fermeture de boucle). Le format est le même que ci-dessus.

Onglet config

L’onglet config permet la modification de tout les paramètres du RTC, y compris ceux non accessible via le GUI. Attention a bien cliquer sur set current après chaque modification faite via le GUI.

Dark

Attention, tout changement du temps de pose entraine un drop automatique du dark. Il faut penser à le reprendre après chaque changement.