C++ et Qt : création et développement d’une application

Ce stage a été réalisé lors de ma première année de BTS SIO option SLAM

Le stage a été réalisé pour la société Vaonis, qui est start’up basée à Clapiers (34) en télétravail. Vaonis fabrique et commercialise des télescopes tout-en-un abordable permettant de prendre des photos des objets célestes.

Le projet

Lors de la prise de photos astronomiques, il est nécessaire de faire de longue pose, pour recevoir beaucoup de lumière provenant des objets célestes très peu lumineux. Comme les poses sont longues, il faut compenser la rotation de notre planète, sinon, les étoiles s’étirent très rapidement. C’est pourquoi les instruments de prise de photo astronomique sont motorisés. Cependant, la mécanique, aussi précise soit-elle, n’est jamais fiable. Il est donc nécessaire de corriger l’erreur périodique inhérente à toute mécanique.

Lors de ce stage, ma mission était de créer entièrement une application permettant de visualiser cette erreur périodique à l’aide de graphiques.

J’ai codé cette application en C++ avec l’aide du Framework Qt sous Linux Ubuntu et selon le modèle MVC.

L’interface de lancement

J’ai tout d’abord mis en place la page de lancement de l’application. Cette fenêtre portant les couleurs de Vaonis dispose de deux champs qu’il faut renseigner de la longitude et la latitude où ont été prises les photos. Puis, en cliquant sur le bouton « ouvrir », l’explorateur se lance afin d’aller chercher l’ensemble de la série de photo dont l’on souhaite connaitre l’erreur périodique.

La première chose que doit faire l’application est de déterminer les coordonnées des objets présents dans le champ de l’image, au format équatorial. Cette application existe déjà sous Linux : solve-filed.

Interface de demarrage
interface de démarrage de l’application pourtant le logo de Vaonis

Solve-field

Dans un premier temps, il fallait intégrer cette solution qui fonctionne sous Linux à mon application

Je l’ai intégrée grâce à un script shell que j’ai appelé « callsolvefield ». Pour le bon fonctionnement de ce script, il est nécessaire de télécharger et placer les index astrométriques correspondant.

sript shell
script shell appelé par l’application

J’ai défini un script par défaut, qu’il est possible de modifier selon ses besoins.

L’appel du script dans le contrôleur à l’aide d’un QString

Appel du script dans l'application
Appel du script dans l’application a l’aide d’une QString et la fonction « commande »

Le flux

Le programme appelle « solve-field » sur chaque image qui lui retourne les coordonnées équatoriales de chaque objet de chaque image dans un flux unique qu’il a fallu décortiquer. Pour cela, j’ai utilisé les signaux et slots de Qt. Dans la capture suivante, le contrôleur analyse le flux et cherche uniquement les coordonnées (ascension droite (RA) et déclinaison(Dec)) ainsi que la rotation d’angle que l’on a placé dans un tableau.  

fonction onDataReceived
fonction onDataReceived

Mais, il me manquait la date et l’heure de l’observation, Stellina les enregistre dans l’entête de chaque photo.

Les Fits

Le format utilisé par Stellina pour ses photographies est un format spécifique développé par la NASA : le format Fits.

Le contrôleur doit donc également chercher la date et l’heure dans l’entête de chaque photo.

Code permettant de chercher dans les entête Fits l'heure et la date
Code permettant de chercher dans les entête Fits l’heure et la date

La conversion

Toutes ces données réunies au format « string », il a fallu les extraire et les convertir au format « int ». C’est le contrôleur qui s’en occupe. Je récupère toutes les variables issues de « solve-field » en découpant les chaines stockées dans mon QByteArray.

code de conversion des variables de "string" vers "int"
code de conversion des variables de « string » vers « int »

Puis, je sauvegarde chaque point de coordonnée dans un vecteur (QVector), puis, je réinitialise les variables pour créer un nouveau vecteur, et ainsi de suite.

On réinitialise les variables à chaque itération

Une fois tous les vecteurs créés, le contrôleur procède à la conversion du format équatorial au format alt-azimutale. Je n’affiche dans la capture suivante qu’une partie de cette conversion.

Début de la fonction de conversion par le contrôleur
Début de la fonction de conversion par le contrôleur

Chaque résultat de conversion est stocké dans un QPoint.

Les graphiques

Tous les QPoints étant créés, il fallait les afficher dans un graphique. J’ai mis en place trois affichages différents que j’ai commenté dans le code.

La plus intéressante affiche les trois droites dans le même graphique.

Le code pour la partie azimutale

Morceau de code pour l'affichage des 3 droites dans le même graphique -1
Morceau de code pour l'affichage des 3 droites dans le même graphique -2
Morceau de code pour l'affichage des 3 droites dans le même graphique -3

et le resultat

Génération des graphiques
Génération des graphiques, les trois droites dans le même graphique

En lien, le rapport d’activité au format « pdf » : https://portefolio.site-en-vrac.com/rapports/stage_Vaonis.pdf