Innholdsfortegnelse:

Bygg din egen Turtlebot -robot !: 7 trinn
Bygg din egen Turtlebot -robot !: 7 trinn

Video: Bygg din egen Turtlebot -robot !: 7 trinn

Video: Bygg din egen Turtlebot -robot !: 7 trinn
Video: Bygg din egen carport 2024, November
Anonim
Bygg din egen Turtlebot -robot!
Bygg din egen Turtlebot -robot!
Bygg din egen Turtlebot -robot!
Bygg din egen Turtlebot -robot!
Bygg din egen Turtlebot -robot!
Bygg din egen Turtlebot -robot!

REDIGERE:

Ytterligere informasjon om programvare og kontroll er tilgjengelig på denne lenken:

hackaday.io/project/167074-build-your-own-turtlebot-3-backbone

Den direkte lenken til koden er:

github.com/MattMgn/foxbot_core

Hvorfor dette prosjektet?

Turtlebot 3 er den perfekte plattformen for dypt inn i elektronikk, robotikk og til og med AI! Jeg foreslår at du bygger din egen turtlebot trinnvis med rimelige komponenter uten å ofre funksjoner og ytelse. Med én ting i tankene: å beholde det beste fra den første roboten, dens modularitet, enkelhet og det store antallet pakker for autonom navigasjon og AI fra open source-samfunnet.

Dette prosjektet er en mulighet for nybegynnere til å tilegne seg begreper om elektronikk, mekanikk og informatikk, og for de mer erfarne å få en kraftig plattform for å teste og utvikle kunstige intelligensalgoritmer.

Hva vil du oppdage i dette prosjektet?

Du er i ferd med å oppdage hvilke viktige mekaniske og elektroniske deler som må holdes fra den originale boten for å garantere fullstendig kompatibilitet.

Hele byggeprosessen vil være detaljert: fra 3D -utskrift, montering og flere komponenter, lodding og integrering av elektronikk til endelig kodekompilering på Arduino. Denne instruksen vil konkludere med et "hei verden" -eksempel for å gjøre deg kjent med ROS. Hvis noe virker uklart, kan du stille spørsmål!

Rekvisita

Elektronikk:

1 x enkelt bord datamaskin for å kjøre ROS, kan for eksempel være en Raspberry Pi eller en Jetson Nano

1 x Arduino DUE, du kan også bruke en UNO eller en MEGA

1 x Proto-brett som passer til Arduino DUE pin-out tilgjengelig her

2 x 12V likestrømsmotorer med encodere (100 omdr./min.)

1 x L298N motordriver

2 x 5V regulator

1 x batteri (3S/4S LiPo -batteri for eksempel)

2 x PÅ/AV brytere

2 x LED

2 x 470 kOhm motstander

3 x 4 pins JST -kontakter

1 x USB -kabel (minst en mellom SBC og Arduino)

Sensorer:

1 x Strømføler (valgfritt)

1 x 9 frihetsgrader IMU (valgfritt)

1 x LIDAR (valgfritt)

Chassis:

16 x Turtlebot modulære plater (som også kan 3D -printes)

2 x hjul 65 mm diameter (6 mm bredde)

4 x Nylon -avstandsstykker 30 mm (valgfritt)

20 x M3 -innsatser (valgfritt)

Andre:

Ledninger

M2.5 og M3 skruer og innsatser

3D -skriver eller noen som kan skrive ut delene for deg

Et håndbor med et sett bor som dette

Trinn 1: Beskrivelse

Beskrivelse
Beskrivelse
Beskrivelse
Beskrivelse

Denne roboten er en enkel differensialdrift som bruker 2 hjul som er direkte montert på motoren og en rulle som er plassert bak for å forhindre at roboten faller omkull. Roboten er delt inn i to lag:

bunnlaget: med fremdriftsgruppen (batteri, motorstyring og motorer) og elektronikken på lavt nivå: Arduino mikrokontroller, spenningsregulator, brytere …

det øvre laget: med elektronikken på høyt nivå, nemlig enkeltkortdatamaskinen og LIDAR

Disse lagene er knyttet sammen med trykte deler og skruer for å sikre konstruksjonens robusthet.

Elektronisk skjematisk

Skjematikken kan virke litt rotete. Det er en skjematisk tegning, og den representerer ikke alle ledninger, kontakter og proto-kortet, men den kan leses som følger:

Et 3S Litihum Ion Polymer -batteri med 3000mAh kapasitet driver den første kretsen, den driver både motorkontrollerkortet (L298N) og en første 5V regulator for motorkodere og Arduino. Denne kretsen aktiveres via en bryter med en LED som indikerer PÅ/AV -tilstanden.

Det samme batteriet driver en andre krets, inngangsspenningen konverteres til 5V for å drive enkeltkortdatamaskinen. Også her er kretsen aktivert gjennom en bryter og en LED.

Ytterligere sensorer som et LIDAR eller et kamera kan deretter legges til direkte på Raspberry Pi via USB eller CSI -porten.

Mekanisk design

Roboterammen består av 16 identiske deler som dannet 2 kvadratiske lag (28 cm bredde). De mange hullene gjør det mulig å montere flere deler uansett hvor du trenger det, og tilbyr en komplett modulær design. For dette prosjektet bestemte jeg meg for å kjøpe originalene TurtleBot3 -plater, men du kan også skrive dem ut i 3D fordi designet er åpen kildekode.

Trinn 2: Motorblokkmontering

Motorblokkmontering
Motorblokkmontering
Motorblokkmontering
Motorblokkmontering
Motorblokkmontering
Motorblokkmontering

Motor forberedelse

Det første trinnet er å legge til 1 mm tykt skumbånd rundt hver motor for å forhindre vibrasjoner og støy når motoren skal snurre.

Trykte deler

Motorholderen resulterer i to deler som griper motoren som en skruestik. 4 skruer oppnådd for å stramme motoren i holderen.

Hver holder består av flere hull som er vert for M3 -innsatser som skal monteres på strukturen. Det er flere hull enn det som faktisk trengs, de ekstra hullene kan til slutt brukes til å montere ekstra del.

3D -skriverinnstillinger: alle delene skrives ut med følgende parametere

  • 0,4 mm diameter dyse
  • 15% materialfyll
  • 0,2 mm høyde lag

Hjul

De valgte hjulene er dekket med gummi for å maksimere vedheftet og sikre glidefri rullingstilstand. En klemskrue holder hjulet montert på motorakselen. Diameteren på hjulet skal være stor nok til å krysse mindre trinn og uregelmessigheter i bakken (disse hjulene er 65 mm i diameter).

Fiksering

Når du har gjort med en motorblokk, gjentar du de forrige operasjonene og deretter bare fikser dem i laget med M3 -skruer.

Trinn 3: Brytere og kabelforberedelse

Brytere og kabelforberedelse
Brytere og kabelforberedelse
Brytere og kabelforberedelse
Brytere og kabelforberedelse
Brytere og kabelforberedelse
Brytere og kabelforberedelse

Motorkabel forberedelse

Vanligvis kommer motor-encoderen med en kabel, inkludert en 6-pinners kontakt på den ene siden som forbinder baksiden av encoder PCB, og nakne ledninger på den andre siden.

Du har muligheten til å lodde dem direkte på prototavlen eller til og med Arduino, men jeg anbefaler deg å bruke kvinnelige pinhoder og JST-XH-kontakter i stedet. Dermed kan du koble dem til/fra pluggen og gjøre monteringen enklere.

Tips: du kan legge til en utvidbar ermet flette rundt ledningene og biter av krympeslange nær kontakter, slik at du får en "ren" kabel.

Bryter og LED

For å aktivere de to strømkretsene må du forberede 2 LED- og bryterkabler: Først lodder du en 470kOhm -motstand på en av LED -pinnene, deretter lodder LED -en på en bryterpinnen. Også her kan du bruke et stykke krympeslange for å skjule motstanden inne. Vær forsiktig med å lodde LED -en i riktig retning! Gjenta denne operasjonen for å få to brytere/ledede kabler.

montering

Monter de tidligere lagde kablene på den tilsvarende 3D -trykte delen. Bruk en mutter for å opprettholde bryteren, lysdiodene trenger ikke lim, bare tving nok til å passe den i hullet.

Trinn 4: Elektroniske tavler

Kabling av elektroniske tavler
Kabling av elektroniske tavler
Kabling av elektroniske tavler
Kabling av elektroniske tavler
Kabling av elektroniske tavler
Kabling av elektroniske tavler

Brettoppsett

Et protokoll som passer til Arduino-bordoppsettet brukes til å redusere antall ledninger. På toppen av prototavlen er L298N stablet med Dupont kvinnelig topptekst (Dupont er 'Arduino-lignende' overskrifter).

L298N -preparat

Opprinnelig kommer ikke L298N -kortet med tilsvarende mannlig Dupont -topptekst, du må legge til en rad med 9 pins under brettet. Du må realisere 9 hull med 1 mm diameter bor parallelt med de eksisterende hullene som du kan se på bildet. Deretter kobler du de tilsvarende pinnene i de 2 radene med loddematerialer og korte ledninger.

L298N pin-out

L298N består av 2 kanaler som tillater hastighets- og retningskontroll:

retning gjennom 2 digitale utganger, kalt IN1, IN2 for den første kanalen, og IN3 og IN4 for den andre

hastighet gjennom 1 digitale utganger, kalt ENA for den første kanalen og ENB for den andre

Jeg valgte følgende pin-out med Arduino:

venstre motor: IN1 på pinne 3, IN2 på pinne 4, ENA på pinne 2

høyre motor: IN3 på pin 5, IN4 på pin 6, ENB på pin 7

5V regulator

Selv om l298N normalt kan levere 5V, legger jeg til en liten regulator. Den driver Arduino gjennom VIN -porten og de 2 koderne på motorene. Du kan hoppe over dette trinnet ved å bruke den innebygde L298N 5V-regulatoren direkte.

JST-kontakter og koder-pin-out

Bruk 4 pins JST-XH hunkontaktadaptere, hver kontakt kobles deretter til:

  • 5V fra regulatoren
  • en bakken
  • to digitale inngangsporter (for eksempel: 34 og 38 for høyre encoder og 26 og 30 for den venstre)

Ekstra I2C

Som du kanskje har lagt merke til, er det en ekstra 4-pinners JST-kontakt på proto-kortet. Den brukes til å koble til I2C -enhet som en IMU, du kan gjøre det samme og til og med legge til din egen port.

Trinn 5: Motor Group og Arduino på bunnlaget

Motor Group og Arduino på bunnlaget
Motor Group og Arduino på bunnlaget
Motor Group og Arduino på bunnlaget
Motor Group og Arduino på bunnlaget
Motor Group og Arduino på bunnlaget
Motor Group og Arduino på bunnlaget

Fiksering av motorblokker

Når bunnlaget er montert med de 8 Turtlebot -platene, bruker du bare 4 M3 -skruer direkte i innsatsene for å vedlikeholde motorblokker. Deretter kan du koble motorens strømledninger til L298N-utgangene og de tidligere lagde kablene til proto-board JST-kontaktene.

Kraftdistribusjon

Kraftfordeling realiseres ganske enkelt med en barriere -rekkeklemme. På den ene siden av barrieren er en kabel med en hunkontakt XT60 skrudd for å koble til LiPo -batteri. På den andre siden er våre to LED/bryterkabler som tidligere er loddet skrudd. Dermed kan hver krets (motor og Arduino) aktiveres med sin egen bryter og den tilhørende grønne lysdioden.

Kabelhåndtering

Du må raskt håndtere mange kabler! For å redusere det rotete aspektet, kan du bruke "tabellen" som tidligere ble skrevet ut i 3D. På bordet må du vedlikeholde de elektroniske brettene dine med dobbeltsidig tape, og under ledningen la ledningene fritt flyte.

Vedlikehold av batteriet

For å unngå utladning av batteriet når du kjører roboten, kan du ganske enkelt bruke et hårstrikk.

Roller caster

Egentlig ikke en rullebane, men en enkel halvkule festet med 4 skruer på bunnlaget. Det er nok for å sikre roboten stabilitet.

Trinn 6: Enkeltbordsmaskin og sensorer på det øvre laget

Enkeltbordsmaskin og sensorer på det øvre laget
Enkeltbordsmaskin og sensorer på det øvre laget
Enkeltbordsmaskin og sensorer på det øvre laget
Enkeltbordsmaskin og sensorer på det øvre laget
Enkeltbordsmaskin og sensorer på det øvre laget
Enkeltbordsmaskin og sensorer på det øvre laget

Hvilken enkeltkort datamaskin skal jeg velge?

Jeg trenger ikke å presentere deg den berømte Raspberry Pi, antall bruksområder overstiger i stor grad robotikkfeltet. Men det er en mye kraftigere utfordrer for Raspberry Pi som du kan ignorere. Jetson Nano fra Nvidia innebærer faktisk et kraftig 128-kjerners grafisk kort i tillegg til prosessoren. Dette bestemte grafiske kortet har blitt utviklet for å akselerere dyre oppgaver som beregning, for eksempel bildebehandling eller nevral nettverksinferens.

For dette prosjektet valgte jeg Jetson Nano, og du kan finne den tilsvarende 3D -delen blant de vedlagte filene, men hvis du vil gå med Raspberry Pi er det mange utskrivbare saker her.

5V regulator

Uansett hvilket brett du bestemte deg for å ta med på roboten din, trenger du en 5V regulator. Den siste Raspberry Pi 4 krever maks 1.25A, men Jetson Nano krever opptil 3A på stress, så jeg valgte Pololu 5V 6A for å ha en strømreserve for fremtidige komponenter (sensorer, lys, steppere …), men en billig 5V 2A burde gjøre jobben. Jetson bruker en 5,5 mm DC -fat og Pi en mikro -USB, ta den tilsvarende kabelen og lodd den til regulatorutgangen.

LIDAR layout

LIDAR som brukes her er LDS-01, det er forskjellige andre 2D LIDAR som kan brukes som RPLidar A1/A2/A3, YDLidar X4/G4 eller til og med Hokuyo LIDAR. Det eneste kravet er at den må plugges via USB og plasseres sentrert over strukturen. Faktisk hvis LIDAR ikke er godt sentrert, kan kartet som er opprettet av SLAM -algoritmen, flytte den estimerte posisjonen til vegger og hindringer fra deres virkelige posisjon. Også hvis noen hindringer fra roboten krysser laserstrålen, kommer det til å redusere rekkevidde og synsfelt.

LIDAR -montering

LIDAR er montert på en 3D -trykt del som følger formen, selve delen holdes på en rektangulær plate (faktisk i kryssfiner på bildet, men kan også være 3D -trykt). Deretter gjør en adapterdel at ensemblet kan festes på den øvre turtlebot -platen med nylonavstandsstykker.

Kamera som ekstra sensor eller LIDAR -erstatning

Hvis du ikke vil bruke for mye penger på et LIDAR (som koster rundt $ 100), kan du gå for et kamera: det finnes også SLAM -algoritmer som bare kjøres med et monokulært RGB -kamera. Begge SBC godtar USB- eller CSI -kamera.

Videre lar kameraet deg kjøre datasyn og objektdeteksjonskript!

montering

Før du lukker roboten, før du kablene gjennom de større hullene i den øvre platen:

  • den tilsvarende kabelen fra 5V -regulatoren til din SBC
  • USB -kabelen fra programmeringsporten til Arduino DUE (nærmest DC -fatet) til en USB -port på SBC

Hold deretter den øvre platen på plass med et dusin skruer. Roboten din er nå klar til å bli programmert, WELL DONE!

Trinn 7: Få det til å bevege seg

Kompiler Arduino

Åpne din favoritt Arduino IDE, og importer prosjektmappen kalt own_turtlebot_core, velg deretter brettet og den tilhørende porten. Du kan referere til denne utmerkede opplæringen.

Juster kjerneinnstillingene

Prosjektet består av to filer, og en må tilpasses roboten din. Så la oss åpne own_turtlebot_config.h, og oppdag hvilke linjer som krever vår oppmerksomhet:

#define ARDUINO_DUE // ** KOMMENTER DENNE LINJEN HVIS DU IKKE BRUKER FRIST **

Bør bare brukes med Arduino DUE, hvis ikke kommenter linjen.

#define RATE_CONTROLLER_KP 130.0 // ** TUNE DENNE VERDIEN **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** TUNE DENNE VERDIEN ** #define RATE_CONTROLLER_KI 0.00005 // ** TUNE DENNE VERDIEN **

Disse 3 parametrene tilsvarer hastighetsregulatorens gevinster som PID bruker for å opprettholde ønsket hastighet. Avhengig av batterispenningen, massen til roboten, hjuldiameteren og det mekaniske giret til motoren din, må du tilpasse verdiene. PID er en klassisk kontroller, og du vil ikke bli detaljert her, men denne lenken skal gi deg nok innganger til å stille din egen.

/ * Definer pins */

// motor A (høyre) const byte motorRightEncoderPinA = 38; // ** ENDRE MED DIN PIN -kode NB ** const byte motorRightEncoderPinB = 34; // ** ENDRE MED DIN PIN -kode NB ** const byte enMotorRight = 2; // ** ENDRE MED DIN PIN -kode NB ** const byte in1MotorRight = 4; // ** ENDRE MED DIN PIN -kode NB ** const byte in2MotorRight = 3; // ** ENDRE MED DIN PIN -kode NB ** // motor B (venstre) const byte motorLeftEncoderPinA = 26; // ** ENDRE MED DIN PIN -kode NB ** const byte motorLeftEncoderPinB = 30; // ** ENDRE MED DIN PIN -kode NB ** const byte enMotorLeft = 7; // ** ENDRE MED DIN PIN -kode NB ** const byte in1MotorLeft = 6; // ** ENDRE MED DIN PIN -kode NB ** const byte in2MotorLeft = 5; // ** MODIFISER MED DIN PIN -kode **

Denne blokken definerer pinout mellom L298N og Arduino, bare endre pin -nummeret for å matche ditt. Når du er ferdig med konfigurasjonsfilen, kompilerer og laster du opp koden!

Installer og konfigurer ROS

Når du har nådd dette trinnet, er instruksjonene nøyaktig de samme som de som er beskrevet i den utmerkede TurtleBot3 -håndboken, du må følge nøye

godt gjort TurtleBot 3 er nå din, og du kan kjøre alle eksisterende pakker og opplæringsprogrammer med ROS.

Ok, men hva er ROS?

ROS står for Robots Operating System, det kan virke ganske komplisert i begynnelsen, men det er ikke, bare tenk deg en måte å kommunisere mellom maskinvare (sensorer og aktuatorer) og programvare (algoritmer for navigasjon, kontroll, datasyn …). For eksempel kan du enkelt bytte din nåværende LIDAR med en annen modell uten å bryte oppsettet, fordi hver LIDAR publiserer den samme LaserScan -meldingen. ROS er mye brukt er robotikk, Kjør ditt første eksempel

'Hallo verden' -ekvivalenten for ROS består i å operere roboten din via den eksterne datamaskinen. Det du vil gjøre er å sende hastighetskommandoer for å få motorene til å snurre, kommandoene følger dette røret:

  • en turtlebot_teleop node, som kjører på den eksterne datamaskinen, publiserer et "/cmd_vel" emne inkludert en Twist -melding
  • denne meldingen videresendes via ROS -meldingsnettverket til SBC
  • en seriell node gjør at "/cmd_vel" kan mottas på Arduino
  • Arduino leser meldingen og stiller vinkelhastigheten på hver motor for å matche robotens ønskede lineære og vinkelhastighet

Denne operasjonen er enkel og kan oppnås ved å kjøre kommandolinjene som er oppført ovenfor! Hvis du vil ha mer detaljert informasjon, er det bare å se videoen.

[SBC]

roscore

[SBC]

rosrun rosserial_python serial_node.py _port: =/dev/ttyACM0 _baud: = 115200

[Ekstern datamaskin]

eksporter TURTLEBOT3_MODEL = $ {TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Å gå videre

Du må vite det siste før du prøver alle de offisielle eksemplene, i håndboken hver gang du står overfor denne kommandoen:

roslaunch turtlebot3_bringup turtlebot3_robot.lunch

du må kjøre denne kommandoen på SBC i stedet:

rosrun rosserial_python serial_node.py _port: =/dev/ttyACM0 _baud: = 115200

Og hvis du har en LIDAR, kjør den tilhørende kommandoen på SBC, i mitt tilfelle kjører jeg en LDS01 med linjen nedenfor:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

Og det er alt, du har definitivt bygget din egen turtlebot:) Du er klar til å oppdage de fantastiske egenskapene til ROS, og til å kode visjon og maskinlæringsalgoritmer.

Anbefalt: