Structure des programmes de calcul
...

Répartition entre les processeurs C,U,S
...

Quelles sont les tâches importantes et leur répartition entre les processeurs?

acquisition des organes de commande
...

S fait l'acquisition des lectures 'brutes' (qui sont très compactes) et les transmet à C pour décodage. (en fait S cohabite avec T dans le même processeur)

Le processeur 'C' = le calcul des gouvernes
...

Le programme de calcul est à 3 niveaux:

  • le noyau qui est le fonctionnement de cet émetteur et tout ce qui est commun
  • le/les standards d'un pilote (pour moi: flight_rs)
  • le modèle
    Le processeur 'C' doit permettre de piloter même en cas de dégradation
  • non fonctionnement du processeur 'U'
  • redémarrage en vol de 'C'
    Pour cette raison ic'est 'C' qui utilise les commandes menu pour toutes les modifications
    - paramètre (la valeur pour la phase de vol)
    - phase de vol

En résumé, C

  • reçoit un message de'S' avec les signaux analogiques et digitaux, décode et calibre ces signaux
  • utilise le fichier des paramètres
  • exécute tous les calculs avec une périodicité courte (10 ms) et fournit un signal par canal , en µsecondes
  • envoie ce signal ppm vers le module d'émission
  • envoie vers U des messages à dicter

'U' = la communication avec le pilote
...

en vol
...

'U' fonctionne à une échelle de temps 'humaine'.
Il fournit un feedback pour toutes les actions ponctuelles: bouton, mouvement d'un switch, sous la forme d'un message sonore court.

au sol
...

En principe le pilote utilise son smartphone , il n'y a pas de lcd.
Tout le dialogue est dans 'U', qui demande éventuellement les valeurs de certaines variables à 'C'.

Conditions de vol
...

Le nom est hiérarchique , par exemple vol.thermique.spirale, qui implique que 'vol' est une condition vraie, comme 'vol.thermique'...

Les classes
...

Ceci est un concept fondamental de la programmation par objets.

Classe TX
...

Une seule instance : l'objet TX = le boitier de l'émetteur avec son hardware , il fournit un dictionnaire dénommé hw (au sens de python= un ensemble de données) avec les valeurs :
- des sticks ou potentiomètres, calibrés entre -100 et +100
- des interrupteurs à 3 positions , valeurs +1,0,-1
- des interrupteurs à deux positions, valeurs False/True
- d'autres variables, comme la tension de la batterie
Voir les programmes S_txv5 (acquisition des données brutes ) et C_txv5a (conversion en données )

Classes des modèles
...

  • La classe de base est Model_base (voir core.py) .
  • La classe Model_rs hérite de cette classe de base. Elle comporte les standards d'un pilote . Voir mon standard : flight_rs.py. Ceci comporte de nombreuses classes pour des objets tels que :
    • ctx : un organe de commande
    • Vl2: un mélangeur pour une paire de gouvernes

Classes des objets de calcul
...

Tous les objets de calcul héritent de la classe 'Box', qui permet à chaque objet d'avoir des paramètres, visualisables, dictables ou modifiables en vol

Base de donnée des paramètres
...

Les paramètres sont dans un fichier en format json qui est importé au démarrage.
Par exemple le modèle GEGRAPH2 comporte les fichiers à transférer vers 'C'

  • GEGRAPH2.py = le programme de ce modèle , sous le nom model.py
  • GEGRAPH2.mdp = les paramètres de calcul

Valeurs des paramètres
...

Le fichier modelName.mdp est transféré vers 'C' en même temps que le modèle modelName.py (les fichiers sont conservés par 'U', qui dispose d'une carte SD)
Il comporte les paramètres du calcul
Sa structure est :

  • Niveau 1 : un dictionnaire dont la clé est le nom de l'objet , par ex: "Ctx.prof , qui signifie Ctx = classe des organes de commande et prof = la commande de profondeur
  • Niveau 2: la ou les les valeurs du paramètre
    Au premier démarrage, une valeur zéro est attribuée à chaque paramètre.
    Exemple affiché pour la lisibilité en plusieurs lignes:
    "Ctx:prof": {
    "course": [["S6", 8.0], 12.0],
    "expo": 30.0,
    "trim": [["vol.vitesse", 3.4], ["vol.therm", 3.8], ["vol.lent", 5.4], 3.8]
    },
    Remarques:
  • le paramètre 'expo' est global
  • le trim est spécifié pour 3 phases, la dernière valeur est pour toutes les autres phases

Mise à jour des paramètres en cours de vol
...

Le fichier comporte la matrice des paramètres modifiables par les boutons de trim:

  • colonne = le numéro de la paire de boutons de trim 1 à 4 , sous la forme d'une clé telle que DT3 pour le bouton3

  • ligne 0 ,-1, 1 selon la position de strim

  • le paramètre modifiable:
    - nom de l'objet
    - nom du paramètre
    - nature
    - 'C' pour une valeur numérique continue
    - 'I' pour une valeurs entière
    - 'B' pour une valeur logique ou True/False
    - limites min, max et valeur centrale (inutile pour 'B')
    Ces paramètres permettent d'effectuer le traitement de modification dans 'le processeur de calcul.

Exemple pour le paramètre de l'exemple , boutons dt3 pour strim=0:
"DT3": {0:["Ctx:prof","trim",['C',-7,10,0]]}

Codification de valeurs
...

La valeur d'un paramètre est une liste , chaque élément comporte une condition et une valeur ,sauf le dernier qui comporte seulement une valeur.
La valeur du paramètre est définie par la première condition vraie, ou la valeur par défaut. Si la liste ne comporte que la valeur, c'est une 'valeur globale'.

La condition est normalement un nom de phase de vol ou de groupes de phases de vol, par exemple:

  • vol att sont des noms de phases principales
  • vol.thermique.spirale est beaucoup plus spécifique qui signfie que toutes les conditions suivantes sont vraies: vol ,vol.thermique,vol.thermique.spirale
    Si on spécifie plus d'un nom, ils sont reliés par la logique AND (tous doivent être vrais)

Répartition des tâches entre les processeurs
...

Tout le dialogue pour affecter un paramètre à l'une des 4x3 positions est dans le processeur U. Le processeur U est responsable de la sélection d'un objet , puis de la sélection d'un paramètre puis de son affectation à un trim (une paire de boutons (DT1..DT4 ).

Les modifications de valeur par des boutons sont traitées par 'C' (base 10 ms qui permet de gérer le 'debounce').
Toutefois 'U' signale ce qui est modifié:

  • A la première action sur un trim le nom du paramètre est dicté et sa valeur est notée pour le reset éventuel, même pour une très courte pression qui ne sert qu'à vérifier que l'on règle le bon paramètre.
  • Une pression peut être longue, à la fin la nouvelle valeur est dictée.
  • une pression des deux boutons demande un 'reset',
    • retour à la valeur notée au début de la modification
    • un deuxième reset conduit à la valeur par défaut définie dans ck