Talaan ng mga Nilalaman:

Pag-unawa sa Paghahalo ng Channel: 4 na Hakbang (na may Mga Larawan)
Pag-unawa sa Paghahalo ng Channel: 4 na Hakbang (na may Mga Larawan)

Video: Pag-unawa sa Paghahalo ng Channel: 4 na Hakbang (na may Mga Larawan)

Video: Pag-unawa sa Paghahalo ng Channel: 4 na Hakbang (na may Mga Larawan)
Video: Grade 3 Filipino Q1 Ep7: Pagsunod sa Nakasulat na Panuto na May 2-4 na Hakbang 2024, Hulyo
Anonim
Image
Image
Paraan ng Paghalo »Wala
Paraan ng Paghalo »Wala

Kung naghimok ka ng isang chassis ng remote control, may isang magandang pagkakataon na ginamit mo ang paghahalo, kahit na hindi mo alam ito. Sa partikular, kung gumamit ka ng isang solong joystick o gimble upang makontrol ang isang sasakyan na gumagamit ng skid steering o kaugalian na pagpipiloto, ginamit mo ang paghahalo.

Ang paghahalo ay simpleng kung paano ginagamit ang data mula sa iyong joystick upang matukoy kung gaano karaming lakas ang dapat ibigay sa bawat panig ng tsasis.

Kung magbubukas ka ng isang joystick, sa pangkalahatan ay makakakita ka ng dalawang potentiometers sa loob. Ang isa upang sukatin ang iyong kasalukuyang posisyon sa kahabaan ng Y axis (pataas at pababa), at ang isa pa upang masukat kung nasaan ka sa kahabaan ng X axis (gilid sa gilid).

Bagaman wala akong pormal na pagsasanay sa paksa na kinailangan kong gawin sa paghahalo ng code dati at kamakailan ay nais kong sumisid nang kaunti sa paksa.

Una nais kong tandaan na ang karamihan sa mga RC transmitter ay may kakayahan sa paghahalo tulad ng ginagawa ng maraming mga motor controler. Ang impormasyong ito ay magiging mas kapaki-pakinabang kung kailangan mong gawin ang paghahalo ng iyong sarili sa iyong code. Sabihin halimbawa kung gumagamit ka ng isang Arduino upang mabasa ang walang halong data mula sa isang RC receiver, o nagbabasa ka ng data ng analog mula sa mga kaldero sa isang joystick, o kung binabasa mo ang mga coordinate mula sa isang digital na joystick sa isang mobile app.

Tingnan natin ang ilang iba't ibang mga diskarte sa paghahalo.

Hakbang 1: Paghalo ng Paraan »Wala

Tingnan muna natin kung ano ang mangyayari kung hindi mo talaga ginagamit ang paghahalo. Kung magpapadala ka lamang ng data mula sa isang aksis patungo sa isang gilid ng chassis at ang iba pang axis sa kabilang panig, hindi tutugon ang iyong sasakyan sa gusto mong paraan.

Halimbawa kung itulak mo ang joystick hanggang sa tuwid, ang axis ng Y ay nasa buong throttle at ang X axis ay nasa 0. Kaya't magmamaneho ka sa mga bilog sa halip na dumiretso.

Hakbang 2: Paraan ng Paraan »Paikutin

Paraan ng Paraan »Paikutin
Paraan ng Paraan »Paikutin

Isang kasamahan sa trabaho ay minsang itinuro sa akin na, sa isang kurot maaari mong paikutin ang iyong transmiter na 45 degree para sa halo ng isang mahirap na tao. Kung naiisip mo ang mga halagang mula sa dalawang potentiometers sa isang joystick bilang pagiging x an y axis sa isang grid (na may parehong axis na umaabot sa -100 hanggang +100) may katuturan ito dahil pupunta ka sa +100 sa parehong axis habang itinutulak mo ang joystick pataas at sa kanan. Kaya kung direktang mapa ito sa iyong dalawang mga chassis channel (sa kaliwa at kanang bahagi ng iyong robot) gagawin nitong pasulong ang iyong robot.

Kaya ang unang paraan ng paghahalo na sinubukan ko ay upang paikutin ng matematika ang x at y coordinate ng 45 degree tungkol sa gitnang punto ng grid.

Gumagana ito ng ok, subalit hindi ako makakapagpasa sa 100% lakas sapagkat kapag umiikot ka, ang pangkalahatang kilusan ay napipigilan sa isang bilog sa loob ng grid, na nangangahulugang hindi ka talaga makakakuha sa kanang tuktok na sulok.

Nagreresulta rin ito sa mga sulok ng grid na hindi ginagamit. Hindi ito isang problema kung gumagamit ka ng isang joystick / gimple na naglilimita sa iyong paggalaw sa gayon ang mga lugar na iyon ay hindi naabot kahit saan, ngunit kung hindi man gugustuhin mong gawin ang isang bahagi ng grid upang gumawa ng isang ganap na proporsyonal ang iyong mga paggalaw.

Kung ikaw ay isang visual na natututo tulad ng aking sarili ang konsepto na ito ay maaaring mas madaling grok sa pamamagitan ng panonood ng video sa simula ng pagtuturo na ito.

Tingnan natin ang ilang mga halimbawa ng code.

TANDAAN TUNGKOL SA AKING MGA HALIMBAWA NG CODE: Iiwanan ko kung paano mo makukuha ang mga halaga ng joystick_x at joystick_y dahil mababago ito depende sa iyong proyekto. Gayundin ako ay magmamapa / pumipigil sa ± 100 ngunit maaaring kailangan mong mag-map sa 1000 - 2000 para sa PWM o 0 - 255 para sa analog output at lagi kong pinipigilan … kung sakali.

Halimbawa ng Arduino:

// matematika paikutin

dobleng 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); // constrain leftThrottle = pipilitin (leftThrottle, -100, 100); rightThrottle = pipilitin (rightThrottle, -100, 100);

Halimbawa ng JavaScript:

// matematika 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 = pumilit (leftThrottle, -100, 100); rightThrottle = pipilitin (rightThrottle, -100, 100); // helper functionvar constrain = function (num, min, max) {return Math.min (Math.max (num, min), max); };

Hakbang 3: Pamamaraan ng Pamamaraan »Simple

Paraan ng Paraan »Simple
Paraan ng Paraan »Simple

Susunod na mayroon kaming isang napaka-simpleng equation na una kong kinuha mula sa isa sa mga Shawn Hymel's Adventures in Science SparkFun na mga video kung saan nagkataong nagtatrabaho siya ng isang katulad na proyekto sa aking pinagtatrabahuhan.

Hinahayaan ka ng equation na ito na makarating sa buong bilis kapag pasulong ngunit katulad ng paikutin na pamamaraan, hindi pinapansin ang mga sulok na lugar ng grid. Ito ay dahil sa ilang mga kaso ang maximum ay 100 at sa ilang mga kaso ang maximum ay 200. Kaya't gagamitin mo ang isang pagpipilit na pag-andar upang huwag pansinin ang anumang bagay pagkatapos ng 100.

At sa pamamagitan ng ang paraan hindi ko tinawag ang simpleng derogatorily na ito … mayroong isang kagandahan sa pagiging simple.

Halimbawa ng Arduino:

int leftThrottle = joystick_y + joystick_x;

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

Halimbawa ng JavaScript:

var leftChannel = joystick_y + joystick_x;

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

Hakbang 4: Pamamaraan ng Pamamaraan »Proportional

Paraan ng Paraan »Proportional
Paraan ng Paraan »Proportional

Sumakay ako sa simpleng pamamaraan na umaasang makagawa ng pinakamahusay na parehong equation ng mundo. Ang ideya dito ay upang maging ganap na proporsyonal sa lahat ng mga direksyon kahit na pahilis sa kabila ng katotohanang kahit na gumagalaw ka ng isang mas malaking distansya mayroon itong parehong saklaw tulad ng kapag gumalaw ka nang patayo na kung saan ay isang mas maliit na distansya.

Natapos ka sa isang sukat na -200 hanggang +200 sa lahat ng direksyon sa aking mga halimbawa na inilalagay ko iyon sa ± 100 dahil kumakatawan ito sa porsyento ng lakas na pupunta sa bawat channel - subalit gugustuhin mong i-map ito sa anumang gumagana sa iyong paggamit- kaso para sa iyong motor controller. Halimbawa kung nagpapadala ka ng isang senyas ng PWM maaari mo itong mapa sa 1000 hanggang 2000 o kung nagpapadala ka ng isang analog signal maaari mo itong i-map sa 0-255 at itakda ang direksyon bilang boolean atbp.

Halimbawa ng Arduino:

int leftThrottle = joystick_y + joystick_x;

int rightThrottle = joystick_y - joystick_x; // sa ilang mga kaso ang max ay 100, sa ilang mga kaso ito ay 200 // factor tayo sa pagkakaiba kaya ang max ay laging 200int diff = abs (abs (joystick_y) - abs (joystick_x)); leftThrottle = leftThrottle <0? leftThrottle - diff: leftThrottle + diff; rightThrottle = rightThrottle <0? rightThrottle - diff: rightThrottle + diff; // Map mula sa ± 200 hanggang ± 100 o kung anong saklaw ang kailangan moTftal = mapa (leftThrottle, 0, 200, -100, 100); rightThrottle = mapa (rightThrottle, 0, 200, -100, 100); // constrainleftThrottle = constrain (leftThrottle, -100, 100); rightThrottle = constrain (rightThrottle, -100, 100);

Halimbawa ng JavaScript:

var leftThrottle = joystick_y + joystick_x; var rightThrottle = joystick_y - joystick_x; // sa ilang mga kaso ang max ay 100, sa ilang mga kaso 200 ito, // factor tayo sa pagkakaiba kaya ang max ay laging 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; // Mapa mula sa ± 200 pabalik sa ± 100 o anuman ang kailangan mo -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 (num, min), max); }; var map = function (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); mapa = outSpan * (p / 100) - (outMax / 2); bumalik na nai-map;};

Inirerekumendang: