je ne comprends pas cette partie ! . Qu'est ce qu'une liaison signal ?qu'il ne faut pas qu'il y ait une liaison signal entre picaxe et emetteur....
je ne comprends pas cette partie ! . Qu'est ce qu'une liaison signal ?qu'il ne faut pas qu'il y ait une liaison signal entre picaxe et emetteur....
'------ Joystick PAN ------
' Point milieu = de 127-130
' vers la droite = du PM a 229-230
' vers la gauche = du PM a 30-31
' limite cde servo en PAN 50 - 250
Bonne chance , a celui qui jette ka dedans'------ Joystick Tilt ------
' Point milieu = de 125-127 valeur a envoyer vers le haut min:50 / vers le bas max:200
' Joystick vers le haut = du PM a 35-36
' Joystick vers le bas = du PM a 223-224
je connais pas les vitesses angulaires du servoComme déjà dit 10 fois, il manque :
????- correspondance entre valeurs numériques (50>250) et angles du servo.
Je ne comprends pas le but cette question. Il peut le mettre aussi vite que possible, car cette donnée est ensuite envoyée au SD-20 qui lui fait exécuter l'ordre aux servosA quelle fréquence le Picaxe peut-il mettre à jour le servo ?
'------ Joystick PAN ------
' Point milieu = de 127-130
' vers la droite = du PM a 229-230
' vers la gauche = du PM a 30-31
' limite cde servo en PAN 50 - 250
select case V_Pan_brut
case > 220
do while V_Pan_mod < 250
V_Pan_mod = V_Pan_mod + 1 max 250
hi2cout [SD_20],10,(V_Pan_mod)
loop
case > 180
select case V_Pan_mod
case > 215
do while V_Pan_mod <= 215
V_Pan_mod = V_Pan_mod - 1 min 215
hi2cout [SD_20],10,(V_Pan_mod)
loop
case < 215
do while V_Pan_mod < 215
V_Pan_mod = V_Pan_mod + 1 max 215
hi2cout [SD_20],10,(V_Pan_mod)
loop
end select
case > 140
select case V_Pan_mod
case > 180
do while V_Pan_mod > 180
V_Pan_mod = V_Pan_mod - 1 min 180
hi2cout [SD_20],10,(V_Pan_mod)
loop
case < 180
do while V_Pan_mod < 180
V_Pan_mod = V_Pan_mod + 1 max 180
hi2cout [SD_20],10,(V_Pan_mod)
loop
end select
case < 40
select case V_Pan_mod
case > 50
do while V_Pan_mod > 50
V_Pan_mod = V_Pan_mod - 1 min 50
hi2cout [SD_20],10,(V_Pan_mod)
loop
end select
case < 80
select case V_Pan_mod
case < 85
do while V_Pan_mod < 85
V_Pan_mod = V_Pan_mod + 1 max 85
hi2cout [SD_20],10,(V_Pan_mod)
loop
case > 85
do while V_Pan_mod > 85
V_Pan_mod = V_Pan_mod - 1 min 85
hi2cout [SD_20],10,(V_Pan_mod)
loop
end select
case < 120
select case V_Pan_mod
case < 120
do while V_Pan_mod < 120
V_Pan_mod = V_Pan_mod + 1 max 120
hi2cout [SD_20],10,(V_Pan_mod)
loop
case > 120
do while V_Pan_mod > 120
V_Pan_mod = V_Pan_mod - 1 min 120
hi2cout [SD_20],10,(V_Pan_mod)
loop
end select
else
V_Pan_mod = 150
end select
hi2cout [SD_20],10,(V_Pan_mod)
sertxd ("V_Pan_mod=",#V_Pan_mod,13,10)
C'est soit donné par le constructeur en fonction de la référence du servo, soit mesurable avec un bon chrono.je connais pas les vitesses angulaires du servo
Oubliez le joystick. (Mais n'oubliez pas qu'il faut aussi que ce soit compatible avec le headtracker...)????
A droite
mon joystick me donne une valeur allant de 130 environ a 230 environ quand je le penche sur la droite . avec cette valeur , il faut que l'ordre envoyé a mon servo varie de 150 a 250 ; on voit que le ratio est de 1 quasiment mais comme je souhaite une plage de démarrage ça fausse cette impression.
A gauche
mon joystick me donne une valeur allant de 130 environ a 30 environ quand je le penche sur la gauche. avec cette valeur , il faut que l'ordre envoyé a mon servo varie de 150 a 50
La fréquence est exprimée en fois par seconde. Par exemple 200 fois par seconde.Je ne comprends pas le but cette question. Il peut le mettre aussi vite que possible, car cette donnée est ensuite envoyée au SD-20 qui lui fait exécuter l'ordre aux servos
' Amorti v01 2014_02_18 JYB
'
'
#picaxe 40X2
#no_table
symbol Lu=b1
symbol Cible=b2
Symbol Actuel=b3
Symbol Vitesse=2
Symbol Echelle=1
Symbol ButeeMini=75 ' Ajouter Vitesse
Symbol ButeeMaxi=225 ' Retirer Vitesse
Symbol Tolerance=6
Symbol Temp1=b5
Symbol Temp2=b6
setfreq m8
Actuel=150
servo 7,Actuel
do
readadc d.1,Lu
Cible=lu*Echelle
' sertxd (#lu," ")
Temp1=Actuel-Tolerance
Temp2=Actuel+Tolerance
if Cible>Temp2 and Actuel<ButeeMaxi then
Actuel=Actuel+Vitesse
elseif cible<temp1 and Actuel>ButeeMini then
Actuel=Actuel-Vitesse
endif
servopos 7,Actuel
pause 20 ' simulation des autres taches faites dans la boucle
loop
J'adhère, plus lourd tu meurs !Jeremy :
f(x)=ax+b
Tu vas t'y mettre, oui ?
Temp1=Actuel-Tolerance
Temp2=Actuel+Tolerance
if Cible>Temp2 and Actuel<ButeeMaxi then
Actuel=Actuel+Vitesse [COLOR="#FF0000"]min cible[/COLOR]
servopos 7,Actuel
elseif cible<temp1 and Actuel>ButeeMini then
Actuel=Actuel-Vitesse [COLOR="#FF0000"]max cible[/COLOR]
servopos 7,Actuel
endif
Vous lachez rien !!!!mais je ne connais pas les valeurs angulaires du servo
Exact, et c'est pour ça que le servo ne copie pas la position du potar, ce qui n'est pas hyper gênant car l'opérateur ne regarde pas ses doigts quand il manipule.Vous n'avez pas utiliser de valeur angulaires pour votre vidéo ? pareil pour moi ; le min et max sont connus 50 et 250 pour le pan ; Il faut seulement transformer les valeurs du joysticks et valeurs allant de 50 a 250.
Pareil pour le Head-Tracker, transformer les valeurs du pitch et du hrading en valeur allant de 50 à 250 pour le heading et de 50 a 200 pour le pitch
Une mise a l'échelle commune est trop complexe pour moi , je préfère en faire deux séparées et suivant l'état de mon inter j'exécute l'une ou l'autre
Non pas tout à fait , je dirais plus 120°-140°Est-ce qu'on peut considérer que la course du servo est de 180° en heading ?
Moi aussi , mais c'est bien ça . il s'agit d'une tourelle pour camera ( chinoiserie pour le moment en attendant la validation pour une nacelle 3 axes gyrostabilisé), donc les servos ont une plus grande courseles butées seraient 50 et 250, ce qui m'étonne car mon servo bloque bien avant...
Je pense qu'on se comprends mal , sur ce point . La valeur 128 , c'est le point milieu de mon joystick ( lecture analogique) , et 150 c'est le point milieu du servo . il faut donc faire correspondre 128 avec 150 par une mise a l'échelle . Mais comme je souhauite une zone morte il faut décaler vers le haut la mise a l'echelle commence a 140 ( valeur joystick) et vers le bas à 120 ( valeur joystick) .Valeur milieu vers 128 au lieu de 150 : vous confirmez ce décentrement ?
Oui le pitch est beaucoup moins . je n'ai pas de valeur d'angle a vous communiquer , je fais ca , a tatons pour trouver les min max . Non ce n'est pas le modele exactement, car il a claqué , je l'ai donc remplacé . mais il s'en rapproche quand mêmePour le Pitch la course est forcément beaucoup moins que 180° ; combien ? Est-ce le même modèle de servo ?
Butées à 50 et 200, valeur milieu à 126[/décaler]
Même chiose pour le heading . 126 c'est la valeur centrale du joystick :
le servo lui est à 150 . il peut se deplacé jusqu'a 200 vers le bas . ( delta de 50) ? et jusqu'a 50 vers le haut ( delta de 100) . j'ai plus d'angle vers le haut que vers le bas
Qu'entendez vous par overhead ?Pour éviter le overhead
Ca simplifierait la chose . mais la mise a l'échelle n'as plus de secret pour moi ( humour ironique)atan2 peut être modifié pour donner des valeurs directement compatibles.
j'ai trouvé le bon compromis a testé en situation réel . mais pour moi on touche la perfection ....... Enfin presqueC'est encore plus lissé évidement, mais bien plus rapide.
Pour moi c'est trop rapide pour de la vidéo mais faudrait le voir en vrai pour décider.
Je dis presque, car je pense avoir un problème de hard . ma camera tremblote en Tilt quand je bouge le PAN ou quand je bouge la direction des roues, la camera tremblote aussi . alors qu'aucun ordre n'est envoyé . C'est donc bien un problème hard je pense . Surtout que les servos camera , sont en bout de ligne, y'a 6 servos d'alimenter avant eux . j'espère qu'un gros condensateur en fin de ligne pourra m'aider a résoudre ce gros problème.
Voici votre programme modifier . ça fonctionne parfaitement . avec une zone morte entre 120 et 140 . peut etre peut il être optimiser, mais y'en as pas besoin, car la rapidité est parfaite
Code:'------ Joystick PAN ------ ' Point milieu = de 127-130 ' vers la droite = du PM a 229-230 ' vers la gauche = du PM a 30-31 ' limite cde servo en PAN 50 - 250 if V_pan >= 140 or V_pan =< 120 then if V_pan >= 140 then Pan_Cible = V_Pan * 12 / 10 - 18 max 250 ' mise a l'echelle end if if V_pan <= 120 then Pan_Cible = V_Pan * 12 / 10 + 6 min 50 ' mise a l'echelle end if Temp1=V_Pan-Tolerance Temp2=V_Pan+Tolerance if Pan_Cible>Temp2 and V_Pan< Pan_Maxi then V_Pan=V_Pan+Rapidite min PAn_cible elseif Pan_cible<temp1 and V_Pan>Pan_Mini then V_Pan=V_Pan-Rapidite max PAn_cible endif else V_pan = 150 end if hi2cout [SD_20],10,(V_Pan)
C'est une expression courante en informatique pour "travail superflu".Qu'entendez vous par overhead ?
'------ Joystick PAN ------
' Point milieu = de 127-130
' vers la droite = du PM a 229-230 servo doit aller de 150 a 50
' vers la gauche = du PM a 30-31 servo doit aller de 150 a 250
' limite cde servo en PAN 50 - 250
if V_pan >= 140 or V_pan =< 120 then
if V_pan >= 140 and V_pan > temp1 then
Pan_Cible = V_Pan * 12 / 10 - 18 max 250 ' mise a l'echelle
Pan_cible = 300 - Pan_cible min 50
Temp1 = V_pan + Tolerance max 225
Temp2 = V_pan - Tolerance min 140
Pan_Cible = Pan_Cible + Rapidite
end if
if V_pan <= 120 and V_pan < temp2 then
Pan_Cible = V_Pan * 12 / 10 + 6 min 50 ' mise a l'echelle
Pan_cible = 300 -Pan_cible max 250
Temp1 = V_pan + Tolerance max 120
Temp2 = V_pan - Tolerance min 30
Pan_Cible = Pan_Cible - Rapidite
end if
else
Pan_cible = 150
end if
Ca, ca fait plaisir !Votre analyse est correcte.
'------ Joystick PAN ------
' Point milieu = de 127-130
' vers la droite = du PM a 229-230 servo doit aller de 150 a 50
' vers la gauche = du PM a 30-31 servo doit aller de 150 a 250
' limite cde servo en PAN 50 - 250
if V_Pan >= 140 or V_Pan =< 120 then
if V_Pan >= 140 then
Pan_Cible = V_Pan * 12 / 10 - 18 max 250 ' mise a l'echelle
else
Pan_Cible = V_Pan * 12 / 10 + 6 min 50 ' mise a l'echelle
end if
if Pan_Cible > Pan_actuel then
Pan_actuel = Pan_actuel + Rapidite min PAn_cible
elseif Pan_cible < Pan_actuel then
Pan_actuel = Pan_actuel - Rapidite max PAn_cible
endif
else
Pan_actuel = 150
end if
Sauf que ça n'a rien à voir avec une moyenne glissante comme indiqué dans le graphique joint dans le post indiqué.je pense "en gros" , avoir compris le principe de moyenne glissante
mais :On peut avoir des valeurs différentes pour le freinage et l'accélération, mais le bidule étant assez symétrique, ce n'est pas forcément utile.
alors ?Pour la décélération, il ne faut pas de moyennage justement , car c'est mon arrêt d'urgence
Je suis pas sur d'avoir compris ta question .On peut avoir des valeurs différentes pour le freinage et l'accélération, mais le bidule étant assez symétrique, ce n'est pas forcément utile.
mais :
Pour la décélération, il ne faut pas de moyennage justement , car c'est mon arrêt d'urgence
alors ?
#PICAXE 20X2
'#################################################################################
'########################## Programme 20X2 Slave #############################
'#################################################################################
'######################### Configuration des I/O #########################
'b0 a b7 pour les communications
Symbol V_moteur = b3
Symbol V_dir = b5
Symbol V_Pan = b7
Symbol mem_Vitesse = b10
Symbol Compt_Vitesse = b11
Symbol mem_Diff = b12
Symbol Compt_Diff = b13
Symbol Compt_cam = b14
Symbol V_Tilt = b15
Symbol Saut_page = b16
Symbol Mem_reset = b17
Symbol flag_recul = b18
Symbol compt_recul = b19
Symbol Pan_cible = b20
Symbol Pan_actuel = b21
Symbol Tilt_cible = b22
Symbol Tilt_actuel= b23
Symbol Compt_video = b24
Symbol mem_video = b25
Symbol Compt_err = w26
Symbol Pointeur = w27
Symbol BP_cam = bit1
Symbol flag_Diff = bit4
Symbol flag_Vitesse = bit5
Symbol inter_Backup = bit6
Symbol inter_Head = bit7
Symbol Tx_video = B.0
Symbol Rouge = B.2
Symbol Verte = C.7
Symbol rapidite = 1
Symbol SD_20 = %11000010
Symbol Memoire = %10100000
'########################### Initialisation ############################
setfreq m8
hi2csetup i2cmaster, SD_20, i2cslow_8, i2cbyte ' Configuration de l'i2C en maitre
hsersetup b57600_8,%01 ' On configure la liaison serie en tache de fond
settimer t1s_8 ' On active le timer
read 0,mem_Vitesse, mem_Diff, mem_reset ' On lit dans l'EEprom, les valeurs vitesse, diff et reset enregistrees
hserflag = 0 ' On RAZ le flag hserin avant le backup
if mem_reset = 1 then ' Si le flag reset a ete mis a 1 on va faire le back up
write 2, 0 ' On efface le flag
do ' On reboucle pendant 4 minutes
if timer > 10 then ' Au bout de 3 minutes on va au backup , **** 10 secondes pour les tests a modifier *****
gosub backup
end if
loop while hserflag = 0 ' Si pendant l'attente on recoit un signal on sort
endif
hi2cout [SD_20],10,(150,150) ' On place la cam au centre
pause 100
'####################################################################################################
'################################### Programme Principal ######################################
'####################################################################################################
do
low Verte ' Led Verte, permettant de voir la reception de donnees
do while hserflag = 0 ' on reboucle tant qu'on a rien recu
Compt_err = Compt_err + 1 max 65535 ' incremente le compteur d'erreur
if Compt_err >= 450 then ' En changeant la valeur on change le temps de reaction
gosub Escape ' au bout d'un certain temps on va arreter
exit ' Apres le retour d'un arret on sort de la boucle
end if
loop
High Verte
Compt_err = 0 ' Raz du compteur
hserflag = 0 ' Raz du flag
hserptr = 0 ' Raz du pointeur du scratchpad
get 0,b0,b1,b2,b3,b4,b5,b6,b7 ' Recuperation des valeurs envoyees avec lecture du scratchpad
'#################################### Mise a l'echelle ####################################
'------ Joystick moteur ------
select case V_moteur ' Point milieu = de 125-127 valeur a envoyer min:50 max:250
case = 0 ' Joystick vers le haut = du PM a 35-36
V_moteur = 150 ' Joystick vers le bas = du PM a 223-224
case < 123 'marche avant
V_moteur = V_moteur*12/10
V_moteur = 300 - V_moteur max 250
case > 129 ' marche arriere
V_moteur = V_moteur*11/10 max 255
V_moteur = 292 - V_moteur min 50
else
V_moteur = 150
end select
'------ Joystick direction ------
select case V_dir ' Point milieu = de 126-130
case = 0 ' vers la droite = du PM a 221-222 valeur a envoyer de 150 a 240
V_dir = 150 ' vers la gauche = du PM a 28-29 valeur a envoyer de 150 a 60
case > 132
V_dir = V_dir + 18 max 240
case < 126
V_dir = V_dir + 24 min 60
else
V_dir = 150
end select
hi2cout [SD_20],18,(V_moteur,V_dir,V_dir) ' Envoi des donnees au SD20
'#################################### Gestion des TOR ####################################
loop
'#########################################################################################################
'###################################### Programme Secondaire #######################################
'#########################################################################################################
freinage_arret:
V_moteur = 150 ' je prefere affecte la valeur du PM a la variable
hi2cout [SD_20],18,(V_moteur) ' on met le moteur au point mort
pause 100
return
L'accélération (comme le "freinage") est une constante.Le but du code , serait de limiter l'acceleration du Véhicule numériquement par "filtrage" ou "lissage" de la courbe de réponse en fonction de la valeur reçue et seulement si la valeur mérite d'être lissé .
Si on met une butée , on en pourras jamais atteindre la vitesse max .Si on ne veut pas que la moto cabre, il suffit de mettre une butée sur la poignée des gaz. Et ça va marcher aussi bien depuis l'arrêt que si la moto roule
Si la butée est à disons 20km/h/sSi on met une butée , on en pourras jamais atteindre la vitesse max .
Effectivement c'est exactement ce que je souhaite .On peut atteindre n'importe quelle vitesse avec n'importe quelle accélération (supérieure à zéro)
simplement, il faut attendre un peu (ou un peu plus...)
Nos posts se sont croisés... j'étais en cours d'édition. Lisez la fin...Pour moi si on met une butée sur la poignée des gaz, c'est pour ne pas pouvoir accelerer a fond ? donc limiter aussi la vitesse max ?
Effectivement c'est exactement ce que je souhaite .