Véhicule RC

dje8269

Senior Member
Test effectué :

Impeccable ! ça fonctionne parfaitement avec une seule batterie . Merci a tous, je vais adopter cette solution .

J'ia donc mis une R de 330 ohms en série , et une de 100K en pull-down .

Je vais rajouter une led et une résistance en // de l'émetteur pour visualiser son activation .
 

dje8269

Senior Member
Bonjour ,

Voila je galère encore sur le mouvement de ma camera . J'ai enfin pus obtenir mes limites droite et gauche , haut et bas .

Je suis en train d'essayer de faire un mixte , mais c'est la galère ? vous savez depuis le temps, moi et les mises a l'échelle hein !!!!! , c'est une grande histoire d'amour .

Je cherche une méthode plus sympa qui consiste a créer des paliers , mais en se déplacant progressivement .

Je m'explique ; en créant des paliers, cela fonctionne. mais les mouvements sont brusques et le poids de la camera , risque a terme de détériorer l'ensemble assez fragile .
maintenant , faire des mouvements souples, c'est a dire en créer la valeur de destination et l'incrémenter ou décrémenter de 1 à chaque boucle , fais un mouvement fluide et propre, et quand même assez rapide . cela me conviendrait mieux ; Mais avec cette méthode qui fonctionne aussi , quand on souhaite fixé un point précis, ça bougeotte !!! pas agréable du tout ! .

L'idéale serait de créant des paliers , qui se déplacerait lentement . mais sur un palier intermédiaire, il faut détecter si l'on vient d'un palier supérieur ou inférieur pour savoir si on doit décrémenter ou incrémenter la variable .

je vais encore chercher cette après midi , mais j'ai un doute sur mes capacités ; alors si une bonne âme se sent de jeter un œil , ce serait bien aimable.

Voici les valeurs demandées : PM = point milieu , les 3 premiers lignes correspondent aux valeurs des joysticks lues directement et la dernier correspond au débattement max du servo avec 150 en PM .
Je pense que 4 paliers par coté serait le top .
Et la cerise sur le gateau; c'est de créer une zone morte autour de chaque valeur de palier de 5-10 environ servant d'hystérésis pour éviter les bug si on se trouve sur une frontière .

J'en demande peut être trop !

'------ 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

Pour le tilt , c'est un peu différent , les valeurs sont inversés archtung . quand la valeur joystick monte , celle du Tilt doit descendre . Et il n'y a pas de symetrie ; un seul palier pour aller en bas , contre 2 ou 3 pour le haut ;

'------ 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
Bonne chance , a celui qui jette ka dedans
 

BESQUEUT

Senior Member
Comme déjà dit 10 fois, il manque :
- vitesse angulaire du servo,
- correspondance entre valeurs numériques (50>250) et angles du servo.
Accessoirement, le point milieu en Pan ne semble pas au milieu des butées, mais c'est peut-être normal par construction mécanique.
A quelle fréquence le Picaxe peut-il mettre à jour le servo ?
 

dje8269

Senior Member
Comme déjà dit 10 fois, il manque :
je connais pas les vitesses angulaires du servo

- correspondance entre valeurs numériques (50>250) et angles du servo.
????
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

A quelle fréquence le Picaxe peut-il mettre à jour le 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 servos
 

dje8269

Senior Member
J'en suis rendu à ici .

Mais il y certainement plus simple .

En l'etat , un commande ne peut etre executé seulement quand la position a été atteinte . ( temps relativement court)

Il manque aussi les zones mortes

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

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)
 

BESQUEUT

Senior Member
je connais pas les vitesses angulaires du servo
C'est soit donné par le constructeur en fonction de la référence du servo, soit mesurable avec un bon chrono.
En général c'est donné pour 60°, par exemple 0,11s pour 60°
????
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
Oubliez le joystick. (Mais n'oubliez pas qu'il faut aussi que ce soit compatible avec le headtracker...)
Supposons que le servo soit en butée à gauche. On cale un rapporteur sur le levier du servo.
On va en butée de l'autre coté. Combien indique le rapporteur en degrés ?

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
La fréquence est exprimée en fois par seconde. Par exemple 200 fois par seconde.
C'est la vitesse de la boucle principale.
Ça peut se mesurer avec un fréquencemètre ou un analyseur logique.
Si on ne connait pas cette valeur, on ne peut pas savoir de combien doit avancer le servo à chaque boucle...
 

jojojo

Senior Member
vous savez depuis le temps, moi et les mises a l'échelle hein !!!!!

Jeremy :

f(x)=ax+b

Tu vas t'y mettre, oui ?

Bonne soirée.
 

BESQUEUT

Senior Member
Testé avec un potar en D.1 et un servo en B.7
Code:
' 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
Vidéo du test
 
Last edited:

dje8269

Senior Member
Super la vidéo !!!! effectivement , c'est génial .

Le programme de la vidéo est il celui poste #169 ?

Si j'ai bien compris , votre tolérance c'est la zone morte que vous testez en tremblant sur le potar ? elle remplace genialement les paliers
la vitesse c'est l'incrementation ou la decrementation de la valeur a atteindre ? donc plus ce chiffre est grand plus vite on atteint la valeur cible ?

Car par rapport à la vidéo je souhaite que le servo aille plus vite dans les grand mouvements; a la limite si l'ecart est grand peut etre que je peourrais essayer de le faire accelerer ! je pense que ca va servir a plusieurs personnes .

je le test in situ demain matin a la première heure !

ah j'oubliais il me faut encore faire la mise à l'échelle !

Oui Georges, la formule !! :cool: ; mais ca , c'est pour un cas bien linéaire, et ca ne tiens pas compte des éventuels simplification de calcul . car je préfère perdre en précision sur les mouvements de la caméra, et gagner en rapidité.
 

BESQUEUT

Senior Member
Petite modification : Cible plus précise, surtout à grande vitesse.
et moins de overhead quand le servo ne bouge pas.
Code:
	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
Oui, c'est bien le programme qui a servi à faire la vidéo.
Oui, la tolérance c'est la grandeur des petits mouvements non pris en compte.
Oui la vitesse, c'est la vitesse.
Les butées doivent tenir compte de la vitesse.


La vitesse dépends du temps de boucle (que vous n'avez pas donné...)
et donc de la vitesse du processeur. Il faudra donc ajuster en fonction de votre montage.
Peut-être prévoir un potar pour l'ajuster à la volée ?

La mise à l'échelle doit être compatible avec le headtracker, mais je ne connais pas les valeurs angulaires du servo, donc non défini pour le moment.

Les butées mini et maxi sont gérées : donc c'est inutile et inapproprié de faire ça avec la mise à l'échelle.
D'ailleurs vous pouvez voir que le potar envoie n'importe quoi entre 0 et 255 et pourtant le servo ne va pas en butée mécanique.
De cette façon, si vous changez le réglage du servo, il y a deux constantes à ajuster, et rien ni au niveau du headtracker, ni au niveau du joystick.
 
Last edited:

dje8269

Senior Member
mais je ne connais pas les valeurs angulaires du servo
Vous lachez rien !!!!

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
 

BESQUEUT

Senior Member
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
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.
Par contre, en immersion vidéo, l'angle de rotation doit correspondre..
La mise à l'échelle, c'est juste une multiplication. Fo pas exagérer...

Est-ce qu'on peut considérer que la course du servo est de 180° en heading ?
les butées seraient 50 et 250, ce qui m'étonne car mon servo bloque bien avant...
Valeur milieu vers 128 au lieu de 150 : vous confirmez ce décentrement ?
Pour 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

Pour les joysticks : butées à 30-230 et point milieu à 130 : ça au moins c'est simple.

Soit Atransmettre la valeur à transmettre sur un seul octet, et JoyH et JoyP les valeurs lues par readadc.

if JoyH>130 then
Atransmettre =JoyH-130*9/10

else
Atransmettre =130-JoyH*9/10
Atransmettre =-Atransmettre
endif

Pour éviter le overhead, atan2 peut être modifié pour donner des valeurs directement compatibles.

A la réception, soit Recu un des 2 octets reçus :
Cible=PointMilieu+Recu

Si vous trouvez plus simple, faites moi signe.

J'ai fait un autre essai avec setfreq em32 et sans pause.
et vitesse à 1.
C'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.
 
Last edited:

dje8269

Senior Member
Bonjour,

Allez je commence par vous répondre.

Est-ce qu'on peut considérer que la course du servo est de 180° en heading ?
Non pas tout à fait , je dirais plus 120°-140°

les butées seraient 50 et 250, ce qui m'étonne car mon servo bloque bien avant...
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 course

Valeur milieu vers 128 au lieu de 150 : vous confirmez ce décentrement ?
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) .

Mais c'est bon j'ai réussis a modifier votre programme pour arriver à mes fins. Ne vous tracasser pas avec ça , je vous ai assez embeter.

Pour le Pitch la course est forcément beaucoup moins que 180° ; combien ? Est-ce le même modèle de servo ?
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ême

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

Pour éviter le overhead
Qu'entendez vous par overhead ?

atan2 peut être modifié pour donner des valeurs directement compatibles.
Ca simplifierait la chose . mais la mise a l'échelle n'as plus de secret pour moi ( humour ironique)

C'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.
j'ai trouvé le bon compromis a testé en situation réel . mais pour moi on touche la perfection ....... Enfin presque

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)
 

dje8269

Senior Member
J'ai parlé trop vite .

C'est parfait , mais ca tourne a l'envers lol .

En fait quand je met le joysticka droite la valeur va bien de 130 à 230 , mais le servo lui doit allé de 150 à 50 . ( et non de 150 à 250) .

Ca c''est bon . par contre pour la partie tolerance j 'ai pas l'impression que ca fonctionne ; Je suis sur le pont , je vous post des que j'ai trouvé le probléme
 

BESQUEUT

Senior Member
Qu'entendez vous par overhead ?
C'est une expression courante en informatique pour "travail superflu".
Par exemple, c'est stupide de calculer un angle en degrés, pour le convertir un peu plus loin dans une autre unité.
==> autant le calculer directement dans la bonne unité !
 

dje8269

Senior Member
avec ca j'ai quelques bug , mais je comprends pas trop les blocages de la camera ; je pense peut etre a un truc hard

Code:
'------  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
J'ai pas réussis a adapter votre programme
 

dje8269

Senior Member
Avec toute la bonne volonté du monde ; Je crois qu'il y as un schisme dans votre programme ?? car je n'arrive pas a le faire fonctionner parfaitement !! . Vous allez me dire que c'est surement moi qui bug, et vous aurez peut etre raison .

Qu'est ce qui se passe exactement . la tolérance est bien bien prose en compte mais applique une erreur pour atteindre la valeur cible . En effet si vous mettez une tolérance de 10 ,Que vous etes a fond d'un cote , et que vous revenez vers le milieu donc vers 150, le servo va s'arrêter a 160 au lieu de 150 a cause de la tolérance ;

j'ai surement tort mais bon , j'y arrive pas depuis ce matin . je pense que ca ne se voyaois pas a l'oeil nu avec votre test, mais en affichant les valeurs on s'en rend compte
 

BESQUEUT

Senior Member
Votre analyse est correcte.
La tolérance est censée être petite, de sorte que ça n'ait pas une grosse importance. Si l'opérateur ne voit pas ce qu'il voudrait, il va tourner la tête ou pousser le joystick jusqu'à ce que ça soit bon. (En gros il va un poil au delà de ce qui est strictement nécessaire)
Si la tolérance est grande, il faudrait effectivement améliorer le programme pour que le servo continue vers la valeur cible moyenne.
A noter que plus la vitesse est grande, plus on s'approche de la valeur cible.

Par contre, ce programme est censé piloter le servo par une valeur angulaire.
Hors vous introduisez bien plus qu'une mise à l'échelle et des min max qui ne servent à rien.
Outre l'overhead, c'est possible que ça influe sur le comportement.
Si vous mettez tout ça en commentaire, ça donne quoi ?
Quels sont les paramètres de vitesse et de tolérance ?
 

dje8269

Senior Member
Bon j'en suis rendu la !

Mon choix pour le moment ce porte sur la solution de faciliter .

Un mouvement fluide , pas trop rapide, juste ce qu'il faut .

En fait votre programme avec les tolérances , créer artificiellement des paliers, que je voulais faire avec un select case ! un grand merci .

Vidéo a venir
Code:
'------  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
Un grand merci

PS : je me suis servis de f(x) = ax + b :cool:
 

dje8269

Senior Member
Bonjour à tous,

Je rencontre quelques difficultés pour "déparasité" mon véhicule. Je me tourne donc vers vous , pour savoir si vous aviez des suggestions , idées, conseils etc .... réalisable , pour me sortir de ce mauvais pas .

Les symptômes :

La nacelle vidéo tremble fortement , quand l'émetteur vidéo émet . Ça c'est ce que je voudrais empêcher ! Quand l'émetteur est éteint tout est opérationnel . tout fonctionne à merveille . Quand j'allume le TX , la nacelle vibre, et seulement la nacelle . les servos de direction et autres ne bougent pas( du moins c'est ce que j'observe, mais j'ai l'impression qu'il ramasse aussi car il font un tout petit bruit) .


Les solutions testé pour le moment :

- j'ai donc incriminer l'alimentation . en effet , en l'état une batterie lipo 3S , alimente l'électronique au travers d'un régulateur à découpage (5V) . aussi les servos ( 8 au total) , au travers un deuxième régulateur a découpage ( réglé à 6.5V) . et enfin le tx vidéo en direct sur la batterie commandé par le MOSFET canal N sur le schéma ;

J'ai débranché l'émetteur de la batterie et je l'ai alimenté par une alim de labo . tout seul . en mettant la masse en commun . même symptôme ca tremble .

J'ai débranche les servos de la camera, pour les mettre sur les broches de servo qui ne tremblent pas ( la direction en l'occurrence) ; et les servos tremblent toujours . Ce qui signifie que toutes la ligne de servo est impacter par ce phénomène. mais apparemment n'est visible qu'avec la nacelle ( les servos sont beaucoup plus petit).

J'ai essayé de découpler "encore" les servos directement au plus proches des connecteurs avec des condos de 2200µF , 1000µF et 220 µF sans résultat faramineux

Mes certitudes :

Quand le Tx est allumé ça déconne , sinon c'est parfait .

mes pistes :

problème d'alimentation
problème de masse
problème de parasite
problème de puissance d'émission


mes questions :

L'électronique se trouve dans un support en alu , avec un couvercle qui se rajoute par dessus ; est que je dois le mettre a la masse ?
Est il possible que l'émetteur rentre dans mes servos par le câblage de ceux-ci ? donc il faudrait les blinder ?
Des ferrites peuvent elles aider a résoudre le probléme au diminuer ces tremblements ?

Schéma vehicule reco.jpg
 

dje8269

Senior Member
Bonjour à tous,

Je viens vers vous pour savoir, si c'était faisable et quelle serait la meilleure facon, de faire une accélération continue et progressive sur les variables du motuer envoyées au SD20 .

En fait , le Véhicule étant très puissant , il se cabre si on accélère a fond . Bien évidemment je voudrais éviter cela ! mes antennes n'aiment pas du tout .

Je pensais faire comme cela, après une détection d'ecart de valeur trop grande au niveau du joystick, ( dans une condition si le véhicule est arreté), la valeur max serait "filtré" .
Cela implique le traitement de la valeur avant d'etre traité !!
Mon systéme de perte de communication , est plutôt efficace voir trop . Sur une surface dur ( comme le goudron) , si le véhicule freine , il fait un salto avant , a partir d'un certain vitesse ! je pense donc ralentir naturellement le vehicule en cas de perte de comme . l'arret se fera sur quelques mètres tout au plus .
 

BESQUEUT

Senior Member
Que ce soit pour des valeurs angulaires, ou des valeurs de vitesse, la bonne façon de ne pas avoir de mouvements trop brusques est de définir une valeur courante, une valeur cible et une vitesse de variation.
Pour simplifier, on va dire que la variation de vitesse est de 2 à chaque boucle (mais on mets ce qu'on veut)
Au début "cible" et "courant" sont égaux (à zéro à priori) et rien ne change.
Supposons que le joystick (ou le headtracker) demande une valeur 20.
Au lieu de mettre directement la vitesse à 20 (ou le servo à 20) on mets 20 dans la cible.
A chaque tour de boucle, et tant que "cible" est différent de "courant", on incrémente ou on décrémente la valeur courante de la vitesse.
Donc au bout d'une boucle, la valeur courante vaut 2, puis 4, puis 6 etc...
Evidemment, cette incrémentation s'arrête quand courant=cible=20, donc au bout de 10 boucles.

Notez qu'entre temps, "cible" peut avoir changé, par exemple 16 ou 22 et donc la valeur courante tends à se rapprocher de la cible, mais pas trop brusquement.

Pour ceux qui savent ce que c'est que l'équation du temps, notez que la variation de vitesse, ça s'appelle l'accélération. (le freinage, ou décélération est une accélération dans l'autre sens)
Si l'accélération est trop grande, c'est ça qui provoque les pirouettes du véhicule, (ou la nausée du pilote dans le cas du headtracker...)
Si vous mettez directement la vitesse à 20 (ou si vous passez de 20 à zéro) la variation de vitesse (=l'accélération) vaut 20, c'est à dire 10 fois trop...
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.

Les deux phénomènes à éviter sont le basculement et le dérapage, et les 2 sont directement liés à l'accélération (et pas à la vitesse !). Donc il existe un seuil optimal en dessous duquel le véhicule reste stable, et au dessus duquel soit le véhicule bascule, soit il dérape.
 
Last edited:

dje8269

Senior Member
Bonjour et merci a tous les deux pour vos réponses trés instructives .

je pense "en gros" , avoir compris le principe de moyenne glissante, je vais peaufiner mon étude avec wiki et autres , car je n'ai pas eu le temps de m'y jeter a fond( boulot chargé nuit avec bébé chargé) .

Deja , si c'est faisable c'est une bonne nouvelle .

Par contre je "tic" sur un truc . Pensez que ce soit faisable de faire " le moyennage" , seulement sur une plage de valeur . quand le véhicule est arrêté à une certaine valeur cible définis par des test .
Pour simplifier il faudrait faire cette moyenne , seulement quand l'utilisateur passe de 0 à "a fond" grosso modo . Le reste du temps il ne faut pas faire ce moyennage; ou alors on diminue la sensibilité pour garder la réactivité si j'ai bien compris .

Niveau du programme j'ai du temps de dispo , et des varibales de dispo. Je dis ca , car je suis toujours dans ma boucle de recetpion de donnée toutes les 40ms .

Pour la décélération, il ne faut pas de moyennage justement , car c'est mon arrêt d'urgence . Après des tests réels, si je freine le VHL , il fait une pirouette suivant la nature du sol et la vitesse a laquelle se produit le freinage . L e simple fait de couper le moteur suffit a ralentir plutot vite .

Merci de m'avoir lu , passez une bonne journée
 

PieM

Senior Member
je pense "en gros" , avoir compris le principe de moyenne glissante
Sauf que ça n'a rien à voir avec une moyenne glissante comme indiqué dans le graphique joint dans le post indiqué.
Donc le mieux est de faire des tests pratiques pour voir la réponse du système en fonctions du matériel.
Inutile donc de se lancer dans une étude poussée qui supposerait une approche mathématique assez complexe.

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 ?
 

dje8269

Senior Member
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 ?
Je suis pas sur d'avoir compris ta question .

En fait il ne faut plus parler de freinage . car il est trop brutale, et risque d'abimer le véhicule . lors du freinage la décélération est trop forte . Le simple fait de lâcher les gaz suffit largement, car il est lourd mine de rien . Par contre , à l'inverse, il faut gérer l'accélération, pour ne pas le faire se cabrer, mais accélérer fort quand même .

Je devrais donc trouver ( par test) , la valeur a laquelle il se cabre, en partant de la vitesse " Arret" ou nul . Je ne vois pas comment on peut faire, ca juste au démarrage et pas après ! Je vais prendre un peu de temps pour y reflechir .

@PieM : tu as toujours ta formule magique, pour une courbe de réponse en "S" . car elle m'intéresse aussi pour la direction. Car j'ai aussi un problème a ce niveau la . si on va trop vite, et qu'on tourne , le vehicule par en tonneau assez facilement . mais ce sera un autre probléme .
 

PieM

Senior Member
regarde les courbes rouges et vertes sur mon exemple dans le cas réponse à un échelon. Un échelon, c'est une variation brutale de la consigne. Tu vois que la commande augmente progressivement, et qu'elle diminue assez rapidement.
C'est la même chose que si tu avais un réseau RC analogique.
Pour la courbe en S, faut retrouver le post... Elle sera symétrique ?
 

BESQUEUT

Senior Member
Houlà...
Manifestement, la cinématique et vous ça fait deux... ou trois...
Pas besoin de courbes alambiquées :
La vitesse varie de façon linéaire : c'est une droite.
L'accélération est une constante, dans un sens comme dans l'autre.
Il y a un seul chiffre à définir : la limite d'accélération à partir de laquelle le bidule bascule ou patine.
L'accélération à utiliser est donc un peu en dessous de ce seuil.
A priori, ça doit être pratiquement la même chose à l'accélération et au freinage(ou ralentissement, ou décélération, c'est physiquement la même chose) (tout simplement parce que les roues ont la même adhérence dans les 2 cas, et que les masses sont à peu près centrées au milieu du véhicule)
Mais si aux essais c'est différent, alors il y a 2 chiffres et c'est tout.

Par contre, pour le virage, la force centrifuge, responsable du basculement, dépends de la vitesse réelle du véhicule et du rayon de braquage, mais pas directement de la vitesse à laquelle on tourne le volant.
Donc si vous souhaitez éviter que le véhicule bascule, il faut simplement limiter l'angle de braquage (la limite de course du servo) en fonction de la vitesse.
Au ralenti, vous pouvez braquer à fond sans risque.
A pleine vitesse, tourner les roues de quelques degrés peut provoquer le basculement.
Mais vous pouvez manoeuvrer la direction de façon très brutale sans aucun risque tant que vous ne vous écartez pas trop de la position centrale.
 
Last edited:

dje8269

Senior Member
Bonjour à tous ,

Toujours la tête dans le guidon, j'essaye de finaliser le projet. enfin , j'espere !!! ; ( je mettrais photo et vidéo trés bientôt)

Je bloque sur mon problème de limitation du moteur . je suis pas contre un petit coup de main au niveau du code , car la je patauge . J'ai bien essayé avec ma méthode ( calculé un delta et limité la valuer , si la différence est trop élevée ), mais ce n'est vraiment pas terrible . Je pense que je suis sur la mauvaise idée .

J'avoue ne pas avoir tout compris a tes calculs PieM ; Je suis pas contre un bout de code, car je sature la !

Comme ça fait longtemps je repose les bases ! .

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é .

Grosso modo il faut l'empêcher de se retourner si la personne passe de 0 à "a fond" , mais en gardant de la nervosité quand même ; Mais aussi de pouvoir accélérer directement a fond si le vhl n'est pas a l'arrêt ;

Par la même occasion , la deuxième cause de retournement du VHL , est le fait que la personne recule et passe en "marche avant" , tout pendant que le VHL recule . Ce qui as pour effet , de le faire se cabrer et retourner .
je recherche actuellement, la possibilité de faire une pause entre marche arrière et marche avant . Je m'explique . quand on avance , le fait de passer en marche arrière "freine" le vhl . il faut relâché la commande puis RE-passé en marche arrière pour reculer ; cette Option très utile ( bien utilisé car sur goudron le vhl fait un salto si on va trop vite), est réalisé par le controleur du moteur . Je souhaiterais faire la même chose mais en marche avant .

Il y as donc deux problèmes liés a la commande du moteur . Temporisé le fait de passer de marche arrière en marche avant . Et "lisse" la courbe d'accélération quand celle-ci est trop raide ! .

Voici les lignes de codes concerné. Je vous mets pas tout le programme mais laisse le début pour ne rien oublié .

Code:
#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
 

BESQUEUT

Senior Member
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é .
L'accélération (comme le "freinage") est une constante.
Limiter l'accélération, c'est juste dire qu'elle ne doit pas être supérieure à une valeur a définir par essai.
Si le véhicule bascule pour A=200, alors il suffit de prendre A=190 et le véhicule ne basculera plus.

La "courbe" de l'accélération est triviale : c'est une droite horizontale.
Je ne vois pas ce qu'on peut "lisser" ou "filtrer".

C'est quoi la "valeur reçue" ? (dans cette phrase.)
 

dje8269

Senior Member
Je pênse qu'il y a confusion entre vous et moi , sur les termes. Je suis certains que vous etes dans le vrai, car mon niveau ne me permet pas d'affirmer quoi que ce soit dans ce domaine .

Ce que vous appelez accélération n'est pas ça pour moi . Pour moi vous parlez de vitesse max . J'entends par accélération le temps qu'on met pour atteindre un vitesse B en partant d'une vitesse A . Pour moi ce n'est pas une constante, car on peut accoler doucement ou fort pour atteindre la vitesse max .

En disant que je cherche a limiter l'acceleration, c'est que si pour atteindre B en partant de A je met une seconde, et que le VHL se cabre , il faut rendre impossible le fait d'atteindre B en partant de A en moins de une seconde.

POur rester dans le concret .

Au point mort = vitesse nul . la valeur reçue est de 125/127 appelons la A( comme indiqué en commentaire dans le programme) .
L'ordre de vitesse reçu, a atteindre pour une valeur max est de 35/36 appelons le B.( vitesse max ).

Donc quand je part De A vers B d'un seul coup , la voiture se retourne; Maintenant j'aimerais atteindre B plus "lentement", pour éviter le retournement . avec des espèces de paliers en gros .

au lieu de 125 ----> 35
il faudrait quelques choses ru genre :

125---> 100 ---> 85 ---> 60 ---> 35 . ainsi on atteindrais la valeur max , mais sans retourner la voiture; on "ralentie" , "l'acceleration " lol .
 

BESQUEUT

Senior Member
L' accélération
est l'augmentation de vitesse par unité de temps.
Comme est la vitesse est la distance parcourue par unité de temps (par exemple des mètres par seconde, ou des kilomètres par heure)
donc
l'accélération est la distance parcourue par unité de temps et (encore) par unité de temps.

L'accélération s'exprime en mètres par seconde par seconde (ou en kilomètre par heure par seconde par exemple).

Supposons un véhicule à l'arrêt.
On accélère constamment de 1km/h a chaque seconde.
Au bout de 2 secondes, le véhicule avance a 2 km/h. Au bout de 20s ==> 20km/h etc...
On est bien d'accord, l'accélération est une constante=1km/h/s

Reprenons du début, (depuis l'arrêt) avec un véhicule plus puissant (ou en appuyant plus sur le champignon).
Disons que ça pousse à 10km/h/s
Au bout de 2 secondes, on est à ....
bravo : 20 km/h
et donc au bout de 20s : 200 km/h

Ça pousse très fort là !

Que se passe-t-il si l'accélération vaut 100 km/h/s ?
Soit c'est un Dragster est c'est à la limite possible pendant quelques centaines de mètres, (530 km/h au bout de 400m !)
Soit la voiture bascule vers le haut et se retourne (voir les petites roulettes derrière les dragsters...)
Soit les pneus dérapent...

Le freinage, c'est la même chose dans l'autre sens, et ça s'exprime exactement avec les mêmes unités. Par commodité, on utilise des valeurs négatives.
Dire qu'un engin accélère de -10 km/h/s, c'est dire qu'il freine de 10 km/h/s
Autrement dit, s'il roule à 40 km/h, il lui faudra 4s pour se retrouver à l'arrêt.

L'intérêt de tout ça c'est que (mais je ne vais pas faire la démonstration...)
les limites physiques (retournement ou dérapage) sont directement liées à cette fameuse accélération.

Un véhicule ne va pas plus cabrer à 10 ou à 50 km/h
Il va cabrer pour une accélération donnée : par exemple 50 km/h/s
A 49 km/h/s ça passe ... les suspensions avant sont complètement détendues. La direction est improbable... mais ça ne lève pas...
A 51 ou plus, c'est le retournement garanti.

Autre lien "intuitif" l'accélération c'est en gros le nombre de centimètres enfoncés sur l'accélérateur, ou l'angle tourné sur la poignée des gaz d'une moto.

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 déjà à 50 km/h au moment où la gars mets la "poignée dans le coin".

Est-ce plus clair ?
 
Last edited:

dje8269

Senior Member
Tout d'abord merci de toutes ces précisions . j'y vois effectivement plus clair .

Je suis finalement pas d'accord sur votre toute dernière phrase , ou du moins , ce que vous marquez est vrai, mais je ne souhaite pas cela .

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 on met une butée , on en pourras jamais atteindre la vitesse max .

Mon but n'est pas d'empêcher que l'on puisse mettre les gaz a fond d'un seul coup( avec une butée) . Mon but est d'empêcher que la mise a fond des gaz d'un seul coup , provoque une accélération soudaine . Il faudrait donc interpréter la mise a fond des gaz d'un seul coup, comme un cas particulier et agirait lentement sur l'accélérateur .
 

BESQUEUT

Senior Member
Si on met une butée , on en pourras jamais atteindre la vitesse max .
Si la butée est à disons 20km/h/s
Çà veut dire qu'il faudra 5s pour atteindre 100 km/h et 10s pour 200km/h
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...)

Il me semble que c'est exactement ce que vous souhaitez.


Mais il y a effectivement une limite à cette approche liée au "en gros" de mon post précédent...
Au delà d'une certaine vitesse, le fait d'ouvrir de plus en plus les gaz ne provoque plus autant d'accélération qu'au début.
C'est du au différents frottements, par exemple celui de l'air sur la carrosserie.
Cette force contre productive est elle-même proportionnelle à la vitesse et donc se soustrait à l'accélération théorique (dans le vide).

Notez (comme dit plus haut) que sans ça une 2Cv atteindrait sans problème les 500 km/h
En fait, dès 100 km/h le moteur suffit tout juste à contrer le freinage de l'air.
Mathématiquement, l'accélération liée au moteur est égale au signe près à la décélération due aux frottements.

Dans votre cas, ça veut dire que théoriquement l'accélération devrait être égale à la position de l'accélérateur, mais qu'en fait il faut lui soustraire une part de la vitesse.

La difficulté est qu'à ma connaissance, on ne connait pas la vitesse du véhicule a un moment donné.
Si vous avez une façon (même approximative) de mesurer la vitesse, alors il suffit que la butée soit proportionnelle à la vitesse.
Et donc oui, on pourra vraiment "mettre à fond" sans que le bidule ne se retourne.

mais sinon, un réglage qui marchera a petite vitesse, ne serait pas bon si le véhicule est déjà lancé, Vous ne trouverez aucune "courbe" si elle ne tient pas compte de la vitesse réelle du véhicule.
 
Last edited:

dje8269

Senior Member
Bon ben alors j'ai pas compris ! autant pour moi

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 ?

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...)
Effectivement c'est exactement ce que je souhaite .
 

BESQUEUT

Senior Member
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 .
Nos posts se sont croisés... j'étais en cours d'édition. Lisez la fin...
 
Top