Innholdsfortegnelse:
- Trinn 1: Blandingsmetode »Ingen
- Trinn 2: Metode Metode »Roter
- Trinn 3: Metode Metode »Enkel
- Trinn 4: Metode Metode »Proporsjonal
Video: Forstå kanalblanding: 4 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:25
Hvis du noen gang har kjørt et fjernkontrollchassis, er det en god sjanse for at du har brukt miksing, selv om du ikke visste det. Spesielt hvis du har brukt en enkelt joystick eller gimble for å kontrollere et kjøretøy som bruker skidstyring eller differensialstyring, har du brukt miksing.
Blanding er ganske enkelt hvordan dataene fra joysticken din brukes til å bestemme hvor mye strøm som skal leveres til hver side av kabinettet.
Hvis du åpner en joystick, vil du vanligvis se to potensiometre inni. Den ene for å måle din nåværende posisjon langs Y -aksen (opp og ned), og den andre for å måle hvor du er langs X -aksen (side til side).
Selv om jeg ikke har noen formell opplæring om emnet, har jeg måttet blande inn kode før, og nylig ønsket jeg å dykke litt dypere inn i emnet.
Først vil jeg merke til at de fleste RC -sendere har blandingsevne, som mange motorstyringer. Denne informasjonen kommer til å være mest nyttig hvis du må blande deg selv i koden din. Si for eksempel hvis du bruker en Arduino til å lese ublandet data fra en RC -mottaker, eller hvis du leser analoge data fra pottene i en joystick, eller hvis du leser koordinatene fra en digital joystick i en mobilapp.
La oss ta en titt på noen forskjellige blandingsmetoder.
Trinn 1: Blandingsmetode »Ingen
La oss først se på hva som skjer hvis du ikke bruker miksing i det hele tatt. Hvis du bare sender dataene fra den ene aksen til den ene siden av chassiset og den andre aksen til den andre siden, ville ikke bilen din reagert slik du vil ha den.
For eksempel hvis du skyver joysticken helt rett frem, er Y -aksen på full gass og X -aksen er på 0. Så du ville kjøre i sirkler i stedet for å gå rett.
Trinn 2: Metode Metode »Roter
En medarbeider påpekte meg en gang at du i en klype kan rotere senderen 45 grader for en fattigmannsblanding. Hvis du tenker på verdiene fra de to potensiometrene i en joystick som x og y -aksen på et rutenett (med begge aksene som strekker seg -100 til +100), gir dette mye mening fordi du går til +100 på begge aksene mens du skyver joysticken opp og til høyre. Så hvis dette kartlegges direkte til de to chassis -kanalene dine (venstre og høyre side av roboten din) ville det få roboten til å gå fremover.
Så den første metoden for å blande jeg noen gang har prøvd var å matematisk rotere x- og y -koordinaten 45 grader omtrent midtpunktet i rutenettet.
Dette fungerer ok, men jeg kan ikke gå fremover med 100% kraft, for når du roterer, er den totale bevegelsen begrenset til en sirkel i rutenettet, noe som betyr at du aldri kan komme inn i det øverste høyre hjørnet.
Dette resulterer også i at hjørnene på nettet ikke blir utnyttet. Dette er ikke et problem hvis du bruker en joystick/gimple som begrenser bevegelsen, slik at disse områdene aldri nås, men ellers vil du at den delen av rutenettet skal gjøre noe slik at bevegelsene dine føles helt proporsjonale.
Hvis du er en visuell elev som meg selv, kan dette konseptet være lettere å grok ved å se videoen i begynnelsen av denne instruksjonsfulle.
La oss se på noen kodeeksempler.
MERKNADER OM KODEKSEMPLENE: Jeg utelater hvordan du får joystick_x og joystick_y -verdiene ettersom det ville endres avhengig av prosjektet ditt. Jeg vil også kartlegge/begrense til ± 100, men du må sannsynligvis kartlegge til 1000 - 2000 for PWM eller 0 - 255 for analog utgang osv. Jeg begrenser alltid … bare i tilfelle.
Arduino eksempel:
// rotere matematisk
dobbel 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 = begrensning (rightThrottle, -100, 100);
JavaScript -eksempel:
// matematisk rotatevar 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); // hjelperfunksjonvarvarbegrensning = funksjon (num, min, maks) {return Math.min (Math.max (num, min), max); };
Trinn 3: Metode Metode »Enkel
Neste gang har vi en veldig enkel ligning som jeg først hentet fra en av Shawn Hymels eventyr i Science SparkFun -videoer der han tilfeldigvis jobbet med et prosjekt som lignet veldig på det jeg jobbet med.
Denne ligningen lar deg komme til full fart når du går fremover, men omtrent som rotasjonsmetoden ignorerer den hjørneområdene i rutenettet. Dette er fordi i noen tilfeller maksimum er 100 og i noen tilfeller maksimum er 200. Så du vil bruke en begrensningsfunksjon for å se bort fra alt etter 100.
Og forresten kaller jeg ikke dette for nedsettende … det er en skjønnhet i enkelheten.
Arduino eksempel:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // constrain leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = begrensning (rightThrottle, -100, 100);
JavaScript -eksempel:
var leftChannel = joystick_y + joystick_x;
var rightChannel = joystick_y - joystick_x; // constrain leftChannel = constrain (leftChannel, -100, 100); rightChannel = begrensning (rightChannel, -100, 100); // hjelperfunksjonvarvarbegrensning = funksjon (num, min, maks) {return Math.min (Math.max (num, min), max); };
Trinn 4: Metode Metode »Proporsjonal
Jeg sprang av den enkle metoden i håp om å gjøre det beste ut av begge verdens ligninger. Tanken her er å være fullt proporsjonal i alle retninger selv diagonalt til tross for at selv om du beveger deg en større avstand, har den samme rekkevidde som når du beveger deg vertikalt, som er en mindre avstand.
Du ender opp med en skala fra -200 til +200 i alle retninger i eksemplene mine. Jeg kartlegger det til ± 100 fordi det representerer prosentandelen av strøm til hver kanal - men du vil kartlegge det til det som fungerer i din bruk- etui til motorstyringen din. For eksempel hvis du sender et PWM-signal, kan du kartlegge det til 1000 til 2000 eller hvis du sender et analogt signal, kan du kartlegge det til 0-255 og angi retningen som boolsk etc.
Arduino eksempel:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // i noen tilfeller er maks 100, i noen tilfeller er det 200 // la oss faktorere forskjellen, så maks er alltid 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle - diff: rightThrottle + diff; // Kart fra ± 200 til ± 100 eller hvilket område du trenger leftThrottle = map (leftThrottle, 0, 200, -100, 100); rightThrottle = map (rightThrottle, 0, 200, -100, 100); // constrainleftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100);
JavaScript -eksempel:
var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y; joystick_x; // i noen tilfeller er maks 100, i noen tilfeller er det 200, // la oss ta med forskjellen, så maks er alltid 200var 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; // Kart fra ± 200 tilbake til ± 100 eller hva du trenger leftThrottle = map (leftThrottle, -200, 200, -100, 100); rightThrottle = map (rightThrottle, -200, 200, -100, 100); // constrain leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100); // noen hjelperfunksjonervar constrain = function (num, min, max) {return Math.min (Math. maks (antall, min), maks); }; var map = function (num, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, mapped; 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); kartlagt = outSpan*(p/100) - (outMax/2); retur kartlagt;};
Anbefalt:
Slik kobler du til Android -applikasjonen med AWS IOT og Forstå API for stemmegjenkjenning: 3 trinn
Slik kobler du Android -applikasjonen med AWS IOT og Forstå API for stemmegjenkjenning: Denne opplæringen lærer brukeren hvordan du kobler Android -applikasjonen til AWS IOT -serveren og forstår stemmegjenkjennings -API som styrer en kaffemaskin. Programmet styrer kaffemaskinen gjennom Alexa Voice Service, hver app er
Grunnleggende om motoren - Konsept superenkelt å forstå med et eksperiment: 7 trinn (med bilder)
Grunnleggende om motoren | Konsept som er superenkelt å forstå med et eksperiment: I denne instruksen skal jeg lære deg det underliggende grunnleggende prinsippet for motorer. Alle motorer rundt oss jobber etter dette prinsippet. Til og med generatorer jobber med gjengjeldet uttalelse av denne regelen. Jeg snakker om Flemings venstrehendte ru
Forstå IR -protokollen for luftkondisjoneringsfjernkontroller: 9 trinn (med bilder)
Forstå IR -protokoll for fjernkontroller for luftkonditoner: Jeg har lært om IR -protokoller ganske lenge nå. Slik sender og mottar du IR -signaler. På dette tidspunktet er det eneste som gjenstår IR -protokollen for AC -fjernkontroller. I motsetning til tradisjonelle fjernkontroller for nesten alle elektroniske enheter (si en TV) der
Potetbatteri: Forstå kjemisk og elektrisk energi: 13 trinn (med bilder)
Potetbatteri: Forstå kjemisk og elektrisk energi: Visste du at du kan drive en lyspære med bare en eller to poteter? Den kjemiske energien mellom de to metallene omdannes til elektrisk energi og skaper en krets ved hjelp av poteten! Dette skaper en liten elektrisk ladning som kan
Forstå ICSP for PIC -mikrokontrollere: 4 trinn (med bilder)
Å forstå ICSP for PIC -mikrokontrollere: Det er ikke vanskelig å programmere mikrokontrollere. Å bygge en programmerer er et flott første elektronikkprosjekt. Målet med denne instruksen er å forklare den enkle metoden for seriell programmering i krets som brukes med Microchip PIC -er