Sisällysluettelo:
- Vaihe 1: Sekoitusmenetelmä »Ei mitään
- Vaihe 2: Menetelmä »Kierrä
- Vaihe 3: Menetelmä »Yksinkertainen
- Vaihe 4: Menetelmä »Suhteellinen
Video: Kanavan sekoittamisen ymmärtäminen: 4 vaihetta (kuvien kanssa)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:03
Jos olet koskaan ajanut kauko -ohjaimen kotelolla, olet todennäköisesti käyttänyt sekoitusta, vaikka et tiennyt sitä. Erityisesti, jos olet käyttänyt yhtä ohjaussauvaa tai gimbleä ohjaamaan ajoneuvoa, joka käyttää luistinohjausta tai tasauspyörästön ohjausta, olet käyttänyt sekoitusta.
Sekoittaminen on yksinkertaisesti tapa, jolla ohjaussauvan tietoja käytetään määrittämään, kuinka paljon virtaa tulee syöttää rungon kummallekin puolelle.
Jos avaat ohjaussauvan, näet yleensä kaksi potentiometriä sisällä. Toinen mittaa nykyisen sijaintisi Y -akselia pitkin (ylös ja alas) ja toinen mittaa missä olet X -akselia pitkin (sivulta toiselle).
Vaikka minulla ei ole muodollista koulutusta aiheesta, olen joutunut sekoittamaan koodia aikaisemmin ja äskettäin halusin sukeltaa hieman syvemmälle aiheeseen.
Ensinnäkin haluan huomata, että useimmilla RC -lähettimillä on sekoitusmahdollisuus, kuten monilla moottorinohjaimilla. Näistä tiedoista on eniten hyötyä, jos joudut itse sekoittamaan koodisi. Sano esimerkiksi, jos käytät Arduinoa lukematta sekoittamatonta dataa RC -vastaanottimesta tai luet analogista dataa ruukuista ohjaussauvassa tai jos luet koordinaatit digitaalisesta ohjaussauvasta mobiilisovelluksessa.
Katsotaanpa joitain erilaisia sekoitusmenetelmiä.
Vaihe 1: Sekoitusmenetelmä »Ei mitään
Katsotaan ensin, mitä tapahtuu, jos et käytä sekoitusta lainkaan. Jos lähetät tiedot yhdeltä akselilta rungon toiselle puolelle ja toiselta akselilta toiselle puolelle, ajoneuvosi ei vastaa haluamallasi tavalla.
Jos esimerkiksi työnnät ohjaussauvan kokonaan eteenpäin, Y -akseli on täydellä kaasulla ja X -akseli on 0. Joten ajaisit ympyröissä sen sijaan, että menisit suoraan.
Vaihe 2: Menetelmä »Kierrä
Eräs työkaveri huomautti minulle kerran, että voit nipistyksellä kääntää lähetintäsi 45 astetta köyhän miehen sekoituksen vuoksi. Jos luulet ohjaussauvan kahden potentiometrin arvot olevan x x y -akseli ruudukossa (molemmat akselit ulottuvat -100 … +100), tämä on järkevää, koska aiot +100 molemmilla akseleilla kun työnnät ohjaussauvaa ylös ja oikealle. Joten jos tämä kartoitetaan suoraan kahteen runkokanavaasi (robotin vasen ja oikea puoli), se saa robotin menemään eteenpäin.
Joten ensimmäinen sekoitusmenetelmä, jota olen koskaan kokeillut, oli kiertää matemaattisesti x- ja y -koordinaatteja 45 astetta ruudukon keskipisteen ympäri.
Tämä toimii ok, mutta en voi mennä eteenpäin 100% teholla, koska kun pyörität, koko liike rajoittuu ympyrään ruudukon sisällä, mikä tarkoittaa, ettet voi koskaan päästä oikeaan yläkulmaan.
Tämä johtaa myös siihen, että ruudukon kulmia ei käytetä. Tämä ei ole ongelma, jos käytät ohjaussauvaa/kierteistöä, joka rajoittaa liikkumistasi, joten näille alueille ei koskaan päästä, mutta muuten haluat, että ruudukon osa tekee jotain niin, että liikkeet tuntuvat täysin suhteellisilta.
Jos olet visuaalinen oppija kuten minä, tämä käsite saattaa olla helpompi grokata katsomalla tämän ohjeen alussa olevan videon.
Katsotaanpa joitain koodiesimerkkejä.
HUOMAUTUKSIA KOODESIMERKKEISTÄ: Jätän kertomatta, miten saat joystick_x- ja joystick_y -arvot, koska ne muuttuisivat projektistasi riippuen. Lisäksi aion kartoittaa/rajoittaa arvoon ± 100, mutta saatat joutua luultavasti kartoittamaan 1000 - 2000 PWM: lle tai 0 - 255 analogiselle ulostulolle jne. Olen aina rajoitettu … joka tapauksessa.
Esimerkki Arduinosta:
// kiertää matemaattisesti
kaksinkertainen 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); // rajoittaa leftThrottle = rajoittaa (leftThrottle, -100, 100); rightThrottle = rajoittaa (rightThrottle, -100, 100);
Esimerkki JavaScriptistä:
// matemaattisesti 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); // avustajafunktio varmennerajoitus = funktio (numero, min, maks.) {palauta matemaattinen min (matemaattinen max (luku, min), maks); };
Vaihe 3: Menetelmä »Yksinkertainen
Seuraavaksi meillä on hyvin yksinkertainen yhtälö, jonka otin ensin yhdestä Shawn Hymelin Adventures in Science SparkFun -videosta, jossa hän sattui työskentelemään hyvin samankaltaisen projektin kanssa kuin minä.
Tämän yhtälön avulla voit saavuttaa täyden nopeuden eteenpäin mennessään, mutta aivan kuten kiertomenetelmä, se jättää huomiotta ruudukon kulma -alueet. Tämä johtuu siitä, että joissakin tapauksissa enimmäismäärä on 100 ja joissakin tapauksissa enintään 200. Joten käyttäisit pakotusfunktiota sivuuttaaksesi kaikki 100: n jälkeen.
Ja muuten en kutsu tätä yksinkertaiseksi halventavasti … yksinkertaisuudessa on kauneutta.
Esimerkki Arduinosta:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // rajoittaa leftThrottle = rajoittaa (leftThrottle, -100, 100); rightThrottle = rajoittaa (rightThrottle, -100, 100);
Esimerkki JavaScriptistä:
var leftChannel = joystick_y + joystick_x;
var rightChannel = joystick_y - joystick_x; // rajoita leftChannel = rajoita (leftChannel, -100, 100); rightChannel = rajoittaa (rightChannel, -100, 100); // auttajafunktio varmennerajoitus = funktio (lukumäärä, min, maks.) {palauta matematiikka.min (matemaattinen max (luku, min), maksimi); };
Vaihe 4: Menetelmä »Suhteellinen
Pääsin eroon yksinkertaisesta menetelmästä toivoen tekeväni parhaan hyödyn molempien maailmojen yhtälöstä. Ajatuksena on olla täysin verrannollinen kaikkiin suuntiin jopa vinosti huolimatta siitä, että vaikka liikut pidemmän matkan, sillä on sama alue kuin silloin, kun liikut pystysuunnassa, mikä on pienempi matka.
Päädyt asteikolla -200 - +200 kaikkiin suuntiin esimerkeissäni. Kartoitan sen arvoon ± 100, koska se edustaa kullekin kanavalle menevän tehon prosenttiosuutta - kuitenkin haluat yhdistää sen mihin tahansa käyttötarkoitukseesi - moottorinohjaimen kotelo. Jos esimerkiksi lähetät PWM-signaalia, voit kartoittaa sen arvoon 1000-2000 tai jos lähetät analogista signaalia, voit määrittää sen arvoksi 0-255 ja asettaa suunnan totuusarvoksi jne.
Esimerkki Arduinosta:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; // joissakin tapauksissa max on 100, joissakin tapauksissa 200 // otetaan huomioon ero, joten max on aina 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle - diff: rightThrottle + diff; // Kartta ± 200 -± 100 tai mikä tahansa alue, jonka neulatThrottle = map (leftThrottle, 0, 200, -100, 100); rightThrottle = map (rightThrottle, 0, 200, -100, 100); // constrainleftThrottle = rajoittaa (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100);
Esimerkki JavaScriptistä:
var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y - joystick_x; // joissakin tapauksissa max on 100, joissakin tapauksissa 200, // otetaan huomioon ero, joten max on aina 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; // Kartta ± 200: sta taaksepäin ± 100: een tai mihin tahansa neulaan -100, 100); // rajoittaa leftThrottle = rajoittaa (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100); // jotkut aputoiminnotvar constrain = function (num, min, max) {return Math.min (Math max (numero, min), max); }; var map = toiminto (numero, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, mapped; inMin = inMin + inMax; num = numero + inMax; inMax = inMax + inMax; inSpan = Math.abs (inMax-inMin); p = (lukumäärä/inSpan)*100; outMin = outMin + outMax; outMax = outMax + outMax; outSpan = Math.abs (outMax - outMin); kartoitettu = outSpan*(p/100) - (outMax/2); paluu kartoitettu;};
Suositeltava:
Kuvien tallentaminen tehtävää varten: 4 vaihetta (kuvien kanssa)
Kuvien tallentaminen tehtävää varten: 1. Avaa uusi Google -asiakirja ja suojaa kuvat tällä sivulla. Käytä ctrl (ohjaus) ja " c " kopioitava näppäin 3. Käytä ctrl (control) ja " v " liitettävä avain
Kuvien tekeminen saumattomiksi vain vaaka- tai pystysuunnassa ("The GIMP"): 11 vaihetta (kuvien kanssa)
Kuvien tekeminen saumattomiksi vain vaaka- tai pystysuunnassa ("The GIMP"): Jos yrität "Tee saumaton" -laajennusta GIMP: ssä, se tekee kuvasta saumattoman sekä vaaka- että pystysuunnassa samanaikaisesti. Se ei salli sinun tehdä siitä saumatonta vain yhdessä ulottuvuudessa. Tämä ohje auttaa sinua saamaan kuvan
Kitaravahvistimen kanavan vaihtopedaali: 6 vaihetta
Kitaravahvistimen kanavanvaihtopoljin: Tämä jalkakytkinpoljin luotiin vahvistimen kanavan vaihtamiseksi ja FX: n ohittamiseksi. En tiennyt, että äskettäin ostamani Vox Valvetronix -vahvistin ei ollut jalkakytkimen mukana. Kanavan vaihto ja FX ON/OFF suoritetaan TRS: llä (Vihje, Rin
Yksinkertainen taustakuva valokuvauksen ja kerrosten sekoittamisen avulla - Photoshop -opetusohjelma: 5 vaihetta
Yksinkertainen taustakuva valokuvauksen ja tasosekoittamisen avulla - Photoshop -opetusohjelma: Luo visuaalisesti upea taustakuva yksinkertaisella tekniikalla Photoshopin sisällä.; Uusi Aseta leveys ja korkeus pikseliksi ja aseta
5 tai 4 kanavan kuulokkeet vanhoilta: 5 vaihetta
5 tai 4 kanavan kuulokkeet vanhoilta: Hei, tämä on ensimmäinen opastettava … koskaan miettinyt, mitä tehdä noille vanhoille rikkoutuneille halvoille kuulokkeille? miksi et rakenna päivitettyä uutta? tässä opastetussa sairaudessa näytä kuvia äskettäisistä frankenstein 4 -kanavaisista kuulokkeistani … ja joitain vaiheita