Inhoudsopgave:
- Stap 1: Mengmethode » Geen
- Stap 2: Methode Methode » Roteren
- Stap 3: Methode Methode » Eenvoudig
- Stap 4: Methode Methode » Proportioneel
Video: Kanaalmixen begrijpen: 4 stappen (met afbeeldingen)
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
Als je ooit een chassis met afstandsbediening hebt bestuurd, is de kans groot dat je mixen hebt gebruikt, zelfs als je het niet wist. In het bijzonder, als je een enkele joystick of gimble hebt gebruikt om een voertuig te besturen dat gebruik maakt van slipbesturing of differentieelbesturing, heb je mixen gebruikt.
Mixen is gewoon hoe de gegevens van uw joystick worden gebruikt om te bepalen hoeveel vermogen aan elke kant van het chassis moet worden geleverd.
Als je een joystick opent, zie je over het algemeen twee potentiometers erin. Een om uw huidige positie langs de Y-as te meten (omhoog en omlaag), en de andere om te meten waar u zich bevindt langs de X-as (van links naar rechts).
Hoewel ik geen formele opleiding over dit onderwerp heb, heb ik al eerder code moeten mixen en onlangs wilde ik wat dieper in het onderwerp duiken.
Ten eerste wil ik opmerken dat de meeste RC-zenders mengmogelijkheden hebben, net als veel motorcontrollers. Deze informatie zal het nuttigst zijn als u zelf het mixen in uw code moet doen. Zeg bijvoorbeeld of u een Arduino gebruikt om ongemengde gegevens van een RC-ontvanger te lezen, of u leest analoge gegevens uit de potten in een joystick, of als u de coördinaten leest van een digitale joystick op een mobiele app.
Laten we eens kijken naar enkele verschillende mengmethoden.
Stap 1: Mengmethode » Geen
Laten we eerst eens kijken wat er gebeurt als je helemaal niet mixt. Als u alleen de gegevens van de ene as naar de ene kant van het chassis stuurt en de andere as naar de andere kant, zou uw voertuig niet reageren zoals u dat wilt.
Als u bijvoorbeeld de joystick helemaal recht naar voren duwt, staat de Y-as op vol gas en de X-as op 0. U rijdt dus in cirkels in plaats van rechtdoor.
Stap 2: Methode Methode » Roteren
Een collega wees me er ooit op dat je in een mum van tijd je zender 45 graden kunt draaien voor een armzalige mix. Als je de waarden van de twee potentiometers in een joystick beschouwt als de x en y-as op een raster (met beide assen die zich uitstrekken over -100 tot +100), is dit heel logisch omdat je op beide assen naar +100 gaat terwijl u de joystick omhoog en naar rechts duwt. Dus als dit rechtstreeks wordt toegewezen aan uw twee chassiskanalen (de linker- en rechterkant van uw robot), zou uw robot vooruit gaan.
Dus de eerste mengmethode die ik ooit heb geprobeerd, was om de x- en y-coördinaat wiskundig 45 graden rond het middelpunt van het raster te draaien.
Dit werkt goed, maar ik kan niet met 100% kracht vooruit gaan, want als je draait, is de algehele beweging beperkt tot een cirkel binnen het raster, wat betekent dat je nooit echt in die rechterbovenhoek kunt komen.
Hierdoor worden ook de hoeken van het raster niet benut. Dit is geen probleem als je een joystick/gimple gebruikt die je beweging beperkt, zodat die gebieden sowieso nooit worden bereikt, maar anders wil je dat dat deel van het raster iets doet zodat je bewegingen volledig proportioneel aanvoelen.
Als je een visuele leerling bent zoals ik, is dit concept misschien gemakkelijker te begrijpen door de video aan het begin van dit instructable te bekijken.
Laten we eens kijken naar enkele codevoorbeelden.
OPMERKINGEN OVER MIJN CODEVOORBEELDEN: Ik laat weg hoe u de joystick_x- en joystick_y-waarden krijgt, aangezien dit zou veranderen afhankelijk van uw project. Ik zal ook in kaart brengen / beperken tot ± 100, maar je moet waarschijnlijk toewijzen aan 1000 - 2000 voor PWM of 0 - 255 voor analoge uitvoer enz. Ik beperk altijd … voor het geval dat.
Arduino-voorbeeld:
//wiskundig roteren
dubbele 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); // constrain leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = beperken (rightThrottle, -100, 100);
JavaScript-voorbeeld:
//wiskundig roterendevar 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 constrain = function (num, min, max) {return Math.min (Math.max (num, min), max); };
Stap 3: Methode Methode » Eenvoudig
Vervolgens hebben we een heel eenvoudige vergelijking die ik voor het eerst heb opgepikt uit een van Shawn Hymel's Adventures in Science SparkFun-video's waar hij toevallig aan een zeer vergelijkbaar project werkte als waar ik aan werkte.
Met deze vergelijking kun je op volle snelheid komen als je vooruit gaat, maar net als bij de rotatiemethode worden de hoekgebieden van het raster buiten beschouwing gelaten. Dit komt omdat in sommige gevallen het maximum 100 is en in sommige gevallen het maximum 200. U zou dus een beperkingsfunctie gebruiken om iets na 100 te negeren.
En tussen haakjes, ik noem dit niet denigrerend eenvoudig… er zit schoonheid in eenvoud.
Arduino-voorbeeld:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // constrain leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = beperken (rightThrottle, -100, 100);
JavaScript-voorbeeld:
var leftChannel = joystick_y + joystick_x;
var rightChannel = joystick_y - joystick_x;//constrain leftChannel = constrain(leftChannel, -100, 100); rightChannel = beperken (rightChannel, -100, 100); //helper functionvar constrain = function (num, min, max) {return Math.min (Math.max (num, min), max); };
Stap 4: Methode Methode » Proportioneel
Ik sprong van de eenvoudige methode af in de hoop een vergelijking van het beste van beide werelden te maken. Het idee hier is om in alle richtingen volledig proportioneel te zijn, zelfs diagonaal, ondanks het feit dat, hoewel je een grotere afstand aflegt, het hetzelfde bereik heeft als wanneer je verticaal beweegt, wat een kleinere afstand is.
Je krijgt uiteindelijk een schaal van -200 tot +200 in alle richtingen in mijn voorbeelden. Ik breng dat in kaart op ± 100 omdat het het percentage vermogen vertegenwoordigt dat naar elk kanaal gaat - maar je zult het willen toewijzen aan wat werkt in je gebruik- koffer voor uw motorcontroller. Als u bijvoorbeeld een PWM-signaal verzendt, kunt u dat toewijzen aan 1000 tot 2000 of als u een analoog signaal verzendt, kunt u het toewijzen aan 0-255 en de richting instellen als boolean enz.
Arduino-voorbeeld:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x;// in sommige gevallen is het maximum 100, in sommige gevallen is het 200// laten we het verschil in rekening brengen, zodat het maximum altijd 200int is diff = abs(abs(joystick_y) - abs(joystick_x));leftThrottle = leftThrottle < 0 ? leftThrottle - diff: leftThrottle + diff;rightThrottle = rechtsThrottle < 0 ? rightThrottle - diff: rightThrottle + diff; // Kaart van ±200 tot ± 100 of welk bereik je ook nodig hebtleftThrottle = map(leftThrottle, 0, 200, -100, 100);rightThrottle = map(rightThrottle, 0, 200, -100, 100); //constrainleftThrottle = constrain(leftThrottle, -100, 100);rightThrottle = constrain(rightThrottle, -100, 100);
JavaScript-voorbeeld:
var leftThrottle = joystick_y + joystick_x;var rightThrottle = joystick_y - joystick_x;// in sommige gevallen is het maximum 100, in sommige gevallen 200, // laten we het verschil incalculeren, zodat het maximum altijd 200 is var diff = Math.abs(Math.abs(joystick_y) - Math.abs(joystick_x));leftThrottle = leftThrottle < 0 ? leftThrottle - diff: leftThrottle + diff;rightThrottle = rechtsThrottle < 0 ? rightThrottle - diff: rightThrottle + diff;//Kaart van ±200 terug naar ±100 of wat je ook nodig hebtleftThrottle = map(leftThrottle, -200, 200, -100, 100);rightThrottle = map(rightThrottle, -200, 200, -100, 100); //constrain leftThrottle = constrain(leftThrottle, -100, 100);rightThrottle = constrain(rightThrottle, -100, 100);//sommige helperfunctiesvar constrain = function(num, min, max){ return Math.min(Math. max(aantal, min), max); }; var map = function(num, inMin, inMax, outMin, outMax){ var p, inSpan, outSpan, in kaart gebracht; inMin = inMin + inMax; aantal = aantal + inMax; inMax = inMax + inMax; inSpan = Math.abs(inMax-inMin); p = (getal/inSpan)*100; uitMin = uitMin + uitMax; uitMax = uitMax + uitMax; outSpan = Math.abs(outMax - outMin); toegewezen = outSpan*(p/100) - (outMax/2); terug in kaart gebracht;};
Aanbevolen:
Hoe de Android-applicatie te verbinden met AWS IOT en de API voor spraakherkenning te begrijpen: 3 stappen
Hoe de Android-applicatie te verbinden met AWS IOT en de spraakherkenning-API te begrijpen: deze tutorial leert de gebruiker hoe de Android-applicatie te verbinden met de AWS IOT-server en de spraakherkenning-API te begrijpen die een koffiemachine bestuurt. De applicatie bestuurt de koffiemachine via de Alexa Spraakservice, de ka
Basisprincipes van de motor - Concept Super eenvoudig te begrijpen met een experiment: 7 stappen (met afbeeldingen)
Basisprincipes van de motor | Concept Super gemakkelijk te begrijpen met een experiment: in deze instructable ga ik je leren over het onderliggende fundamentele principe van motoren. Alle motoren om ons heen werken volgens dit principe. Zelfs generatoren werken op een wederzijdse verklaring van deze regel. Ik heb het over de Vlaming's Left-Hand Ru
Elektronische sensoren begrijpen: 8 stappen
Elektronische sensoren begrijpen: bedoeld om de werking van gangbare industriële en huishoudelijke sensoren uit te leggen, deze "Instructable" leert je hoe je in de handel verkrijgbare sensoren kunt gebruiken in een echte wereld met behulp van praktische oefeningen en experimenten. Deze les zal br
Een harde schijf begrijpen en onderhouden: 3 stappen
Een harde schijf begrijpen en onderhouden: Hallo! Mijn naam is Jason en vandaag ga ik je alles leren over wat een harde schijf is, hoe het werkt en hoe je je harde schijf zo lang mogelijk functioneel kunt houden
ICSP voor PIC-microcontrollers begrijpen: 4 stappen (met afbeeldingen)
ICSP voor PIC-microcontrollers begrijpen: het programmeren van microcontrollers is niet moeilijk. Het bouwen van een programmeur is een geweldig eerste elektronicaproject. Het doel van deze instructable is om de eenvoudige 'in circuit serial programming'-methode uit te leggen die wordt gebruikt met Microchip PIC's