Cuprins:
- Pasul 1: Metoda de amestecare »Niciuna
- Pasul 2: Metodă metodă »Rotire
- Pasul 3: Metodă metodă »Simplu
- Pasul 4: Metoda Metodei »Proporțională
Video: Înțelegerea mixării canalelor: 4 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
Dacă ați condus vreodată un șasiu cu telecomandă, există șanse mari să utilizați mixajul, chiar dacă nu l-ați știut. Mai exact, dacă ați folosit un singur joystick sau un buton pentru a controla un vehicul care utilizează direcția de derapare sau direcția diferențială, ați folosit amestecarea.
Amestecarea este pur și simplu modul în care datele de pe joystick-ul dvs. sunt utilizate pentru a determina cât de multă energie ar trebui să fie furnizată fiecărei părți a șasiului.
Dacă deschideți un joystick, în general veți vedea două potențiometre în interior. Una pentru a vă măsura poziția curentă de-a lungul axei Y (în sus și în jos), iar cealaltă pentru a măsura unde vă aflați de-a lungul axei X (de la o parte la alta).
Deși nu am o pregătire formală pe acest subiect, a trebuit să fac amestecuri în cod înainte și recent am vrut să mă scufund mai puțin în subiect.
Mai întâi vreau să menționez că majoritatea transmițătoarelor RC au capacitatea de amestecare, la fel ca multe controlere de motor. Aceste informații vor fi cele mai utile dacă trebuie să faceți amestecarea dvs. în codul dvs. Spuneți, de exemplu, dacă utilizați un Arduino pentru a citi date neamestecate de la un receptor RC sau dacă citiți date analogice din poturile dintr-un joystick sau dacă citiți coordonatele dintr-un joystick digital într-o aplicație mobilă.
Să aruncăm o privire la câteva abordări de amestecare diferite.
Pasul 1: Metoda de amestecare »Niciuna
Mai întâi să aruncăm o privire la ce se întâmplă dacă nu folosiți deloc amestecarea. Dacă trimiteți doar datele de pe o axă pe o parte a șasiului și cealaltă axă pe cealaltă parte, vehiculul dvs. nu va răspunde așa cum doriți.
De exemplu, dacă împingeți joystick-ul până la capăt, axa Y este la maxim și axa X este la 0. Deci, veți conduce în cercuri în loc să mergeți drept.
Pasul 2: Metodă metodă »Rotire
Un coleg de muncă mi-a subliniat odată că, într-o ciupire, poți roti transmițătorul cu 45 de grade pentru un mix al unui om sărac. Dacă vă gândiți la valorile celor două potențiometre dintr-un joystick ca fiind axa x a y pe o grilă (cu ambele axe cuprinse între -100 și +100), acest lucru are mult sens, deoarece veți merge la +100 pe ambele axe în timp ce împingeți joystick-ul în sus și în dreapta. Deci, dacă aceasta se mapează direct la cele două canale ale șasiului (partea stângă și dreapta a robotului), robotul dvs. va merge mai departe.
Așadar, prima metodă de amestecare pe care am încercat-o vreodată a fost să rotesc matematic coordonatele x și y la 45 de grade în jurul punctului central al grilei.
Acest lucru funcționează bine, cu toate acestea nu pot merge înainte cu o putere de 100%, deoarece atunci când rotiți, mișcarea generală este limitată la un cerc din grilă, ceea ce înseamnă că nu puteți intra niciodată cu adevărat în colțul din dreapta sus.
Acest lucru are ca rezultat și colțurile grilei să nu fie utilizate. Aceasta nu este o problemă dacă utilizați un joystick / gimple care vă limitează mișcarea, astfel încât acele zone să nu fie niciodată atinse, dar altfel veți dori ca acea porțiune a grilei să facă ceva, astfel încât mișcările dvs. să se simtă complet proporționale.
Dacă sunteți un elev vizual ca mine, acest concept ar putea fi mai ușor de urmărit vizionând videoclipul de la începutul acestui instructiv.
Să vedem câteva exemple de cod.
NOTE DESPRE CODUL MEU EXEMPLE: Am lăsat deoparte cum obțineți valorile joystick_x și joystick_y, deoarece s-ar schimba în funcție de proiectul dvs. De asemenea, voi fi cartografiere / constrângere la ± 100, dar este posibil să aveți nevoie să faceți mape la 1000 - 2000 pentru PWM sau 0 - 255 pentru ieșire analogică etc. Mă constrâng întotdeauna … pentru orice eventualitate.
Exemplu Arduino:
// roti matematic
rad dublu = -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 = constrângere (rightThrottle, -100, 100);
Exemplu JavaScript:
// matematic 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); // helper functionvar constrain = function (num, min, max) {return Math.min (Math.max (num, min), max); };
Pasul 3: Metodă metodă »Simplu
În continuare, avem o ecuație foarte simplă pe care am preluat-o pentru prima dată dintr-unul dintre videoclipurile lui Shawn Hymel Adventures in Science SparkFun, unde se întâmpla că lucrează la un proiect foarte similar cu cel la care lucram.
Această ecuație vă permite să ajungeți la viteza maximă atunci când mergeți înainte, dar la fel ca metoda de rotire, nu ține cont de zonele de colț ale grilei. Acest lucru se datorează faptului că, în unele cazuri, maximul este 100 și, în unele cazuri, maximul este 200. Deci, veți utiliza o funcție de constrângere pentru a ignora orice după 100.
Și apropo, nu numesc acest lucru în mod disprețuitor … există o frumusețe în simplitate.
Exemplu Arduino:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // constrain leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrângere (rightThrottle, -100, 100);
Exemplu JavaScript:
var leftChannel = joystick_y + joystick_x;
var rightChannel = joystick_y - joystick_x; // constrain leftChannel = constrain (leftChannel, -100, 100); rightChannel = constrain (rightChannel, -100, 100); // helper functionvar constrain = function (num, min, max) {return Math.min (Math.max (num, min), max); };
Pasul 4: Metoda Metodei »Proporțională
M-am apropiat de metoda simplă sperând să fac cea mai bună ecuație a ambelor lumi. Ideea de aici este de a fi pe deplin proporțională în toate direcțiile, chiar în diagonală, în ciuda faptului că vă deplasați la o distanță mai mare, are aceeași rază ca atunci când vă deplasați vertical, ceea ce este o distanță mai mică.
Veți ajunge cu o scară de la -200 la +200 în toate direcțiile, în exemplele mele, o mapez la ± 100, deoarece reprezintă procentul de putere care se îndreaptă către fiecare canal - cu toate acestea, veți dori să o mapați la orice funcționează în utilizarea dvs. carcasă pentru controlerul motorului. De exemplu, dacă trimiteți un semnal PWM, s-ar putea să o mapați la 1000 până la 2000 sau dacă trimiteți un semnal analogic, îl puteți mapa la 0-255 și setați direcția ca booleană etc.
Exemplu Arduino:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // în unele cazuri max este 100, în unele cazuri este 200 // hai să facem diferența, astfel încât max este întotdeauna 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle - diff: rightThrottle + diff; // Hartă de la ± 200 la ± 100 sau oricare alt domeniu pe care îl acționați Throttle = hartă (leftThrottle, 0, 200, -100, 100); rightThrottle = hartă (rightThrottle, 0, 200, -100, 100); // constrainleftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100);
Exemplu JavaScript:
var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y - joystick_x; // în unele cazuri max este 100, în unele cazuri este 200, // hai să facem diferența, astfel încât max este întotdeauna 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; // Hartă de la ± 200 înapoi în jos până la ± 100 sau orice altceva acțiune Throttle = hartă (leftThrottle, -200, 200, -100, 100); rightThrottle = hartă (rightThrottle, -200, 200, -100, 100); // constrain leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100); // some helper functionsvar constrain = function (num, min, max) {return Math.min (Math. max (num, min), max); }; var map = function (num, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, maped; 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); mapped = outSpan * (p / 100) - (outMax / 2); retur mapat;};
Recomandat:
Cum să conectați aplicația Android cu AWS IOT și înțelegerea API-ului de recunoaștere vocală: 3 pași
Cum să conectați aplicația Android cu AWS IOT și înțelegerea API-ului de recunoaștere a vocii: acest tutorial învață utilizatorul cum să conecteze aplicația Android la serverul AWS IOT și înțelegerea API-ului de recunoaștere vocală care controlează un aparat de cafea. Aplicația controlează aparatul de cafea prin Alexa Serviciu de voce, fiecare aplicație c
Antena interioară BIQUAD, realizată din cupru și lemn pentru recepția canalelor HDTV în banda UHF (CANALE 14-51): 7 pași
Antena interioară BIQUAD, fabricată din cupru și lemn pentru recepția canalelor HDTV în banda UHF (CANALE 14-51): Pe piață există o varietate de antene pentru televiziune. Cele mai populare după criteriile mele sunt: UDA-YAGIS, Dipol, Dipol cu reflectoare, Patch și antene logaritmice. În funcție de condiții, distanța de la transmiterea unui
Înțelegerea protocolului IR al telecomenzilor aerului condiționat: 9 pași (cu imagini)
Înțelegerea protocolului IR al telecomenzilor aerului condiționat: Învăț despre protocoalele IR de destul de mult timp. Cum să trimiteți și să primiți semnale IR. În acest moment, singurul lucru care rămâne este protocolul IR al telecomenzilor AC. Spre deosebire de telecomenzile tradiționale ale aproape tuturor dispozitivelor electronice (să zicem un televizor) unde
Baterie de cartofi: Înțelegerea energiei chimice și electrice: 13 pași (cu imagini)
Baterie de cartofi: Înțelegerea energiei chimice și electrice: Știați că puteți alimenta o bec cu doar un cartof sau două? Energia chimică dintre cele două metale este convertită în energie electrică și creează un circuit cu ajutorul cartofului! Aceasta creează o mică încărcare electrică care poate fi
Înțelegerea ICSP pentru microcontrolerele PIC: 4 pași (cu imagini)
Înțelegerea ICSP pentru microcontrolerele PIC: Programarea microcontrolerelor nu este dificilă. Construirea unui programator face un mare proiect de electronică. Scopul acestui instructable este de a explica metoda simplă „în circuit serial de programare” utilizată cu microcip PIC-uri