Indholdsfortegnelse:

Byg din egen Turtlebot -robot !: 7 trin
Byg din egen Turtlebot -robot !: 7 trin

Video: Byg din egen Turtlebot -robot !: 7 trin

Video: Byg din egen Turtlebot -robot !: 7 trin
Video: Pil Og Bue 2024, Juli
Anonim
Byg din egen Turtlebot -robot!
Byg din egen Turtlebot -robot!
Byg din egen Turtlebot -robot!
Byg din egen Turtlebot -robot!
Byg din egen Turtlebot -robot!
Byg din egen Turtlebot -robot!

REDIGERE:

Yderligere oplysninger om software og kontrol findes på dette link:

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

Det direkte link til koden er:

github.com/MattMgn/foxbot_core

Hvorfor dette projekt?

Turtlebot 3 er den perfekte platform til dybt ind i elektronik, robotik og endda AI! Jeg foreslår, at du bygger din egen turtlebot trin for trin med overkommelige komponenter uden at gå på kompromis med funktioner og ydeevne. Med én ting for øje: at holde det bedste fra den oprindelige robot, dets modularitet, enkelhed og det enorme antal pakker til autonom navigation og AI fra open source-samfundet.

Dette projekt er en mulighed for begyndere for at tilegne sig begreber om elektronik, mekanik og datalogi, og for de mere erfarne at få en kraftfuld platform til at teste og udvikle kunstige intelligensalgoritmer.

Hvad vil du opdage i dette projekt?

Du er ved at opdage, hvilke væsentlige mekaniske og elektroniske dele der skal holdes fra den originale bot for at garantere fuldstændig kompatibilitet.

Hele byggeprocessen vil være detaljeret: fra 3D -print, montering og flere komponenter, lodning og integrering af elektronik til endelig kodekompilering på Arduino. Denne instruktør afsluttes med et 'hej verden' -eksempel for at gøre dig bekendt med ROS. Hvis noget virker uklart, er du velkommen til at stille spørgsmål!

Forbrugsvarer

Elektronik:

1 x Single Board -computer til at køre ROS, kan for eksempel være en Raspberry Pi eller en Jetson Nano

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

1 x Proto-board, der passer til Arduino DUE pin-out tilgængeligt her

2 x 12V DC -motorer med encodere (100 omdr./min.)

1 x L298N motor driver

2 x 5V regulator

1 x batteri (f.eks. 3S/4S LiPo -batteri)

2 x TÆND/SLUK -kontakter

2 x LED

2 x 470kOhm modstande

3 x 4 ben JST -stik

1 x USB -kabel (mindst et mellem SBC og Arduino)

Sensorer:

1 x Strømføler (valgfri)

1 x 9 frihedsgrader IMU (valgfrit)

1 x LIDAR (valgfrit)

Chassis:

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

2 x hjul 65 mm diameter (valgfri 6 mm bredde)

4 x Nylon afstandsstykker 30 mm (valgfrit)

20 x M3 skær (valgfrit)

Andre:

Ledninger

M2.5 og M3 skruer og skær

3D -printer eller en, der kan udskrive delene for dig

Et håndbor med et sæt et bor som dette

Trin 1: Beskrivelse

Beskrivelse
Beskrivelse
Beskrivelse
Beskrivelse

Denne robot er et enkelt differentialdrev, der bruger 2 hjul, der er direkte monteret på deres motor, og en rullebane, der er placeret bagpå for at forhindre, at robotten vælter. Robotten er opdelt i to lag:

det nederste lag: med fremdrivningsgruppen (batteri, motorstyring og motorer) og elektronikken på 'lavt niveau': Arduino mikrokontroller, spændingsregulator, kontakter …

det øverste lag: med elektronikken på 'højt niveau', nemlig enkeltkortcomputeren og LIDAR

Disse lag er forbundet med trykte dele og skruer for at sikre konstruktionens robusthed.

Elektronisk skematisk

Skematikken kan virke lidt rodet. Det er en skematisk tegning, og det repræsenterer ikke alle ledninger, stik og proto-board, men det kan læses som følger:

Et 3S Litihum Ion Polymer -batteri med en kapacitet på 3000 mAh driver det første kredsløb, det driver både motorens styrekort (L298N) og en første 5V regulator til motorkodere og Arduino. Dette kredsløb aktiveres via en switch med en LED, der angiver dens ON/OFF -tilstand.

Det samme batteri driver et andet kredsløb, indgangsspændingen konverteres til 5V til strømforsyning af enkeltkortcomputeren. Også her aktiveres kredsløbet via en switch og en LED.

Yderligere sensorer som et LIDAR eller et kamera kan derefter tilføjes direkte på Raspberry Pi via USB eller CSI -porten.

Mekanisk design

Robotrammen består af 16 identiske dele, der dannede 2 kvadratiske lag (28 cm bredde). De mange huller gør det muligt at montere ekstra dele, uanset hvor du har brug for det, og tilbyder et komplet modulopbygget design. Til dette projekt besluttede jeg at få originalerne TurtleBot3 -plader, men du kan også 3D -udskrive dem, da deres design er open source.

Trin 2: Motorblokmontering

Motorblokmontering
Motorblokmontering
Motorblokmontering
Motorblokmontering
Motorblokmontering
Motorblokmontering

Motorisk forberedelse

Det første trin er at tilføje 1 mm tykt skumtape omkring hver motor for at forhindre vibrationer og støj, når motoren vil rotere.

Trykte dele

Motorholderen resulterer i to dele, der griber motoren som en skruestik. 4 skruer opnået for at stramme motoren i holderen.

Hver holder er sammensat af flere huller, der er vært for M3 -skær, der skal monteres på strukturen. Der er flere huller end der faktisk er behov for, de ekstra huller kan i sidste ende bruges til at montere ekstra del.

3D -printerindstillinger: alle dele udskrives med følgende parametre

  • 0,4 mm diameter dyse
  • 15% materialefyld
  • 0,2 mm højde lag

Hjul

De valgte hjul er dækket med gummi for at maksimere vedhæftningen og sikre skridfri rulletilstand. En fastspændingsskrue fastholder hjulet monteret på motorakslen. Hjulets diameter skal være stor nok til at krydse mindre trin og uregelmæssigheder på jorden (disse hjul er 65 mm i diameter).

Fiksering

Når du har gjort med en motorblok, skal du gentage de foregående operationer og derefter blot fastgøre dem i laget med M3 -skruer.

Trin 3: Afbrydere og kabelforberedelse

Afbrydere og kabelforberedelse
Afbrydere og kabelforberedelse
Afbrydere og kabelforberedelse
Afbrydere og kabelforberedelse
Afbrydere og kabelforberedelse
Afbrydere og kabelforberedelse

Forberedelse af motorkabel

Generelt leveres motor-encoderen med et kabel, der på den ene side indeholder et 6-benet stik, der forbinder bagsiden af encoderens printkort og nøgne ledninger på den anden side.

Du har mulighed for at lodde dem direkte på dit proto-board eller endda din Arduino, men jeg anbefaler dig at bruge kvindelige pinhoveder og JST-XH-stik i stedet. Således kan du tilslutte/frakoble dem til dit proto-board og gøre din samling lettere.

Tips: du kan tilføje udvidelig ærmet fletning omkring dine ledninger og stykker krympeslange i nærheden af stik, så får du et 'rent' kabel.

Kontakt og LED

For at aktivere de to strømkredsløb skal du forberede 2 LED- og switchkabler: Først loddes en 470kOhm -modstand på en af LED -stiften, derefter loddes LED'en på en switch -pin. Også her kan du bruge et stykke krympeslange til at skjule modstanden indeni. Vær forsigtig med at lodde LED'en i den rigtige retning! Gentag denne handling for at få to switch/led -kabler.

montage

Saml de tidligere fremstillede kabler på den tilsvarende 3D -udskrevne del. Brug en møtrik til at vedligeholde kontakten, lysdioderne kræver ikke lim, bare kraft nok til at passe den i hullet.

Trin 4: Ledninger til elektroniske tavler

Ledninger til elektroniske tavler
Ledninger til elektroniske tavler
Ledninger til elektroniske tavler
Ledninger til elektroniske tavler
Ledninger til elektroniske tavler
Ledninger til elektroniske tavler

Tavler layout

Et proto-board, der passer til Arduino board layout, bruges til at reducere antallet af ledninger. På toppen af proto-boardet er L298N stablet med Dupont kvindelig header (Dupont er 'Arduino lignende' headers).

L298N forberedelse

Oprindeligt kommer L298N -kortet ikke med det tilsvarende Dupont -header til mænd, du skal tilføje en række med 9 pins under brættet. Du skal realisere 9 huller med 1 mm diameter bor parallelt med de eksisterende huller, som du kan se på billedet. Forbind derefter de tilsvarende stifter i de 2 rækker med loddematerialer og korte tråde.

L298N pin-out

L298N består af 2 kanaler, der tillader hastigheds- og retningskontrol:

retning gennem 2 digitale udgange, kaldet IN1, IN2 for den første kanal og IN3 og IN4 for den anden

hastighed gennem 1 digitale udgange, kaldet ENA for den første kanal og ENB for den anden

Jeg valgte følgende pin-out med Arduino:

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

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

5V regulator

Selvom l298N normalt er i stand til at levere 5V, tilføjer jeg stadig en lille regulator. Det driver Arduino gennem VIN -porten og de 2 encodere på motorerne. Du kan springe dette trin over ved direkte at bruge den indbyggede L298N 5V regulator.

JST-stik og Encoder pin-out

Brug 4 pins JST-XH-stikadaptere, hvert stik er derefter knyttet til:

  • 5V fra regulatoren
  • en grund
  • to digitale input -porte (for eksempel: 34 og 38 for den højre encoder og 26 og 30 for den venstre)

Ekstra I2C

Som du måske har bemærket, er der et ekstra 4pin JST-stik på proto-kortet. Det bruges til at forbinde I2C -enhed som en IMU, du kan gøre det samme og endda tilføje din egen port.

Trin 5: Motor Group og Arduino på bundlaget

Motor Group og Arduino på bundlaget
Motor Group og Arduino på bundlaget
Motor Group og Arduino på bundlaget
Motor Group og Arduino på bundlaget
Motor Group og Arduino på bundlaget
Motor Group og Arduino på bundlaget

Fastgørelse af motorblokke

Når bundlaget er samlet med de 8 Turtlebots plader, skal du blot bruge 4 M3 skruer direkte i skærene for at vedligeholde motorblokke. Derefter kan du tilslutte motorkraftledninger til L298N-udgange og de tidligere foretagne kabler til proto-board JST-stik.

Strømfordeling

Strømfordeling realiseres simpelthen med en barriereklemrække. På den ene side af barrieren er et kabel med et XT60 hunstik skruet for at forbinde til LiPo batteri. På den anden side er vores to LED/switch kabler tidligere loddet skruet. Således kunne hvert kredsløb (Motor og Arduino) aktiveres med sin egen switch og den tilhørende grønne LED.

Kabelstyring

Hurtigt bliver du nødt til at håndtere en masse kabler! For at reducere det rodede aspekt kan du bruge 'bordet', der tidligere var 3D -udskrevet. På bordet skal du vedligeholde dine elektroniske tavler med dobbeltsidet tape, og under ledningen skal ledningerne frit flyde.

Vedligeholdelse af batteriet

For at undgå udstødning af batteriet, når du kører din robot, kan du blot bruge et hårelastisk bånd.

Rullehjul

Ikke rigtigt en rullebane, men en enkel halvkugle fastgjort med 4 skruer på bundlaget. Det er nok til at sikre robotten stabilitet.

Trin 6: Enkeltkortcomputer og sensorer på det øverste lag

Enkelt bordcomputer og sensorer på det øverste lag
Enkelt bordcomputer og sensorer på det øverste lag
Enkelt bordcomputer og sensorer på det øverste lag
Enkelt bordcomputer og sensorer på det øverste lag
Enkelt bordcomputer og sensorer på det øverste lag
Enkelt bordcomputer og sensorer på det øverste lag

Hvilken enkelt bordcomputer skal du vælge?

Jeg behøver ikke at præsentere dig den berømte Raspberry Pi, dens antal anvendelsessager overstiger stort set robotikfeltet. Men der er en meget mere kraftfuld udfordrer til Raspberry Pi, som du måske ignorerer. Jetson Nano fra Nvidia indeholder faktisk et kraftfuldt 128-core grafisk kort ud over processoren. Dette særlige grafiske kort er udviklet til at fremskynde dyre opgaver som f.eks. Billedbehandling eller neurale netværksinferenser.

Til dette projekt valgte jeg Jetson Nano, og du kan finde den tilsvarende 3D -del blandt de vedhæftede filer, men hvis du vil gå med Raspberry Pi, er der mange udskrivbare sager her.

5V regulator

Uanset hvilket bræt du besluttede at bringe på din robot, har du brug for en 5V regulator. Den nyeste Raspberry Pi 4 kræver max 1.25A, men Jetson Nano kræver op til 3A på stress, så jeg valgte Pololu 5V 6A for at have en strømreserve til fremtidige komponenter (sensorer, lys, steppere …), men enhver billig 5V 2A burde gøre jobbet. Jetson bruger en 5,5 mm DC tønde og Pi en mikro USB, tag det tilsvarende kabel og lod det til regulatorens udgang.

LIDAR layout

LIDAR brugt her er LDS-01, der er forskellige andre 2D LIDAR, der kan bruges som RPLidar A1/A2/A3, YDLidar X4/G4 eller endda Hokuyo LIDAR'er. Det eneste krav er, at det skal tilsluttes via USB og placeres centreret over strukturen. Hvis LIDAR ikke er godt centreret, kan det kort, der er oprettet af SLAM -algoritmen, måske flytte den estimerede position af vægge og forhindringer fra deres reelle position. Også hvis nogen forhindringer fra robotten krydser laserstrålen, vil det reducere rækkevidde og synsfelt.

LIDAR montering

LIDAR er monteret på en 3D -trykt del, der følger dens form, selve delen er fast på en rektangulær plade (faktisk i krydsfiner på billedet, men kan også 3D -printes). Derefter tillader en adapterdel, at ensemblet fastgøres på den øverste turtlebot -plade med nylonafstandsstykker.

Kamera som ekstra sensor eller udskiftning af LIDAR

Hvis du ikke vil bruge for mange penge på et LIDAR (som koster omkring 100 $), skal du gå efter et kamera: der findes også SLAM -algoritmer, der kun kører med et monokulært RGB -kamera. Begge SBC accepterer USB- eller CSI -kamera.

Desuden lader kameraet dig køre computersyn og objektdetekterings scripts!

montage

Før du lukker robotten, skal du føre kabler gennem de større huller i den øverste plade:

  • det tilsvarende kabel fra 5V -regulatoren til din SBC
  • USB -kablet fra programmeringsporten på Arduino DUE (tættest på DC -tønde) til en USB -port på din SBC

Hold derefter den øverste plade på plads med et dusin skruer. Din robot er nu klar til at blive programmeret, WELL DONE!

Trin 7: Få det til at bevæge sig

Kompilér Arduino

Åbn din yndlings Arduino IDE, og importer projektmappen kaldet own_turtlebot_core, vælg derefter dit board og den tilhørende port, du kan henvise til denne fremragende tutorial.

Juster kerneindstillingerne

Projektet består af to filer, og den ene skal tilpasses din robot. Så lad os åbne own_turtlebot_config.h, og opdag, hvilke linjer der kræver vores opmærksomhed:

#define ARDUINO_DUE // ** KOMMENTER DENNE LINE, HVIS DU IKKE BRUGER EN TILBUD **

Bør kun bruges med Arduino DUE, hvis ikke kommentere linjen.

#define RATE_CONTROLLER_KP 130.0 // ** TUNE DENNE VÆRDI **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** TUNE DENNE VÆRDI ** #define RATE_CONTROLLER_KI 0.00005 // ** TUNE DENNE VÆRDI **

Disse 3 parametre svarer til de hastighedsstyringsgevinster, der bruges af PID til at opretholde den ønskede hastighed. Afhængigt af batterispændingen, robotens masse, hjuldiameteren og din motors mekaniske gear skal du tilpasse deres værdier. PID er en klassisk controller, og du vil ikke blive detaljeret her, men dette link skal give dig nok input til at stille dit eget.

/ * Definer stifter */

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

Denne blok definerer pinout mellem L298N og Arduino, bare modificer pin -nummeret, så det matcher dit. Når du er færdig med konfigurationsfilen, skal du kompilere og uploade koden!

Installer og konfigurer ROS

Når du har nået dette trin, er instruktionerne nøjagtig de samme som dem, der er beskrevet i den udmærkede TurtleBot3's manual, skal du nøje følge

godt gået TurtleBot 3 er nu din, og du kan køre alle de eksisterende pakker og selvstudier med ROS.

Ok, men hvad er ROS?

ROS står for Robots Operating System, det kan virke ret komplekst i starten, men det er ikke, bare forestil dig en måde at kommunikere mellem hardware (sensorer og aktuatorer) og software (algoritmer til navigation, kontrol, computersyn …). For eksempel kan du let skifte din nuværende LIDAR med en anden model uden at bryde din opsætning, fordi hver LIDAR udgiver den samme LaserScan -meddelelse. ROS er meget udbredt er robotik, Kør dit første eksempel

'Hej verden' -ækvivalenten for ROS består i teleoperation af din robot gennem fjerncomputeren. Hvad du vil gøre er at sende hastighedskommandoer for at få motorerne til at dreje, kommandoerne følger dette rør:

  • en turtlebot_teleop node, der kører på fjerncomputeren, udgive et "/cmd_vel" emne inklusive en Twist -besked
  • denne meddelelse videresendes via ROS -meddelelsesnetværket til SBC
  • en seriel knude gør det muligt at modtage "/cmd_vel" på Arduino
  • Arduino læser meddelelsen og indstiller vinkelhastigheden på hver motor, så den matcher robotens ønskede lineære og vinkelhastighed

Denne handling er enkel og kan opnås ved at køre kommandolinjerne ovenfor! Hvis du vil have mere detaljerede oplysninger, kan du bare se videoen.

[SBC]

roscore

[SBC]

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

[Fjerncomputer]

eksporter TURTLEBOT3_MODEL = $ {TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

For at gå videre

Du skal vide en sidste ting, før du prøver alle de officielle eksempler, i manualen hver gang du står over for denne kommando:

roslaunch turtlebot3_bringup turtlebot3_robot.lancering

du skal i stedet køre denne kommando på din SBC:

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

Og hvis du har en LIDAR kørt den tilhørende kommando på din SBC, i mit tilfælde kører jeg en LDS01 med linjen herunder:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

Og det er alt, du har definitivt bygget din egen turtlebot:) Du er klar til at opdage de fantastiske muligheder i ROS og til at kode vision og algoritmer til maskinlæring.

Anbefalede: