Sisukord:

Kanalite segamine: 4 sammu (piltidega)
Kanalite segamine: 4 sammu (piltidega)

Video: Kanalite segamine: 4 sammu (piltidega)

Video: Kanalite segamine: 4 sammu (piltidega)
Video: БЕСПРОВОДНОЕ ВИДЕОНАБЛЮДЕНИЕ WIFI комплект KERUI со слежением за людьми 2024, November
Anonim
Image
Image
Segamisviis »Puudub
Segamisviis »Puudub

Kui olete kunagi juhtinud kaugjuhtimispuldi šassii, on hea võimalus, et olete kasutanud segamist, isegi kui te seda ei teadnud. Täpsemalt, kui olete kasutanud ühe juhtkangi või kangi, et juhtida sõidukit, mis kasutab libisemisjuhtimist või diferentsiaaljuhtimist, olete kasutanud segamist.

Segamine on lihtsalt see, kuidas teie juhtkangi andmeid kasutatakse selleks, et määrata kindlaks, kui palju voolu tuleks šassii mõlemale küljele tarnida.

Kui avate juhtkangi, näete tavaliselt sees kahte potentsiomeetrit. Üks, et mõõta oma praegust positsiooni mööda Y -telge (üles ja alla), ja teine, et mõõta X -telje asukohta (küljelt küljele).

Kuigi mul pole sellel teemal ametlikku koolitust, olen varem pidanud koodi segamist tegema ja hiljuti tahtsin sellesse teemasse veidi sügavamale sukelduda.

Kõigepealt tahan märkida, et enamikul RC -saatjatel on segamisvõime, nagu paljudel mootorikontrolleritel. See teave on kõige kasulikum, kui peate koodi ise segama. Ütle näiteks, kui kasutate Arduinot RC -vastuvõtja segamata andmete lugemiseks või loete juhtkangi pottidest analoogandmeid või kui loete koordinaate mobiilirakenduse digitaalsest juhtkangist.

Vaatame mõningaid erinevaid segamismeetodeid.

Samm: segamismeetod »Puudub

Kõigepealt vaatame, mis juhtub, kui te segamist üldse ei kasuta. Kui saadate andmed ühelt teljelt šassii ühele küljele ja teise telje teisele küljele, ei vasta teie sõiduk soovitud viisil.

Näiteks kui lükkate juhtkangi lõpuni otse edasi, on Y -telg täisgaasil ja X -telg 0. Seega sõidaksite otse ringide asemel ringides.

2. samm: meetod Meetod »Pööra

Meetod Meetod »Pööra
Meetod Meetod »Pööra

Töökaaslane juhtis mulle kord tähelepanu, et näpuotsaga saate oma saatjat vaese mehe jaoks 45 kraadi pöörata. Kui arvate, et juhtkangi kahe potentsiomeetri väärtused on ruudustiku x ja y telg (mõlemad teljed ulatuvad -100 kuni +100), on see palju mõttekas, kuna te lähete +100 -le mõlemal teljel juhtkangi üles ja paremale lükates. Nii et kui see kaardistatakse otse teie kahele šassiikanalile (teie roboti vasak ja parem külg), paneb see teie roboti edasi liikuma.

Nii et esimene segamismeetod, mida ma kunagi proovisin, oli x ja y koordinaatide matemaatiline pööramine ruudustiku keskpunkti ümber 45 kraadi.

See töötab hästi, kuid ma ei saa 100% võimsusega edasi minna, sest pöörlemise ajal on üldine liikumine piiratud ruudustiku ringiga, mis tähendab, et te ei pääse kunagi sellesse paremasse ülanurka.

Selle tulemusel ei kasutata ka võre nurki. See ei ole probleem, kui kasutate juhtnuppu/trikki, mis piiravad teie liikumist, nii et nendesse piirkondadesse ei jõutaks kunagi, kuid muidu soovite, et see ruudustiku osa teeks midagi, nii et teie liigutused tunduksid täiesti proportsionaalsed.

Kui olete visuaalne õppija nagu mina, võib seda kontseptsiooni hõlpsam teha, vaadates selle juhendi alguses olevat videot.

Vaatame mõningaid koodinäiteid.

MÄRKUSED KOODINÄITTE KOHTA Samuti kaardistan/piiranguga ± 100, kuid tõenäoliselt peate kaardistama 1000–2000 PWM jaoks või 0–255 analoogväljundi jaoks jne. Ma piiran alati … igaks juhuks.

Arduino näide:

// matemaatiliselt pöörata

kahekordne rad = -45*M_PI/180; int leftThrottle = joystick_x * cos (rad) - joystick_y * sin (rad); int rightThrottle = juhtnupp_y * cos (rad) + joystick_x * sin (rad); // piirata leftThrottle = piirata (leftThrottle, -100, 100); rightThrottle = piirata (rightThrottle, -100, 100);

JavaScripti näide:

// matemaatiliselt 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); // abistajafunktsioonvariant constrain = funktsioon (arv, min, max) {return Math.min (Math.max (arv, min), max); };

3. samm: meetodimeetod »Lihtne

Meetod Meetod »Lihtne
Meetod Meetod »Lihtne

Järgmisena on meil väga lihtne võrrand, mille võtsin esmalt ühest Shawn Hymeli seiklustest Science SparkFuni videos, kus ta juhtus töötama väga sarnase projektiga, millega ma tegelesin.

See võrrand võimaldab teil edasi liikudes täiskiirusele jõuda, kuid sarnaselt pööramismeetodiga eirab see ruudustiku nurga alasid. Selle põhjuseks on asjaolu, et mõnel juhul on maksimum 100 ja mõnel juhul 200. Seega kasutaksite piirangufunktsiooni, et midagi pärast 100 eirata.

Ja muide, ma ei nimeta seda lihtsaks halvustavalt … lihtsuses peitub ilu.

Arduino näide:

int leftThrottle = juhtnupp_y + juhtnupp_x;

int rightThrottle = joystick_y - joystick_x; // piirata leftThrottle = piirata (leftThrottle, -100, 100); rightThrottle = piirata (rightThrottle, -100, 100);

JavaScripti näide:

var leftChannel = juhtnupp_y + juhtnupp_x;

var rightChannel = joystick_y - joystick_x; // piirata leftChannel = piirata (leftChannel, -100, 100); rightChannel = piirata (rightChannel, -100, 100); // abistajafunktsioonvariant constrain = funktsioon (arv, min, max) {return Math.min (Math.max (arv, min), max); };

Samm 4: Meetod Meetod »Proportsionaalne

Meetod Meetod »Proportsionaalne
Meetod Meetod »Proportsionaalne

Ma loobusin lihtsast meetodist, lootes mõlema maailma võrrandist parima. Idee on olla täielikult proportsionaalne kõigis suundades, isegi diagonaalselt, hoolimata asjaolust, et kui liigute suuremat vahemaad, on selle ulatus sama, kui vertikaalselt liikudes, mis on väiksem vahemaa.

Lõppkokkuvõttes leiate minu näidetes skaala vahemikus -200 kuni +200 igas suunas. Ma kaardistan selle väärtuseks ± 100, kuna see tähistab igale kanalile kuluva võimsuse protsenti, kuid soovite selle kaardistada vastavalt sellele, mis teie jaoks sobib. juht oma mootorikontrollerile. Näiteks kui saadate PWM-signaali, võite kaardistada selle väärtuseks 1000–2000 või kui saadate analoogsignaali, võite selle kaardistada väärtuseks 0–255 ja määrata suuna loogiliseks jne.

Arduino näide:

int leftThrottle = juhtnupp_y + juhtnupp_x;

int rightThrottle = joystick_y - joystick_x; // mõnel juhul on max 100, mõnel juhul 200 // arvestame erinevusega, nii et max on alati 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightTrolle <0? rightThrottle - diff: rightThrottle + diff; // Kaart vahemikus ± 200 kuni ± 100 või mis iganes vahemikus te nõelateThrottle = map (leftThrottle, 0, 200, -100, 100); rightThrottle = map (rightThrottle, 0, 200, -100, 100); // constrainleftThrottle = piirata (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100);

JavaScripti näide:

var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y - joystick_x; // mõnel juhul on max 100, mõnel juhul 200, // võtame erinevuse arvesse, nii et max on alati 200var diff = Math.abs (Math.abs (joystick_y) - Math.abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightTrolle <0? rightThrottle -diff: rightThrottle + diff; // Kaart vahemikus ± 200 tagasi alla kuni ± 100 või mis iganes näpistad Throlle = kaart (leftThrottle, -200, 200, -100, 100); rightThrottle = map (rightThrottle, -200, 200, -100, 100); // piirata leftThrottle = piirata (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100); // mõned abifunktsioonidvari piirang = funktsioon (arv, min, max) {return Math.min (Matemaatika max (arv, min), max); }; var map = funktsioon (num, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, kaardistatud; inMin = inMin + inMax; num = num + inMax; inMax = inMax + inMax; inSpan = Math.abs (inMax-inMin); p = (arv/inSpan)*100; outMin = outMin + outMax; outMax = outMax + outMax; outSpan = Math.abs (outMax - outMin); kaardistatud = outSpan*(p/100) - (outMax/2); tagastamine kaardistatud;};

Soovitan: