Talaan ng mga Nilalaman:

Isang 4WD Robot na Hinimok Sa Pamamagitan ng Remote USB Gamepad: 6 Mga Hakbang
Isang 4WD Robot na Hinimok Sa Pamamagitan ng Remote USB Gamepad: 6 Mga Hakbang

Video: Isang 4WD Robot na Hinimok Sa Pamamagitan ng Remote USB Gamepad: 6 Mga Hakbang

Video: Isang 4WD Robot na Hinimok Sa Pamamagitan ng Remote USB Gamepad: 6 Mga Hakbang
Video: Xiaomi Matalinong Remote Control Car Electric Electric Car Toy Toy Radio 4 Wheel Drive. 2024, Nobyembre
Anonim
Image
Image

Para sa aking susunod na proyekto ng robotics, pinilit akong mag-arkitekto / magdisenyo ng aking sariling platform ng robot dahil sa hindi inaasahang pangyayari.

Ang layunin ay magkaroon ito ng autonomous, ngunit una, kailangan kong subukan ang pangunahing kakayahan sa pagmamaneho, kaya naisip kong magiging isang masayang proyekto sa gilid na kumilos at makontrol na parang isang RC (kontroladong radyo) na sasakyan, ngunit sa halip ay gumamit ng isang USB Gamepad.

Ang mga resulta ay tungkol sa mabuti o mas mahusay kaysa sa inaasahan ko.

Ang bentahe ng pagpunta sa ruta ng USB Gamepad, na may maraming mga programa, ay maaari kong ipasadya ito at idagdag sa kung ano ang nagawa ko na. Wala akong anumang aktwal na karanasan sa pagbuo ng isang sasakyang RC, ngunit naiisip ko na ang isa ay medyo natigil sa kung ano man ang transmiter ng RC (mga joystick / pindutan, atbp) at ang RC receiver ay kasama.

Halimbawa, nagdagdag ako ng ilang pagkilala na ang robot ay tumama sa isang pader, sa pamamagitan lamang ng pagkakaroon ng software na tuklasin ang mga mataas na alon at mababang halaga ng bilis ng encoder.

Bilang opsyonal, maaaring magdagdag ang ilan ng mga USB webcam sa robot, depende sa kung ilan at kanilang pagkakalagay, maaaring magmaneho ang robot sa paligid ng sala at sa ibang silid, habang nakaupo sa ibang lugar sa harap ng computer na may koneksyon sa USB Gamepad ito

Ang Instructable na ito ay hindi magiging isang totoo, detalyado, lahat-ng-kasama, sunud-sunod na paano-ngunit susubukan kong magbigay ng maraming detalye hangga't makakaya ko.

Mga gamit

Mga Iminumungkahing Bahagi: Karamihan sa mga ito ay nakuha ko mula sa Servo City (Actobotics).

2 - 13.5 Mga U-channel, para sa mga gilid ng base frame. Ang mga motor ay naka-mount dito. Nagpunta ako sa isang bagay na mas maikli at ang aking mga motor ay naka-mount sa pinakadulo na sulok, at naging mahirap upang mai-mount ang mga ito.

2 - 12 Mga U-channel para sa harap at likod ng base frame.

2 - 15 Mga U-channel para sa mga bumper, harap at likuran

2 - 7 (o 7.5 ?) Mga U-channel para sa mga haligi sa harap. Hindi ito masyadong kritikal, maaaring mag-iba ang haba. Depende kung gaano kataas ang mga likurang haligi, at sa anong taas ang pipiliin mong ilagay ang angled U-channel na kumokonekta sa pagitan nila.

2 - (haba?) Mga U-channel para sa anggulong miyembro, harap-sa-likuran, na kumokonekta sa mga patayong haligi. Ang isang ito ay kritikal, dahil ang Servo City / Actobotics ay nagbebenta ng 45 degree angled panels o bracket para sa hangaring ito, ngunit kailangan mong gumawa ng ilang matematika / trig upang matiyak na nakuha mo ang tamang haba.

2 - (haba?) Mga U-channel upang maghatid ng mga mas mataas na antas na bumper sa gilid, muli itong nakasalalay sa kung ano ang iyong ginagawa sa base

2 - (haba?) Mga U-channel upang magsilbi bilang mas mataas na antas na harap at likuran ng mga bumper, na isyu sa itaas.

1 - (haba?) U-channel upang maghatid ng pinakamataas na miyembro, sumasaklaw sa likuran ng mga haligi. Ang isang ito ay maaaring hindi masyadong kritikal, dahil maaari kang mag-mount sa tuktok, o sa harap ng / likod ng mga patayo na haligi.

12 (aprox) Mga L-channel o braket. Naghahatid ito ng maraming layunin ngunit mahalagang nagbibigay ng integridad / lakas ng istruktura sa mga sulok ng base frame AT sa mga patayong haligi.

4 (+?) 3-hole hanggang 5-hole flat-channel. Nagbibigay din ito ng lakas na istruktura sa robot.

Nagbebenta ang ServoCity ng dalawang pangunahing uri ng malalaking-area flat panel, na kapaki-pakinabang para magamit bilang ilalim na skid-pan, o tuktok kung saan pupunta ang iyong baterya at o mga tagakontrol, o kahit para sa mas mataas na ibabaw ng mga sensor.

Mayroong 4 (4.5?) "X 12" na panel, at sa palagay ko ang iba pa ay isang 9 (9.5?) "X 12 panel.

Ngayon ito ay kung saan ang mga bagay ay naging kawili-wili, at maaaring nakalilito at magastos (magdagdag ng maliliit na bahagi). Ang lahat ng mga channel, atbp, ay maaaring mai-attach sa bawat isa sa pamamagitan ng mga piraso ng pagkonekta na kung saan mayroong IBA’Y. Dito ako humihingi ng paumanhin wala akong isang komprehensibo, detalyadong, tukoy na listahan ng mga bahagi.

At ang bagay ay.. hindi mo talaga alam kung alin ang maaaring kailanganin mo, o kung ilan.. sapagkat maraming mga paraan na maaari mong magkakasama sa mga piraso na ito.

Maaari kong ilista ang ginamit ko:

www.servocity.com/90-quad-hub-mount-c

www.servocity.com/side-tapped-pattern-moun…

www.servocity.com/90-quad-hub-mount-d

Ang mga sumusunod na dalawa ay napaka-madaling gamiting, at i-stock ko lamang ito:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Susunod ay ang lahat ng mga tornilyo (bolts). Nagsimula ako sa isang pakete ng BAWAT laki, at dumaan ako sa karamihan sa kanila. Gumamit ako ng mas matagal na mga tornilyo kung saan hindi mahalaga ang laki, at inilalaan ang mga mas maikli para sa kung saan sila KINAKAILANGAN dahil walang ibang haba ang gagana.

Panghuli, dapat kang makakuha ng 1 bag ng mga ito:

www.servocity.com/6-32-nylock-nuts-pack

Hindi ko iyon ginamit nang marami, ngunit sila (sa palagay ko) ay kritikal upang matiyak na ang iyong mga motor ay hindi gumagalaw nang maluwag mula sa frame sa paglipas ng panahon. Dalawa lamang ang gagana sa bawat motor, dahil sa U-channel

Kakailanganin mo ng hindi bababa sa 4 sa mga ito, maaari kang makakuha ng isang labis o higit pa kung sakaling maging sanhi ka ng pinsala sa isa (magtiwala ka sa akin, maaari mong ilagay / alisin ang mga motor nang ilang beses):

www.servocity.com/heavy-duty-clamping-shaf…

Karaniwan, ang mga motor shaft ay 6mm, at ang mga axle ay 1/4 (0.25in).

Makakakuha ako ng ilang mga itim na turnilyo, sinasabing mas malakas, at gamitin ang mga ito para sa mga clamp sa itaas, at HINDI gamitin ang mga tornilyo na kasama ng mga clamp:

(Sa palagay ko ito ang mga):

4 - 1/4 "(0.25") diameter bearings

1 - bag ng itim na 1/4 spacers

4 - Clamping D-Hubs

www.servocity.com/0-770-clamping-d-hubs

4 - D-Shafts (# 6340621.375 "(1-3 / 8")

4 - 6 mabibigat na gulong ng tungkulin

www.servocity.com/6-heavy-duty-wheel

Tandaan na gusto ko ang mga gulong na ito ngunit mayroon silang matigas na gilid ng goma. Mukhang mahusay ang mga ito sa matitigas na sahig, at karpet, at marahil ay matigas na paglalakad ng kongkreto. Hindi magagaling sa damo, buhangin, atbp.

DIN, ay may posibilidad nilang basain ang iyong karpet !!!

4 - mga motor:

www.servocity.com/motors-actuators/gear-mo…

Nagpunta ako kasama ang 223 RPM, mahusay na pinakamataas na bilis ng panloob, na maaari ring ilipat ang aking robot (mabigat sa 2 SLA 12V na baterya) medyo madali sa mabagal na paggalaw.

2 - mga encoder ng motor para sa mga motor. (Ang Roboclaw ng Servo City ay humahawak lamang ng 2 encoder)

1 - Roboclaw 2X45A motor controller, siguraduhing nakukuha mo ang isa na may mga berdeng terminal block dito, hindi ang mga pin …. welll … bawat isa ay may kanilang mga kalamangan. Hindsight.. baka nakuha ko ang mga pin.

Sa tingin ko ito ay mula sa Servo City.

Nagbebenta ang SparkFun ng Arduino Uno (iyon ang ginamit ko), at pati na rin ang Redboard Artemis bilang iyong manager ng drive.

Gusto mo ng isang Raspberry Pi 3 (o 4?) Bilang iyong mataas na antas na "talino" at interface sa iyo.

Kakailanganin mo ang mga kable, switch, piyus, at isang napaka-matatag na "flyback" diode.

Gumamit ako ng isang Duracell 12V 14AH deep-cycle SLA na baterya, ngunit maaari mong gamitin ang anupaman.

BABALA! Ang disenyo ng robot na ito (TALL, at Malawak, ngunit MAIKLING), ipinapalagay ang isang uri ng mabibigat na sentro ng grabidad, tulad ng isang baterya ng SLA na ibibigay. Maaaring hindi ito mahusay sa iba pang mga uri ng mas bagong mga pack ng baterya ng teknolohiya. LiPo, Lion, atbp. Madali itong makatapos.

Mula sa Pololu nakakuha ako ng ilang mga adapter ng plug ng bariles, upang malaya kong mai-kapangyarihan ang Arduino at / o ang Redboard, kahit na konektado sila sa Raspberry sa pamamagitan ng USB, dahil hindi ko nais na umasa sa lakas ng Raspberry. (Lalo na ang mga mounting camera, sensor, atbp.)

Kakailanganin mo ang isang 12-to-5V step down voltage regulator, minimum na 5A (?) Para sa Raspberry. Ang iba ay maaaring hawakan ang anumang nasa pagitan ng 7 hanggang 15V nang direkta sa baterya ng SLA.

Iyon ay tungkol dito para sa mga bahagi.

Ano ang HINDI ko gagawin - 90 degree na beveled gearing.

Muli, maraming mga video sa aking Robotics youtube playlist na nagdedetalye ng halos lahat sa itaas.

Hakbang 1: Konstruksiyon

Sa totoo lang, lahat ng aking mga hakbang sa konstruksyon ay nasa anyo na ng mga youtubes. Maaari mong makita ang mga nasa aking playlist ng Robotics, simula sa "Wallace Robot 4". Ang mga nauna (Wallace II, Wallace III) ay mayroon ding mahusay na materyal

www.youtube.com/playlist?list=PLNKa8O7lX-w…

Hakbang 2: Subukan ang Roboclaw, Motors, at Encoder

Ang mga gumagawa ng Roboclaw (BasicMicro) ay may isang application na Windows na maaari mong gamitin upang matiyak na na-wire mo nang tama ang mga motor at encoder sa Roboclaw. Magkakabit ka ng magkatulad na panig na mga motor na kahanay ng Roboclaw. Maaari mong piliing gamitin ang mga encoder wires, sa likuran lamang ng motor, o sa harap na motor, o baka mas mabuti pa - DINAGAL.

Ang dahilan para sa aking mungkahi ay may kinalaman sa (mamaya) na pag-check para sa isang natigil na robot. Ang pagkakaroon ng katayuan na dayagonal ng kung ang harap / likurang gulong ay / ay hindi lumiliko ay maaaring mas mahusay kaysa sa harap lamang, o sa likuran lamang.

TANDAAN: ang HINDI ko nagawa ay ang paggamit ng Arduino upang kumonekta din (sa pamamagitan ng mga GPIO pin) sa mga encoder - kung ginawa mo iyon, maaari mong hawakan ng Roboclaw ang 2 mga encoder, at pagkatapos ay hawakan ng Arduino ang dalawa pa, at makatarungan query sa Roboclaw para sa ito ay dalawang mga halaga ng encoder (at bilis).

TANDAAN: Ginamit ko ang application ng BasicMicro upang paunang i-configure ang Roboclaw para sa Ramping Up / Ramping Down. Mabuti ito para sa pagprotekta ng hardware at electronics. Mayroong isang video tungkol doon sa aking playlist ng Robotics.

Halos nakalimutan ko: Bumili din ako ng ilang mga kable ng konektor ng bala na dumadaan sa pagitan ng mga kable ng motor, at ng Roboclaw. TANDAAN: kung gagawin mo ito, mapapansin mo na ang kabuuang haba ng cable ay TUNAY NA. Ngunit hindi ko nais na maputol ang anuman kung hindi ko kailangan. Ginawa ko (para sa mga susunod na hakbang) na nakatagpo ng mga isyu sa komunikasyon sa USB sa pagitan ng Raspberry at ng Arduino, marahil ay dahil sa ingay ng EMI.. ngunit nagtrabaho ako sa paligid na may software.

Kung ito ay naging isang problema, maaari mong i-cut maikli ang mga wire - maaari ka ring bumili ng metal na panangga (mula sa Amazon, 1 diameter).

Huling bagay: Hindi ko pa magagawa ito --- magkaroon ng Roboclaw auto-configure o auto-tune (gamit ang mga encoder) upang ang parehong kaliwa at kanang bahagi ng motor ay gumagalaw sa parehong bilis at ang robot ay dumidiretso.

Ang minahan ay curve nang bahagya sa halos 12 talampakan ngunit hindi sapat na naramdaman ko ang pangangailangan na gawin ito.

Hakbang 3: Pagdaragdag at Programming ng Arduino

Kakailanganin mo ang plug ng bariles at ilang mga kable, isang USB cable din. Tiyaking nakukuha mo ang tamang isa para sa konektor ng Arduino.

Kakailanganin mong i-download ang Arduino IDE.

Dito sa Github ay ang pinakabagong sketch na humahawak sa pagmamaneho ng robot:

github.com/elicorrales/wallace.robot.ardui…

Ikonekta mo ang Arduino sa iyong computer na nagpapatakbo ng IDE, at batay sa kung paano nakasulat ang sketch, gagamit ka ng mga pin na 10 at 11 sa Arduino para sa mga serial na komunikasyon (Software Serial) sa Roboclaw.

Bumuo ako ng isang simpleng protocol sa komunikasyon sa pagitan ng Raspberry Pi at ng Arduino.

Ito ay batay sa ASCII-character, na ginagawang mas madaling i-debug at subukan ang paggamit lamang ng "serial monitor" window ng Arduino IDE.

Ang mga utos ay nagsisimula sa bilang na "0" (zero) at aakyat lamang kung kinakailangan

Ang mga utos na nagsisimula sa "20" ay direktang mga utos ng Roboclaw, at ang mga nasa ibaba ng bilang na iyon ay mahigpit na mga utos na nauugnay sa Arduino.

Dahil sa ingay ng EMI, pinagbuti ko ang command string upang maisama ang isang tsekum.

Kaya, ang anumang string ay isasama:

# bilang ng mga token sa string kasama ang isang ito

ang tsekum

Halimbawa, sabihin na nais mong tumugon ang Arduino gamit ang menu ng mga utos:

4 0 12 16

Ang "4" ay apat na mga token sa string.

Ang "0" ay ang utos ng MENU.

Ang "12" ang pinili kong random na numero.

Ang "16" ay ang kabuuan ng 4 + 0 + 12.

Ang parehong utos na MENU ay maaaring magkakaiba:

4 0 20 24

Dahil pumili ako ng ibang random na numero, ang checkum ay iba rin.

Halimbawa, sabihin na nais mong sumulong sa 100% na bilis:

5 29 0 134 100

"5" limang mga token

"29" ang FORWARD utos

"0" ang random na numero

"134" ang tsekum

"100" ang parameter 1 (ang bilis sa kasong ito)

Kung hindi ma-verify ng Arduino ang papasok na string, ibinabagsak lamang ito / hindi pinapansin, walang tugon.

Kung ang Arduino ay hindi makakatanggap ng isang susunod na utos ng kilusan sa X milliseconds, nagpapadala ito ng isang STOP motor sa Roboclaw.

Nagsisimula ang Arduino at nagsimulang magpadala ng isang auto-status sa USB port … maliban kung sinabi na ihinto ang paggawa nito.

Sa puntong ito dapat kang maging handa upang subukang kontrolin ang Roboclaw at panoorin ang pagliko ng mga motor, sa pamamagitan lamang ng paggamit ng "Serial Monitor" sa IDE.

Hakbang 4: Pagdaragdag at Programming ang Raspberry Pi (node.js)

Muli, kung titingnan mo ang aking playlist ng Robotics, kahit na sa simula, binago ko ang bawat hakbang upang maiayos ang Raspberry.

Ang isang bagay na maaaring natagpuan ko ay kakailanganin mo ng isang 5V regulator, at alinman sa paanuman magtayo, gupitin / baguhin ang isang USB cable para dito, o paganahin ang Raspberry sa ibang paraan.

Dito sa Github ang lahat ng kailangan mo sa Raspberry upang makipag-usap sa Arduino sa pamamagitan ng USB.

github.com/elicorrales/wallace.robot.raspb…

Mayroon ding mga script ng pagsubok.

Maaari kang tumingin sa node.js server code at makikita mo kung paano i-convert ng Raspberry ang terse na mga tagubilin sa bilang, sa REST-type url strings. Maaari mong gamitin ang "curl" upang magpadala ng mga utos sa pagsubok.

Halimbawa:

iyong RP3 IP address: 8084 / arduino / api / forward / 50

ay magiging sanhi ng mga motor na pansamantalang paikutin ang mga gulong pasulong.

Kung inilagay mo iyon sa isang loop ng script ng shell, makikita mo ang mga gulong na patuloy na lumiliko.

Ang node.js code (server.js) ay nagsasama ng isang tampok na muling koneksyon kung sakaling ang mga serial comms ay nawala sa Arduino. Maaari mong subukan ito sa pamamagitan lamang ng pag-unplug ng Arduino mula sa Raspberry, at muling pag-plug ito.

Tiyaking tumutugma sa serial baud rate sa pagitan ng dalawa.

Dahil sa pagbagsak ng Arduino ng hindi magagandang mga packet ng data, at dahil sa antas ng node.js, at sa antas ng javascript ng browser, naka-code ang lahat upang magpadala ng maraming mga "drive" na utos, nagawa kong tumakbo nang hanggang 2 000 000 baud (2Mbps).

Kung nakakuha ka ng mga pagsubok na script na tatakbo at nakikita mo ang pag-ikot ng mga gulong, handa ka na para sa susunod na hakbang.

Hakbang 5: Pangwakas na Hakbang - Programming / Paggamit ng Web Page Client

Kasama sa link ng Github sa bahagi ng Raspberry ng lahat ng ito, ang mga file ng client.

index.html index.js p5.min.js.

Hawak nila ang USB Gamepad sa pamamagitan ng Gamepad API (batay sa browser) at dapat mong makita ang iba't ibang mga pindutan at slider na magagamit din sa web page.

Ang mga query sa javascript code (botohan) ang X- at Y-axis na halaga para sa isa sa mga joystick.. (depende sa kung anong meron kang mga joystick / gamepad, maaaring kailanganin mong i-tweak ang code). Napakabilis ng botohan nito, at pinapapatay nito ang lahat ng mga halagang iyon sa node.js server na nakikinig sa 8084.

Ang hilaw na X- at Y-axis na halaga ng mga joystick ay nasa pagitan ng 0 at 1.

Ngunit ang pag-andar ng library ng Roboclaw motor controller na ginagamit sa Arduino upang himukin ang mga motor, inaasahan ang isang halaga sa pagitan ng -100 hanggang 0 (paatras) o (0 hanggang 100) pasulong.

Soo …. iyon ang layunin ng isama ang p5.min.js. Nagkataon lamang na magkaroon ito ng napakagandang, maginhawang pagpapaandar ng () mapa kung saan bibigyan mo ito ng hilaw na halaga, ito ay hilaw (kasalukuyang) saklaw, at ang bago, nais na saklaw. At binabago nito ang hilaw na halaga sa halaga sa bago, naka-map na saklaw.

Isa pang punto: Sa 100 bilis, ang robot ay maaaring maging napaka-nakakalito. Patuloy akong may nasasagasaan. Ngunit kahit na gumaling ka sa ganoon, nakakalikot pa rin ito kapag umiikot pakaliwa o pakanan.

Ang isang bagay na maidaragdag mo ay magiging katulad ng kasalukuyang slider ng Max Speed sa web page. Tinutukoy ng slider na iyon kung ano ang pinakamataas o pinakamataas na halaga na maida-map mo ang mga joystick na Xs at Ys.

Halimbawa:

Sabihin na nagmamapa ka 0 -> 1 hanggang 0 -> 100. Kapag naitulak mo ang joystick ng buong hintuan, nasa 100 ka na. Maaaring maging napakabilis.

Ngunit, kung i-slide mo nang kaunti ang slider ng Max Speed na iyon, ngayon ay nagmamapa ka ng 0 -> 1 hanggang 0 -> 80 o 70.

Nangangahulugan iyon na mayroon kang higit na kalayaan upang ilipat ang iyong joystick nang walang isang malaking pagbabago sa bilis na ipinadala sa node.js (at sa Arduino).

At karagdagan na maaari mong gawin ay paghiwalayin ang Xs (paikutin pakaliwa o pakanan) mula sa Ys (pasulong o paatras) sa kanilang sariling pinakamabilis na magagamit na bilis.

Kaya, maaari mong iwanan ang Ys sa 0 hanggang 100, 0 hanggang -100 para sa mabilis na paggalaw ng linear, ngunit babaan ang bilis ng Xs max para sa mas kontroladong paggalaw ng pag-ikot. Pinakamahusay sa parehong mundo.

Hakbang 6: Opsyonal: Magmaneho ng Robot Gamit ang Mouse Drag at / o Mga Kaganapan sa Pag-ugnay

Kung nakarating ka dito, alam mo na ang mga layer ng software na nagsisimula sa browser at pagbabarena sa pamamagitan ng Javascript at hanggang sa Raspberry node.js server, sa wakas sa arduino, ay nagko-convert ng Gamepad joystick X- at Y-coordinate sa " pasulong ang "(o" paatras ", atbp) na mga utos (at ang kanilang halaga ng bilis).

Dagdag dito, alam mo pagkatapos na habang ang Xst at Ys ng mga joystick ay negatibo 1, hanggang sa zero, hanggang sa plus 1, ang mga iyon ay dapat na mai-convert sa pagitan ng zero at 100. Sa gayon, ang max ay nakasalalay sa max na setting ng bilis sa web page.

Soo … ang tanging bagay na dapat gawin upang magamit ang alinman sa mouse, o pindutin ang mga kaganapan (tulad ng sa isang smartphone), ay upang makuha ang mga kaganapang iyon, kunin ang Xs at Ys.

NGUNIT ---- ang mga Xs at Ys ay HINDI sa pagitan ng negatibong 1 at 1. Nagsisimula sila 0 at positibong tumaas, dahil ang mga ito ay ang mga pixel o kamag-anak na mga coordinate ng ilang elemento ng HTML (tulad ng isang bootstrap panel) o isang canvas.

Kaya't doon muli, ang function na "mapa ()" ng P5's Js library ay napaka madaling gamiting muling mapa sa kung ano ang kailangan natin.

Binago ko ang code upang magkaroon ng dalawang magkakaibang mga web page, isa para sa desktop gamit ang Gamepad, isa pa para sa mobile, gamit ang mga kaganapan sa pagpindot.

Gayundin, sa sandaling ang Xs at Ys ay muling nai-map, sila ay pinakain sa parehong kadena ng code, atbp, tulad ng Xs at Ys mula sa Gamepad.

Inirerekumendang: