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

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    août 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : août 2019
    Messages : 2
    Points : 1
    Points
    1

    Par défaut 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.

    Nom : 6PHk2JT.jpg
Affichages : 46
Taille : 28,0 Ko

    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 Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    3 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 3 876
    Points : 9 436
    Points
    9 436

    Par défaut

    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
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2018
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2018
    Messages : 46
    Points : 71
    Points
    71

    Par défaut

    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:
    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
    Homme Profil pro
    Développeur .NET
    Inscrit en
    août 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : août 2019
    Messages : 2
    Points : 1
    Points
    1

    Par défaut

    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

Discussions similaires

  1. faire pourcentage avec deux int
    Par xduris dans le forum java.util
    Réponses: 4
    Dernier message: 26/06/2008, 10h00
  2. Champs Pourcentage avec 2 décimales derrière la virgule
    Par Lorenzogazier dans le forum IHM
    Réponses: 4
    Dernier message: 26/02/2008, 14h30
  3. Pourcentage avec SQL
    Par ade94 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 25/07/2007, 13h27
  4. Clavier avec Joystick-souris intégré
    Par kevain_09 dans le forum Windows XP
    Réponses: 1
    Dernier message: 29/06/2007, 13h08
  5. Pourcentage avec deux chiffres après la virgule
    Par Oluha dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/03/2005, 13h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo