Kazalo:

Robot s štirikolesnim pogonom, ki ga poganja oddaljena igralna plošča USB: 6 korakov
Robot s štirikolesnim pogonom, ki ga poganja oddaljena igralna plošča USB: 6 korakov

Video: Robot s štirikolesnim pogonom, ki ga poganja oddaljena igralna plošča USB: 6 korakov

Video: Robot s štirikolesnim pogonom, ki ga poganja oddaljena igralna plošča USB: 6 korakov
Video: ЛУЧШИЕ внедорожники в США стоимостью менее 30 тысяч долларов по данным Consumer Reports 2024, Junij
Anonim
Image
Image

Za moj naslednji projekt robotike sem bil zaradi nepredvidenih okoliščin prisiljen oblikovati/oblikovati svojo robotsko platformo.

Cilj je, da bi bil avtonomen, a najprej sem moral preizkusiti njegove osnovne vozne sposobnosti, zato sem mislil, da bi bil zabaven stranski projekt, da bi se obnašal in nadzoroval, kot da bi bilo to RC (radijsko vodeno) vozilo, namesto tega uporabite USB igralno ploščo.

Rezultati so bili tako dobri ali boljši, kot sem pričakoval.

Prednost prehoda USB Gamepad z veliko programiranja je, da ga lahko prilagodim in dodam, kar sem že naredil. Nimam nobenih dejanskih izkušenj pri izdelavi RC vozila, vendar si predstavljam, da je precej obtičal pri vsakem oddajniku RC (igralne palice/gumbi itd.) In RC sprejemniku.

Na primer, dodal sem nekaj priznanja, da je robot udaril v steno, samo tako, da programska oprema zazna visoke tokove in nizke vrednosti hitrosti dajalnika.

Po želji lahko robotu dodate nekaj spletnih kamer USB, odvisno od tega, koliko jih je in njihove namestitve, lahko vozite robota po dnevnem prostoru in v drugo sobo, medtem ko sedite nekje drugje pred računalnikom, na katerega je priključen igralni plošček USB to.

Ta navodila ne bodo resnična, podrobna, vseobsegajoča navodila po korakih, vendar bom poskušal dati čim več podrobnosti.

Zaloge

Predlagani deli: Večino tega sem dobil pri Servo Cityju (Actobotics).

2 - 13,5 U -kanali, za stranice osnovnega okvirja. Motorji so pritrjeni na to. Šel sem z nekaj krajšim in moji motorji so nameščeni na samih vogalih, kar jih je otežilo.

2 - 12 U -kanali za sprednjo in zadnjo stran osnovnega okvirja.

2 - 15 U -kanali za odbijače, spredaj in zadaj

2 - 7 (ali je bilo 7,5 ?) U -kanalov za sprednje stebre. To ni preveč kritično, dolžine se lahko razlikujejo. Odvisno je od tega, kako visoki so zadnji stebri in na kakšno višino se odločite postaviti U-kanal, ki se poveže med njimi.

2-(dolžina?) U-kanali za kotni element, spredaj-zadaj, ki povezujejo pokončne stebre. Ta je ključnega pomena, ker Servo City / Actobotics v ta namen prodaja 45 -stopinjske kotne plošče ali nosilce, vendar boste morali narediti nekaj matematike / trig, da se prepričate, da dobite pravilne dolžine.

2-(dolžina?) U-kanali, ki bodo služili kot stranski odbijači na višji ravni, spet so ti odvisni od tega, kaj počnete z bazo

2-(dolžina?) U-kanali, ki bodo služili kot višji sprednji in zadnji odbijač, prav tako zgoraj.

1 - (dolžina?) U -kanal, ki služi kot zgornji član, se razteza čez zadnje stebre. Ta morda ni preveč kritičen, saj ga lahko namestite na vrh ali pred / za pokončnimi stebri.

12 (približno) L-kanalov ali nosilcev. Ti imajo več namenov, vendar v bistvu zagotavljajo strukturno celovitost/trdnost vogalov osnovnega okvirja IN pokončnih stebrov.

4 (+?) Ploski kanali s 3 luknjami do 5 lukenj. Ti robotu zagotavljajo tudi strukturno moč.

ServoCity prodaja dve glavni vrsti ploščatih plošč z veliko površino, ki so uporabne za uporabo kot spodnja drsna plošča ali na vrhu, kamor bi šla vaša baterija in / ali krmilniki, ali celo za višjo površino senzorjev.

Obstaja plošča 4 (4,5?) "X 12" in mislim, da je druga plošča 9 (9,5?) "X 12.

Tu so stvari zanimive in lahko zmedene in drage (majhni deli se seštevajo). Vse kanale itd. Lahko med seboj povežemo s temi povezovalnimi deli, ki jih je nekaj. Tukaj mi je žal, da nimam izčrpnega, podrobnega in posebnega seznama delov.

In stvar je v tem, da v resnici ne veste, katere bi morda potrebovali ali koliko.. ker obstaja toliko načinov, kako lahko te kose sestavite skupaj.

Lahko navedem, kaj sem uporabil:

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

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

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

Naslednja dva sta zelo priročna, jaz pa bi si jih le založil:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Sledijo vsi vijaki (vijaki). Začel sem s paketom VSAKE velikosti in sem jih že prešel. Uporabil sem daljše vijake, kjer velikost ni pomembna, krajše pa sem rezerviral tam, kjer so bili POTREBNI, ker nobena druga dolžina ne bi delovala.

Nazadnje bi morali dobiti 1 vrečko teh:

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

Toliko jih nisem uporabil, vendar so (mislim, da) ključni za zagotovitev, da motorji sčasoma ne vibrirajo z okvirja. Zaradi U-kanala bi delovala le dva na motor

Potrebovali boste vsaj 4 od teh, morda boste dobili še enega ali več, če boste na njem poškodovali (verjemite mi, morda boste nekajkrat vklopili / slekli motorje):

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

Običajno so gredi motorjev 6 mm, osi pa 1/4 (0,25 palca).

Dobil bi nekaj črnih vijakov, ki naj bi bili močnejši, in jih uporabil za zgornje objemke, NE pa vijakov, ki so priloženi sponkam:

(Mislim, da so to tisti):

Ležaji s premerom 4 - 1/4 "(0,25")

1 - vrečka črnih distančnikov 1/4"

4 - Vpenjalna D -pesta

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

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

4 - 6 težka kolesa

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

Upoštevajte, da so mi všeč ta kolesa, vendar imajo trd gumijast rob. Zdi se, da se dobro obnesejo na trdih tleh, preprogah in verjetno trdih betonskih poteh. Ne bo dobro na travi, pesku itd.

TUDI, ponavadi vam bodo razmazali preprogo !!!

4 - motorji:

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

Šel sem z 223 vrtljaji na minuto, dobro najvišjo hitrostjo v zaprtih prostorih, prav tako sem lahko precej počasi premikal svojega robota (težkega z 2 baterijama SLA 12V).

2 - dajalniki motorjev za motorje. (Roboclaw Servo City upravlja samo z 2 kodirniki)

1 - Krmilnik motorja Roboclaw 2X45A, poskrbite, da boste dobili tistega z zelenimi sponkami, ne pa z zatiči…. no … vsak ima svoje prednosti. Za nazaj.. Morda sem dobil zatiče.

Mislim, da je to to iz Servo Cityja.

SparkFun prodaja Arduino Uno (to sem uporabil jaz) in Redboard Artemis kot vašega upravitelja pogonov.

Za svoje "možgane" in vmesnik na visoki ravni boste želeli Raspberry Pi 3 (ali 4?).

Potrebovali boste ožičenje, stikala, varovalke in zelo robustno "flyback" diodo.

Uporabil sem Duracell 12V 14AH globoko ciklično baterijo SLA, vendar lahko uporabite karkoli.

