Tartalomjegyzék:

4WD robotvezérelt távoli USB Gamepad: 6 lépés
4WD robotvezérelt távoli USB Gamepad: 6 lépés

Videó: 4WD robotvezérelt távoli USB Gamepad: 6 lépés

Videó: 4WD robotvezérelt távoli USB Gamepad: 6 lépés
Videó: Omni Robo DIY2 : JOYSTICK control of OMNI WHEEL ROBOT using Arduino Mega board |#arduinoproject 2024, Június
Anonim
Image
Image

A következő robotikai projektem során előre nem látható körülmények miatt kénytelen voltam saját robotplatformomat tervezni/tervezni.

A cél az, hogy önálló legyen, de először tesztelnem kellett az alapvető vezetési képességeit, ezért azt gondoltam, hogy szórakoztató mellékprojekt lenne, ha úgy viselkednénk és irányítanánk, mintha RC (rádióvezérelt) jármű lenne helyett használjon USB Gamepadot.

Az eredmények körülbelül olyan jók vagy jobbak voltak, mint amire számítottam.

Az USB Gamepad útvonalának előnye, sok programozással, az, hogy testreszabhatom és hozzáadhatom ahhoz, amit már csináltam. Nincs tényleges tapasztalatom RC jármű építésében, de úgy gondolom, hogy az egyik nagyon megragadt az RC adó (joystick/gombok stb.) És az RC vevő tartozékaival.

Hozzáadtam például azt a felismerést, hogy a robot a falnak ütközött, csak úgy, hogy a szoftver érzékeli a nagy áramokat és az alacsony jeladó -fordulatszámokat.

Opcionálisan hozzáadhat néhány USB -s webkamerát a robothoz, attól függően, hogy hányan vannak elhelyezve, a robotot a nappaliban és egy másik helyiségbe vezetheti, miközben valahol máshol ül a számítógép előtt, amelyhez csatlakoztatva van az USB Gamepad azt.

Ez az utasítás nem lesz valódi, részletes, mindenre kiterjedő, lépésről lépésre szóló útmutató, de megpróbálok a lehető legtöbb részletet megadni.

Kellékek

Javasolt alkatrészek: Ennek nagy részét a Servo City -től (Actobotics) szereztem be.

2 - 13,5 U -csatornák, az alapkeret oldalaihoz. A motorok erre vannak felszerelve. Valami rövidebbel mentem, és a motorjaim a sarkoknál vannak felszerelve, és ez megnehezítette a felszerelésüket.

2-12 hüvelykes U -csatornák az alapkeret elülső és hátsó részéhez.

2 - 15 U -csatornák a lökhárítókhoz, elöl és hátul

2 - 7 (vagy 7,5 hüvelyk?) U -csatornák az elülső oszlopoknál. Ez nem túl kritikus, a hosszúságok változhatnak. Attól függ, hogy milyen magasak a hátsó oszlopok, és milyen magasságban dönt a szögben U-csatorna, amely összeköti őket.

2-(hossza?) U-csatornák a ferde taghoz, elöl-hátul, összekötve a függőleges oszlopokat. Ez kritikus, mert a Servo City / Actobotics 45 fokos szögletes paneleket vagy konzolokat árul erre a célra, de meg kell tennie néhány matematikát / triggert, hogy megbizonyosodjon arról, hogy a megfelelő hosszúságú.

2-(hosszúságú?) U-csatornák, amelyek magasabb szintű oldalsó lökhárítóként szolgálnak, ezek ismét attól függenek, hogy mit csinál az alappal

2-(hosszúságú?) U-csatornák, amelyek magasabb szintű első és hátsó lökhárítóként szolgálnak, ugyanúgy, mint fent.

1 - (hosszúságú?) U -csatorna a legfelső tagként, a hátsó oszlopokon. Ez talán nem túl kritikus, mivel felszerelheti a tetejére, vagy az álló oszlopok elé / mögé.

12 (kb.) L-csatorna vagy zárójel. Ezek több célt szolgálnak, de lényegében szerkezeti integritást/szilárdságot biztosítanak az alapkeret és a függőleges oszlopok sarkaihoz.

4 (+?) 3 lyukból 5 lyukú sík csatornába. Ezek szerkezeti szilárdságot is biztosítanak a robotnak.

