Përmbajtje:

Kuptimi i përzierjes së kanaleve: 4 hapa (me fotografi)
Kuptimi i përzierjes së kanaleve: 4 hapa (me fotografi)

Video: Kuptimi i përzierjes së kanaleve: 4 hapa (me fotografi)

Video: Kuptimi i përzierjes së kanaleve: 4 hapa (me fotografi)
Video: ➡️WOLDEN WASSER 👉 EAU DE TOILETTE #perfumes #español #fraganciaseconomicas #fraganciasmasculinas 2024, Nëntor
Anonim
Image
Image
Metoda e përzierjes »Asnjë
Metoda e përzierjes »Asnjë

Nëse keni drejtuar ndonjëherë një shasi të telekomandës, ka një shans të mirë që keni përdorur përzierjen, edhe nëse nuk e keni ditur. Në mënyrë të veçantë, nëse keni përdorur një levë ose gimble të vetme për të kontrolluar një automjet i cili përdor drejtimin me rrëshqitje ose drejtimin diferencial, keni përdorur përzierjen.

Përzierja është thjesht se si të dhënat nga levë juaj përdoren për të përcaktuar se sa energji duhet të furnizohet në secilën anë të shasisë.

Nëse hapni një levë, në përgjithësi do të shihni dy potenciometra brenda. Njëra për të matur pozicionin tuaj aktual përgjatë boshtit Y (lart e poshtë), dhe tjetra për të matur vendin ku jeni përgjatë boshtit X (nga njëra anë në tjetrën).

Edhe pse nuk kam ndonjë trajnim zyrtar mbi këtë temë, më është dashur të bëj përzierje në kod më parë dhe kohët e fundit kam dashur të zhyten pak më thellë në këtë temë.

Së pari dua të vërej se shumica e transmetuesve RC kanë aftësi përzierjeje siç bëjnë shumë kontrollues motorikë. Ky informacion do të jetë më i dobishëm nëse duhet të bëni përzierjen vetë në kodin tuaj. Thuaj për shembull nëse jeni duke përdorur një Arduino për të lexuar të dhëna të përziera nga një marrës RC, ose po lexoni të dhëna analoge nga tenxheret në një levë, ose nëse po lexoni koordinatat nga një levë dixhitale në një aplikacion celular.

Le të hedhim një vështrim në disa qasje të ndryshme të përzierjes.

Hapi 1: Metoda e përzierjes »Asnjë

Së pari le të hedhim një vështrim në atë që ndodh nëse nuk përdorni përzierje fare. Nëse thjesht i dërgoni të dhënat nga një aks në njërën anë të shasisë dhe boshtin tjetër në anën tjetër, automjeti juaj nuk do të përgjigjet ashtu siç dëshironi.

Për shembull, nëse e shtyni levën drejtpërsëdrejti përpara, boshti Y është në gaz të plotë dhe boshti X është në 0. Kështu që ju do të vozitni në rrathë në vend që të shkoni drejt.

Hapi 2: Metoda e Metodës »Rrotulloni

Metoda Metoda »Rrotulloni
Metoda Metoda »Rrotulloni

Një bashkëpunëtor një herë më tha se, në një çikë ju mund ta rrotulloni transmetuesin tuaj 45 gradë për përzierjen e një njeriu të varfër. Nëse mendoni për vlerat nga dy potenciometrat në një levë si boshti x an y në një rrjet (me të dy boshtet që shtrihen nga -100 në +100) kjo ka shumë kuptim sepse do të shkoni në +100 në të dy boshtet ndërsa e shtyni levën lart dhe djathtas. Pra, nëse kjo përputhet drejtpërdrejt në dy kanalet tuaja të shasisë (anët e majta dhe të djathta të robotit tuaj) do të bëjë që roboti juaj të shkojë përpara.

Pra, metoda e parë e përzierjes që kam provuar ndonjëherë ishte rrotullimi matematikor i koordinatave x dhe y 45 gradë rreth pikës qendrore të rrjetit.

Kjo funksionon mirë, megjithatë nuk mund të eci përpara me fuqi 100% sepse kur jeni duke rrotulluar, lëvizja e përgjithshme kufizohet në një rreth brenda rrjetit, që do të thotë që ju kurrë nuk mund të hyni vërtet në atë këndin e sipërm të djathtë.

Kjo gjithashtu rezulton që qoshet e rrjetit të mos shfrytëzohen. Ky nuk është problem nëse përdorni një levë/gimple që kufizon lëvizjen tuaj kështu që ato zona nuk arrihen kurrë, por përndryshe ju do të dëshironi që ajo pjesë e rrjetit të bëjë diçka në mënyrë që lëvizjet tuaja të ndjehen plotësisht proporcionale.

Nëse jeni një nxënës vizual si unë, ky koncept mund të jetë më i lehtë të shikoni duke parë videon në fillim të këtij udhëzuesi.

Le të shikojmë disa shembuj të kodit.

SH NOTNIME P EXR SHEMBULLAT E MI KODI: Unë po lë mënjanë se si i merrni vlerat e joystick_x dhe joystick_y pasi do të ndryshonte në varësi të projektit tuaj. Gjithashtu unë do të bëj hartë/kufizim në 100, por ka të ngjarë që ju të keni nevojë të hartoni në 1000 - 2000 për PWM ose 0 - 255 për dalje analoge etj. Unë gjithmonë e kufizoj … vetëm në rast.

Shembull Arduino:

// rrotullohet matematikisht

rad e dyfishtë = -45*M_PI/180; int leftThrottle = joystick_x * cos (rad) - joystick_y * sin (rad); int rightThrottle = joystick_y * cos (rad) + joystick_x * sin (rad); // kufizoj leftThrottle = kufizoj (majtas throttle, -100, 100); rightThrottle = kufizoj (rightThrottle, -100, 100);

Shembull JavaScript:

// matematikisht 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 = kufizoj (majtas throttle, -100, 100); rightThrottle = kufizoj (rightThrottle, -100, 100); // helper functionvar constrain = funksion (num, min, max) {return Math.min (Math.max (num, min), max); };

Hapi 3: Metoda e Metodës »E thjeshtë

Metoda Metoda »E thjeshtë
Metoda Metoda »E thjeshtë

Më tej ne kemi një ekuacion shumë të thjeshtë të cilin e mora për herë të parë nga një nga videot e Shawn Hymel's Adventures in Science SparkFun ku ai ndodhi të punonte një projekt shumë të ngjashëm me atë në të cilin po punoja.

Ky ekuacion ju lejon të arrini shpejtësinë e plotë kur shkoni përpara, por ashtu si metoda e rrotullimit, ajo nuk merr parasysh zonat qoshe të rrjetit. Kjo ndodh sepse në disa raste maksimumi është 100 dhe në disa raste maksimumi është 200. Pra, ju do të përdorni një funksion kufizues për të shpërfillur asgjë pas 100.

Dhe meqë ra fjala, unë nuk e quaj këtë të thjeshtë në mënyrë poshtëruese … ka një bukuri në thjeshtësi.

Shembull Arduino:

int leftThrottle = levë_y + levë_xh;

int rightThrottle = joystick_y - joystick_x; // kufizoj leftThrottle = kufizoj (majtas throttle, -100, 100); rightThrottle = kufizoj (rightThrottle, -100, 100);

Shembull JavaScript:

var leftChannel = joystick_y + joystick_x;

var rightChannel = joystick_y - joystick_x; // kufizo leftChannel = kufizo (leftChannel, -100, 100); rightChannel = kufizoj (rightChannel, -100, 100); // helper functionvar constrain = funksion (num, min, max) {return Math.min (Math.max (num, min), max); };

Hapi 4: Metoda e Metodës »Proporcionale

Metoda Metoda »Proporcionale
Metoda Metoda »Proporcionale

Hipa në këmbë nga metoda e thjeshtë duke shpresuar të bëj më të mirën nga ekuacioni i të dy botëve. Ideja këtu është që të jeni plotësisht proporcional në të gjitha drejtimet edhe diagonalisht pavarësisht faktit që edhe pse jeni duke lëvizur në një distancë më të madhe ajo ka të njëjtën gamë si kur lëvizni vertikalisht që është një distancë më e vogël.

Përfundoni me një shkallë prej -200 në +200 në të gjitha drejtimet në shembujt e mi, unë e shënoj atë në 100 because sepse përfaqëson përqindjen e fuqisë që shkon në çdo kanal - megjithatë ju do të dëshironi ta hartoni atë në çfarëdo që funksionon në përdorimin tuaj- rast për kontrolluesin tuaj motorik. Për shembull, nëse jeni duke dërguar një sinjal PWM, mund ta vendosni atë në 1000 deri në 2000 ose nëse po dërgoni një sinjal analog, mund ta hartoni në 0-255 dhe të vendosni drejtimin si boolean, etj.

Shembull Arduino:

int leftThrottle = levë_y + levë_xh;

int rightThrottle = joystick_y - joystick_x; // në disa raste max është 100, në disa raste është 200 // le të faktojmë ndryshimin kështu që maksimumi është gjithmonë 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = majtëTrottle <0? leftThrottle - ndrysh: leftThrottle + ndrysh; rightThrottle = rightThrottle <0? rightThrottle - ndrysh: rightThrottle + ndrysh; // Harta nga to 200 në 100 or ose çfarëdo diapazoni që ju nevojitetleftThrottle = hartë (majtas Throttle, 0, 200, -100, 100); rightThrottle = hartë (rightThrottle, 0, 200, -100, 100); // constrainleftThrottle = kufizoj (majtas Throttle, -100, 100); rightThrottle = kufizoj (rightThrottle, -100, 100);

Shembull JavaScript:

var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y - joystick_x; // në disa raste max është 100, në disa raste është 200, // le të faktorizojmë diferencën kështu që maksimumi është gjithmonë 200var ndrysh = Math.abs (Math.abs (joystick_y) - Math.abs (joystick_x)); leftThrottle = majtas Thottottle <0? leftThrottle - ndrysh: leftThrottle + ndrysh; rightThrottle = rightThrottle <0? djathtas -100, 100); // kufizoj leftThrottle = kufizoj (leftThrottle, -100, 100); rightThrottle = kufizoj (rightThrottle, -100, 100); // disa funksione ndihmëse varg = funksion (numër, min, max) {kthim Math.min (Matematikë max (num, min), max); }; var map = funksioni (num, inMin, inMax, outMin, outMax) {var p, inSpan, outSpan, i hartuar; 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); e hartuar = jashtëSpan*(p/100) - (jashtëMaks/2); kthimi i hartuar;};

Recommended: