Indholdsfortegnelse:
- Trin 1: Blandingsmetode »Ingen
- Trin 2: Metode Metode »Roter
- Trin 3: Metode Metode »Enkel
- Trin 4: Metode Metode »Proportional
Video: Forståelse af kanalblanding: 4 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Hvis du nogensinde har kørt et fjernbetjeningschassis, er der en god chance for, at du har brugt blanding, selvom du ikke vidste det. Specifikt, hvis du har brugt et enkelt joystick eller gimble til at styre et køretøj, der bruger skridstyring eller differentialestyring, har du brugt blanding.
Blanding er simpelthen, hvordan dataene fra dit joystick bruges til at bestemme, hvor meget strøm der skal leveres til hver side af chassiset.
Hvis du åbner et joystick, vil du generelt se to potentiometre indeni. Den ene til at måle din nuværende position langs Y -aksen (op og ned), og den anden til at måle, hvor du befinder dig langs X -aksen (side til side).
Selvom jeg ikke har nogen formel uddannelse i emnet, har jeg været nødt til at blande kode før og for nylig ville jeg dykke lidt dybere ned i emnet.
Først vil jeg bemærke, at de fleste RC -sendere har blandingsevne, ligesom mange motorstyringer. Disse oplysninger vil være mest nyttige, hvis du selv skal blande i din kode. Sig f.eks., Hvis du bruger en Arduino til at læse ublandet data fra en RC -modtager, eller du læser analoge data fra potterne i et joystick, eller hvis du læser koordinaterne fra et digitalt joystick i en mobilapp.
Lad os se på nogle forskellige blandingsmetoder.
Trin 1: Blandingsmetode »Ingen
Lad os først se på, hvad der sker, hvis du slet ikke bruger blanding. Hvis du bare sender dataene fra den ene akse til den ene side af chassiset og den anden akse til den anden side, reagerer dit køretøj ikke, som du vil have det.
For eksempel hvis du skubber joysticket helt fremad, er Y -aksen ved fuld gas og X -aksen er på 0. Så du ville køre i cirkler i stedet for at gå lige.
Trin 2: Metode Metode »Roter
En medarbejder påpegede mig engang, at du med en knivspids kan rotere din sender 45 grader for en fattigmandsblanding. Hvis du tænker på værdierne fra de to potentiometre i et joystick som værende x og y -aksen på et gitter (med begge akse spænder -100 til +100) giver det meget mening, fordi du går til +100 på begge akser mens du skubber joysticket op og til højre. Så hvis dette kortes direkte til dine to chassis -kanaler (venstre og højre side af din robot), ville det få din robot til at gå fremad.
Så den første blandingsmetode, jeg nogensinde har prøvet, var at matematisk rotere x og y koordinere 45 grader omkring gitterets midtpunkt.
Dette fungerer ok, men jeg kan ikke gå fremad med 100% strøm, for når du roterer, er den samlede bevægelse begrænset til en cirkel i nettet, hvilket betyder, at du aldrig rigtig kan komme ind i det øverste højre hjørne.
Dette resulterer også i, at hjørnerne af nettet ikke bliver udnyttet. Dette er ikke et problem, hvis du bruger et joystick/gimple, der begrænser din bevægelse, så disse områder aldrig nås, men ellers vil du have, at den del af gitteret gør noget, så dine bevægelser føles fuldstændig proportionelle.
Hvis du er en visuel lærer som mig selv, kan dette koncept være lettere at famle ved at se videoen i begyndelsen af denne instruerbare.
Lad os se på nogle kodeeksempler.
BEMÆRKNINGER OM MINE KODEKSEMPLER: Jeg udelader, hvordan du får joystick_x og joystick_y -værdierne, da det ville ændre sig afhængigt af dit projekt. Jeg vil også kortlægge/begrænse til ± 100, men du skal sandsynligvis kortlægge til 1000 - 2000 for PWM eller 0 - 255 for analog udgang osv. Jeg begrænser altid … bare i tilfælde.
Arduino Eksempel:
// rotere matematisk
dobbelt 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 = begrænsning (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); // hjælper functionvarvar begrænsning = funktion (num, min, max) {return Math.min (Math.max (num, min), max); };
Trin 3: Metode Metode »Enkel
Dernæst har vi en meget simpel ligning, som jeg først hentede fra en af Shawn Hymels eventyr i Science SparkFun -videoer, hvor han tilfældigvis arbejdede med et projekt, der lignede meget det, jeg arbejdede på.
Denne ligning giver dig mulighed for at komme til fuld hastighed, når du går fremad, men ligesom rotationsmetoden ignorerer den hjørneområderne af nettet. Dette skyldes, at maksimum i nogle tilfælde er 100, og i nogle tilfælde er maksimum 200. Så du ville bruge en begrænsningsfunktion til at se bort fra alt efter 100.
Og forresten kalder jeg det ikke for nedsættende … der er en skønhed i enkelheden.
Arduino Eksempel:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // constrain leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = begrænsning (rightThrottle, -100, 100);
JavaScript -eksempel:
var leftChannel = joystick_y + joystick_x;
var rightChannel = joystick_y - joystick_x; // constrain leftChannel = constrain (leftChannel, -100, 100); rightChannel = begrænsning (rightChannel, -100, 100); // hjælper functionvarvar begrænsning = funktion (num, min, max) {return Math.min (Math.max (num, min), max); };
Trin 4: Metode Metode »Proportional
Jeg sprang ud af den enkle metode i håb om at få det bedste ud af begge verdeners ligning. Ideen her er at være fuldt proportional i alle retninger selv diagonalt på trods af, at selvom du bevæger dig en større afstand, har den samme rækkevidde, som når du bevæger dig lodret, hvilket er en mindre afstand.
Du ender med en skala fra -200 til +200 i alle retninger i mine eksempler, jeg kortlægger det til ± 100, fordi det repræsenterer procentdelen af strøm til hver kanal - men du vil gerne kortlægge det til det, der fungerer i din brug- etui til din motorstyring. For eksempel, hvis du sender et PWM-signal, kan du kortlægge det til 1000 til 2000, eller hvis du sender et analogt signal, kan du kortlægge det til 0-255 og indstille retningen som boolean osv.
Arduino Eksempel:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // i nogle tilfælde er max 100, i nogle tilfælde er det 200 // lad os indregne forskellen, så maks er altid 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle - diff: rightThrottle + diff; // Kort fra ± 200 til ± 100 eller hvilket område du har brug for venstreThrottle = 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 nogle tilfælde er max 100, i nogle tilfælde er det 200, // lad os indregne forskellen, så maks er altid 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; // Kort fra ± 200 tilbage til ± 100 eller hvad du end har til venstreThrottle = map (leftThrottle, -200, 200, -100, 100); rightThrottle = map (rightThrottle, -200, 200, -100, 100); // constrain leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100); // nogle hjælperfunktionervar constrain = function (num, min, max) {return Math.min (Math. max (num, min), max); }; var map = funktion (num, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, kortlagt; 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); kortlagt = outSpan*(p/100) - (outMax/2); return kortlagt;};
Anbefalede:
Sådan forbindes Android -applikationen med AWS IOT og forståelse af stemmegenkendelses -API: 3 trin
Sådan tilsluttes Android -applikationen med AWS IOT og forståelse af stemmegenkendelses -API: Denne vejledning lærer brugeren, hvordan man slutter Android -applikationen til AWS IOT -server og forstår stemmegenkendelses -API, der styrer en kaffemaskine. Applikationen styrer kaffemaskinen via Alexa Voice Service, hver App er
Forståelse af IR -protokol for air conditoner -fjernbetjeninger: 9 trin (med billeder)
Forståelse af IR -protokol for Air Conditoners fjernbetjeninger: Jeg har lært om IR -protokoller i et godt stykke tid nu. Sådan sender og modtager du IR -signaler. På dette tidspunkt er det eneste, der er tilbage, IR -protokollen for AC -fjernbetjeninger. I modsætning til traditionelle fjernbetjeninger til næsten alle elektroniske enheder (siger et tv), hvor
Kartoffelbatteri: Forståelse for kemisk og elektrisk energi: 13 trin (med billeder)
Kartoffelbatteri: Forståelse for kemisk og elektrisk energi: Vidste du, at du kan drive en lyspære med bare en eller to kartofler? Den kemiske energi mellem de to metaller omdannes til elektrisk energi og skaber et kredsløb ved hjælp af kartoflen! Dette skaber en lille elektrisk ladning, der kan
Byg en computer med grundlæggende forståelse for elektronik: 9 trin (med billeder)
Byg en computer med grundlæggende forståelse for elektronik: Har du nogensinde ønsket at foregive, at du var virkelig smart og bygge din egen computer fra bunden? Ved du intet om, hvad der skal til for at lave en computer med et minimum? Nå, det er let, hvis du ved nok om elektronik til at kaste nogle IC'er sammen
Forståelse af ICSP til PIC -mikrokontrollere: 4 trin (med billeder)
Forståelse af ICSP til PIC -mikrokontrollere: Programmering af mikrokontroller er ikke svært. At bygge en programmør er et godt første elektronikprojekt. Målet med denne instruerbare er at forklare den enkle 'i kredsløb seriel programmering' metode, der bruges med Microchip PIC'er