Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

Mixage pourcentage avec joystick


Sujet :

Mathématiques

  1. #1
    Nouveau Candidat au Club
    Mixage pourcentage avec joystick
    Bonjour a tous,

    Je viens vers vous car je bloque sur un algo que j’ai besoin pour le développement d’une application pour mon entreprise.

    Je développe un programme en C# avec GUI en WPF, qui sert au pilotage radio commandée d’un engin de chantier.

    Je bloque sur l’algo qui me sert a piloter les tracks (chenilles) de l’engin à l’aide d’un (Et un seul) joystick.

    Pour que vous compreniez mieux ma requête je vous joins ci dessous un petit schéma qui peu simplifier ma demande.

    chenille A = gauche et chenille B = droite.



    En partant du principe que ceci représente la vue de haut de mon joystick analogique.

    Lorsque je ne touche pas a mon joystick, je suis au centre du carré en pointilliez, toute mes vitesses sont a 0% sur les deux chenilles de l’engin.

    0 -> 100% la chenille avance.
    0 -> -100% la chenille recule.

    Lorsque je pousse mon joystick en avant tout droit, zone bleu ciel, mes deux chenilles vont en avant, vitesse progressive de 0 a 100%, en inversement, lorsque je vais en arrière a fond, zone sans couleur, je vais en vitesse max en arrière -100%.

    Lorsque je vais à droite a fond droit, la chenille droite va a vitesse -100% en arrière et la gauche a la vitesse 100% en avant, pour une rotation sur place vers la droite, en inversement vers la gauche, pour une rotation vers la gauche sur place.

    Lorsque je position mon joystick dans une angle, je dois effectué une “rotation bloqué”, c’est a dire, une chenille a 100% et l’autre a 0% ou une a -100% et l’autre a 0% suivant si je veut avoir une rotation vers l’avant ou l’arrière.

    Le soucis es que je ne sais pas comment effectuer les mediate de ces valeurs, nous somme persuader qu’il existe un calcul mathématique ou un algorithme qui nous permettrai de réaliser cette opération mais nous somme arriver de nos capacité.

    Si vous pouvez nous aider dans la réalisation de cette tache, cela nous serait d’une trés grande aide.

    En vous remerciant par avance.

    Bien cordialement.

    Ludo.

  2. #2
    Expert éminent sénior
    Bonjour

    Mais quel joyeux désordre !

    Les échelles ne sont pas linéaires et les comportements sont "à la carte" .

    La valeur de B est symétrique de la valeur de A par rapport à la verticale du milieu. Tu permettras donc qu'on ne traite que la valeur de A. (si A=f(x,y), alors B=f(-x;y), (0;0) étant au centre bien sur. )

    Pour la valeur de A, ce n'est pas gagné.
    Sur la partie droite, elle est constante horizontalement et linéaire sur la verticale (de -100 à 100).
    Sur la gauche, il faut faire une moyenne pondérée des 4 points extrêmes du quadrant. (nota bene: sur la diagonale, A=0 )

    D'ailleurs, si tu fais un barycentre des 4 points extrêmes pour les 4 quadrants, cela marchera.

    En clair, pour ton point jaune, l'abscisse est à 33% entre 0 et 100, en bas, donc 33. L'abscisse est à 33% entre 100 et 100, en haut, donc 100. L'ordonnée est à 50% entre 33% et 100% que nous venons de calculer, soit (100+33)/2=66.5. Donc A=66.5%.

    Calculons B car c'est plus rigolo de l'autre côté.
    L'abscisse est entre 0 et -100 soit -33 en bas. Mais entre 100 et 0 en haut, soit 66. Donc la valeur finale est B=(66-33)/2=16.5. Résultat peu étonnant car proche de la diagonale nulle.

    Je me demande si un tel engin est facilement manœuvrable.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre régulier
    Bonjour,

    Voici un autre raisonnement qui donne un résultat plus simple (mais pas forcément mieux, à toi d'en juger ).

    Je me base sur la logique suivante:
    - L'axe Y représente la vitesse de déplacement du véhicule. On aimerait donc qu'il soit proportionnel à la moyenne des deux chenilles: (A + B) / 2
    - L'axe X représente la vitesse de rotation du véhicule. On aimerait donc qu'il soit proportionnel à la différence des deux chenilles: A - B
    En résolvant donc:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    Y = (A + B) / 2
    X = (A - B) / 2 <- /2 pour simplifier le résultat

    on obtient:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    A = Y + X
    B = Y - X


    Voilà, tout serait donc parfait, on respecterait les point N, E, S et O du joystick. Sauf que dans les coins, on a (A, B) = (±200, 0) ou (0, ±200). En effet, on est obligé de dépasser 100 pour "maintenir" la vitesse en tournant à la vitesse maximale.
    On doit donc limiter les valeurs A et B entre -100 et 100, et on obtient donc:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    A = restriction(Y + X)
    B = restriction(Y - X)

    avec restriction qui donne 100 si c'est plus de 100 et -100 si c'est moins de -100.
    Et on obtient les valeurs que tu demandes pour les 8 points extrêmes.

    Mais le résultat n'est pas le même que Flodelarab dans la mesure où cela donne, pour le point donné en exemple (A, B) = (88, 17) au lieu de (66.5, 17)

  4. #4
    Nouveau Candidat au Club
    Bonjour messieurs,

    Tout d’abord merci de vos réponses rapides !! J’ai poser cette question le premier jour de mes vacances et me revoilà donc 15 jours plus tard

    Sans vouloir vous mentir... au premier regards je ne comprends pas trop les réponses, mais je vais approfondir ma recherche et mes essais avec vos réponses et vous fait un retour dans les plus brefs délais !

    Ludo