A ServoCity két fő típusú, nagy felületű lapos panelt értékesít, amelyek alkalmasak alsó csúszótalpaként vagy felső részként való használatra, ahol az akkumulátor és / vagy a vezérlők mennének, vagy akár az érzékelők magasabb felületére.

Van egy 4 (4,5?) "X 12" panel, és szerintem a másik egy 9 (9,5?) "X 12 panel.

Most itt kezdenek érdekessé válni a dolgok, és zavaróak és drágák is lehetnek (a kis részek összeadódnak). Minden csatorna stb. Csatlakoztatható egymáshoz ezeken az összekötő elemeken keresztül, amelyekből TÖBB van. Itt sajnálom, hogy nincs átfogó, részletes, specifikus alkatrészlistám.

És a lényeg az, hogy nem igazán tudod, melyikre lehet szükséged, vagy hányra.. mert nagyon sokféleképpen összeillesztheted ezeket a darabokat.

Sorolhatnám, hogy mit használtam:

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

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

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

A következő kettő nagyon hasznos, én csak ezeket raktároznám:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

A következő az összes csavar (csavar). MINDEN méretű csomaggal kezdtem, és a legtöbbet végigjártam. Hosszabb csavarokat használtam, ahol a méret nem számított, és a rövidebbeket fenntartottam arra a helyre, ahol KÖTELEZŐK voltak, mert más hosszúság nem működne.

Végül 1 zacskót kell kapnia ezekből:

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

Nem használtam ennyit, de (szerintem) kritikus fontosságúak annak biztosítására, hogy a motorok idővel ne rezegjenek lazán a keretből. Az U-csatorna miatt motoronként csak kettő működne

Ebből legalább 4 darabra lesz szüksége, esetleg kap egy pluszt, ha kárt okoz valamelyikében (hidd el, lehet, hogy párszor fel- / leveszed a motorokat):

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

A motor tengelyei általában 6 mm -esek, a tengelyek pedig 1/4 hüvelyk (0,25 hüvelyk).

Vennék néhány fekete csavart, állítólag erősebbet, és ezeket használnám a fenti bilincsekhez, és NE használjam a bilincsekhez tartozó csavarokat:

(Szerintem ezek azok):

4 - 1/4 "(0,25") átmérőjű csapágyak

1 - tasak fekete 1/4 -os távtartókkal

4 - D -agy rögzítése

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

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

4-6 nagy teherbírású kerekek

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

Ne feledje, hogy szeretem ezeket a kerekeket, de kemény gumi szélük van. Úgy tűnik, jól járnak kemény padlón, szőnyegen és valószínűleg kemény betonjárásokon. Nem lesz jó fűben, homokban stb.

IS, hajlamosak lesznek elkenni a szőnyeget !!!

4 - motorok:

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

A 223 -as fordulatszámmal mentem, jó fedett beltéri sebességgel, és a robotomat (2 SLA 12 V -os akkumulátorral) nehéz mozgatni lassú mozgásban.

2 - motorjeladók a motorokhoz. (A Servo City Roboclaw -ja csak 2 kódolót kezel)

1 - Roboclaw 2X45A motorvezérlő, győződjön meg arról, hogy azt kapja, amelyiken zöld sorkapcsok vannak, nem pedig a csapokat…. nos … mindegyiknek megvan a maga előnye. Utólag.. Lehet, hogy megkaptam a csapokat.

Azt hiszem, ez a Servo City -ből.

A SparkFun eladja az Arduino Uno -t (ezt használtam), és a Redboard Artemist is a meghajtókezelőjeként.

Egy Raspberry Pi 3-at (vagy 4-et?) Szeretne, mint magas szintű "agyat" és kezelőfelületet.

Szükséged lesz huzalozásra, kapcsolókra, biztosítékokra és egy nagyon erős "flyback" diódára.

Duracell 12V 14AH mélyciklusú SLA akkumulátort használtam, de bármit használhat.

FIGYELEM! Ennek a robotnak a tervezése (TALL és WIDE, de RÖVID) egyfajta nehéz súlypontot feltételez, például egy SLA akkumulátor. Előfordulhat, hogy nem jó az ilyen típusú újabb technológiájú akkumulátorokkal. LiPo, Lion stb. Könnyen felborulhat.

A Pololutól kaptam néhány hordó dugós adaptert, hogy önállóan tápelláthassam az Arduino -t és/vagy a Redboardot, annak ellenére, hogy USB -n keresztül csatlakoznak a Raspberry -hez, mert nem akartam a Málna energiájára támaszkodni.. (Különösen szerelő kamerák, érzékelők stb.)

Szükséged lesz egy 12–5 V-os lemenő feszültségszabályozóra, minimum 5A (?) A Raspberry-re. A többiek bármit kezelhetnek 7 és 15 V között, így közvetlenül az SLA akkumulátorhoz.

Nagyjából ennyi az alkatrészeknél.

Amit NEM tennék - 90 fokos ferde hajtómű.

Ismét sok videó található a Robotics youtube lejátszási listámban, amelyek a fentiek nagy részét részletezik.

1. lépés: Építés

Őszintén szólva, minden építési lépésem már youtubes formában van. Ezeket a Robotics lejátszási listámban láthatod, kezdve a "Wallace Robot 4" -től. A korábbiak (Wallace II, Wallace III) is jó anyagúak

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

2. lépés: Tesztelje a Roboclaw -t, a motorokat és a kódolókat

A Roboclaw (BasicMicro) gyártói rendelkeznek egy Windows -alkalmazással, amellyel megbizonyosodhatnak arról, hogy a motorokat és a kódolókat megfelelően csatlakoztatta a Roboclaw -hoz. Az azonos oldali motorokat a Roboclaw-val párhuzamosan csatlakoztatja. Választhatja a kódoló vezetékek használatát, csak a hátsó motorokon vagy az első motorokon, vagy talán még jobbakat is - DIAGONÁLISAN.

Javaslatom oka az elakadt robot (későbbi) ellenőrzése. Jobb, mint ha az első/hátsó kerekek nem/nem fordulnak átlósan, ha csak az első vagy a hátsó kerekek.

MEGJEGYZÉS: amit én nem tettem, az az Arduino használata, hogy (GPIO tűkön keresztül) is csatlakozzon a kódolókhoz - ha ezt megtette, akkor a Roboclaw kezelheti a 2 kódolót, majd az Arduino kezelheti a másik kettőt, és csak kérdezze meg a Roboclaw -tól két kódolóértéket (és sebességet).

MEGJEGYZÉS: A BasicMicro alkalmazását használtam a Roboclaw előkonfigurálásához felfelé / lefelé. Ez jó a hardver és az elektronika védelmére. Van egy videó erről a Robotics lejátszási listámban.

Majdnem elfelejtettem: vettem néhány golyócsatlakozó kábelt is, amelyek a motorkábelek és a Roboclaw között vannak. MEGJEGYZÉS: ha ezt megteszi, észre fogja venni, hogy a teljes kábelhossz TÉNYLEG HOSSZÚ. De nem akartam, hogy bármit is vágjak, ha nem muszáj. A későbbi lépések során kommunikációs problémákat tapasztaltam az USB -vel a Raspberry és az Arduino között, valószínűleg az EMI zaj miatt.

Ha problémát okoz, rövidre vághatja a vezetékeket - vásárolhat fém árnyékolást is (az Amazon -tól, 1 átmérőjű).

Utolsó dolog: Ezt még meg kell tennem-a Roboclaw automatikus konfigurálását vagy automatikus hangolását (kódolók használatával) úgy, hogy a bal és a jobb oldali motorok azonos sebességgel mozogjanak, és a robot egyenesen menjen.

Az enyém nagyon kanyarodik körülbelül 12 láb fölé, de nem eléggé ahhoz, hogy szükségét érezzem ennek.

3. lépés: Az Arduino hozzáadása és programozása

Szüksége lesz a cső dugójára és néhány vezetékre, valamint egy USB -kábelre. Győződjön meg arról, hogy az Arduino csatlakozóhoz a megfelelőt választotta.

Le kell töltenie az Arduino IDE -t.

Itt a Githubon a legújabb vázlat, amely a robot vezetését kezeli:

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

Csatlakoztatja az Arduino -t az IDE -t futtató számítógépéhez, és a vázlat megírása alapján az Arduino 10 -es és 11 -es csapjait használja a Roboclaw -val a soros kommunikációhoz (Software Serial).

Egy egyszerű kommunikációs protokollt dolgoztam ki a Raspberry Pi és az Arduino között.

ASCII karakteren alapul, ami megkönnyíti a hibakeresést és a tesztelést az Arduino IDE "soros monitor" ablakának használatával.

A parancsok "0" (nulla) számmal kezdődnek, és szükség szerint felmennek

A "20" -tól kezdődő parancsok közvetlen Roboclaw parancsok, az alatta lévők pedig szigorúan Arduino-val kapcsolatos parancsok.

Az EMI zaj miatt javítottam a parancssort, hogy ellenőrző összeget tartalmazzon.

Tehát minden karakterlánc a következőket tartalmazza:

# számú token karakterláncban, beleértve ezt is

az ellenőrző összeg

Tegyük fel például, hogy azt szeretné, hogy az Arduino a parancsmenüjével válaszoljon:

4 0 12 16

"4" négy zseton karakterláncban.

A "0" a MENU parancs.

"12" a véletlen szám, amit választottam.

"16" a 4 + 0 + 12 összege.

Ugyanaz a MENU parancs más lehet:

4 0 20 24

Mivel más véletlen számot választottam, az ellenőrző összeg is más.

Tegyük fel például, hogy 100 % -os sebességgel szeretne előre lépni:

5 29 0 134 100

"5" öt jelző

"29" a FORWARD parancs

"0" a véletlen szám

"134" az ellenőrző összeg

"100" az 1 -es paraméter (ebben az esetben a sebesség)

Ha az Arduino nem tudja ellenőrizni, hogy a bejövő karakterlánc, csak ejti / figyelmen kívül hagyja, nincs válasz.

Ha az Arduino nem kap egy következő mozgásparancsot X milliszekundummal, akkor STOP motorokat küld a Roboclaw -nak.

Az Arduino elindul, és elkezd automatikus állapotot küldeni az USB-portra … hacsak nem azt mondják, hogy hagyja abba ezt.

Ezen a ponton készen kell állnia arra, hogy megpróbálja irányítani a Roboclaw -t és figyelni a motorok forgását, csak az IDE "Soros Monitor" használatával.

4. lépés: A Raspberry Pi (node.js) hozzáadása és programozása

Ismét, ha megnézi a Robotics lejátszási listámat, akár az elejétől fogva, minden lépést átmentem, hogy elindítsam a Málnát.

Az egyetlen dolog, amit talán elmagyaráztam, hogy szüksége lesz egy 5 V -os szabályozóra, és vagy valahogy meg kell építeni, elvágni/módosítani egy USB -kábelt, vagy más módon táplálni a Málnát.

Itt a Githubon mindent megtalál, amire szüksége van a Málnában ahhoz, hogy USB -n keresztül kommunikáljon az Arduino -val.

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

Vannak még teszt szkriptek is.

Megnézheti a node.js szerver kódját, és látni fogja, hogy a Raspberry hogyan alakítja át a tömör numerikus utasításokat REST típusú URL-karakterláncokká. A "curl" segítségével tesztparancsokat küldhet.

Példa:

az RP3 IP -címe: 8084/arduino/api/forward/50

a motorok pillanatra előre forgatják a kerekeket.

Ha ezt egy shell script hurokba helyezné, látná, hogy a kerekek folyamatosan forognak.

A node.js kód (server.js) tartalmaz egy újracsatlakozási szolgáltatást arra az esetre, ha a soros kommunikáció elveszik az Arduino számára. Ezt úgy tesztelheti, hogy csak kihúzza az Arduino-t a málnából, és újra csatlakoztatja.

Győződjön meg arról, hogy megfelel a kettő soros átviteli sebességének.

Mivel az Arduino rossz adatcsomagokat dobott le, és mert a node.js szinten és a böngésző javascript szintjén minden kódolt, hogy sok "drive" parancsot küldjön, akár 2 000 000 baudot is tudtam futtatni (2 Mbps).

Ha elindítja a teszt szkripteket, és látja, hogy a kerekek forognak, akkor készen áll a következő lépésre.

5. lépés: Utolsó lépés - A weblap kliens programozása / használata

Mindezek Málna részéhez tartozó Github link tartalmazza az ügyfélfájlokat.

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

Ők kezelik az USB Gamepadet a Gamepad API-n (böngészőalapú) keresztül, és látnia kell a webhelyen elérhető különböző gombokat és csúszkákat.

A javascript kód lekérdezi (lekérdezi) az egyik botkormány X- és Y-tengelyét. Nagyon gyorsan lekérdez, és mindezeket az értékeket kilövi a node.js szerverre 8084 -en.

A joystick nyers X- és Y-tengelyének értéke 0 és 1 között van.

De az Arduino -ban a motorok hajtására használt Roboclaw motorvezérlő könyvtári funkció -100 -tól 0 -ig (visszafelé) vagy (0-100) közötti értékre számít.

Szia…. ez a célja a p5.min.js. Előfordul, hogy van ez a nagyon szép, kényelmes térkép () függvény, ahol megadja a nyers értéket, a nyers (aktuális) tartományt és az új, kívánt tartományt. És a nyers értéket az új, leképezett tartomány értékévé alakítja át.

Egy másik pont: 100 sebességnél a robot nagyon trükkös tud lenni. Állandóan belefutottam valamibe. De még ha jobban is fejlődik ebben, még mindig érzékeny, amikor balra vagy jobbra forog.

Hozzáadni valója hasonló lenne a weblap jelenlegi Max Speed csúszkájához. Ez a csúszka határozza meg, hogy mi a legnagyobb vagy legnagyobb érték, amelyhez az Xs és Ys joystickokat hozzárendeli.

Példa:

Tegyük fel, hogy 0 -> 1 -től 0 -ig -> 100 -at térképez fel. Amikor a joystickot teljesen lenyomja, 100 -nál tart. Lehet, hogy túl gyors.

De ha kissé hátracsúsztatja a Max Speed csúszkát, akkor most 0 -> 1 -0 -> 80 vagy 70 térképet képez.

Ez azt jelenti, hogy nagyobb mozgástere van a joystick mozgatásához anélkül, hogy a csomópont.js (és az Arduino) sebességének ilyen nagy változása lenne.

Ezenkívül elvégezheti az X -ek (balra vagy jobbra forgatás) és az Y -k (előre vagy hátra) szétválasztását a maximális elérhető sebességre.

Így hagyhatja az Y -kat 0-100, 0 és -100 között a gyors lineáris mozgáshoz, de csökkentse az Xs maximális sebességet a jobban irányított forgómozgáshoz. Mindkét világ legjobbja.

6. lépés: Választható: Hajtson robotot egérhúzással és / vagy érintőképernyővel

Ha idáig eljutott, tudja, hogy a böngészőből kiinduló, a Javascript-en és a Raspberry node.js szerverre, végül az arduino-ra futtató szoftverrétegek átalakítják a Gamepad joystick X- és Y-koordinátáit " forward "(vagy" backward ", stb.) parancsokat (és azok sebességértékét).

Továbbá, akkor tudja, hogy míg a joystick X és Y értéke negatív 1 -től nulláig, plusz 1 -ig, ezeket nulla és 100 közé kell konvertálni. Nos, a maximum a weboldalon beállított maximális sebességtől függ.

Szóval… az egér vagy az érintéses események (mint egy okostelefonon) használata csak az események rögzítése, az X -ek és Y -k megragadása.

DE ---- ezek az X-ek és Y-k NEM negatív 1 és 1 között vannak. 0-val kezdődnek és pozitívan nőnek, mert lényegében valamilyen HTML elem (például egy bootstrap panel) vagy egy vászon képpontjai vagy relatív képernyő-koordinátái.

Tehát ismét a P5 Js könyvtárának "map ()" funkciója nagyon praktikus ahhoz, hogy újra leképezzük, amire szükségünk van.

A kódot úgy alakítottam át, hogy két különböző weboldal legyen, az egyik asztali számítógépen a Gamepad segítségével, másik pedig mobilon, az érintéses események használatával.

Továbbá, az X-ek és Y-k újratérképezése után ugyanabba a kódláncba kerülnek, stb., Akárcsak az X-ek és Y-k a Gamepad-ből.

Ajánlott: