cctweaked_drone/lib/conf.lua

85 lines
3.1 KiB
Lua

--------------------------------------------------------------------
-- 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 = 8, ki = 12, kd = 1 }, -- v -> delta rpm
tangage = { kp = 2, ki = 0.2, kd = 3 },
roulis = { kp = 2, ki = 0.2, kd = 3 },
},
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