Obsah:

Robot 4WD poháněný vzdáleným gamepadem USB: 6 kroků
Robot 4WD poháněný vzdáleným gamepadem USB: 6 kroků

Video: Robot 4WD poháněný vzdáleným gamepadem USB: 6 kroků

Video: Robot 4WD poháněný vzdáleným gamepadem USB: 6 kroků
Video: Jak vyrobit chytrého ROBOTA z ARDUINA /DIY/ 2024, Červen
Anonim
Image
Image

Pro svůj další robotický projekt jsem byl kvůli nepředvídaným okolnostem nucen architektovat/navrhnout vlastní robotickou platformu.

Cílem je, aby byl autonomní, ale nejprve jsem potřeboval vyzkoušet jeho základní řidičské schopnosti, a tak jsem si řekl, že by to byl zábavný vedlejší projekt, který by se choval a byl ovládán, jako by šlo o RC (rádiem řízené) vozidlo, ale místo toho použijte USB gamepad.

Výsledky byly asi tak dobré nebo lepší, než jsem očekával.

Výhodou trasy USB Gamepad se spoustou programování je, že si ji mohu přizpůsobit a přidat k tomu, co jsem již udělal. Nemám žádnou skutečnou zkušenost s budováním RC vozidla, ale představuji si, že jeden je téměř uvízl s jakýmkoli RC vysílačem (joysticky/tlačítka atd.) A RC přijímačem, který je dodáván s.

Například jsem přidal určité uznání, že robot narazil do zdi, jen tím, že software detekoval vysoké proudy a nízké hodnoty rychlosti kodéru.

Volitelně lze do robota přidat několik webových kamer USB, v závislosti na počtu a jejich umístění lze robota řídit po obývacím prostoru a do jiné místnosti, zatímco sedí někde jinde před počítačem, ke kterému je připojen USB gamepad to.

Tento Instructable nebude pravdivý, podrobný, all-inclusive, krok za krokem, ale pokusím se poskytnout co nejvíce podrobností.

Zásoby

Navrhované části: Většinu z toho jsem získal od Servo City (Actobotics).

2 - 13,5 U -kanály, po stranách základního rámu. Na to jsou namontovány motory. Šel jsem s něčím kratším a moje motory jsou namontovány v samých rozích, a to ztěžovalo jejich montáž.

2 - 12 U -kanály pro přední a zadní část základního rámu.

2 - 15 U -kanály pro nárazníky, přední a zadní

2 - 7 (nebo to bylo 7,5 ?) U -kanály pro přední sloupky. To není příliš důležité, délky se mohou lišit. Záleží na tom, jak vysoké jsou zadní sloupky a v jaké výšce se rozhodnete dát šikmé U-kanál, který se mezi nimi spojuje.

2-(délka?) U-kanály pro šikmý člen, zepředu dozadu, spojující vzpřímené sloupky. Toto je zásadní, protože Servo City / Actobotics prodává za tímto účelem panely nebo držáky pod úhlem 45 stupňů, ale budete muset udělat nějakou matematiku / trig, abyste se ujistili, že získáte správné délky.

2-(délka?) U-kanály, které mají sloužit jako boční nárazníky vyšší úrovně, opět závisí na tom, co děláte se základnou

2-(délka?) U-kanály, které mají sloužit jako přední a zadní nárazníky vyšší úrovně, výše uvedený problém.

1 - (délka?) U -kanál, který bude sloužit jako horní člen, překlenuje zadní sloupky. Toto nemusí být příliš kritické, protože můžete namontovat nahoře nebo před / za svislé sloupky.

12 (přibližně) L-kanálů nebo závorek. Tyto slouží více účelům, ale v zásadě poskytují strukturální integritu/pevnost v rozích základního rámu A svislých sloupků.

4 (+?) 3-jamkové až 5-ti jamkové ploché kanály. Ty také zajišťují strukturální pevnost robota.

ServoCity prodává dva hlavní druhy velkoplošných plochých panelů, které jsou užitečné pro použití jako spodní skluz, nebo na vrchol, kam by šla vaše baterie nebo ovladače, nebo dokonce pro vyšší povrch pro senzory.

Existuje panel 4 (4,5?) "X 12" a myslím, že druhý je panel 9 (9,5?) "X 12.

Nyní to je místo, kde věci začínají být zajímavé a mohou být matoucí a drahé (malé části se sčítají). Všechny kanály atd. Lze k sobě navzájem připojit pomocí těchto spojovacích kusů, kterých je několik. Tady mě mrzí, že nemám komplexní, podrobný a konkrétní seznam dílů.

A jde o to, že vlastně nevíte, které z nich byste mohli potřebovat nebo kolik.. protože existuje tolik způsobů, jak můžete tyto kousky spojit dohromady.

Mohu uvést, co jsem použil:

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

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

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

Následující dva jsou velmi užitečné a já bych si jen vybral tyto:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Dále jsou všechny šrouby (šrouby). Začal jsem balíčkem KAŽDÉ velikosti a prošel jsem většinou z nich. Použil jsem delší šrouby tam, kde na velikosti nezáleželo, a ty kratší jsem vyhradil tam, kde byly VYŽADOVANÉ, protože žádná jiná délka by nefungovala.

Nakonec byste měli dostat 1 pytel z těchto:

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

Nepoužil jsem jich tolik, ale (myslím) jsou zásadní pro zajištění toho, aby vaše motory v průběhu času nevibrovaly z rámu. Pouze dva by fungovaly na motor kvůli U-kanálu

Budete potřebovat alespoň 4 z nich, v případě poškození jednoho můžete získat ještě jeden (věřte mi, možná několikrát nasazujete / sundáváte motory):

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

Hřídele motorů jsou obvykle 6 mm a nápravy jsou 1/4 (0,25 palce).

Získal bych nějaké černé šrouby, údajně silnější, a použil bych je pro výše uvedené svorky a NEPOUŽÍVAL bych šrouby, které jsou součástí svorek:

(Myslím, že to jsou ty):

Ložiska o průměru 4 - 1/4 "(0,25")

1 - pytel černých 1/4 mezikusů

4 - Upínací D -náboje

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

4-D-hřídele (#6340621.375 "(1-3/8")

4 - 6 těžká kola

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

Všimněte si, že miluji tato kola, ale mají tvrdý gumový okraj. Zdá se, že se jim daří na tvrdých podlahách, kobercích a pravděpodobně i na tvrdém betonu. Neuspěje na trávě, písku atd.

TAKÉ budou mít tendenci rozmazávat váš koberec !!!

4 - motory:

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

Šel jsem s 223 otáčkami za minutu, dobrou nejvyšší vnitřní rychlostí, a také jsem mohl docela snadno pohybovat svým robotem (těžkým se 2 bateriemi SLA 12V) ve zpomaleném pohybu.

2 - enkodéry motoru pro motory. (Roboclaw Servo City zpracovává pouze 2 kodéry)

1 - Motorový ovladač Roboclaw 2X45A, ujistěte se, že dostanete ten, na kterém jsou zelené svorkovnice, ne piny…. no … každý má své výhody. Zpětný pohled.. Možná jsem dostal ty piny.

Myslím, že to je ze Servo City.

SparkFun prodává Arduino Uno (to jsem používal) a také Redboard Artemis jako správce disků.

Budete chtít Raspberry Pi 3 (nebo 4?) Jako své „mozky“na vysoké úrovni a rozhraní pro vás.

Budete potřebovat kabeláž, spínače, pojistky a velmi robustní diodu „flyback“.

Použil jsem baterii Duracell 12V 14AH s hlubokým cyklem SLA, ale můžete použít cokoli.

VAROVÁNÍ! Konstrukce tohoto robota (TALL a WIDE, ale SHORT) předpokládá jakési těžké těžiště, jaké by poskytovala baterie SLA. To nemusí fungovat dobře s těmito jinými typy bateriových sad novějších technologií. LiPo, Lion atd. Mohlo by se snadno převrhnout.

Od Pololu jsem dostal několik adaptérů se sudovou zástrčkou, abych mohl nezávisle napájet Arduino a/nebo Redboard, přestože by byly připojeny k Raspberry přes USB, protože jsem se nechtěl spoléhat na výkon Raspberry. (Zejména montáž kamer, senzorů atd.)

Pro Raspberry budete potřebovat krokový regulátor napětí 12 až 5 V, minimálně 5 A (?). Ostatní zvládnou cokoli mezi 7 až 15 V, takže přímo na baterii SLA.

To je u dílů asi vše.

Co bych nedělal - zkosené ozubení 90 stupňů.

V mém playlistu Robotics youtube je opět mnoho videí, které podrobně popisují většinu z výše uvedených.

Krok 1: Stavba

Upřímně řečeno, všechny moje stavební kroky jsou již ve formě youtubů. Můžete je vidět v mém seznamu skladeb Robotics, počínaje „Wallace Robot 4“. Předchozí (Wallace II, Wallace III) mají také dobrý materiál

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

Krok 2: Otestujte Roboclaw, Motors a Encoders

Výrobci Roboclaw (BasicMicro) mají aplikaci pro Windows, pomocí které se můžete ujistit, že jste správně připojili motory a kodéry k Roboclaw. Paralelně k Roboclawu budete připojovat motory na stejné straně. Můžete se rozhodnout použít vodiče kodéru pouze na zadních motorech nebo na předních motorech, nebo možná ještě lépe - DIAGONÁLNĚ.

Důvod mého návrhu souvisí s (pozdější) kontrolou uvízlého robota. Mít diagonálně stav, pokud se přední/zadní kola netočí/může být, může být lepší než jen přední nebo jen zadní část.

POZNÁMKA: Co jsem NEDĚLAL, je použít Arduino také k připojení (přes GPIO piny) k kodérům - pokud to uděláte, můžete mít Roboclaw zvládnout 2 kodéry a pak nechat Arduino zvládnout další dva a jen dotaz na Roboclaw, zda má dvě hodnoty kodéru (a rychlosti).

POZNÁMKA: Aplikaci BasicMicro jsem použil k předkonfiguraci Roboclaw na Ramping Up / Ramping Down. To je dobré pro ochranu hardwaru a elektroniky. V mém seznamu skladeb Robotics je o tom video.

Skoro jsem zapomněl: Koupil jsem si také nějaké kabely s kuličkovým konektorem, které jdou mezi kabely motoru a Roboclaw. POZNÁMKA: Pokud to uděláte, všimnete si, že celková délka kabelu je SKUTEČNĚ DLOUHÁ. Ale nechtěl jsem žádné stříhat, pokud jsem to nepotřeboval. Setkal jsem se (pro pozdější kroky) s komunikačními problémy s USB mezi Raspberry a Arduino, pravděpodobně kvůli hluku EMI.. ale se softwarem jsem to vyřešil.

Pokud se to stane problémem, můžete dráty zkrátit - můžete si také koupit kovové stínění (od Amazonu, průměr 1 ).

Poslední věc: To musím ještě udělat --- nechat Roboclaw automaticky nakonfigurovat nebo automaticky vyladit (pomocí kodérů) tak, aby se motory na levé i pravé straně pohybovaly stejnou rychlostí a robot šel rovně.

Ten můj se velmi mírně zakřivuje asi na 12 stop, ale ne natolik, abych cítil, že je třeba s tím něco udělat.

Krok 3: Přidání a programování Arduina

Budete potřebovat hlavní zástrčku a nějaké kabely, také USB kabel. Ujistěte se, že pro konektor Arduino získáte správný.

Budete si muset stáhnout Arduino IDE.

Tady na Githubu je nejnovější skica, která zvládá řízení robota:

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

Arduino připojíte k počítači, na kterém běží IDE, a podle toho, jak je skica napsána, byste pomocí Ardocina používali piny 10 a 11 na Arduinu pro sériovou komunikaci (Software Serial).

Vyvinul jsem jednoduchý komunikační protokol mezi Raspberry Pi a Arduino.

Je založen na znaku ASCII, což usnadňuje ladění a testování pouze pomocí okna „sériového monitoru“Arduino IDE.

Příkazy začínají číslem „0“(nula) a podle potřeby jdou nahoru

Příkazy začínající na „20“jsou přímé příkazy Roboclaw a příkazy pod tímto číslem jsou výhradně příkazy související s Arduino.

Kvůli hluku EMI jsem vylepšil příkazový řetězec tak, aby obsahoval kontrolní součet.

Jakýkoli řetězec tedy bude obsahovat:

# počet tokenů v řetězci včetně tohoto

kontrolní součet

Příklad: Řekněte, že chcete, aby Arduino reagovalo nabídkou příkazů:

4 0 12 16

„4“jsou čtyři tokeny v řetězci.

„0“je příkaz MENU.

„12“je náhodné číslo, které jsem vybral.

„16“je součet 4 + 0 + 12.

Stejný příkaz MENU se může lišit:

4 0 20 24

Protože jsem vybral jiné náhodné číslo, kontrolní součet je také jiný.

Příklad: Řekněte, že se chcete posunout vpřed 100 % rychlostí:

5 29 0 134 100

„5“pět žetonů

„29“příkaz VPŘED

„0“náhodné číslo

"134" kontrolní součet

"100" parametr 1 (rychlost v tomto případě)

Pokud Arduino nemůže ověřit příchozí řetězec, jednoduše jej upustí / ignoruje, žádná odpověď.

Pokud Arduino neobdrží další pohybový příkaz s X milisekundami, pošle do Roboclaw STOP motory.

Arduino se spustí a začne odesílat automatický stav na port USB … pokud mu nebude řečeno, aby s tím přestal.

V tomto okamžiku byste měli být připraveni zkusit ovládat Roboclaw a sledovat otáčení motorů, a to pouze pomocí „sériového monitoru“na IDE.

Krok 4: Přidání a programování Raspberry Pi (node.js)

Opět, když se podíváte na můj seznam skladeb Robotics, dokonce od začátku jsem prošel každý krok, abych Raspberry spustil.

Jediná věc, kterou jsem možná přehlédl, je, že budete potřebovat 5V regulátor a buď k tomu nějak postavit, přestřihnout/upravit kabel USB, nebo napájet Raspberry jiným způsobem.

Tady na Githubu je vše, co v Raspberry potřebujete ke komunikaci s Arduino přes USB.

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

Existují dokonce i testovací skripty.

Můžete se podívat na kód serveru node.js a uvidíte, jak Raspberry převádí stručné číselné pokyny na řetězce URL typu REST. K odeslání testovacích příkazů můžete použít „curl“.

Příklad:

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

způsobí, že motory na okamžik otočí kola dopředu.

Pokud to vložíte do smyčky skriptu shellu, uvidíte, jak se kola točí.

Kód node.js (server.js) obsahuje funkci opětovného připojení v případě ztráty sériových komunikací pro Arduino. Můžete to vyzkoušet pouhým odpojením Arduina od Raspberry a jeho opětovným zapojením.

Ujistěte se, že mezi nimi odpovídá sériová přenosová rychlost.

Vzhledem k tomu, že Arduino shazuje špatné datové pakety, a protože na úrovni node.js a na úrovni javascriptu prohlížeče je vše kódováno pro odeslání mnoha příkazů „drive“, dokázal jsem běžet až 2 000 000 baudů (2 Mb / s).

Pokud spustíte testovací skripty a vidíte, jak se kola točí, jste připraveni na další krok.

Krok 5: Poslední krok - Programování / Použití klienta webové stránky

Soubory klienta jsou součástí odkazu Github na část Raspberry toho všeho.

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

Ovládají USB Gamepad prostřednictvím Gamepad API (na bázi prohlížeče) a měli byste vidět různá tlačítka a posuvníky, které jsou také k dispozici na webové stránce.

Kód JavaScriptu dotazuje (hlasuje) na hodnoty osy X a Y pro jeden z joysticků.. (v závislosti na tom, jaké joysticky/gamepad máte, možná budete muset kód vyladit). Hlasuje velmi rychle a vypálí všechny tyto hodnoty na server node.js, který poslouchá na 8084.

Surové hodnoty osy X a Y joysticků jsou mezi 0 a 1.

Ale funkce knihovny ovladačů motoru Roboclaw, která je v Arduinu používána k pohonu motorů, očekává hodnotu mezi -100 až 0 (zpět) nebo (0 až 100) vpřed.

Tak…. to je účel zahrnutí souboru p5.min.js. Prostě má tuto velmi pěknou a praktickou funkci map (), kde mu dáte nezpracovanou hodnotu, je to nezpracovaný (aktuální) rozsah a nový požadovaný rozsah. A převádí surovou hodnotu na hodnotu v novém mapovaném rozsahu.

Další bod: Při rychlosti 100 může být robot velmi ošidný. Neustále jsem na něco narážela. Ale i když se v tom zlepšujete, je to stále citlivé při otáčení doleva nebo doprava.

Něco, co byste přidali, by bylo podobné aktuálnímu jezdci Max Speed na webové stránce. Tento posuvník určuje, jaká je nejvyšší nebo maximální hodnota, na kterou budete mapovat joysticky Xs a Ys.

Příklad:

Řekněme, že mapujete 0 -> 1 až 0 -> 100. Po úplném stisknutí joysticku jste na 100. Touchy. Může to být příliš rychlé.

Pokud ale posunete posuvník Max Speed o kousek zpět, nyní mapujete 0 -> 1 až 0 -> 80 nebo 70.

To znamená, že máte větší prostor pro pohyb joystickem, aniž by došlo k tak velké změně rychlosti odesílané do node.js (a do Arduina).

A navíc, co byste mohli udělat, je oddělit Xs (otočit doleva nebo doprava) od Ys (dopředu nebo dozadu) na vlastní maximální dostupné rychlosti.

Mohli byste tedy nechat Y na 0 až 100, 0 až -100 pro rychlý lineární pohyb, ale snížit maximální rychlost Xs pro kontrolovanější rotační pohyb. Nejlepší z obou světů.

Krok 6: Volitelné: Řiďte robota událostmi přetažením myší nebo dotykem

Pokud jste se dostali tak daleko, víte, že softwarové vrstvy počínaje prohlížečem a procházením přes Javascript až po server Raspberry node.js, nakonec na arduino, převádějí souřadnice joysticku Gamepad X a Y na „ dopředu “(nebo„ zpět “atd.) (a jejich rychlost).

Dále víte, že zatímco Xs a Y joysticků jsou záporné 1, přes nulu, na plus 1, ty musí být převedeny mezi nulou a 100. No, maximum závisí na nastavení maximální rychlosti na webové stránce.

Takže … jediná věc, kterou je třeba použít buď na myši, nebo na dotykových událostech (jako na smartphonu), je zachytit tyto události, chytit X a Y.

ALE ---- ty X a Y NENÍ mezi zápornými 1 a 1. Začínají 0 a kladně se zvyšují, protože jsou to v podstatě pixely nebo relativní souřadnice obrazovky nějakého prvku HTML (například panelu bootstrapu) nebo plátna.

Takže opět zde je funkce „map ()“knihovny Js knihovny P5 velmi užitečná k přemapování na to, co potřebujeme.

Změnil jsem kód tak, aby měl dvě různé webové stránky, jednu pro stolní počítač pomocí gamepadu a druhou pro mobilní zařízení pomocí dotykových událostí.

Jakmile jsou X a Y znovu namapovány, jsou vloženy do stejného řetězce kódu atd., Stejně jako X a Y z Gamepadu.

Doporučuje: