Table des matières:

Comprendre le mixage des canaux : 4 étapes (avec photos)
Comprendre le mixage des canaux : 4 étapes (avec photos)

Vidéo: Comprendre le mixage des canaux : 4 étapes (avec photos)

Vidéo: Comprendre le mixage des canaux : 4 étapes (avec photos)
Vidéo: LES 5 FONDAMENTAUX DU MIXAGE - La balance / L'équilibre Spectral - Part 1 2024, Novembre
Anonim
Image
Image
Méthode de mélange » Aucun
Méthode de mélange » Aucun

Si vous avez déjà piloté un châssis télécommandé, il y a de fortes chances que vous ayez utilisé le mixage, même si vous ne le saviez pas. Plus précisément, si vous avez utilisé un seul joystick ou un seul cardan pour contrôler un véhicule qui utilise une direction à glissement ou une direction différentielle, vous avez utilisé le mixage.

Le mixage est simplement la façon dont les données de votre joystick sont utilisées pour déterminer la quantité d'énergie à fournir de chaque côté du châssis.

Si vous ouvrez un joystick, vous verrez généralement deux potentiomètres à l'intérieur. Un pour mesurer votre position actuelle le long de l'axe Y (haut et bas), et l'autre pour mesurer où vous vous trouvez le long de l'axe X (côté à côté).

Bien que je n'aie aucune formation formelle sur le sujet, j'ai dû faire du mixage dans le code auparavant et récemment, j'ai voulu approfondir un peu le sujet.

Tout d'abord, je tiens à noter que la plupart des émetteurs RC ont une capacité de mixage, tout comme de nombreux contrôleurs de moteur. Cette information va être très utile si vous devez faire le mixage vous-même dans votre code. Dites par exemple si vous utilisez un Arduino pour lire des données non mélangées à partir d'un récepteur RC, ou si vous lisez des données analogiques à partir des pots d'un joystick, ou si vous lisez les coordonnées d'un joystick numérique sur une application mobile.

Jetons un coup d'œil à différentes approches de mixage.

Étape 1: Méthode de mélange » Aucun

Voyons d'abord ce qui se passe si vous n'utilisez pas du tout le mixage. Si vous envoyez simplement les données d'un axe d'un côté du châssis et de l'autre axe de l'autre côté, votre véhicule ne réagira pas comme vous le souhaitez.

Par exemple, si vous poussez le joystick tout droit vers l'avant, l'axe Y est à plein régime et l'axe X est à 0. Ainsi, vous tourneriez en rond au lieu d'aller tout droit.

Étape 2: Méthode Méthode » Rotation

Méthode Méthode » Rotation
Méthode Méthode » Rotation

Un collègue m'a fait remarquer une fois que, à la rigueur, vous pouvez faire pivoter votre émetteur de 45 degrés pour un mélange de pauvres. Si vous pensez aux valeurs des deux potentiomètres d'un joystick comme étant l'axe x et y sur une grille (avec les deux axes s'étendant de -100 à +100), cela a beaucoup de sens car vous allez à +100 sur les deux axes lorsque vous poussez le joystick vers le haut et vers la droite. Donc, si cela correspond directement à vos deux canaux de châssis (les côtés gauche et droit de votre robot), cela ferait avancer votre robot.

Ainsi, la première méthode de mélange que j'ai jamais essayée était de faire pivoter mathématiquement les coordonnées x et y de 45 degrés autour du point central de la grille.

Cela fonctionne bien, mais je ne peux pas avancer avec une puissance de 100% car lorsque vous tournez, le mouvement global est limité à un cercle dans la grille, ce qui signifie que vous ne pouvez jamais vraiment entrer dans ce coin supérieur droit.

Il en résulte également que les coins de la grille ne sont pas utilisés. Ce n'est pas un problème si vous utilisez un joystick/gimple qui limite votre mouvement afin que ces zones ne soient jamais atteintes de toute façon, mais sinon vous voudrez que cette partie de la grille fasse quelque chose pour que vos mouvements soient complètement proportionnels.

Si vous êtes un apprenant visuel comme moi, ce concept pourrait être plus facile à comprendre en regardant la vidéo au début de cette instructable.

Regardons quelques exemples de code.

REMARQUES SUR MES EXEMPLES DE CODE: Je laisse de côté la façon dont vous obtenez les valeurs joystick_x et joystick_y car cela changerait en fonction de votre projet. De plus, je vais mapper/contraindre à ±100 mais vous devrez probablement mapper à 1000 - 2000 pour PWM ou 0 - 255 pour la sortie analogique, etc. Je contraint toujours… juste au cas où.

Exemple Arduino:

// rotation mathématique

double rad = -45*M_PI/180; int leftThrottle = joystick_x * cos(rad) - joystick_y * sin(rad); int rightThrottle = joystick_y * cos(rad) + joystick_x * sin(rad); //Contrainte LeftThrottle = constrain(leftThrottle, -100, 100); rightThrottle = contraindre (rightThrottle, -100, 100);

Exemple JavaScript:

//rotation mathématique var rad = -45*Math. PI/180; leftThrottle = joystick_x * Math.cos(rad) - joystick_y * Math.sin(rad); rightThrottle = joystick_y * Math.cos(rad) + joystick_x * Math.sin(rad);//constrainleftThrottle = constrain(leftThrottle, -100, 100);rightThrottle = constrain(rightThrottle, -100, 100); //helper functionvar contrainte = function(num, min, max){ return Math.min(Math.max(num, min), max); };

Étape 3: Méthode Méthode » Simple

Méthode Méthode » Simple
Méthode Méthode » Simple

Ensuite, nous avons une équation très simple que j'ai d'abord tirée d'une des vidéos de Shawn Hymel Adventures in Science SparkFun où il travaillait sur un projet très similaire à celui sur lequel je travaillais.

Cette équation vous permet d'atteindre la vitesse maximale lorsque vous avancez, mais tout comme la méthode de rotation, elle ne tient pas compte des coins de la grille. En effet, dans certains cas, le maximum est de 100 et dans certains cas, le maximum est de 200. Vous utiliseriez donc une fonction de contrainte pour ignorer tout après 100.

Et au fait, je n'appelle pas cela simple de manière péjorative… il y a une beauté dans la simplicité.

Exemple Arduino:

int leftThrottle = joystick_y + joystick_x;

int rightThrottle = joystick_y - joystick_x; //Contrainte LeftThrottle = constrain(leftThrottle, -100, 100); rightThrottle = contraindre (rightThrottle, -100, 100);

Exemple JavaScript:

var leftChannel = joystick_y + joystick_x;

var rightChannel = joystick_y - joystick_x;//constrain leftChannel = constrain(leftChannel, -100, 100); rightChannel = contraindre (rightChannel, -100, 100); //helper functionvar contrainte = function(num, min, max){ return Math.min(Math.max(num, min), max); };

Étape 4: Méthode Méthode » Proportionnelle

Méthode Méthode » Proportionnelle
Méthode Méthode » Proportionnelle

Je suis parti de la méthode simple en espérant tirer le meilleur parti de l'équation des deux mondes. L'idée ici est d'être entièrement proportionnelle dans toutes les directions, même en diagonale, même si vous vous déplacez sur une plus grande distance, elle a la même portée que lorsque vous vous déplacez verticalement, ce qui est une distance plus petite.

Vous vous retrouvez avec une échelle de -200 à +200 dans toutes les directions dans mes exemples. cas pour votre contrôleur de moteur. Par exemple, si vous envoyez un signal PWM, vous pouvez le mapper sur 1000 à 2000 ou si vous envoyez un signal analogique, vous pouvez le mapper sur 0-255 et définir la direction comme booléenne, etc.

Exemple Arduino:

int leftThrottle = joystick_y + joystick_x;

int rightThrottle = joystick_y - joystick_x;// dans certains cas le max est de 100, dans certains cas il est de 200 // prenons en compte la différence donc le max est toujours de 200 int diff = abs(abs(joystick_y) - abs(joystick_x));leftThrottle = leftThrottle < 0 ? leftThrottle - diff: leftThrottle + diff;rightThrottle = rightThrottle < 0 ? rightThrottle - diff: rightThrottle + diff; //Carte de ±200 à ± 100 ou quelle que soit la plage dont vous avez besoinleftThrottle = map(leftThrottle, 0, 200, -100, 100);rightThrottle = map(rightThrottle, 0, 200, -100, 100); //constrainleftThrottle = constrain(leftThrottle, -100, 100);rightThrottle = constrain(rightThrottle, -100, 100);

Exemple JavaScript:

var leftThrottle = joystick_y + joystick_x;var rightThrottle = joystick_y - joystick_x;// dans certains cas, le maximum est de 100, dans certains cas, il est de 200, // prenons en compte la différence afin que le maximum soit toujours de 200 var diff = Math.abs(Math.abs(joystick_y) - Math.abs(joystick_x));leftThrottle = leftThrottle < 0 ? leftThrottle - diff: leftThrottle + diff;rightThrottle = rightThrottle < 0 ? rightThrottle - diff: rightThrottle + diff;//Map de ±200 à ±100 ou tout ce dont vous avez besoinleftThrottle = map(leftThrottle, -200, 200, -100, 100);rightThrottle = map(rightThrottle, -200, 200, -100, 100); //Contrainte leftThrottle = constrain(leftThrottle, -100, 100);rightThrottle = constrain(rightThrottle, -100, 100);//certaines fonctions d'assistancevar constrain = function(num, min, max){ return Math.min(Math. max(nombre, min), max); }; var map = function(num, inMin, inMax, outMin, outMax){ var p, inSpan, outSpan, mappé; inMin = inMin + inMax; num = num + inMax; inMax = inMax + inMax; inSpan = Math.abs(inMax-inMin); p = (num/inSpan)*100; outMin = outMin + outMax; outMax = outMax + outMax; outSpan = Math.abs(outMax - outMin); mappé = outSpan*(p/100) - (outMax/2); return mappé;};

Conseillé: