Interface Rotor

Bernard F6BVP / AI7BG s’est attaqué à la question de la poursuite des satellites à orbites moyenne qui ne défilent pas trop vite et peuvent donc être suivis par le radiotélescope. Le logiciel Gpredict, disponible aussi bien sous Linux que pour Windows, est utilisé pour la poursuite des satellites par les radioamateurs depuis de nombreuses années. Il est capable de commander un grand nombre de radios en émission-réception et des moteurs d’antennes.

Le plus souvent la librairie HAMLIB est utilisée à cette fin. Dans notre cas il a semblé plus simple de programmer un petit utilitaire en Python pour récupérer en temps réel les valeurs des angles d’azimut et d’élevation du satellite à suivre pour les transmettre au serveur INDI de manière à piloter le Radiotélescope. La documentation de Gpredict indique que le logiciel transmet ces informations via le port 4533. Une application Python rapidement écrite en suivant un exemple de serveur selon le protocole UDP n’ayant rien donné, Bernard s’est tourné vers la rédaction d’une application utilisant le protocole connecté TCP. Après quelques tâtonnement dus à l‘apprentissage du langage Python, en même temps que le développement en cours, le petit programme de quelques lignes a produit des résultats.

Le plus compliqué a été de lui faire relire la position des moteurs en raison du manque d’information sur le format des données à transmettre vers Gpredict. Mais au final le module serveur_tcp.py en Python fonctionne parfaitement, en relayant les commandes et la position des antennes entre Gpredict et le pilote des antennes.

Le pilote est encore fictif à ce stade, c’est pourquoi les angles affichés en Lecture (23,45° et 67,89°) sont codés en dur dans le module Python pour le moment.

La fenêtre Polar Plot de Gpredict donne les valeurs de Az, El, AD et Dec en temps réel
L’écran de contrôle des moteurs en poursuite automatique ou manuelle

La fenêtre de pilotage des moteurs d’antennes affiche sur des roues codeuses les angles d’azimut et d’élevation (site). Il est possible de régler la précision (Tolérance) et la fréquence (Cycle) des commandes envoyées aux moteurs. En cliquant sur Engage on déclenche l’envoie des valeurs angulaires sous forme de commandes au pilote des moteurs, normalement via la librairie HAMLIB. Mais nous n’avions pas besoin de la librairie en question car nous avons déjà réalisé le pilote des moteurs du radiotélescope commandé par un serveur INDI.

Les commandes de déplacement envoyées aux pilotes des moteurs d’antennes

Un extrait de la sortie du module Python serveur_tcp.py est affichée sur la figure ci-dessus. Il va maintenant falloir incorporer ce code dans l’application de pilotage des antennes, programmé par François-Xavier N5FXH, qui transformera les coordonnées azimutales (Azimut, Elevation) en coordonnées équatoriales (Ascension Droite, Déclinaison) et transmettra les ordres au serveur INDI qui, lui-même s’adressera au pilote (driver) des moteurs du radiotélescope. Compliqué ? En fait non, car l’écriture du pilote a été grandement simplifié grâce à l’appel à des fonctions faisant partie de la librairie INDI. Le plus complexe a été l’étude de la machine à états par Patrick, sous contrôle d’un algorithme d’asservissement et d’un superviseur de manière à prévoir les vitesse à enclencher et le passage en mode poursuite à bon escient (…).

L’application en Python serveur_tcp.py a été développé pour Gpredict sous Linux Ubuntu, mais avec Gpredict sous windows il fonctionne parfaitement.

François-Xavier N5FXH a écrit une bibliothèque de routines de calculs, dont celle que nous pourrons utiliser pour changer de système de coordonnées. Exemple avec les coordonnées du satellite géostationnaire METEOSAT-11 (MSG-4) vu depuis le radiotélescope dans le Parc de la Villette (Latitude 48,8940° , Longitude 2,3888°). Gpredict indique : azimut 183,62° et élévation 33,74°. En configurant Gpredict il est également possible de lui demander d’afficher l’Ascension Droite en degrés qui varie en fonction de l’heure et la déclinaison qui est fixe. Par exemple AD : 93,90° et DEC : -7.30°.

L’application pycoords.py donne :

./pycoords.py 2.3888 48.8940 183.62 33.74
RA-Dec (degrés / degrés) 93.90 -7.30

Les deux programmes sont donc d’accord au 1/100è de degrés ! Il va donc être possible de convertir les angles Az/El envoyés sur le port TCP par Gpredict en coordonnées RA/Dec qui seront envoyées au serveur INDI par le client Python de manière à diriger l’antenne du radiotélescope vers le satellite choisi.

13-04-2021

Nous avons vu l’intérêt d’utiliser des logiciels déjà rodés pour des applications spécifiques. En matière de poursuite de satellites Gpredict a fait ses preuves. L’étape de récupération de l’azimut et de l’élévation du satellite à poursuivre vient d’être franchie par Bernard F6BVP avec l’aide de François-Xavier N5FXH. La difficulté résidait dans le format de sortie des données qui dépend du choix de la langue qui détermine la ponctuation des nombres. L’application python (serveur_tcp16.py) s’attend à trouver des nombres décimaux avec des points, donc la variable d’environnement LC_NUMERIC doit être en_US. Ceci est programmable et ne reste valable que dans l’application. Mais si on lance le programme gpredict il « exporte » les nombres décimaux avec des virgules lorsque le système est configuré pour la France et le français. La solution trouvée a été de lancer gpredict comme « subprocess » de l’application python après avoir défini la variable d’environnement.

result = subprocess.run([« gpredict »],capture_output=False)

Il faut également bloquer la sortie de gpredict (output=False) sinon il attend une connexion par « thread ». Ensuite on lance le « Contrôle Antenne » de gpredict, on choisit le satellite à poursuivre et on ‘engage’ la poursuite après avoir abaissé la ‘tolérance’ à 0,01.

L’application python serveur peut également être lancée en arrière plan avec un & sur la ligne de commande : serveur_tcp19.py &

Ensuite on lance gpredict par une commande depuis la même console.

On est sur la bonne voie, mais il reste encore plusieurs étapes à franchir avant de pouvoir commander la rotation de l’antenne du radiotélescope à partir de gpredict de manière à poursuivre des satellites à orbites moyennes, c’est à dire qui ne défilent pas trop vite.

L’application python n’affiche l’Azimut et l’Elévation que si l’un de ces éléments change de plus de 0,1 degrés par rapport à la position précédente. Dans le cas illustré ci-dessus cela peut survenir toutes les 15 secondes environ.

15-04-2021

La conversion des coordonnées azimutales en coordonnées équatoriales pour le site de la Villette et à l’heure de l’observation est effective. La copie d’écran ci-dessous montre les deux types de coordonnées azimutales produites par Grpedict et équatoriales AD/DEC calculées par l’application python lors de la poursuite en temps réel.

De manière à ne pas envoyer trop fréquemment les commandes de déplacement au pilote du radiotélescope, les coordonnées équatoriales ne lui seront transmises que si les valeurs en AD ou DEC diffèrent d’au moins un valeur seuil qui est paramétrable. Dans l’exemple affiché pour le satellite GSAT0202 le seuil est de 0,1 degrés. Le lobe de l’antenne étant de 1,2 degrés à -3dB, un seuil de 0,6 degrés sera suffisant.