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:
Pour la communication réseau via grpc voir Tonic
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
TODO
Ouvrir une console et se placer dans le dossier de rust_ao.
Pour le programme de visualisation de camera
cargo run --release -p camgui config.json
Fichiers de configuration caméra existant sur le pc IHM:
Pour le programme de RTC
cargo run --release -p rtcgui 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 config_cam2D.json
cargo run --release -p rtcgui --features rpc config_rtc_manip.json
Pour le programme de simu
cargo run --release -p simugui 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
À 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:
de même sur le RTC:
On veillera également à ce qu’un seul des RTC lancé ait le contrôle sur le DM.
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"
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.
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]]
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.
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.
Attention, tout changement du temps de pose entraine un drop automatique du dark. Il faut penser à le reprendre après chaque changement.