Table des matières:
- Étape 1: Méthode de mélange » Aucun
- Étape 2: Méthode Méthode » Rotation
- Étape 3: Méthode Méthode » Simple
- Étape 4: Méthode Méthode » Proportionnelle
Vidéo: Comprendre le mixage des canaux : 4 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
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
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
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
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é:
Table de mixage Birth of Man : 12 étapes (avec photos)
Table de mixage Birth of Man : Depuis le début des temps, l'humanité a cherché deux choses, la première étant sa place dans l'univers et l'autre étant une simple table de mixage audio qui remue facilement les gros beats. La table de mixage Birth of Man accomplit ces deux tâches
Bases du moteur - Concept Super facile à comprendre avec une expérience : 7 étapes (avec photos)
Bases du moteur | Concept super facile à comprendre avec une expérience : dans ce instructable, je vais vous expliquer le principe fondamental sous-jacent des moteurs. Tous les moteurs qui nous entourent fonctionnent sur ce principe. Même les générateurs travaillent sur l'énoncé réciproque de cette règle. Je parle du Fleming's Left-Hand Ru
Télécommande sans fil utilisant le module 2.4Ghz NRF24L01 avec Arduino - Nrf24l01 4 canaux / 6 canaux émetteur-récepteur pour quadrirotor - Hélicoptère Rc - Avion Rc utilisant Arduino: 5 étapes (avec photos)
Télécommande sans fil utilisant le module 2.4Ghz NRF24L01 avec Arduino | Nrf24l01 4 canaux / 6 canaux émetteur-récepteur pour quadrirotor | Hélicoptère Rc | Avion Rc utilisant Arduino: Pour faire fonctionner une voiture Rc | Quadricoptère | Drone | Avion radiocommandé | Bateau RC, nous avons toujours besoin d'un récepteur et d'un émetteur, supposons que pour RC QUADCOPTER nous ayons besoin d'un émetteur et d'un récepteur à 6 canaux et que ce type de TX et RX soit trop coûteux, nous allons donc en faire un sur notre
Bricolage d'une sirène de raid aérien avec des résistances, des condensateurs et des transistors : 6 étapes (avec photos)
Bricolage d'une sirène Air Raid avec des résistances, des condensateurs et des transistors: Ce projet de bricolage Air Raid Siren abordable convient à la recherche d'un circuit d'auto-oscillation composé uniquement de résistances, de condensateurs et de transistors qui peuvent enrichir vos connaissances. Et il convient à l'éducation à la défense nationale pour les enfants, en
Comprendre le protocole IR des télécommandes de climatiseur : 9 étapes (avec photos)
Comprendre le protocole IR des télécommandes de climatiseur : J'apprends les protocoles IR depuis un certain temps maintenant. Comment envoyer et recevoir des signaux IR. À ce stade, la seule chose qui reste est le protocole IR des télécommandes AC. Contrairement aux télécommandes traditionnelles de presque tous les appareils électroniques (disons un téléviseur) où