Sadržaj:

Robot sa 4 pogona koji se pokreće putem udaljenog USB gamepada: 6 koraka
Robot sa 4 pogona koji se pokreće putem udaljenog USB gamepada: 6 koraka

Video: Robot sa 4 pogona koji se pokreće putem udaljenog USB gamepada: 6 koraka

Video: Robot sa 4 pogona koji se pokreće putem udaljenog USB gamepada: 6 koraka
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Septembar
Anonim
Image
Image

Za moj sljedeći projekt robotike, bio sam prisiljen da sam izradim/dizajniram svoju platformu za robote zbog nepredviđenih okolnosti.

Cilj je da bude autonoman, ali prvo sam morao testirati njegove osnovne vozačke sposobnosti, pa sam mislio da bi bio zabavan sporedni projekt ponašati se i kontrolirati kao da je to RC (radio-upravljano) vozilo, ali umjesto toga upotrijebite USB gamepad.

Rezultati su bili otprilike dobri ili bolji nego što sam očekivao.

Prednost kretanja putem USB Gamepada, s puno programiranja, je to što ga mogu prilagoditi i dodati onome što sam već učinio. Nemam nikakvog iskustva u izgradnji RC vozila, ali pretpostavljam da je prilično zaglavljeno bez obzira na to što dolazi s daljinskim upravljačem (upravljačke ručice/tipke itd.) I RC prijemnikom.

Na primjer, dodao sam da je robot udario u zid, samo tako što je softver otkrio velike struje i niske vrijednosti brzine kodera.

Opcionalno, robotu se može dodati nekoliko USB web kamera, ovisno o broju i njihovom položaju, može se voziti robot po dnevnom boravku i u drugu sobu, dok sjedi negdje drugdje ispred računara na koji je priključen USB gamepad to.

Ovaj Instructable neće biti istinit, detaljan, all-inclusive, korak-po-korak upute, ali pokušat ću dati što je moguće više detalja.

Supplies

Predloženi dijelovi: Većinu toga sam nabavio u Servo Cityju (Actobotics).

2 - 13,5 U -kanala, za stranice osnovnog okvira. Motori su montirani na ovo. Ja sam otišao s nečim kraćim, a moji motori su montirani na samim uglovima, što je otežavalo njihovo postavljanje.

2 - 12 U -kanala za prednju i stražnju stranu okvira baze.

2 - 15 U -kanali za odbojnike, sprijeda i straga

2 - 7 (ili je to bilo 7,5 ?) U -kanala za prednje stupove. Ovo nije previše kritično, duljine se mogu razlikovati. Ovisi koliko su visoki stražnji stupovi i na koju visinu ste odlučili postaviti uglove U-kanal koji se povezuje između njih.

2-(dužina?) U-kanali za kutni element, sprijeda prema natrag, koji povezuju uspravne stupove. Ovo je kritično, jer Servo City / Actobotics u tu svrhu prodaje ploče ili zagrade pod uglom od 45 stepeni, ali morat ćete proći matematiku / trigovanje kako biste bili sigurni da ste dobili ispravne dužine.

2-(dužina?) U-kanali koji služe kao bočni odbojnici višeg nivoa, opet to ovisi o tome šta radite s bazom

2-(dužina?) U-kanali koji služe kao prednji i zadnji odbojnik višeg nivoa, isto kao gore.

1 - (dužina?) U -kanal koji služi kao najviši član, proteže se preko stražnjih stupova. Ovo možda nije previše kritično jer se možete montirati na vrh ili ispred / iza uspravnih stupova.

12 (približno) L-kanala ili zagrada. Oni služe za više namjena, ali u osnovi pružaju strukturni integritet/čvrstoću uglovima osnovnog okvira I uspravnim stupovima.

4 (+?) Ravnih kanala sa 3 rupe do 5 rupa. Oni također robotu pružaju strukturnu snagu.

