Innehållsförteckning:

En 4WD -robot driven via fjärrkontroll USB -spelkontroll: 6 steg
En 4WD -robot driven via fjärrkontroll USB -spelkontroll: 6 steg

Video: En 4WD -robot driven via fjärrkontroll USB -spelkontroll: 6 steg

Video: En 4WD -robot driven via fjärrkontroll USB -spelkontroll: 6 steg
Video: This may be the best car hack! 2024, Juni
Anonim
Image
Image

För mitt nästa robotprojekt tvingades jag att arkitekt/designa min egen robotplattform på grund av oförutsedda omständigheter.

Målet är att det ska vara autonomt, men först behövde jag testa dess grundläggande körförmåga, så jag tyckte att det skulle vara ett roligt sidoprojekt att få bete sig och bli kontrollerad som om det vore ett RC (radiostyrt) fordon, men använd istället en USB -spelkontroll.

Resultaten har varit ungefär lika bra eller bättre än jag förväntat mig.

Fördelen med att gå USB Gamepad -vägen, med mycket programmering, är att jag kan anpassa den och lägga till det jag redan har gjort. Jag har ingen faktisk erfarenhet av att bygga ett RC -fordon, men jag föreställer mig att det är ganska fast med vad RC -sändaren (joysticks/knappar osv) och RC -mottagaren kommer med.

Till exempel har jag lagt till ett erkännande av att roboten har träffat en vägg, bara genom att låta programvaran upptäcka höga strömmar och låga kodarhastighetsvärden.

Alternativt kan man lägga till några USB -webbkameror till roboten, beroende på hur många och deras placering, kan man köra roboten runt vardagsrummet och in i ett annat rum, medan man sitter någon annanstans framför datorn som har USB -spelkontakten ansluten till den.

Denna instruerbara kommer inte att vara en sann, detaljerad, allomfattande, steg-för-steg-instruktion, men jag kommer att försöka ge så mycket detaljer jag kan.

Tillbehör

Föreslagna delar: Det mesta fick jag från Servo City (Actobotics).

2 - 13,5 U -kanaler, för sidorna av basramen. Motorerna är monterade på detta. Jag gick med något kortare och mina motorer är monterade i hörnen, och det gjorde det svårt att montera dem.

2 - 12 U -kanaler för fram- och baksidan av basramen.

2 - 15 U -kanaler för stötfångarna, fram och bak

2 - 7 (eller var det 7,5 ?) U -kanaler för de främre kolumnerna. Detta är inte för kritiskt, längderna kan variera. Det beror på hur höga de bakre kolumnerna är och på vilken höjd du väljer att sätta de vinklade U-kanal som förbinder dem.

2-(längd?) U-kanaler för det vinklade elementet, fram-till-bak, som förbinder de upprättstående pelarna. Den här är kritisk, eftersom Servo City / Actobotics säljer 45 graders vinklade paneler eller fästen för detta ändamål, men du måste göra lite matte / trig för att se till att du får rätt längder.

2-(längd?) U-kanaler för att fungera som sidofångare på högre nivå, återigen beror dessa på vad du gör med basen

2-(längd?) U-kanaler för att fungera som främre och bakre stötfångare på högre nivå, samma sak till ovan.

1 - (längd?) U -kanal för att fungera som den översta delen, sträcker sig över de bakre kolumnerna. Den här kanske inte är för kritisk, eftersom du kan montera ovanpå eller framför / bakom de upprättstående kolumnerna.

12 (ca) L-kanaler eller fästen. Dessa tjänar flera syften men ger i huvudsak strukturell integritet/styrka till hörnen av basramen OCH de upprättstående pelarna.

4 (+?) 3-håls till 5-håls platta kanaler. Dessa ger också roboten strukturell styrka.

ServoCity säljer två huvudtyper av stora platta paneler, användbara för att använda som bottenplatta eller topp där ditt batteri och eller kontroller skulle gå, eller till och med för högre yta för sensorer.

Det finns en 4 (4,5?) "X 12" panel, och jag tror att den andra är en 9 (9,5?) "X 12 panel.

Nu är det här saker blir intressanta och kan vara förvirrande och dyra (små delar läggs till). Alla kanaler osv kan anslutas till varandra via dessa anslutningsdelar, av vilka det finns flera. Det är här jag är ledsen att jag inte har en omfattande, detaljerad, specifik dellista.

Och saken är.. du vet inte riktigt vilka du kan behöva, eller hur många.. eftersom det finns så många sätt du kan passa ihop dessa bitar.

Jag kan lista vad jag har använt:

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

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

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

Följande två är mycket praktiska, och jag skulle bara fylla på med dessa:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Därefter är alla skruvar (bultar). Jag började med ett paket med VARJE storlek, och jag har gått igenom de flesta av dem. Jag använde längre skruvar där storleken inte spelade någon roll och reserverade de kortare där de krävdes eftersom ingen annan längd skulle fungera.

Slutligen bör du få 1 påse av dessa:

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

Jag använde inte så många, men de (tror jag) är avgörande för att se till att dina motorer inte vibrerar löst från ramen med tiden. Endast två skulle fungera per motor, på grund av U-kanalen

Du kommer att behöva minst fyra av dessa, du kan få en extra eller så om du orsakar skada på en (lita på mig, du kan sätta på / ta av motorerna några gånger):

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

Normalt är motoraxlarna 6 mm och axlarna är 1/4 tum (0,25 tum).

Jag skulle få några svarta skruvar, förmodligen starkare, och använda dem för ovanstående klämmor, och INTE använda skruvarna som följer med klämmorna:

(Jag tror att det är de här):

4 - 1/4 "(0,25") lager med diameter

1 - påse med svarta 1/4 distanser

4 - Spänning av D -nav

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

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

4 - 6 tunga hjul

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

Observera att jag älskar dessa hjul men de har en hård gummikant. De verkar klara sig bra på hårda golv och mattor och förmodligen hårda betongpromenader. Kommer inte att fungera bra på gräs, sand, etc.

OCKSÅ, de tenderar att smeta din matta !!!

4 - motorer:

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

Jag gick med 223 rpm, bra topphastighet inomhus, kunde också flytta min robot (tung med 2 SLA 12V -batterier) ganska lätt i slowmotion.

2 - motorkodare för motorerna. (Servo Citys Roboclaw hanterar endast 2 kodare)

1 - Roboclaw 2X45A motorstyrenhet, se till att du får den med de gröna kopplingsblocken på den, inte stiften…. welll … var och en har sina fördelar. I efterhand.. Jag kanske har fått stiften.

Jag tror att det är det från Servo City.

SparkFun säljer Arduino Uno (det är vad jag använde), och även Redboard Artemis som din drivhanterare.

Du vill ha en Raspberry Pi 3 (eller 4?) Som dina "hjärnor" på hög nivå och gränssnitt för dig.

Du behöver ledningar, strömbrytare, säkringar och en mycket robust "flyback" -diod.

Jag använde ett Duracell 12V 14AH deep-cycle SLA-batteri, men du kan använda vad som helst.

VARNING! Utformningen av denna robot (TALL, och WIDE, men SHORT), förutsätter en slags tung tyngdpunkt, som ett SLA -batteri skulle ge. Det kanske inte fungerar bra med de andra typerna av nyare batteripaket. LiPo, Lion, etc. Det kan lätt välta.

Från Pololu fick jag några fatkontakter, så att jag självständigt kunde driva Arduino och/eller Redboard, även om de skulle vara anslutna till hallon via USB, eftersom jag inte ville behöva förlita mig på hallonets kraft. (Speciellt montering av kameror, sensorer etc.)

Du behöver en 12-till-5V nedspänningsregulator, minst 5A (?) För hallon. De andra kan hantera allt mellan 7 till 15V så direkt till SLA -batteriet.

Det är ungefär det för delar.

Vad jag INTE skulle göra - 90 graders fasad växellåda.

Återigen finns det många videor i min Robotics youtube -spellista som beskriver de flesta av ovanstående.

Steg 1: Konstruktion

Uppriktigt sagt är alla mina konstruktionssteg redan i form av youtubes. Du kan se dem i min Robotics -spellista, som börjar med "Wallace Robot 4". De tidigare (Wallace II, Wallace III) har också bra material

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

Steg 2: Testa Roboclaw, motorer och kodare

Tillverkarna av Roboclaw (BasicMicro) har ett Windows -program som du kan använda för att se till att du kopplade motorerna och kodarna korrekt till Roboclaw. Du kommer att ansluta motorer från samma sida parallellt med Roboclaw. Du kan välja att använda givarkablarna, bara på de bakre motorerna eller de främre motorerna, eller kanske ännu bättre - DIAGONALT.

Anledningen till mitt förslag har att göra med att (senare) söka efter en fast robot. Att ha status diagonalt om fram-/bakhjulen vrider/inte kan vara bättre än bara framsidan, eller bara baksidan.

OBS: det jag INTE har gjort är att använda Arduino för att också ansluta (via GPIO -stift) till kodarna - om du gjorde det kan du få Roboclaw -handtaget 2 kodare och sedan få Arduino att hantera de andra två, och bara fråga Roboclaw om dess två kodarvärden (och hastigheter).

OBS: Jag använde BasicMicros applikation för att förkonfigurera Roboclaw för rampning upp / rampning. Detta är bra för att skydda hårdvaran och elektroniken. Det finns en video om det i min Robotics -spellista.

Jag glömde nästan: Jag köpte också några bullet-connector-kablar som går mellan motorkablarna och Roboclaw. OBS: om du gör detta kommer du att märka att den totala kabellängden är VERKLIGEN LÅNG. Men jag ville inte behöva klippa några om jag inte behövde. Jag stötte på (för senare steg) kommunikationsproblem med USB mellan Hallon och Arduino, troligen på grund av EMI -brus.. men jag har arbetat med det med programvara.

Om det blir ett problem kan du klippa trådarna korta - du kan också köpa metallskärmning (från Amazon, 1 diameter).

Sista: Det här har jag ännu inte gjort --- få Roboclaw-autokonfigurering eller -inställning (med kodare) så att både vänster- och högermotorer rör sig med samma hastighet och roboten går rakt.

Min kurva mycket lätt över cirka 12 fot men inte tillräckligt för att jag kände behov av att göra något åt det.

Steg 3: Lägga till och programmera Arduino

Du behöver fatkontakten och några kablar, även en USB -kabel. Se till att du får rätt för Arduino -kontakten.

Du måste ladda ner Arduino IDE.

Här på Github är den senaste skissen som hanterar att köra roboten:

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

Du kommer att ansluta Arduino till din dator som kör IDE, och baserat på hur skissen är skriven använder du stiften 10 och 11 på Arduino för seriell kommunikation (Software Serial) med Roboclaw.

Jag utvecklade ett enkelt kommunikationsprotokoll mellan Raspberry Pi och Arduino.

Det är ASCII-teckenbaserat, vilket gör det lättare att felsöka och testa bara med Arduino IDE-fönstret "seriell bildskärm".

Kommandona börjar med siffran "0" (noll) och går bara upp efter behov

Kommandona som börjar på "20" -erna är direkta Roboclaw-kommandon, och de under det numret är strikt Arduino-relaterade kommandon.

På grund av EMI -bruset förbättrade jag kommandosträngen till att inkludera en kontrollsumma.

Så vilken sträng som helst kommer att innehålla:

# antal tokens i strängen inklusive den här

kontrollsumman

Exempel, säg att du vill att Arduino ska svara med kommandomenyn:

4 0 12 16

"4" är fyra tokens i sträng.

"0" är kommandot MENU.

"12" är det slumpmässiga numret jag valde.

"16" är summan av 4 + 0 + 12.

Samma MENY -kommando kan vara annorlunda:

4 0 20 24

Eftersom jag valde ett annat slumpmässigt nummer är kontrollsummen också annorlunda.

Exempel, säg att du vill gå framåt med 100 % hastighet:

5 29 0 134 100

"5" fem tokens

"29" kommandot FRAMÅT

"0" slumpmässigt tal

"134" kontrollsumman

"100" parameter 1 (hastigheten i detta fall)

Om Arduino inte kan verifiera den inkommande strängen tappar den bara / ignorerar den, inget svar.

Om Arduino inte får ett nästa rörelsekommando med X millisekunder, skickar den en STOP -motor till Roboclaw.

Arduino startar och börjar skicka en autostatus till USB-porten … såvida den inte blir tillsagd att sluta göra det.

Vid denna tidpunkt bör du vara redo att försöka styra Roboclaw och se motorerna svänga, bara genom att använda "Serial Monitor" på IDE.

Steg 4: Lägga till och programmera Raspberry Pi (node.js)

Återigen, om du tittar på min Robotics -spellista, även från början, gick jag igenom varje steg för att få Raspberry igång.

Det enda jag kan ha glömt över är att du kommer att behöva en 5V regulator, och antingen på något sätt konstruera, klippa/modifiera en USB -kabel för den eller driva hallon på ett annat sätt.

Här på Github finns allt du behöver i Hallon för att kommunicera med Arduino via USB.

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

Det finns till och med testskript.

Du kan ta en titt på node.js serverkod och du kommer att se hur Hallon omvandlar de korta numeriska instruktionerna till URL-strängar av REST-typ. Du kan använda "curl" för att skicka testkommandon.

Exempel:

din RP3 IP -adress: 8084/arduino/api/forward/50

kommer att få motorerna att rotera hjulen en stund framåt.

Om du lägger det i en skalskriptslinga skulle du se att hjulen fortsätter att rotera.

Node.js-koden (server.js) innehåller en återanslutningsfunktion om seriella kommandon förloras för Arduino. Du kan testa detta genom att bara koppla ur Arduino från hallon och ansluta det igen.

Se till att du matchar den seriella överföringshastigheten mellan de två.

På grund av att Arduino släppte dåliga datapaket och för att på node.js -nivån och på webbläsarens javascript -nivå är allt kodat för att skicka många "drive" -kommandon, jag har kunnat köra så högt som 2 000 000 baud (2 Mbps).

Om du får testskripten att köra och du ser att hjulen snurrar är du redo för nästa steg.

Steg 5: Sista steget - Programmering / användning av webbsideklienten

Klientfilerna ingår i Github -länken till Raspberry -delen av allt detta.

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

De hanterar USB-spelkontrollen via Gamepad API (webbläsarbaserad) och du bör se de olika knapparna och reglagen också tillgängliga på webbsidan.

Javascriptkoden frågar (undersökningar) X- och Y-axelvärdena för en av joystickarna.. (beroende på vilken joysticks/gamepad du har kan du behöva justera koden). Det frågar mycket snabbt och det avfyrar alla dessa värden till node.js -servern som lyssnar på 8084.

Joystickens råa X- och Y-axelvärden ligger mellan 0 och 1.

Men Roboclaw -motorstyrningens biblioteksfunktion som används i Arduino för att driva motorerna, förväntar sig ett värde mellan -100 till 0 (bakåt) eller (0 till 100) framåt.

Så o…. det är syftet med att inkludera p5.min.js. Det råkar bara ha denna mycket trevliga, bekväma kartfunktion () där du ger den råvärdet, det är rå (nuvarande) intervall och det nya, önskade intervallet. Och det omvandlar råvärdet till värdet vid det nya, mappade intervallet.

En annan punkt: Vid 100 hastigheter kan roboten vara väldigt knepig. Jag stötte hela tiden på något. Men även när du blir bättre på det är det fortfarande känsligt när du roterar åt vänster eller höger.

Något för dig att lägga till skulle likna det nuvarande Max Speed -reglaget på webbsidan. Det reglaget avgör vad som är det högsta eller högsta värdet som du ska mappa joystickarna Xs och Ys till.

Exempel:

Säg att du kartlägger 0 -> 1 till 0 -> 100. När du trycker på joysticken för fullt, är du på 100. Touchy. Kan vara för snabbt.

Men om du skjuter skjutreglaget Max Speed lite tillbaka, kartlägger du nu 0 -> 1 till 0 -> 80 eller 70.

Det betyder att du har mer utrymme att flytta joysticken utan att en så stor förändring av hastigheten skickas till noden.js (och till Arduino).

Och ett tillägg du kan göra är att separera X: erna (rotera vänster eller höger) från Y: erna (framåt eller bakåt) till sina egna maximala tillgängliga hastigheter.

Således kan du lämna Ys vid 0 till 100, 0 till -100 för snabb linjär rörelse, men sänka maxhastigheten Xs för mer kontrollerad rotationsrörelse. Bästa av båda världar.

Steg 6: Valfritt: Drive Robot With Mouse Drag and / or Touch Events

Om du kommit så långt vet du att programvarulagren som börjar från webbläsaren och borrar ner genom Javascript och vidare till Raspberry node.js-servern, slutligen till arduino, konverterar Gamepad-joysticken X- och Y-koordinater till " kommandon (eller "bakåt", etc) (och deras hastighetsvärde).

Vidare vet du då att medan joystickarnas X och Y är negativa 1, till och med noll, till plus 1, måste de konverteras mellan noll och 100. Tja, max beror på maxhastighetsinställningen på webbsidan.

Soo … det enda du ska göra för att använda antingen musen eller beröra händelser (som på en smartphone) är att fånga dessa händelser, ta tag i Xs och Ys.

MEN ---- de Xs och Ys är INTE mellan negativa 1 och 1. De börjar 0 och ökar positivt, eftersom de i huvudsak är pixlarna eller relativa skärmkoordinater för ett HTML-element (t.ex. en bootstrap-panel) eller en duk.

Så där igen är P5: s Js-biblioteks "map ()" -funktion mycket praktiskt för att kartlägga om till det vi behöver.

Jag gjorde om koden för att ha två olika webbsidor, en för skrivbordet med hjälp av gamepad, en annan för mobil, med pekhändelser.

När X: orna och Y: erna åter mappas, matas de in i samma kodkedja etc, liksom X: erna och Y: n från Gamepad.

Rekommenderad: