cctweaked_drone/README.md
2026-07-17 13:54:31 +02:00

126 lines
6.1 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 le moniteur tactile, DANS CET ORDRE (les
modes non calibres sont verrouilles en rouge). 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` (mode INACTIF, drone pose): impulsion sur chaque RSC
inconnu; 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.
- `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).
## Modes (boutons du moniteur; 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,
pret pour les calibrations. 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
- `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` : au clavier du PC: `auto <x> <z>`. Decollage a Y_VOL,
ralliement en avancant (cap estime par GPS), atterrissage sur place
- `position` : au clavier: `position <x> <y> <z>`. Rallie le point;
la descente est bloquee si le sol est detecte
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
- PID altitude: deux jeux de gains (montee / descente), derivee sur
la mesure et integrale conditionnelle (concu pour le
zero-depassement), consigne rampee (VITESSE_RAMPE).
- 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 sont exclus de l'apprentissage.
Alerte sous SEUIL_ALERTE.
## 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.