ServoCity prodaje dvije glavne vrste ravnih panela velikih površina, korisnih za upotrebu kao donji klizni panel ili kao gornji dio gdje bi vaša baterija i / ili kontroleri išli, ili čak za gornju površinu senzora.

Postoji panel od 4 (4,5?) "X 12", a mislim da je drugi panel od 9 (9,5?) "X 12.

Ovdje stvari postaju zanimljive, a mogu biti i zbunjujuće i skupe (mali dijelovi se zbrajaju). Svi kanali itd. Mogu se međusobno spojiti putem ovih spojnih dijelova, kojih ima nekoliko. Ovdje mi je žao što nemam sveobuhvatnu, detaljnu i posebnu listu dijelova.

A stvar je u tome.. zapravo ne znate koji bi vam mogli zatrebati, ili koliko … jer postoji toliko mnogo načina na koje možete spojiti ove komade.

Mogu navesti šta sam koristio:

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

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

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

Sljedeća dva su vrlo zgodna, a ja bih se samo opskrbio ovim:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Slijede svi vijci (vijci). Počeo sam s paketom SVAKE veličine i prošao sam većinu njih. Koristio sam duže vijke gdje veličina nije bila važna, a kraće sam rezervirao tamo gdje su ZAHTJEVNI jer nijedna druga dužina ne bi uspjela.

Na kraju, trebali biste dobiti 1 vreću ovih:

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

Nisam ih toliko koristio, ali oni su (mislim) kritični kako bi se osiguralo da vam motori s vremena na vrijeme ne vibriraju s okvira. Zbog U-kanala samo bi dva radila po motoru

Trebat će vam najmanje 4 od ovih, možda ćete dobiti još jedan ili dva u slučaju da nanesete štetu jednom (vjerujte mi, možda ćete nekoliko puta stavljati / skidati motore):

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

Obično su osovine motora 6 mm, a osovine 0,25 inča.

Uzeo bih neke crne vijke, navodno jače, i koristio bih ih za gornje stezaljke, a NE koristio vijke koji dolaze sa stezaljkama:

(Mislim da su to oni):

Ležajevi promjera 4 - 1/4 "(0,25")

1 - vrećica crnih odstojnika od 1/4"

4 - Stezne D -čvorišta

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

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

4 - 6 kotači za velika opterećenja

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

Imajte na umu da volim ove kotače, ali oni imaju tvrdu gumenu oštricu. Čini se da se dobro snalaze na tvrdim podovima i tepisima, a vjerojatno i na tvrdim betonskim šetnjama. Neće biti dobro na travi, pijesku itd.

TAKOĐER će vam razmazati tepih !!!

4 - motori:

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

Otišao sam s 223 o / min, velikom maksimalnom brzinom u zatvorenom prostoru, a mogao sam i lagano kretati svog robota (težak sa 2 SLA 12V baterije) u usporenom kretanju.

2 - koderi motora za motore. (Roboclaw Servo City -a rukuje samo s 2 kodera)

1 - Kontroler motora Roboclaw 2X45A, pazite da nabavite onaj sa zelenim priključnim blokovima, a ne pinove…. pa … svako ima svoje prednosti. Gledano unazad.. Možda sam dobio igle.

Mislim da je to to iz Servo Cityja.

SparkFun prodaje Arduino Uno (to sam i ja koristio), a takođe i Redboard Artemis kao vašeg menadžera pogona.

Poželjet ćete Raspberry Pi 3 (ili 4?) Kao svoj "mozak" i sučelje na visokom nivou.

Trebat će vam ožičenje, prekidači, osigurači i vrlo robusna "flyback" dioda.

Koristio sam Duracell 12V 14AH duboki ciklus SLA baterije, ali možete koristiti bilo što.

UPOZORENJE! Dizajn ovog robota (TALL, i WIDE, ali SHORT) pretpostavlja neku vrstu teškog centra gravitacije, poput SLA baterije. Možda neće uspjeti s drugim vrstama baterija novijih tehnologija. LiPo, Lion, itd. Lako bi se mogao prevrnuti.

Od Pololua sam dobio nekoliko adaptera za bačvaste utikače, tako da sam mogao samostalno napajati Arduino i/ili Redboard, iako bi bili povezani s Raspberryjem putem USB -a, jer nisam želio oslanjati se na Raspberryjevu snagu. (Posebno montiranje kamera, senzora itd.)

Trebat će vam regulator napona od 12 do 5V, minimalno 5A (?) Za Raspberry. Ostali mogu rukovati bilo čime između 7 do 15V tako direktno na SLA bateriju.

To je otprilike to za dijelove.

Ono što NE bih učinio - skošeni zupčanik pod kutom od 90 stupnjeva.

Opet, na mojoj youtube plejlisti Robotics postoji mnogo video zapisa koji opisuju većinu gore navedenih.

Korak 1: Izgradnja

Iskreno, svi moji koraci u izgradnji već su u obliku youtuba. Možete ih vidjeti na mojoj playlisti Robotics, počevši od "Wallace Robot 4". Prethodni (Wallace II, Wallace III) također imaju dobar materijal

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

Korak 2: Testirajte Roboclaw, motore i kodere

Proizvođači Roboclaw -a (BasicMicro) imaju Windows aplikaciju koju možete koristiti kako biste bili sigurni da ste ispravno spojili motore i kodere na Roboclaw. Paralelno s Roboclawom spajate motore na istoj strani. Možete odabrati korištenje žica kodera, samo na stražnjim motorima, ili na prednjim motorima, ili možda čak i bolje - DIJAGONALNO.

Razlog za moj prijedlog odnosi se na (kasnije) provjeru ima li zaglavljenog robota. Imati dijagonalno status ako se prednji/stražnji kotači ne okreću može biti bolje od samo prednjih ili samo stražnjih.

NAPOMENA: Ono što ja NISAM učinio je da koristim Arduino za povezivanje (putem GPIO pinova) sa koderima - ako ste to učinili, mogli biste Roboclaw rukovati s dva kodera, a zatim Arduino upravljati s druga dva, i samo upitajte Roboclaw za njegove dvije vrijednosti kodera (i brzine).

NAPOMENA: Koristio sam aplikaciju BasicMicro za predkonfiguriranje Roboclawa za Ramping Up / Ramping Down. Ovo je dobro za zaštitu hardvera i elektronike. Video zapis o tome postoji na mojoj plejlisti Robotics.

Skoro sam zaboravio: kupio sam i neke kablove za povezivanje metaka koji idu između kabela motora i Roboclawa. NAPOMENA: ako to učinite, primijetit ćete da je ukupna dužina kabela Zbilja duga. Ali nisam htjela rezati ništa ako nije bilo potrebe. Ja sam (za kasnije korake) naišao na komunikacijske probleme s USB -om između Raspberryja i Arduina, vjerojatno zbog EMI šuma.. ali sam to zaobišao sa softverom.

Ako to postane problem, možete skratiti žice - možete kupiti i metalnu zaštitu (od Amazona, promjera 1 ).

Zadnja stvar: Ovo tek trebam učiniti --- imati Roboclaw automatsku konfiguraciju ili automatsko podešavanje (pomoću kodera) tako da se i lijevi i desni bočni motor kreću istom brzinom, a robot ide ravno.

Moj se zakrivljuje vrlo malo preko 12 stopa, ali nedovoljno da sam osjetio potrebu učiniti bilo što po tom pitanju.

Korak 3: Dodavanje i programiranje Arduina

Trebat će vam utikač cijevi i malo ožičenja, također USB kabel. Provjerite jeste li dobili ispravnu za Arduino konektor.

Morat ćete preuzeti Arduino IDE.

Ovdje na Githubu je najnovija skica koja upravlja rukovanjem robotom:

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

Spojit ćete Arduino na računalo na kojem radi IDE, a na temelju načina na koji je skica napisana, koristili biste pinove 10 i 11 na Arduinu za serijsku komunikaciju (softverski serijski) s Roboclawom.

Razvio sam jednostavan komunikacijski protokol između Raspberry Pi i Arduina.

Zasnovan je na ASCII znakovima, što olakšava ispravljanje grešaka i testiranje samo pomoću prozora "serijskog monitora" Arduino IDE-a.

Naredbe počinju brojem "0" (nula) i prema gore se samo povećavaju

Naredbe koje počinju u "20" su direktne Roboclaw naredbe, a one ispod tog broja su isključivo komande povezane s Arduinom.

Zbog EMI šuma, poboljšao sam naredbeni niz tako da uključuje kontrolni zbroj.

Dakle, bilo koji niz će uključivati:

# broj žetona u nizu uključujući i ovaj

kontrolni zbir

Na primjer, recimo da želite da Arduino odgovori svojim izbornikom naredbi:

4 0 12 16

"4" je četiri žetona u nizu.

"0" je naredba MENU.

"12" je slučajni broj koji sam odabrao.

"16" je zbir 4 + 0 + 12.

Ista naredba MENU može biti drugačija:

4 0 20 24

Budući da sam odabrao drugačiji slučajni broj, kontrolna suma je također različita.

Na primjer, recimo da želite ići naprijed 100 % brzinom:

5 29 0 134 100

"5" pet žetona

"29" naredba FORWARD

"0" slučajni broj

"134" kontrolni zbir

"100" parametar 1 (brzina u ovom slučaju)

Ako Arduino ne može provjeriti taj dolazni niz, jednostavno ga ispušta / zanemaruje, nema odgovora.

Ako Arduino ne primi naredbu sljedećeg kretanja s X milisekundi, šalje motor STOP u Roboclaw.

Arduino se pokreće i počinje slati automatski status na USB priključak … osim ako mu se kaže da to prestane raditi.

U ovom trenutku trebali biste biti spremni pokušati kontrolirati Roboclaw i gledati kako se motori okreću, samo pomoću "Serijskog monitora" na IDE -u.

Korak 4: Dodavanje i programiranje Raspberry Pi (node.js)

Opet, ako pogledate moju listu za reprodukciju Robotics -a, čak i od samog početka, prešao sam svaki korak kako bih pokrenuo Raspberry.

Jedina stvar koju sam možda zanemario je da će vam trebati regulator od 5 V, ili ćete na neki način konstruirati, izrezati/izmijeniti USB kabel za njega ili napajati Raspberry na drugi način.

Ovdje na Githubu je sve što vam je potrebno u malini za komunikaciju s Arduinom putem USB -a.

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

Postoje čak i test skripte.

Možete pogledati kôd poslužitelja node.js i vidjet ćete kako Raspberry pretvara kratke numeričke upute u url nizove tipa REST. Možete koristiti "curl" za slanje testnih naredbi.

Primjer:

vaša RP3 IP adresa: 8084/arduino/api/forward/50

uzrokovat će da motori na trenutak rotiraju kotače prema naprijed.

Ako to stavite u petlju ljuske skripte, vidjeli biste da se točkovi stalno okreću.

Kod node.js (server.js) uključuje funkciju ponovnog povezivanja u slučaju da se serijske komunikacije izgube na Arduinu. Ovo možete testirati tako da isključite Arduino iz Raspberryja i ponovo ga uključite.

Provjerite podudarate li se s serijskom brzinom prijenosa između njih.

Zbog toga što je Arduino ispuštao loše pakete podataka i zato što je na razini node.js i na razini preglednika preglednika sve kodirano za slanje mnogih naredbi "pogona", uspio sam pokrenuti čak 2 000 000 bauda (2Mbps).

Ako pokrenete testne skripte i vidite kako se točkovi okreću, spremni ste za sljedeći korak.

Korak 5: Završni korak - Programiranje / korištenje klijenta web stranice

Klijentske datoteke su uključene u vezu Github do dijela Raspberryja u svemu ovome.

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

Oni upravljaju USB Gamepad-om putem Gamepad API-ja (zasnovan na pregledniku) i trebali biste vidjeti različite gumbe i klizače koji su također dostupni na web stranici.

Javascript kôd traži (ispituje) vrijednosti osi X i Y za jedan od džojstika.. (ovisno o tome koje džojstike/gamepad imate, možda ćete morati prilagoditi kôd). Anketira se vrlo brzo i otpušta sve te vrijednosti na poslužitelj node.js koji sluša na 8084.

Sirove vrijednosti osi X i Y osi joysticka su između 0 i 1.

Ali funkcija bibliotečke kontrolera motora Roboclaw koja se koristi u Arduinu za pogon motora, očekuje vrijednost između -100 do 0 (unatrag) ili (0 do 100) naprijed.

Soo…. to je svrha uključivanja p5.min.js. Slučajno se dogodi da imamo ovu vrlo lijepu, prikladnu funkciju map () gdje joj dajete sirovu vrijednost, njen sirovi (trenutni) raspon i novi, željeni raspon. I pretvara sirovu vrijednost u vrijednost u novom, mapiranom rasponu.

Još jedna stvar: pri brzini od 100 robot može biti vrlo lukav. Stalno sam naletio na nešto. Ali čak i kad u tome budete sve bolji, i dalje je osjetljiv pri rotiranju ulijevo ili udesno.

Nešto što biste dodali bilo bi slično trenutnom klizaču Max Speed na web stranici. Taj klizač određuje najveću ili maksimalnu vrijednost na koju ćete preslikati džojstike Xs i Ys.

Primjer:

Recimo da preslikavate 0 -> 1 do 0 -> 100. Kad pritisnete joystick do kraja, bit ćete na 100. Dodirljivo. Možda je prebrzo.

Ali, ako pomaknete taj klizač za maksimalnu brzinu unatrag, sada mapirate 0 -> 1 do 0 -> 80 ili 70.

To znači da imate više prostora za pomicanje upravljačke palice bez tako velike promjene brzine koja se šalje na node.js (i na Arduino).

Osim toga, možete napraviti da odvojite X -ove (rotirajte lijevo ili desno) od Y -a (naprijed ili natrag) u njihove maksimalne dostupne brzine.

Dakle, mogli biste ostaviti Ys na 0 do 100, 0 do -100 za brzo linearno kretanje, ali smanjiti Xs max brzinu za kontroliraniji rotacijski pokret. Najbolje iz oba sveta.

Korak 6: Opcionalno: Vozite robota s mišem Povucite i / ili dodirnite događaje

Ako ste došli dovde, znate da softverski slojevi, počevši od preglednika i probijajući se kroz Javascript pa dalje do Raspberry node.js servera, konačno na arduino, pretvaraju X- i Y-koordinate Gamepada u "" koordinate naredbe "(ili" unatrag "itd.) (i njihovu vrijednost brzine).

Nadalje, tada znate da, iako su X i Y džojstika negativni 1, kroz nulu, do plus 1, oni se moraju pretvoriti između nule i 100. Pa, max ovisi o postavci maksimalne brzine na web stranici.

Pa … jedino što možete učiniti je da koristite miš ili dodirnite događaje (kao na pametnom telefonu), da zabilježite te događaje, zgrabite X i Y.

ALI ---- ti X i Y nisu između negativnih 1 i 1. Počinju 0 i povećavaju se pozitivno, jer su u osnovi pikseli ili relativne koordinate ekrana nekog HTML elementa (poput bootstrap ploče) ili platna.

Dakle, opet, funkcija "map ()" Js biblioteke P5 je vrlo zgodna za ponovno mapiranje na ono što nam treba.

Promijenio sam kôd tako da ima dvije različite web stranice, jednu za radnu površinu pomoću Gamepada, drugu za mobilne uređaje, koristeći događaje dodira.

Također, nakon što se X-ovi i Y-ovi ponovno mapiraju, oni se unose u isti lanac koda itd., Kao i X-ovi i Y-ovi s Gamepada.

Preporučuje se: