-------------------------------------------------------------------- -- lib/conf.lua : configuration (drone.conf), cree avec des valeurs -- par defaut commentees. Les surcharges de la page PARAM (persistees -- dans drone.etat) PRIMENT sur ce fichier sans l'ecraser. -------------------------------------------------------------------- local Conf = {} local DEFAUT = [[ -- drone.conf : configuration du drone V2. Relire puis passer -- verifie a true pour supprimer l'alerte au demarrage. { verifie = false, DIST_SOL = 1.6, -- optical: distance "au sol" (blocs) ANGLE_MAX = 1.5, -- inclinaison max toleree (degres) VITESSE_ATTERRISSAGE = 1.0,-- descente du mode atterrissage (b/s) V_MONTEE_MAX = 3.0, -- vitesse verticale max montee (b/s) V_DESCENTE_MAX = 2.0, -- vitesse verticale max descente (b/s) RAMPE = 3.0, -- rampe de consigne d'altitude (b/s) VMAX = 256, -- borne des RSC ASSIETTE_PLAFOND = 0.5, -- autorite assiette: fraction du rpm -- de sustentation -- gains par defaut; les calibrations altitude / inclinaison les -- remplacent (persistes en surcharges, retouchables page PARAM) PID = { alt = { kp = 1.0 }, -- err alt -> v cible (1/s) vitesse = { kp = 4, ki = 4, kd = 1 }, -- v -> delta rpm tangage = { kp = 1.5, ki = 0.1, kd = 2 }, roulis = { kp = 1.5, ki = 0.1, kd = 2 }, }, -- garde-fous de la regulation (anti claquage 0 <-> max) REGUL = { DELTA_MAX = 0.6, -- sortie de la boucle de vitesse bornee a -- +- fraction du rpm de sustentation PENTE = 2.0, -- pente max de la base: fraction de la -- sustentation PAR SECONDE (les helices ont -- un temps de transition reel) FILTRE_V = 0.5, -- lissage de la vitesse verticale (1 = brut) V_ABERRANT = 15, -- |v| au-dela: mesure rejetee (b/s) }, MOTEUR = { MARGE = 0.15, -- adaptatif: capacite >= besoin*(1+m) SECURITE = 0.95, -- garde: besoin borne a capacite*s }, CARBURANT = { LISSAGE = 0.1, -- EMA de la consommation PERIODE = 5, -- periode de mesure (s) SEUIL_ALERTE = 0.15, -- alerte sous 15%% }, BOITE = { RSC_CIBLE = 180, -- calib: rpm RSC vise en sustentation RSC_HAUT = 200, -- vol: au-dela -> rapport suivant (k+1) RSC_BAS = 90, -- vol: en-deca -> rapport precedent -- (k-1, meilleure resolution) ATTENTE = 3.0, -- temps mort entre deux changements (s) }, CALIB = { RPM_MANUEL = 10, -- rscman: rpm de reperage SEUIL_JOYSTICK = 8, -- niveau declarant une face (0..15) ATTENTE_NIVEAU = 0.6, -- balayage moteur: attente par niveau RAMPE_DECOLLAGE = 2, -- calib altitude: rpm/s de la rampe RELAIS_DUREE = 25, -- relais: duree max d'un essai (s) RELAIS_FRACTION = 0.15, -- relais: d = fraction du rpm hover }, } ]] function Conf.charger(journal) if not fs.exists("drone.conf") then local f = fs.open("drone.conf", "w") f.write(DEFAUT) f.close() journal.alerte("drone.conf cree avec les valeurs par defaut: " .. "A PERSONNALISER") end local f = fs.open("drone.conf", "r") local contenu = f.readAll() f.close() local conf = textutils.unserialize(contenu) if not conf then error("drone.conf illisible: corriger ou supprimer le fichier", 0) end if not conf.verifie then journal.alerte("drone.conf non verifie: relire les parametres " .. "puis passer verifie a true") end return conf end return Conf