OPOZORILO! Zasnova tega robota (TALL in WIDE, vendar KRATKO) predvideva nekakšno težko težišče, na primer baterijo SLA. Morda ne bo dobro s tistimi drugimi vrstami baterij novejše tehnologije. LiPo, Lion itd. Lahko se zlahka prevrne.

Od Pololuja sem dobil nekaj adapterjev za vtičnice, tako da sem lahko samostojno napajal Arduino in/ali Redboard, čeprav bi bili povezani z Raspberryjem prek USB -ja, ker se nisem hotel zanašati na moč Raspberry -ja. (Predvsem montažne kamere, senzorji itd.)

Potrebovali boste regulator napetosti od 12 do 5V, najmanj 5A (?) Za malino. Drugi lahko prenesejo karkoli med 7 in 15V tako neposredno na baterijo SLA.

To je približno to za dele.

Česa NE bi naredil - 90 -stopinjski poševni zobnik.

Še enkrat, na mojem youtube seznamu predvajanja Robotics je veliko videoposnetkov, ki podrobno opisujejo zgornje.

1. korak: Gradnja

Odkrito povedano, vsi moji gradbeni koraki so že v obliki youtubes. Te si lahko ogledate na mojem seznamu predvajanja robotike, začenši pri "Wallace Robot 4". Tudi prejšnji (Wallace II, Wallace III) imajo dober material

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

Korak: Preizkusite Roboclaw, motorje in kodirnike

Proizvajalci Roboclawa (BasicMicro) imajo aplikacijo Windows, s katero lahko zagotovite, da ste motorje in kodirnike pravilno povezali z Roboclavom. Vzporedno z Roboclavom boste priključili motorje na isti strani. Lahko se odločite za uporabo žic kodirnika, samo na zadnjih motorjih ali sprednjih motorjih, ali morda celo bolje - DIAGONALNO.

Razlog za moj predlog je (pozneje) preverjanje, ali je zagozden robot. Diagonalno stanje, če se sprednja/zadnja kolesa ne obračajo, je lahko boljše kot le sprednje ali samo zadnje.

OPOMBA: Kar NISEM storil, je, da z Arduinom povežem (preko zatičev GPIO) tudi z kodirniki - če bi to storili, bi lahko Roboclaw upravljal z 2 kodirnikoma, nato pa naj bi Arduino upravljal z ostalimi dvema in samo povprašajte Roboclaw za dve vrednosti dajalnika (in hitrosti).

OPOMBA: Uporabil sem aplikacijo BasicMicro za predkonfiguracijo Roboclawa za Ramping Up / Ramping Down. To je dobro za zaščito strojne opreme in elektronike. Video o tem je na mojem seznamu predvajanja robotike.

Skoraj sem pozabil: kupil sem tudi nekaj kablov za povezovanje krogel, ki gredo med kable motorja in Roboclaw. OPOMBA: če to storite, boste opazili, da je celotna dolžina kabla res dolga. Če pa mi ni bilo treba, pa mi ga ni bilo treba odrezati. Sem (za poznejše korake) naletel na težave s komunikacijo z USB -jem med Raspberryjem in Arduinom, verjetno zaradi hrupa EMI.. vendar sem se s programsko opremo tega izognil.

Če pride do težav, lahko žice skrajšate - lahko kupite tudi kovinsko zaščito (pri Amazonu, premer 1 ).

Zadnja stvar: to še moram storiti-naj Roboclaw samodejno konfigurira ali samodejno nastavi (z uporabo kodirnikov), tako da se motorji na levi in desni strani premikata z enako hitrostjo, robot pa naravnost.

Moj se zelo rahlo ukrivi za približno 12 čevljev, vendar premalo, da bi začutil potrebo po tem.

3. korak: Dodajanje in programiranje Arduina

Potrebovali boste cevni vtič in nekaj ožičenja, tudi kabel USB. Prepričajte se, da ste dobili pravega za priključek Arduino.

Prenesti morate Arduino IDE.

Tukaj v Githubu je najnovejša skica, ki obravnava vožnjo robota:

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

Arduino boste povezali z računalnikom, na katerem je nameščen IDE, in glede na to, kako je skica napisana, bi uporabili zatiče 10 in 11 na Arduinu za serijsko komunikacijo (programska oprema Serial) z Roboclavom.

Razvil sem preprost komunikacijski protokol med Raspberry Pi in Arduinom.

Temelji na znakih ASCII, kar olajša odpravljanje napak in testiranje samo z uporabo okna "serijski monitor" Arduino IDE.

Ukazi se začnejo pri številki "0" (nič) in se po potrebi samo dvignejo

Ukazi, ki se začnejo pri "20", so neposredni ukazi Roboclaw, tisti pod tem številom pa so ukazi, povezani z Arduinom.

Zaradi šuma EMI sem ukazni niz izboljšal tako, da je vključil kontrolno vsoto.

Torej bo vsak niz vseboval:

# število žetonov v nizu, vključno s tem

kontrolna vsota

Recimo, da želite, da se Arduino odzove z menijem ukazov:

4 0 12 16

"4" so štirje žetoni v nizu.

"0" je ukaz MENU.

"12" je naključno število, ki sem ga izbral.

"16" je vsota 4 + 0 + 12.

Isti ukaz MENU je lahko drugačen:

4 0 20 24

Ker sem izbral drugo naključno število, je tudi kontrolna vsota drugačna.

Recimo, da želite napredovati s 100 % hitrostjo:

5 29 0 134 100

"5" pet žetonov

"29" ukaz FORWARD

"0" naključno število

"134" kontrolna vsota

"100" parameter 1 (v tem primeru hitrost)

Če Arduino ne more preveriti tega dohodnega niza, ga preprosto izpusti / prezre, brez odgovora.

Če Arduino ne prejme naslednjega ukaza za premik v X milisekundah, pošlje motorje STOP v Roboclaw.

Arduino se zažene in začne pošiljati samodejno stanje na vrata USB … razen če mu ne naročite, naj s tem preneha.

Na tej točki bi morali biti pripravljeni poskusiti upravljati Roboclaw in opazovati obračanje motorjev, samo z uporabo "Serial Monitor" na IDE.

4. korak: Dodajanje in programiranje Raspberry Pi (node.js)

Še enkrat, če pogledate moj seznam predvajanja Robotics, sem že od samega začetka šel čez vse korake, da sem postavil Raspberry.

Ena stvar, ki sem jo morda zanemaril, je, da boste potrebovali 5 -voltni regulator in bodisi nekako zgradili, prerezali/spremenili kabel USB zanj ali napajali malino na drug način.

Tukaj v Githubu je vse, kar potrebujete v malini za komunikacijo z Arduinom prek USB -ja.

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

Obstajajo celo preskusni skripti.

Ogledate si lahko kodo strežnika node.js in videli boste, kako Raspberry pretvarja kratka številska navodila v nize url tipa REST. Za pošiljanje testnih ukazov lahko uporabite "curl".

Primer:

vaš naslov IP RP3: 8084/arduino/api/forward/50

bo povzročilo, da se motorji za trenutek vrtijo kolesa naprej.

Če to postavite v zanko skriptne lupine, bi videli, da se kolesa nenehno obračajo.

Koda node.js (server.js) vključuje funkcijo ponovne povezave, če Arduino izgubi serijske komunikacije. To lahko preizkusite tako, da Arduino izključite iz maline in ga znova priklopite.

Prepričajte se, da se ujemata s serijsko hitrostjo prenosa podatkov med tema dvema.

Ker je Arduino spustil slabe pakete podatkov in ker je na ravni node.js in na ravni brskalnika javascript vse kodirano za pošiljanje številnih ukazov "pogon", sem lahko zagnal kar 2 000 000 baudov (2 Mb / s).

Če zaženete preizkusne skripte in vidite, da se kolesa obračajo, ste pripravljeni na naslednji korak.

5. korak: Zadnji korak - programiranje / uporaba odjemalca spletnih strani

