Kazalo:
- 1. korak: Metoda mešanja »Brez
- 2. korak: Metoda metode »Zavrtite
- 3. korak: Metoda metode »Preprosta
- 4. korak: Metoda metode »Sorazmerno
Video: Razumevanje mešanja kanalov: 4 koraki (s slikami)
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
Če ste kdaj vozili podvozje z daljinskim upravljalnikom, obstaja velika verjetnost, da ste uporabili mešanje, čeprav tega niste vedeli. Natančneje, če ste za krmiljenje vozila, ki uporablja drsno krmiljenje ali diferencialno krmiljenje, uporabili eno samo krmilno palico ali gimble, ste uporabili mešanje.
Mešanje je preprosto način, na katerem se podatki iz krmilne palice določijo, koliko energije je treba dobaviti na vsako stran ohišja.
Če odprete krmilno palčko, boste na splošno videli dva potenciometra. Ena za merjenje vašega trenutnega položaja vzdolž osi Y (gor in dol), druga pa za merjenje vašega položaja vzdolž osi X (od strani do strani).
Čeprav nimam formalnega usposabljanja na to temo, sem se moral že prej mešati v kodo, pred kratkim pa sem se želel poglobiti v temo.
Najprej želim opozoriti, da ima večina RC oddajnikov zmožnost mešanja, tako kot mnogi krmilniki motorjev. Ti podatki bodo najbolj uporabni, če se morate sami mešati v kodo. Na primer, če uporabljate Arduino za branje nepomešanih podatkov iz sprejemnika RC, ali berete analogne podatke iz loncev s krmilno palčko ali če berete koordinate iz digitalne krmilne palice v mobilni aplikaciji.
Oglejmo si nekaj različnih pristopov mešanja.
1. korak: Metoda mešanja »Brez
Najprej si poglejmo, kaj se zgodi, če mešanja sploh ne uporabljate. Če podatke samo pošljete z ene osi na eno stran ohišja, drugo os pa na drugo stran, se vaše vozilo ne bo odzvalo tako, kot želite.
Na primer, če pritisnete krmilno palčko do konca naravnost, je os Y pri polnem plinu, os X pa pri 0. Torej bi se vozili v krogu, namesto da bi šli naravnost.
2. korak: Metoda metode »Zavrtite
Sodelavec mi je nekoč opozoril, da lahko odbijač za trenutek obrnete za 45 stopinj za mešanico reveža. Če menite, da sta vrednosti obeh potenciometrov v krmilni palici x -y osi na mreži (z obema osi, ki obsegata od -100 do +100), je to zelo smiselno, ker boste na obeh osi dosegli +100 ko pritisnete krmilno palčko navzgor in v desno. Če se torej preslika neposredno na dva kanala ohišja (levo in desno stran vašega robota), bi vaš robot šel naprej.
Prva metoda mešanja, ki sem jo kdaj poskusil, je bila matematično vrtenje koordinat x in y za 45 stopinj glede na osrednjo točko mreže.
To deluje v redu, vendar ne morem naprej s 100% močjo, ker je pri vrtenju celotno gibanje omejeno na krog znotraj mreže, kar pomeni, da nikoli ne morete zares priti v zgornji desni kot.
Posledica tega je tudi, da vogali mreže niso uporabljeni. To ni problem, če uporabljate igralno palico/gimple, ki omejuje vaše gibanje, tako da do teh področij nikoli ne pridete, sicer pa boste želeli, da ta del mreže naredi nekaj, tako da bodo vaši gibi popolnoma sorazmerni.
Če ste vizualni učenec, kot sem jaz, bi si ta koncept morda lažje ogledal z ogledom videoposnetka na začetku tega navodila.
Poglejmo nekaj primerov kode.
OPOMBE O PRIMERIH MOJE KODE: Izpuščam, kako dobite vrednosti joystick_x in joystick_y, saj bi se spremenile glede na vaš projekt. Prav tako bom preslikal/omejil na ± 100, vendar boste verjetno morali preslikati na 1000 - 2000 za PWM ali 0 - 255 za analogni izhod itd. Vedno omejim … za vsak slučaj.
Primer Arduina:
// matematično vrti
dvojni 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); // omeji leftThrottle = omeji (leftThrottle, -100, 100); rightThrottle = omeji (rightThrottle, -100, 100);
Primer JavaScript:
// matematično 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); // pomožna funkcijavar constrain = function (num, min, max) {return Math.min (Math.max (num, min), max); };
3. korak: Metoda metode »Preprosta
Naslednjič imamo zelo preprosto enačbo, ki sem jo najprej pobral iz enega od videoposnetkov Shawn Hymel's Adventures in Science SparkFun, kjer je po naključju delal zelo podoben projekt kot tisti, ki sem ga delal jaz.
Ta enačba vam omogoča, da greste naprej s polno hitrostjo, vendar podobno kot metoda rotacije ne upošteva vogalnih površin mreže. To je zato, ker je v nekaterih primerih največ 100, v nekaterih pa največ 200. Torej bi uporabili funkcijo omejevanja, da ne bi upoštevali ničesar po 100.
In mimogrede, tega ne imenujem sramotno … lepota je v preprostosti.
Primer Arduina:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // omeji leftThrottle = omeji (leftThrottle, -100, 100); rightThrottle = omeji (rightThrottle, -100, 100);
Primer JavaScript:
var leftChannel = joystick_y + joystick_x;
var rightChannel = joystick_y - joystick_x; // omeji leftChannel = omeji (leftChannel, -100, 100); rightChannel = omeji (rightChannel, -100, 100); // pomožna funkcijavar constrain = function (num, min, max) {return Math.min (Math.max (num, min), max); };
4. korak: Metoda metode »Sorazmerno
Odločil sem se za preprosto metodo v upanju, da bom iz enačb obeh svetov najbolje izkoristil. Zamisel tukaj je biti v celoti sorazmeren v vseh smereh celo diagonalno, kljub dejstvu, da se premikate na večjo razdaljo, ima enak obseg kot pri navpični premiki, kar je manjša razdalja.
Na koncu dobite lestvico od -200 do +200 v vseh smereh v mojih primerih, kar preslikam na ± 100, ker predstavlja odstotek moči, ki gre na vsak kanal - vendar ga boste želeli preslikati v vse, kar deluje pri vaši uporabi - ohišje za krmilnik motorja. Na primer, če pošiljate signal PWM, ga lahko preslikate na 1000 do 2000 ali če pošiljate analogni signal, ga lahko preslikate na 0-255 in smer nastavite kot logično itd.
Primer Arduina:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // v nekaterih primerih je max 100, v nekaterih primerih 200 // upoštevajmo razliko, tako da je max vedno 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle - razlika: rightThrottle + razlika; // Zemljevid od ± 200 do ± 100 ali katerega koli drugega območja, ki ga izločiteThrottle = map (leftThrottle, 0, 200, -100, 100); rightThrottle = map (rightThrottle, 0, 200, -100, 100); // constrainleftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = omeji (rightThrottle, -100, 100);
Primer JavaScript:
var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y - joystick_x; // v nekaterih primerih je max 100, v nekaterih primerih 200, // upoštevajmo razliko, tako da je max vedno 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; // Zemljevid od ± 200 nazaj navzdol do ± 100 ali karkoli že izločiteThrottle = map (leftThrottle, -200, 200, -100, 100); rightThrottle = map (rightThrottle, -200, 200, -100, 100); // constrain leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100); // nekatere pomožne funkcijevar constrain = function (num, min, max) {return Math.min (Math. max (število, min), max); }; var map = funkcija (num, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, preslikano; inMin = inMin + inMax; število = število + inMax; inMax = inMax + inMax; inSpan = Math.abs (inMax-inMin); p = (število/inSpan)*100; outMin = outMin + outMax; outMax = outMax + outMax; outSpan = Math.abs (outMax - outMin); preslikano = outSpan*(p/100) - (outMax/2); vrnjeno preslikano;};
Priporočena:
Osnove motorja - Koncept super enostaven za razumevanje s poskusom: 7 korakov (s slikami)
Osnove motorja | Koncept zelo enostaven za razumevanje s poskusom: V tem navodilu vas bom naučil o temeljnem načelu motorjev. Na tem principu delujejo vsi motorji okoli nas. Tudi generatorji delajo na vzajemni izjavi o tem pravilu. Govorim o Flemingovem levem Ru
Razumevanje IR protokola daljinskih upravljalnikov klimatske naprave: 9 korakov (s slikami)
Razumevanje IR protokola daljinskih upravljalnikov klimatskih naprav: Že dalj časa se učim o IR protokolih. Kako pošiljati in sprejemati IR signale. Na tej točki ostane le še protokol IR daljincev za izmenični tok. Za razliko od tradicionalnih daljincev skoraj vseh elektronskih naprav (recimo televizorja), kjer
Razumevanje 74LS273 oktalnega D natikača IC: 5 korakov
Razumevanje 74LS273 Octal D flip-flop IC: V roke sem dobil 74LS273 IC, ko sem reševal nekatere komponente iz starega satelitskega sprejemnika, kar počnem med projekti in prihranim nekaj denarja … Ta IC je bil na nadzorni plošči in je bil povezan z 4-mestni 7-segmentni LED zaslon z nekaj trans
Krompirjeva baterija: Razumevanje kemijske in električne energije: 13 korakov (s slikami)
Krompirjeva baterija: Razumevanje kemijske in električne energije: Ali ste vedeli, da lahko žarnico napajate samo s krompirjem ali dvema? Kemična energija med obema kovinama se pretvori v električno energijo in s pomočjo krompirja ustvari vezje! To ustvarja majhen električni naboj, ki je lahko
Razumevanje ICSP za mikrokrmilnike PIC: 4 koraki (s slikami)
Razumevanje ICSP za mikrokrmilnike PIC: Programiranje mikrokrmilnikov ni težko. Izdelava programerja je odličen prvi elektronski projekt. Cilj tega pouka je razložiti preprosto metodo "v serijskem programiranju v vezju", ki se uporablja s PIC Microchip