cctweaked_drone/README.md
2026-07-19 12:31:11 +02:00

231 lines
12 KiB
Markdown

# Quadricoptere Create Aeronautics : controleur centralise
Nouvelle architecture: un SEUL ordinateur (PC central) pilote tout via
le reseau filaire. Les anciens scripts multi-PC (helice.lua,
central.lua, input.lua, console.lua, propulsion.lua) sont obsoletes.
## Materiel
Directement sur le PC central:
- altitude_sensor, Create_DisplayLink (affichage de conduite)
- ender modem (uniquement pour le GPS)
- sortie redstone BOTTOM vers le moteur (15 = arret, 14 = vitesse
minimale, 0 = vitesse maximale)
Via le reseau filaire (wired modems):
- 6 Create_RotationSpeedController: 4 helices + 2 propulseurs
(roles affectes par `calib rsc`, persistes dans drone.etat)
- 3 velocity_sensor, un par composante (axes affectes par
`calib capteurs`)
- 1 gimbal_sensor, 1 optical_sensor (vers le sol, 15.5 = rien),
1 stressometer, 1 redstone_relay (joystick), 1 advanced monitor
(tactile), 1 linked typewriter (EN ATTENTE: relever ses signatures
avec test_signatures, voir lib/ihm.lua)
## Installation
1. Copier drone.lua sur le PC, puis: `drone maj <url_base>` pour
telecharger les modules depuis votre depot (Forgejo: URL "raw" du
dossier). Autoriser le domaine dans la config http de CC:Tweaked.
Ou copier a la main drone.lua + lib/*.lua.
2. Premier lancement: `drone` cree `drone.conf`. RELIRE chaque
parametre (Y_VOL, Y_MINI, ANGLE_MAX, DIST_SOL, offsets, joystick,
moteur...) puis passer `verifie = true`. Un warning s'affiche tant
que ce n'est pas fait.
3. Calibrations depuis l'onglet CALIB, en mode CALIBRAGE pour
celles au sol, DANS CET ORDRE (les modes non calibres sont
verrouilles en rouge). Toutes sont RE-EXECUTABLES (recablage:
relancer la calibration remet ses affectations a zero et prend
effet sans relancer le programme). La calib rsc verifie la
coherence (retour de l'assiette a l'etat initial entre chaque
impulsion, detection des conflits deux RSC -> une meme helice)
et s'annule proprement en cas d'incoherence. Les calibrations
assistees affichent leurs consignes sur l'ecran de conduite et se
valident en touchant le moniteur:
- `gimbal` (assistee, en premier): incliner le nez vers le bas
puis pencher a gauche; associe les 2 angles bruts au tangage et
au roulis (l'association CHANGE d'un vaisseau a l'autre).
- `joystick` (assistee): pousser a fond dans chaque direction pour
identifier les faces du redstone relay.
- `typew` (assistee, OPTIONNELLE): le typewriter emet des codes
ASCII (qwerty), le mappage est integre par defaut (0..9,
Entree = valider, Backspace = effacer, + / - = consigne +-1).
Ne calibrer que si le clavier a un mappage exotique.
- `rsc` (drone pose): impulsion sur chaque RSC; l'effet
d'assiette designe le coin; sans effet = propulseur. prop_l /
prop_r arbitraires: si un virage gauche part a droite, les
echanger dans drone.etat. Pour un DRONE TROP LOURD (impulsions
sans effet), utiliser `rscman`.
- `rscman` (drone pose, manuelle): chaque RSC tourne a
CALIB.RPM_MANUEL (10 rpm); regarder quelle helice tourne et
toucher sa position sur l'art (4 coins + prop_l / prop_r);
unicite garantie, ANNULER restaure l'etat precedent. Fiabilise
aussi prop_l / prop_r (plus d'affectation arbitraire).
- `capteurs` (en vol): montee, avancee puis translation gauche
identifient l'axe ET la direction de chaque velocity sensor
(repere du drone: avant / lateral / vertical, positif =
avant / gauche / haut).
- `pid` (en vol stationnaire, marge d'altitude): recherche
iterative, critere ZERO depassement + temps de reponse minimal +
assiette <= ANGLE_MAX. EXPERIMENTAL. Toute modification des
parametres de conf dont dependent ces gains (VITESSE_RSC_MAX,
VITESSE_RAMPE, ANGLE_MAX) INVALIDE la calibration au prochain
demarrage (retour aux gains de la conf + alerte).
## Interface (moniteur tactile)
Echelle de texte automatique (la plus grande qui loge le contenu).
Navigation par onglets:
- PARAM : edition tactile des parametres (depassement tolere, angles
max, POIDS et POUSSEE de l'helice en pixelNewton, vitesses
verticales max, rampe, Y_VOL, Y_MINI). Les valeurs modifiees sont
persistees dans drone.etat et PRIMENT sur drone.conf sans
l'ecraser; modifier un parametre dont depend la calibration PID
affiche un rappel de recalibration.
- MODE : boutons de modes + contenu adapte au mode courant (voir
ci-dessous), art du quadricoptere (cercles des helices: blanc
rpm=0, rouge rpm max, jaune en changement, vert stable; rpm des
propulseurs sur les cotes)
- CALIB : boutons des calibrations (gris = a faire, jaune = en
cours, vert = faite), consignes et barre de progression, art avec
le RSC en cours en VIOLET
- JOURNAL : dernieres lignes du journal de vol
## Modes (verrouilles en rouge si une calibration manque, la raison
s'affiche au toucher)
- `off` : moteur coupe (bottom a 15), tous les RSC a 0
- `inactif` : moteur ALLUME, tous les RSC a 0, commandes desactivees.
Dans tous les modes sauf off, une erreur s'affiche si le moteur ne
tourne pas (stressometer a capacite nulle) alors qu'il le devrait
- `calibrage` : identique a inactif mais AUTORISE les calibrations
au sol (gimbal, joystick, typew, rsc); capteurs et pid se lancent
en mode vol
- `stationnement` : helices a pleine puissance inversee (plaquage),
propulseurs a 0, commandes desactivees. Conditions d'entree: au sol
(optical <= DIST_SOL) ET horizontal (<= ANGLE_MAX). Sortie
automatique vers `vol` si les conditions sont perdues.
- `vol` : assiette maintenue horizontale (PID tangage/roulis a 0),
altitude au PID double regime, deplacement horizontal au joystick
via les PROPULSEURS (avance/virage differentiels)
- `drone` : le joystick commande l'INCLINAISON (jusqu'a
ANGLE_DRONE_MAX), deplacement par les helices, propulseurs a 0
- `atterrissage` : descente douce (VITESSE_ATTERRISSAGE) jusqu'au
sol, puis stationnement. Sous Y_MINI, la descente exige un sol
POSABLE (optical: bloc detecte, ni eau ni lave): garde-fou ocean
- `auto` : cible a 2 coordonnees (`auto <x> <z>` au clavier, pave
tactile, ou bouton d'un point enregistre): decollage a Y_VOL,
ralliement en avancant (cap estime par GPS), atterrissage sur
place. Cible a 3 coordonnees (`auto <x> <y> <z>`): rallie le point
et s'y MAINTIENT a l'altitude y (bornee par le sol et Y_MINI).
Bouton ANNULER: retour en vol stabilise a la position courante
La consigne d'altitude se regle aux boutons +-1/+-10 du moniteur ou
au TYPEWRITER: taper les chiffres (la saisie s'affiche sur l'ecran
de conduite) puis Entree; Backspace corrige; + et - ajustent la
consigne de 1 quand aucune saisie n'est en cours.
Points nommes (clavier du PC, 10 max):
`pt save <nom>` | `pt go <nom>` | `pt del <nom>` | `pt list` | `rtb`
(retour au point de decollage de la derniere mission auto).
## Regulation
- ASSERVISSEMENT EN CASCADE + FEEDFORWARD, ADAPTATIF (transport a
charge et centrage variables a chaque vol):
1. feedforward de sustentation: rpm d'equilibre calcule depuis
POIDS (A VIDE) et POUSSEE_HELICE_MAX (poussee ~ rpm^EXPOSANT),
CORRIGE EN CONTINU PAR LA PRESSION mesuree (la poussee diminue
avec l'altitude): pousseeEffective = POUSSEE * pression /
PRESSION_REF. Mesurer poids a vide et poussee d'une helice et
les saisir (conf ou page PARAM).
1b. ADAPTATION DE POIDS: en quasi-stationnaire, le residu du PID
de vitesse est transfere lentement vers le feedforward: le
drone SE PESE tout seul (poids estime affiche en vol). Remise a
zero a chaque decollage (nouvelle cargaison). Plafond: poids
total max = RATIO_CHARGE_MAX (60%%) * 4 * poussee de reference,
alerte SURCHARGE au dela.
1c. TRIM D'ASSIETTE ADAPTATIF: en stationnaire, la composante
statique des corrections d'assiette (centre de gravite decale
par la cargaison) est absorbee par un trim par axe; alerte
"chargement desequilibre" si |trim| depasse
ADAPTATION.SEUIL_DESEQUILIBRE.
1d. GAIN SCHEDULING: la boucle de vitesse est mise a l'echelle du
ratio poids estime / poids memorise a la calibration (borne
0.5..2): calibrer avec n'importe quelle charge, les gains
suivent la cargaison.
Procedure par vol: charger -> mode vol -> 5-10 s de stationnaire
(pesee + trim + alertes) -> partir. Aucune recalibration.
2. boucle externe: erreur d'altitude -> consigne de vitesse
verticale (P, bornee V_MONTEE_MAX / V_DESCENTE_MAX)
3. boucle interne: PID sur la vitesse verticale mesuree (velocity
sensor vertical calibre; a defaut, derivee filtree de
l'altitude), deux jeux de gains montee / descente
Consigne rampee (VITESSE_RAMPE), derivee sur la mesure et
integrale conditionnelle (zero-depassement).
- Deux calibrations PID complementaires (onglet CALIB, mode vol):
- `pid` (auto-tune): recherche iterative en boucle fermee, garde
le meilleur essai valide (zero depassement, assiette bornee)
- `pidmath` (methodes mathematiques): identification du modele en
boucle ouverte autour du feedforward (echelon -> K, tau, L),
gains candidats par COHEN-COON et ZIEGLER-NICHOLS, validation en
boucle fermee des deux, conservation du meilleur valide (version
adoucie appliquee si aucun ne passe)
Conseil: regler POIDS/POUSSEE d'abord, puis pidmath (rapide), puis
pid si besoin d'affiner.
- PID assiette: tangage et roulis vers leurs cibles; mixage par coin:
base + corrections signees.
- Moteur asservi au stressometer: augmente si l'utilisation depasse
STRESS_HAUT, diminue sous STRESS_BAS (economie). Le moteur est
dimensionne pour suffire; en cas de SURCHARGE malgre le maximum,
les PROPULSEURS sont reduits en priorite (facteur 0.3) + alerte,
puis retablis quand le stress redescend.
- Carburant: deux valeurs sur le 2e display link: POURCENTAGE de
reserve (ligne 1) et AUTONOMIE en minutes (ligne 2), estimee par
apprentissage glissant (EMA, CARBURANT.LISSAGE) de la
consommation; les ravitaillements et le mode off sont exclus de
l'apprentissage. Alerte sous SEUIL_ALERTE.
- Moteur PREDICTIF (apres `calib moteur`, au sol en mode calibrage):
la calibration mesure la capacite produite a chacun des 15 niveaux
redstone puis les coefficients de consommation Kh (helices) et Kp
(propulseurs) en su/rpm. En vol, le besoin est PREVU d'apres les
rpm commandes et le moteur est regle au PLUS PETIT niveau couvrant
besoin * (1 + MARGE): capacite au plus pres de la consommation,
donc carburant minimal. Apprentissage continu de la table, montee
immediate, descente d'un cran par periode. Repli sur le servo
reactif tant que la calib n'est pas faite.
- LIMITEUR DE STRESS (anti-overstress transitoire): a chaque pas de
pilotage, les commandes sont bornees pour que le besoin prevu
reste sous la capacite MESUREE * SECURITE, par priorites: la
sustentation n'est jamais reduite, puis la montee, puis les
propulseurs. Pendant la montee en regime du diesel, le drone
grimpe exactement aussi vite que la capacite le permet: le
depassement transitoire devient structurellement impossible.
Alerte STRESS INSUFFISANT si meme la sustentation depasse le
budget (moteur sous-dimensionne pour la charge).
- Pre-boost a pleine puissance (MOTEUR.BOOST secondes) conserve aux
changements de regime, et garde-fou ultime SURCHARGE (delestage
propulseurs) sur la mesure.
- TYPE DE MOTEUR: le diesel repond instantanement au signal; avec
lui, BOOST peut etre mis a 0, MARGE reduite (~0.10) et
CALIB.ATTENTE_NIVEAU a 0.5 s (calib moteur en ~15 s). Ces trois
valeurs sont sur la page PARAM. Pour un moteur A TRANSITION,
garder BOOST et MARGE plus larges: le limiteur de stress couvre le
delai de montee en regime, l'architecture est inchangee.
- Reactivite: le GPS (appel bloquant jusqu'a 2 s) est isole dans une
tache dediee alimentant un cache; l'interface et la navigation ne
bloquent jamais dessus. Messages longs de l'ecran de conduite:
defilement par segments de mots entiers (indicateur i/n).
## Fichiers
- `drone.conf` : parametres utilisateur (cree si absent)
- `drone.etat` : mode, consigne, roles RSC, axes capteurs, gains
calibres, point de decollage (restaures au reboot; en vol, la
consigne repart de l'altitude reelle)
- `drone.log` : journal de vol (rotation a 64 Ko)
## Points d'attention
- tanks(): si la capacite n'est pas fournie par le jeu, la conf
CARBURANT.CAPACITE_TANK sert de repli.