V povezavo Github do dela maline vsega tega so datoteke odjemalcev.

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

Z igralno ploščo USB upravljajo prek vmesnika Gamepad API (na osnovi brskalnika), na spletni strani pa bi morali videti različne gumbe in drsnike.

Koda javascript poizveduje (anketira) vrednosti osi X in Y za eno od igralnih palic.. (odvisno od tega, katere igralne palice/igralno ploščo imate, boste morda morali prilagoditi kodo). Anketira zelo hitro in vse te vrednosti sproži na strežnik node.js, ki posluša na 8084.

Surove vrednosti osi X in Y igralnih palic so med 0 in 1.

Toda funkcija knjižnice krmilnika motorja Roboclaw, ki se uporablja v Arduinu za pogon motorjev, pričakuje vrednost med -100 do 0 (nazaj) ali (0 do 100) naprej.

Soo…. to je namen vključitve p5.min.js. Zgodi se, da ima ta zelo lepa, priročna funkcija map (), kjer ji daste surovo vrednost, njen surov (trenutni) obseg in nov, želeni obseg. In pretvori surovo vrednost v vrednost v novem preslikanem območju.

Še ena točka: pri 100 hitrostih je lahko robot zelo težaven. Nenehno sem naletel na nekaj. Toda tudi ko se pri tem izboljšate, je pri vrtenju levo ali desno še vedno občutljivo.

Nekaj, kar bi dodali, bi bilo podobno trenutnemu drsniku Max Speed na spletni strani. Ta drsnik določa najvišjo ali največjo vrednost, na katero boste preslikali igralni palici Xs in Ys.

Primer:

Recimo, da preslikate 0 -> 1 do 0 -> 100. Ko pritisnete krmilno palčko do konca, ste pri 100. Na dotik. Morda prehitro.

Če pa drsnik Max Speed pomaknete nazaj, zdaj preslikate 0 -> 1 do 0 -> 80 ali 70.

To pomeni, da imate več prostora za premikanje krmilne palice, ne da bi bila tako velika sprememba hitrosti poslana na node.js (in na Arduino).

Poleg tega lahko ločite X -je (zavrtite levo ali desno) od Y -jev (naprej ali nazaj) na njihove največje razpoložljive hitrosti.

Tako lahko Ys pustite pri 0 do 100, 0 do -100 za hitro linearno gibanje, vendar zmanjšate največjo hitrost Xs za bolj nadzorovano rotacijsko gibanje. Najboljše iz obeh svetov.

Korak 6: Izbirno: vozite robota z miško in povlecite dogodke

Če ste prišli tako daleč, veste, da plasti programske opreme, ki se začnejo od brskalnika in vrtijo navzdol po Javascriptu in naprej do strežnika Raspberry node.js, končno v arduino, pretvorijo igralne palice X in Y koordinat Gamepad v " ukazi naprej (ali "nazaj" itd.) (in njihova vrednost hitrosti).

Poleg tega veste, da morata biti Xs in Ys igralnih palic minus 1, od nič do plus 1, vendar jih je treba pretvoriti med nič in 100. No, max je odvisen od nastavitve največje hitrosti na spletni strani.

Soo … edino, kar lahko uporabite, če uporabite miško ali dogodke na dotik (kot na pametnem telefonu), je, da te dogodke zajamete, vzamete X in Y.

Toda ---- ti X in Y nista med negativnimi 1 in 1. Začneta se 0 in se pozitivno povečata, ker sta v bistvu slikovne pike ali relativne koordinate zaslona nekega elementa HTML (na primer zagonske plošče) ali platna.

Tako je spet funkcija "map ()" knjižnice J5 knjižnice P5 zelo priročna za ponovno preslikavo na tisto, kar potrebujemo.

Kodo sem preoblikoval v dve različni spletni strani, eno za namizje z igralno ploščo, drugo za mobilne naprave z dogodki na dotik.

Ko sta X in Y znova preslikana, se vneseta v isto verigo kode itd., Tako kot X in Y iz igralne plošče.

Priporočena: