96 lines
3.6 KiB
Lua
96 lines
3.6 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 = 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
|