Obsah:
- Krok 1: Metoda mixování »Žádná
- Krok 2: Metoda Metoda »Otočit
- Krok 3: Metoda Metoda »Jednoduchá
- Krok 4: Metoda Metoda »Proporcionální
Video: Pochopení míchání kanálů: 4 kroky (s obrázky)
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:23
Pokud jste někdy řídili podvozek s dálkovým ovládáním, je velká šance, že jste použili míchání, i když jste to nevěděli. Konkrétně, pokud jste použili jediný joystick nebo ovladač k ovládání vozidla, které používá smykové řízení nebo diferenciální řízení, použili jste mixování.
Míchání je jednoduše to, jak se data z vašeho joysticku používají k určení, kolik energie by mělo být dodáno na každou stranu podvozku.
Pokud otevřete joystick, uvidíte uvnitř obvykle dva potenciometry. Jeden měří vaši aktuální polohu podél osy Y (nahoru a dolů) a druhý měří, kde jste, podél osy X (ze strany na stranu).
Ačkoli nemám žádné formální školení na toto téma, musel jsem předtím dělat míchání kódu a nedávno jsem se chtěl ponořit trochu hlouběji do předmětu.
Nejprve chci poznamenat, že většina RC vysílačů má schopnost míchání, stejně jako mnoho motorových ovladačů. Tyto informace budou nejužitečnější, pokud se budete muset v kódu míchat sami. Řekněme například, že používáte Arduino ke čtení nesmíchaných dat z RC přijímače, nebo čtete analogová data z potenciometrů na joysticku, nebo pokud čtete souřadnice z digitálního joysticku v mobilní aplikaci.
Podívejme se na několik různých přístupů k míchání.
Krok 1: Metoda mixování »Žádná
Nejprve se podívejme na to, co se stane, pokud míchání vůbec nepoužíváte. Pokud odešlete data pouze z jedné osy na jednu stranu podvozku a druhou osu na druhou stranu, vaše vozidlo by nereagovalo tak, jak byste chtěli.
Pokud například zatlačíte joystick úplně dopředu, osa Y bude na plný plyn a osa X na 0. Takže byste místo rovně jeli v kruzích.
Krok 2: Metoda Metoda »Otočit
Jeden spolupracovník mě jednou upozornil, že ve špetce můžete otočit vysílač o 45 stupňů pro mix chudých. Pokud uvažujete o hodnotách ze dvou potenciometrů v joysticku jako ose x an y na mřížce (s oběma osami v rozsahu -100 až +100), dává to velký smysl, protože se chystáte na +100 na obou osách když zatlačíte joystick nahoru a doprava. Pokud by se to tedy mapovalo přímo na vaše dva kanály podvozku (levou a pravou stranu vašeho robota), přimělo by to vašeho robota jít vpřed.
První způsob míchání, který jsem kdy zkoušel, bylo matematicky otočit souřadnici x a y o 45 stupňů kolem středového bodu mřížky.
To funguje dobře, ale nemohu jít vpřed se 100% výkonem, protože když se otáčíte, celkový pohyb je omezen na kruh v mřížce, což znamená, že se nikdy nemůžete dostat do pravého horního rohu.
To také má za následek, že rohy mřížky nejsou využívány. To není problém, pokud používáte joystick/závěs, který omezuje váš pohyb, takže se do těchto oblastí nikdy nedostanete, ale jinak budete chtít, aby tato část mřížky udělala něco, aby vaše pohyby byly zcela proporcionální.
Pokud jste vizuální žák jako já, může být tento koncept jednodušší sledovat sledováním videa na začátku tohoto pokynu.
Podívejme se na několik příkladů kódu.
POZNÁMKY K PŘÍKLADŮM MÉHO KÓDU: Vynechávám, jak získáte hodnoty joystick_x a joystick_y, protože by se to měnilo v závislosti na vašem projektu. Také budu mapovat/omezovat na ± 100, ale pravděpodobně budete muset namapovat na 1000 - 2000 pro PWM nebo 0 - 255 pro analogový výstup atd. Vždy omezuji … jen pro případ.
Příklad Arduina:
// matematicky otočit
double 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); // omezit leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100);
JavaScript příklad:
// matematicky 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); // pomocná funkce varvar omezení = funkce (num, min, max) {return Math.min (Math.max (num, min), max); };
Krok 3: Metoda Metoda »Jednoduchá
Dále tu máme velmi jednoduchou rovnici, kterou jsem poprvé zachytil z jednoho z videí Shawn Hymel’s Adventures in Science SparkFun, kde náhodou pracoval na velmi podobném projektu, na jakém jsem pracoval já.
Tato rovnice vám umožní dostat se na plnou rychlost, když jdete vpřed, ale podobně jako metoda rotace ignoruje rohové oblasti mřížky. Důvodem je, že v některých případech je maximum 100 a v některých případech maximum 200. Takže byste použili funkci omezení k ignorování čehokoli po 100.
A mimochodem, neříkám to jednoduše hanlivě … v jednoduchosti je krása.
Příklad Arduina:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // omezit leftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100);
Příklad JavaScriptu:
var leftChannel = joystick_y + joystick_x;
var rightChannel = joystick_y - joystick_x; // constrain leftChannel = constrain (leftChannel, -100, 100); rightChannel = omezení (rightChannel, -100, 100); // pomocná funkce varvar omezení = funkce (num, min, max) {return Math.min (Math.max (num, min), max); };
Krok 4: Metoda Metoda »Proporcionální
Odskočil jsem od jednoduché metody v naději, že vytvořím to nejlepší z obou světových rovnic. Jde o to, být plně proporcionální ve všech směrech i diagonálně, přestože se pohybujete na větší vzdálenost, má stejný rozsah, jako když se pohybujete svisle, což je menší vzdálenost.
V mých příkladech skončíte se stupnicí od -200 do +200 ve všech směrech. Mapuji to na ± 100, protože to představuje procento energie procházející každým kanálem - jakkoli to budete chtít namapovat na cokoli, co funguje při vašem použití - pouzdro pro váš ovladač motoru. Pokud například odesíláte signál PWM, můžete jej namapovat na 1000 až 2000 nebo pokud odesíláte analogový signál, můžete jej namapovat na 0-255 a nastavit směr jako booleovský atd.
Příklad Arduina:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // v některých případech je maximum 100, v některých případech je 200 // zohledníme rozdíl, takže maximum je vždy 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - rozdíl: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle - rozdíl: rightThrottle + diff; // Mapa od ± 200 do ± 100 nebo jakýkoli rozsah, který jehlaftThrottle = mapa (leftThrottle, 0, 200, -100, 100); rightThrottle = mapa (rightThrottle, 0, 200, -100, 100); // constrainleftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100);
Příklad JavaScriptu:
var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y - joystick_x; // v některých případech je maximum 100, v některých případech je 200, // zohledníme rozdíl, takže maximum je vždy 200var diff = Math.abs (Math.abs (joystick_y) - Math.abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - rozdíl: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle -diff: rightThrottle + diff; // Mapa od ± 200 zpět dolů na ± 100 nebo cokoli, co si jehlouftThrottle = mapa (leftThrottle, -200, 200, -100, 100); rightThrottle = mapa (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 (počet, min), max); }; var mapa = funkce (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); mapováno = outSpan*(p/100) - (outMax/2); návrat zmapován;};
Doporučuje:
RGB LED míchání barev s Arduino v Tinkercad: 5 kroků (s obrázky)
Míchání barev RGB LED s Arduino v Tinkercad: Naučme se ovládat vícebarevné LED pomocí analogových výstupů Arduino. K Arduino Uno připojíme RGB LED a sestavíme jednoduchý program pro změnu jeho barvy. Virtuálně můžete sledovat Tinkercad Circuits. Můžete si to dokonce prohlédnout
Robot na míchání koktejlů - pijte zodpovědně: 5 kroků
Robot na míchání koktejlů - Pijte zodpovědně: V tomto projektu jsem měl mnoho cílů, ale primárně jsem chtěl vydat dva míchané nápoje na svoji svatbu. Když jsem dávkoval, chtěl jsem, aby to trvalo asi minutu a s přesným množstvím alkoholu. Instalatérství by vyžadovalo snadné čištění. Moje s
Pochopení IR protokolu dálkových ovladačů Air Conditoner: 9 kroků (s obrázky)
Pochopení IR protokolu dálkových ovladačů Air Conditoner: O IR protokolech se učím už nějakou dobu. Jak odesílat a přijímat IR signály. V tuto chvíli už zbývá jen IR protokol dálkových ovladačů AC. Na rozdíl od tradičních dálkových ovladačů téměř všech elektronických zařízení (řekněme televize), kde
Bramborová baterie: Pochopení chemické a elektrické energie: 13 kroků (s obrázky)
Bramborová baterie: Pochopení chemické a elektrické energie: Věděli jste, že můžete žárovku napájet jen jednou nebo dvěma bramborami? Chemická energie mezi těmito dvěma kovy se přemění na elektrickou energii a pomocí brambor vytvoří obvod! To vytváří malý elektrický náboj, který lze
Pochopení ICSP pro mikrokontroléry PIC: 4 kroky (s obrázky)
Pochopení ICSP pro mikrokontroléry PIC: Programování mikrokontrolérů není těžké. Budování programátoru je skvělý první elektronický projekt. Cílem tohoto instruktuálu je vysvětlit jednoduchou metodu „v obvodovém sériovém programování“používanou s Microchip PIC