Sadržaj:
- Korak 1: Metoda miješanja »Nema
- Korak 2: Metoda metode »Rotirajte
- Korak 3: Metoda metode »Jednostavno
- Korak 4: Metoda metode »Proporcionalna
Video: Razumijevanje miješanja kanala: 4 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
Ako ste ikada vozili šasiju s daljinskim upravljačem, velika je vjerojatnost da ste koristili miješanje, čak i ako to niste znali. Konkretno, ako ste koristili jedan joystick ili gimble za upravljanje vozilom koje koristi klizno ili diferencijalno upravljanje, koristili ste miješanje.
Miješanje je jednostavno način na koji se podaci s upravljačke palice koriste za određivanje količine energije koja treba biti isporučena sa svake strane šasije.
Ako otvorite joystick, općenito ćete unutra vidjeti dva potenciometra. Jedan za mjerenje vašeg trenutnog položaja duž osi Y (gore i dolje), a drugi za mjerenje vašeg položaja duž osi X (od strane do strane).
Iako nemam formalnu obuku na tu temu, već sam se morao miješati u kodu, a nedavno sam želio zaroniti malo dublje u tu temu.
Prvo želim napomenuti da većina RC odašiljača ima mogućnost miješanja kao i mnogi motorni kontroleri. Ove će informacije biti najkorisnije ako se sami morate miješati u svom kodu. Na primjer, recite ako koristite Arduino za čitanje nepomiješanih podataka s RC prijemnika ili čitate analogne podatke iz lonaca na upravljačkoj palici ili čitate koordinate s digitalne upravljačke palice u mobilnoj aplikaciji.
Pogledajmo neke različite pristupe miješanju.
Korak 1: Metoda miješanja »Nema
Prvo pogledajmo što će se dogoditi ako uopće ne koristite miješanje. Ako samo pošaljete podatke s jedne osi na jednu stranu šasije, a drugu os na drugu stranu, vaše vozilo neće reagirati onako kako želite.
Na primjer, ako gurnete joystick do kraja ravno, os Y je pri punom gasu, a os X na 0. Dakle, umjesto da idete ravno, vozili biste u krug.
Korak 2: Metoda metode »Rotirajte
Suradnica mi je jednom prilikom naglasila da, za malo, možete okrenuti odašiljač za 45 stupnjeva radi miješanja siromaha. Ako smatrate da su vrijednosti s dva potenciometra na upravljačkoj palici osi x y y na mreži (s obje osi koje se protežu od -100 do +100), to ima puno smisla jer idete na +100 na obje osi dok gurate joystick gore i udesno. Dakle, ako se ovo preslikava izravno na vaša dva kanala šasije (lijevu i desnu stranu vašeg robota), to bi učinilo da vaš robot krene naprijed.
Dakle, prva metoda miješanja koju sam ikada pokušao bila je matematičko zakretanje koordinata x i y za 45 stupnjeva oko središnje točke rešetke.
Ovo radi u redu, međutim ne mogu ići naprijed sa 100% snage jer kada rotirate, cjelokupno kretanje je ograničeno na krug unutar rešetke, što znači da zapravo nikada ne možete ući u gornji desni kut.
To također dovodi do toga da se uglovi rešetke ne koriste. To nije problem ako koristite joystick/gimple koji ograničava vaše kretanje pa se do tih područja ionako nikada ne dolazi, ali u protivnom ćete htjeti da taj dio mreže učini nešto tako da vaši pokreti budu potpuno proporcionalni.
Ako ste vizualni učenik poput mene, ovaj bi se koncept mogao lakše snaći gledajući video na početku ovog uputstva.
Pogledajmo neke primjere koda.
BILJEŠKE O PRIMJERIMA KODA: Izostavljam način na koji dobivate vrijednosti joystick_x i joystick_y jer bi se one mijenjale ovisno o vašem projektu. Također ću mapirati/ograničiti na ± 100, ali ćete vjerojatno morati preslikati na 1000 - 2000 za PWM ili 0 - 255 za analogni izlaz itd. Uvijek ograničavam … za svaki slučaj.
Primjer Arduina:
// matematički rotirati
dvostruki 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); // ograničiti leftThrottle = ograničiti (leftThrottle, -100, 100); rightThrottle = ograničiti (rightThrottle, -100, 100);
JavaScript primjer:
// matematički 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 = ograničenje (rightThrottle, -100, 100); // pomoćna funkcijavarvar ograničenje = funkcija (num, min, max) {return Math.min (Math.max (num, min), max); };
Korak 3: Metoda metode »Jednostavno
Sljedeće imamo vrlo jednostavnu jednadžbu koju sam prvi put pokupio iz jednog od videa Shawn Hymela Adventures in Science SparkFun gdje je slučajno radio na vrlo sličnom projektu na onom na kojem sam radio.
Ova vam jednadžba omogućuje da postignete punu brzinu kada idete naprijed, ali slično kao i metoda rotacije, zanemaruje kutna područja rešetke. To je zato što je u nekim slučajevima maksimum 100, a u nekim slučajevima maksimum 200. Stoga biste koristili funkciju ograničenja da zanemarite bilo što nakon 100.
Usput, ne nazivam ovo jednostavno pogrdno … ljepota je u jednostavnosti.
Primjer Arduina:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // ograničiti leftThrottle = ograničiti (leftThrottle, -100, 100); rightThrottle = ograničiti (rightThrottle, -100, 100);
JavaScript primjer:
var leftChannel = joystick_y + joystick_x;
var rightChannel = joystick_y - joystick_x; // ograničiti leftChannel = ograničiti (leftChannel, -100, 100); rightChannel = ograničenje (rightChannel, -100, 100); // pomoćna funkcijavarvar ograničenje = funkcija (num, min, max) {return Math.min (Math.max (num, min), max); };
Korak 4: Metoda metode »Proporcionalna
Iskoristio sam jednostavnu metodu nadajući se da ću najbolje iskoristiti jednadžbu oba svijeta. Ideja je ovdje biti potpuno proporcionalan u svim smjerovima, čak i dijagonalno, unatoč činjenici da se krećete na većoj udaljenosti, ali ima isti raspon kao kada se krećete okomito, što je manja udaljenost.
Na kraju dobijete ljestvicu od -200 do +200 u svim smjerovima u mojim primjerima, preslikavam to na ± 100 jer predstavlja postotak snage koja ide na svaki kanal - međutim, htjet ćete ga preslikati u ono što vam radi - kućište za vaš motorni kontroler. Na primjer, ako šaljete PWM signal, to možete preslikati na 1000 do 2000 ili ako šaljete analogni signal, možete ga preslikati na 0-255 i postaviti smjer kao boolean itd.
Primjer Arduina:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // u nekim slučajevima max je 100, u nekim slučajevima 200 // uzmimo u obzir razliku tako da je max uvijek 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle - diff: rightThrottle + diff; // Karta od ± 200 do ± 100 ili bilo koji raspon od kojeg ste izašliThrottle = map (leftThrottle, 0, 200, -100, 100); rightThrottle = map (rightThrottle, 0, 200, -100, 100); // constrainleftThrottle = ograničenje (leftThrottle, -100, 100); rightThrottle = ograničenje (rightThrottle, -100, 100);
JavaScript primjer:
var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y - joystick_x; // u nekim slučajevima max je 100, u nekim slučajevima 200, // uzmimo razliku tako da je max uvijek 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; // Karta od ± 200 natrag do ± 100 ili što god da igrom ostaviteThrottle = map (leftThrottle, -200, 200, -100, 100); rightThrottle = map (rightThrottle, -200, 200, -100, 100); // constrain leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100); // neke pomoćne funkcijevar constrain = function (num, min, max) {return Math.min (Math. max (broj, min), max); }; var map = funkcija (num, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, preslikano; inMin = inMin + inMax; broj = broj + inMax; inMax = inMax + inMax; inSpan = Math.abs (inMax-inMin); p = (broj/inSpan)*100; outMin = outMin + outMax; outMax = outMax + outMax; outSpan = Math.abs (outMax - outMin); preslikano = outSpan*(p/100) - (outMax/2); return mapiran;};
Preporučeni:
Hakiranje LG -jevog kanala za kućnu automatizaciju: 8 koraka (sa slikama)
Hakiranje LG Ducted Split -a za kućnu automatizaciju: Prije svega - Ovo nije još jedan hack za emulaciju infracrvenog daljinskog upravljača. Moj određeni AC nema korisno sučelje dizajnirano za bilo koju vrstu kontrole osim uključenih zidnih pametnih kontrola. U svom
Razumijevanje IC protokola daljinskih upravljača klima uređaja: 9 koraka (sa slikama)
Razumijevanje IC protokola daljinskih upravljača klima uređaja: Već neko vrijeme učim o IC protokolima. Kako slati i primati IC signale. U ovom trenutku preostaje jedino IC protokol daljinskih upravljača za izmjeničnu struju. Za razliku od tradicionalnih daljinskih upravljača gotovo svih elektroničkih uređaja (recimo televizora) gdje
Baterija od krumpira: Razumijevanje kemijske i električne energije: 13 koraka (sa slikama)
Baterija od krumpira: Razumijevanje kemijske i električne energije: Jeste li znali da žarulju možete napajati samo s krumpirom ili dva? Kemijska energija između dva metala pretvara se u električnu i stvara krug uz pomoć krumpira! To stvara mali električni naboj koji može biti
Razumijevanje ICSP -a za PIC mikrokontrolere: 4 koraka (sa slikama)
Razumijevanje ICSP -a za PIC mikrokontrolere: Programiranje mikrokontrolera nije teško. Izgradnja programera odličan je prvi elektronički projekt. Cilj ovog uputstva je objasniti jednostavnu metodu serijskog programiranja u krugovima koja se koristi s Microchip PIC -ovima
Jednostavne pozadine pomoću fotografije i miješanja slojeva - Vodič za Photoshop: 5 koraka
Jednostavne pozadine pomoću fotografije i miješanja slojeva - Vodič za Photoshop: Napravite vizualno zapanjujuću pozadinu jednostavnom tehnikom u Photoshopu. Svatko može učiniti pozadinu ovako dobrom i mnogo je lakšom nego što mislite! Dakle, prvo morate otići u Datoteka > NovoPostavite svoju širinu i visinu u pikselima i postavite na