Telemetry Script :- F3F training
2 participants
Page 1 sur 1
Telemetry Script :- F3F training
Bien que je ne fasse pas de F3F, je suis en train d'élaborer un script permettant de faire des entrainements de F3F.
La définition des bases et de la ligne de sécurité est faites avec 4 points.
L'ordre des points est important sinon la détection du franchissement des bases ou de la ligne de sécurité n'est pas correct.
Vu le temps qu'il fait, je n'ai pas pû tester en "live" le script mais seulement dans Companion. C'est vraiment une première ébauche mais je le partage quand même si cela intéresse quelqu'un pour le tester et l'améliorer (peut-être fait-il beau ailleurs qu'en Suisse).
La définition des bases et de la ligne de sécurité est faites avec 4 points.
L'ordre des points est important sinon la détection du franchissement des bases ou de la ligne de sécurité n'est pas correct.
Vu le temps qu'il fait, je n'ai pas pû tester en "live" le script mais seulement dans Companion. C'est vraiment une première ébauche mais je le partage quand même si cela intéresse quelqu'un pour le tester et l'améliorer (peut-être fait-il beau ailleurs qu'en Suisse).
- Code:
-- F3F Training
-- Ce telemetry script bip chaque fois que l'engin travers une base
-- Il bip aussi quand l'engin taverse la ligne de sécurité
-- L'espace de course est défini par quatre points :
-->> la ligne P1-P2 défini la base de gauche
-->> la ligne P2-P3 défini la ligne de sécurité
-->> la ligne P3-P4 défini la base de droite
-- Le script s'appuie sur la fonction isLeft pour savoir si l'engin est à gauche ou à droite d'une ligne
-- Copyright M. Ricci.
-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License
-- as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
-- without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-- See theGNU General Public License for more details.
-- No du switch logique qui s'il est ON rend le script silencieux.
local silenceSwitch = 32
-- Table des quatre points GPS délimitant le parcours F3F
local tablePoint = {}
-->> Nom du lieu, Latitude, Longitude, Distance, Fichier
tablePoint[1] = {46.515148, 6.998986} -- Point devant à gauche
tablePoint[2] = {46.515336, 6.999425} -- Point à gauche
tablePoint[3] = {46.516122, 6.998788} -- Point à droite
tablePoint[4] = {46.515979, 6.998323} -- Point devant à droite
-- Variable calculée à l'initialisation pour gagner un peu de temps par la suite
-- Variable de travail
local silencieux = true -- Indicateur indiquant si les annonces vocales doivent être faites ou pas
local securityState = "" -- Indique si l'engin est à gauche (true) ou à droite (false) de la ligne de sécurité
local securityCount = 0 -- Compte le nombre de pénalité (franchissement de la ligne de sécurité)
local firstBase = "" -- Indique ...
local nextBase = "" -- Indique la prochaine base à traverser
local baseCount = 0 -- Compte le nombre de bases franchies (un parcour F3F c'est 11 franchissements)
local baseStart = 0 -- timer au moment du premier franchissement
local baseTime = 0 -- temps écoulé
-- isLeft(): tests if a point is Left|On|Right of an infinite line.
-- Input: three points point, point1, and point2
-- Return: >0 for point left of the line through point1 and point2
-- =0 for point on the line
-- <0 for point right of the line
local function isLeft(point, point1, point2)
return (point2[2] - point1[2]) * (point[1] - point1[1]) - (point[2] - point1[2]) * (point2[1] - point1[1])
end
local function playBeep()
if baseCount <=8 then
playFile("SRIPTS/SOUNDS/beep.wav")
elseif baseCount == 8 then
playFile("SRIPTS/SOUNDS/beep2.wav")
else
playFile("SRIPTS/SOUNDS/beep3.wav")
end
if baseCount > 0 then
playNumber(baseCount,0,0)
end
end
-- Fonction appelée lors de la ré-initialisation du script
local function init()
end
-- Fonction appelée lorsque l'écran de télémétrie n'est pas affiché
local function background()
silencieux = 1024 == getValue(99 + silenceSwitch) -- rend le script silencieux si silenceSwitch est ON.
local pointActuel = {getValue("latitude"), getValue("longitude")} -- récupère le point GPS de l'engin
-->> Plusieurs points pour mes test.
-- pointActuel = {46.515680, 6.998899} -- Point de test entre les bases
-- pointActuel = {46.515100, 6.999298} -- Point de test à gauche de la base
-- pointActuel = {46.516197, 6.998295} -- Point de test à droite de la base
-- test si l'engin est derrière la ligne de sécurité
if 0 > isLeft(pointActuel, tablePoint[2], tablePoint[3]) then
-- test si l'on vient de traverser la ligne de sécurité
if securityState == "G" then
securityCount = securityCount + 1
-->> Beep de sécurité
end
securityState = "D"
else
securityState = "G"
end
-- test si l'engin est à gauche de la base gauche
if 0 > isLeft(pointActuel, tablePoint[1], tablePoint[2]) then
if nextBase == "" then -- Premier passage de l'intérieur vers l'extérieur (pas de beep)
firstBase = "G"
elseif nextBase == "G" then -- Nème passage de l'intérieur vers l'extérieur (beep)
baseCount = baseCount + 1
playBeep()
end
nextBase = "D"
else
if firstBase == "G" then -- premier passage de l'extérieur vers l'intérieur (départ -> beep)
baseStart = getTime()
playBeep()
firstBase = "S"
baseCount = 0
end
end
-- test si l'engin est à droite de la base droite
if 0 > isLeft(pointActuel, tablePoint[3], tablePoint[4]) then
if nextBase == "" then -- Premier passage de l'intérieur vers l'extérieur (pas de beep)
firstBase = "D"
elseif nextBase == "D" then -- Nème passage de l'intérieur vers l'extérieur (beep)
baseCount = baseCount + 1
playBeep()
end
nextBase = "G"
else
if firstBase == "D" then -- premier passage de l'extérieur vers l'intérieur (départ -> beep)
baseStart = getTime()
playBeep()
firstBase = "S"
baseCount = 0
end
end
end
-- Fonction appelée lorsque l'écran de télémétrie est affiché
local function run(event)
background()
lcd.drawScreenTitle("F3F Training",0,0)
lcd.drawText(10, 13, "Prochaine base :", SMLSIZE)
lcd.drawText(100, 10, nextBase, MIDSIZE)
lcd.drawText(10, 27, "Nombre de base :", SMLSIZE)
lcd.drawText(100, 24, baseCount, MIDSIZE)
lcd.drawText(10, 41, "Temps ecoule :", SMLSIZE)
lcd.drawText(100, 38, baseTime, MIDSIZE)
if silencieux then lcd.drawText(10, 50, "Alerte OFF", MIDSIZE) end
end
-- Retourne à OpenTx les trois fonctions
return { init=init, background=background, run=run }
Sacre100- Messages : 1889
Date d'inscription : 30/11/2013
Age : 67
Localisation : Blonay - Suisse
Re: Telemetry Script :- F3F training
J'ai publié une nouvelle version du script. Je n'ai pas vraiment poursuivit les tests car le rafraichissement du GPS est trop lent (toutes les 2 secondes d'après mes tests) pour avoir quelque chose de réellement utilisable.
Tant que le GPS de Frsky ne fournira pas les coordonnées GPS plus fréquemment, je mets le développement de ce script en suspens.
Tant que le GPS de Frsky ne fournira pas les coordonnées GPS plus fréquemment, je mets le développement de ce script en suspens.
Sacre100- Messages : 1889
Date d'inscription : 30/11/2013
Age : 67
Localisation : Blonay - Suisse
Re: Telemetry Script :- F3F training
Salut Sacre100,
Je reviens sur ton script LUA oh combien intéressant. J'ai vu qu'une version v2 du gps était sorti avec une fréquence de 1hz. 1s pourrait rendre ton script utilisable. Sais tu si ces 1hz sont réels?
Merci
JB
Je reviens sur ton script LUA oh combien intéressant. J'ai vu qu'une version v2 du gps était sorti avec une fréquence de 1hz. 1s pourrait rendre ton script utilisable. Sais tu si ces 1hz sont réels?
Merci
JB
Deguelle J-Bastien- Messages : 39
Date d'inscription : 22/10/2013
Age : 41
Re: Telemetry Script :- F3F training
Non, 1 fois par second à la vitesse où vol nos planeurs, c'est beaucoup trop lent.
A 36km/h, en 1s, on fait 10 mètres alors imagine un F3F qui vole facilement à plus de 100km/h, l'erreur dépasserait les 30m
A 36km/h, en 1s, on fait 10 mètres alors imagine un F3F qui vole facilement à plus de 100km/h, l'erreur dépasserait les 30m
Sacre100- Messages : 1889
Date d'inscription : 30/11/2013
Age : 67
Localisation : Blonay - Suisse
Sujets similaires
» Yaapu Frsky Telemetry Script
» script LUA telemetry telem1- telem2 et battcheck sur X7
» Telemetry Script :- Alerte lorsque l'on s'approche à moins de 100m d'un point GPS
» LUA telemetry screen2 ne fonctionne pas...
» Telemetry fixe
» script LUA telemetry telem1- telem2 et battcheck sur X7
» Telemetry Script :- Alerte lorsque l'on s'approche à moins de 100m d'un point GPS
» LUA telemetry screen2 ne fonctionne pas...
» Telemetry fixe
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum