INHOUDSOPGAWE:

Bou u eie Turtlebot -robot !: 7 stappe
Bou u eie Turtlebot -robot !: 7 stappe

Video: Bou u eie Turtlebot -robot !: 7 stappe

Video: Bou u eie Turtlebot -robot !: 7 stappe
Video: Paper Lightning Talks [«Ограничения и возможности глубокого обучения в робототехнике», семинар RSS] 2024, Julie
Anonim
Bou u eie Turtlebot -robot!
Bou u eie Turtlebot -robot!
Bou u eie Turtlebot -robot!
Bou u eie Turtlebot -robot!
Bou u eie Turtlebot -robot!
Bou u eie Turtlebot -robot!

WYSIG:

Verdere inligting rakende sagteware en beheer is beskikbaar op hierdie skakel:

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

Die direkte skakel na die kode is:

github.com/MattMgn/foxbot_core

Waarom hierdie projek?

Turtlebot 3 is die perfekte platform om diep in elektronika, robotika en selfs AI te werk! Ek stel voor dat u stap-vir-stap u eie turtlebot bou met bekostigbare komponente sonder om afbreuk te doen aan funksies en prestasie. Met een ding in gedagte: om die beste te behou van die aanvanklike robot, die modulariteit, eenvoud en die groot aantal pakkette vir outonome navigasie en AI uit die open source-gemeenskap.

Hierdie projek is 'n geleentheid vir beginners om idees oor elektronika, meganika en rekenaarwetenskappe aan te leer, en vir die meer ervare om 'n kragtige platform te kry om kunsmatige intelligensie -algoritmes te toets en te ontwikkel.

Wat sal u in hierdie projek ontdek?

U is op die punt om te ontdek watter noodsaaklike meganiese en elektroniese onderdele van die oorspronklike bot gehou moet word om volledige versoenbaarheid te verseker.

Die hele bouproses sal gedetailleerd wees: van die druk van 3D -onderdele, montering en die verskillende komponente, soldeer en integrasie van elektronika tot uiteindelik die samestelling van Arduino. Hierdie instruksies sal afsluit met 'n 'hallo wêreld' -voorbeeld om u vertroud te maak met ROS. As iets onduidelik lyk, stel die vraag gerus!

Voorrade

Elektronika:

1 x enkelbordrekenaar om ROS te gebruik, kan byvoorbeeld 'n Raspberry Pi of 'n Jetson Nano wees

1 x Arduino DUE, u kan ook 'n UNO of 'n MEGA gebruik

1 x Proto-bord wat pas by Arduino DUE pin-out beskikbaar hier

2 x 12V DC motors met encoders (100 RPM opsie)

1 x L298N motorbestuurder

2 x 5V reguleerder

1 x battery (byvoorbeeld 3S/4S LiPo -battery)

2 x AAN/UIT skakelaars

2x LED

2 x 470 kOhm weerstande

3 x 4 pins JST -verbindings

1 x USB -kabel (ten minste een tussen die SBC en die Arduino)

Sensors:

1 x Stroomsensor (opsioneel)

1 x 9 grade van vryheid IMU (opsioneel)

1 x LIDAR (opsioneel)

Onderstel:

16 x modulêre plate van Turtlebot (wat ook 3D gedruk kan word)

2 x wiele 65 mm in deursnee (6 mm breedte opsie)

4 x Nylon afstandhouers 30mm (opsioneel)

20 x M3 -insetsels (opsioneel)

Ander:

Drade

M2.5 en M3 skroewe en inserts

3D -drukker of iemand wat die onderdele vir u kan druk

'N Handboor met 'n stel bore soos hierdie

Stap 1: Beskrywing

Beskrywing
Beskrywing
Beskrywing
Beskrywing

Hierdie robot is 'n eenvoudige differensiële aandrywing wat gebruik maak van 2 wiele wat direk op hul motor gemonteer is, en 'n rolstoel wat agter geplaas word om te keer dat die robot omval. Die robot is in twee lae verdeel:

die onderste laag: met die voortstuwingsgroep (battery, motorbeheerder en motors) en elektronika op 'lae vlak': Arduino -mikrobeheerder, spanningsreguleerder, skakelaars …

die boonste laag: met die elektroniese 'hoë vlak' naamlik die enkelbordrekenaar en die LIDAR

Die lae is verbind met gedrukte dele en skroewe om die robuustheid van die struktuur te verseker.

Elektroniese skematiese

Die skema kan 'n bietjie morsig lyk. Dit is 'n skematiese tekening en verteenwoordig nie alle drade, verbindings en die voorplaat nie, maar dit kan soos volg gelees word:

'N 3S Litihum Ion Polymer -battery met 'n kapasiteit van 3000 mAh dryf die eerste stroombaan aan, dit dryf die motorbestuurderbord (L298N) en 'n eerste 5V -reguleerder vir motorkoders en Arduino aan. Hierdie stroombaan word aangeskakel deur 'n skakelaar met 'n LED wat die AAN/UIT -toestand aandui.

Dieselfde battery dryf 'n tweede stroombaan, die ingangsspanning word omgeskakel na 5V om die enkelbordrekenaar van krag te voorsien. Ook hier word die stroombaan aangeskakel deur 'n skakelaar en 'n LED.

Bykomende sensors soos 'n LIDAR of 'n kamera kan dan direk op die Raspberry Pi via USB of die CSI -poort gevoeg word.

Meganiese ontwerp

Die robotraam bestaan uit 16 identiese dele wat 2 vierkantige lae (28 cm breed) gevorm het. Die vele gate maak dit moontlik om bykomende onderdele te monteer waar u dit ook al benodig en bied 'n volledige modulêre ontwerp. Vir hierdie projek het ek besluit om die oorspronklike TurtleBot3 -plate te kry, maar u kan dit ook 3D -druk, aangesien die ontwerp daarvan 'n open source is.

Stap 2: Motorblok -samestelling

Motorblok -samestelling
Motorblok -samestelling
Motorblok -samestelling
Motorblok -samestelling
Motorblok -samestelling
Motorblok -samestelling

Motoriese voorbereiding

Die eerste stap is om 1 mm dik skuimband om elke motor te voeg om trillings en geraas te voorkom wanneer die motor draai.

Gedrukte dele

Die motorhouer het twee dele wat die motor soos 'n stut vasgryp. 4 skroewe gekry om die motor in die houer vas te trek.

Elke houer bestaan uit verskeie gate wat M3 -insetsels bevat wat op die struktuur gemonteer moet word. Daar is meer gate as wat werklik nodig is; die ekstra gate kan uiteindelik gebruik word om ekstra onderdele te monteer.

3D -drukkerinstellings: alle dele word met die volgende parameters gedruk

  • Spuitstuk met 'n deursnee van 0,4 mm
  • 15% materiaal invul
  • 0,2 mm hoogte laag

Wiel

Die gekose wiele is bedek met rubber om die hechting te maksimeer en om 'n gladde rolstoestand te verseker. 'N Klemskroef hou die wiel op die motoras vas. Die wiel se deursnee moet groot genoeg wees om klein trappe en onreëlmatighede op die grond te kruis (die wiele is 65 mm in deursnee).

Bevestiging

As u met een motorblok klaar is, herhaal die vorige bewerkings en plak dit dan eenvoudig in die laag vas met M3 -skroewe.

Stap 3: Skakelaars en kabelvoorbereiding

Skakelaars en kabelvoorbereiding
Skakelaars en kabelvoorbereiding
Skakelaars en kabelvoorbereiding
Skakelaars en kabelvoorbereiding
Skakelaars en kabelvoorbereiding
Skakelaars en kabelvoorbereiding

Motorkabelvoorbereiding

Oor die algemeen het die motor-encoder 'n kabel, insluitend aan die een kant 'n 6-pins aansluiting wat die agterkant van die encoder PCB verbind en kaal drade aan die ander kant.

U het die moontlikheid om dit direk op u proto-boord of selfs op u Arduino te soldeer, maar ek beveel aan dat u eerder pin-koppe en JST-XH-verbindings gebruik. U kan dit dus op u protobord aansluit/ontkoppel en u montering makliker maak.

Wenke: u kan 'n uitbreidbare mouvlegsel om u drade en stukke krimpbuis naby verbindings voeg, sodat u 'n 'skoon' kabel kry.

Skakelaar en LED

Om die twee kringe in te skakel, berei u 2 LED- en skakelkabels voor: soldeer eers 'n weerstand van 470 kOhm op een van die LED -pen, soldeer dan die LED op een van die skakelaars. Ook hier kan u 'n stuk krimpbuis gebruik om die weerstand binne te steek. Wees versigtig om die LED in die regte rigting te soldeer! Herhaal hierdie operasie om twee skakelaar-/LED -kabels te kry.

Vergadering

Monteer die voorheen gemaakte kabels op die ooreenstemmende 3D -gedrukte deel. Gebruik 'n moer om die skakelaar in stand te hou; die LED's benodig nie gom nie, net genoeg krag om dit in die gat te pas.

Stap 4: Bedrading van elektroniese borde

Bedrading van elektroniese borde
Bedrading van elektroniese borde
Bedrading van elektroniese borde
Bedrading van elektroniese borde
Bedrading van elektroniese borde
Bedrading van elektroniese borde

Borduitleg

'N Proto-bord wat by die Arduino-borduitleg pas, word gebruik om die aantal drade te verminder. Bo-op die protobord is die L298N gestapel met Dupont-vroulike kopstuk (Dupont is 'Arduino-agtige' opskrifte).

L298N voorbereiding

Oorspronklik kom die L298N -bord nie met die ooreenstemmende manlike Dupont -kop nie; u moet 'n ry met 9 penne onder die bord voeg. U moet 9 gate met 'n boorpunt van 1 mm in parallel met die bestaande gate realiseer, soos u op die foto kan sien. Koppel dan die ooreenstemmende penne van die 2 rye met soldeermateriaal en kort drade.

L298N pin-out

Die L298N bestaan uit 2 kanale wat spoed- en rigtingbeheer moontlik maak:

rigting deur 2 digitale uitsette, genaamd IN1, IN2 vir die eerste kanaal, en IN3 en IN4 vir die tweede kanaal

spoed deur 1 digitale uitsette, genaamd ENA vir die eerste kanaal en ENB vir die tweede

Ek het die volgende pin-out gekies met die Arduino:

linker motor: IN1 op pen 3, IN2 op pen 4, ENA op pen 2

regtermotor: IN3 op pen 5, IN4 op pen 6, ENB op pen 7

5V reguleerder

Selfs as die l298N gewoonlik 5V kan lewer, voeg ek steeds 'n klein reguleerder by. Dit dryf die Arduino deur die VIN -poort en die 2 encoders op die motors. U kan hierdie stap oorslaan deur die ingeboude L298N 5V-reguleerder direk te gebruik.

JST-verbindings en enkodeerder-pin-out

Gebruik 4-pins vroulike JST-XH-aansluitadapters; elke connector word dan gekoppel aan:

  • 5V van die reguleerder
  • 'n Grond
  • twee digitale ingangspoorte (byvoorbeeld: 34 en 38 vir die regter encoder en 26 en 30 vir die linker een)

Ekstra I2C

Soos u dalk opgemerk het, is daar 'n ekstra 4-pins JST-aansluiting op die proto-bord. Dit word gebruik om 'n I2C -toestel soos 'n IMU aan te sluit, u kan dieselfde doen en selfs u eie poort byvoeg.

Stap 5: Motor Group en Arduino op die onderste laag

Motor Group en Arduino op die onderste laag
Motor Group en Arduino op die onderste laag
Motor Group en Arduino op die onderste laag
Motor Group en Arduino op die onderste laag
Motor Group en Arduino op die onderste laag
Motor Group en Arduino op die onderste laag

Bevestiging van motorblokke

Sodra die onderste laag met die 8 Turtlebot -plate gemonteer is, gebruik eenvoudig 4 M3 -skroewe direk in die insetsels om motorblokke te onderhou. Dan kan u die motorkragdrade aansluit op die L298N-uitsette en die kabels wat voorheen gemaak is, aan die JST-aansluitings op die voorbord.

Kragverdeling

Kragverdeling word eenvoudig bereik met 'n versperringsklem. Aan die een kant van die versperring word 'n kabel met 'n XT60 -wyfiestekker geskroef om aan die LiPo -battery te koppel. Aan die ander kant is ons twee LED/skakelkabels wat voorheen gesoldeer is, vasgeskroef. Elke kring (Motor en Arduino) kan dus met sy eie skakelaar en die ooreenstemmende groen LED geaktiveer word.

Kabelbestuur

U sal baie kabels vinnig moet hanteer! Om die rommelige aspek te verminder, kan u die 'tafel' gebruik wat voorheen 3D gedruk is. Hou die elektroniese borde op die tafel vas met dubbelzijdige band, en laat die drade vrylik onder die tafel vloei.

Onderhoud van die battery

Om die uitwerp van die battery tydens die bestuur van u robot te voorkom, kan u eenvoudig 'n elastiese band gebruik.

Roller caster

Nie regtig 'n rolbaan nie, maar 'n eenvoudige halwe bol wat met 4 skroewe op die onderste laag vasgemaak is. Dit is genoeg om die stabiliteit van die robot te verseker.

Stap 6: Enkelbordrekenaar en sensors op die boonste laag

Enkelbordrekenaar en sensors op die boonste laag
Enkelbordrekenaar en sensors op die boonste laag
Enkelbordrekenaar en sensors op die boonste laag
Enkelbordrekenaar en sensors op die boonste laag
Enkelbordrekenaar en sensors op die boonste laag
Enkelbordrekenaar en sensors op die boonste laag

Watter enkelbordrekenaar om te kies?

Ek hoef u nie die beroemde Raspberry Pi aan u voor te stel nie; die aantal gebruiksgevalle is groter as die robotika -veld. Maar daar is 'n baie kragtiger uitdager vir die Raspberry Pi wat u moontlik kan ignoreer. Die Jetson Nano van Nvidia bevat ook 'n kragtige grafiese kaart van 128 kern, benewens die verwerker. Hierdie spesifieke grafiese kaart is ontwikkel om die berekening van duur take, soos beeldverwerking of neurale netwerk -afleiding, te versnel.

Vir hierdie projek het ek die Jetson Nano gekies, en u kan die ooreenstemmende 3D -deel onder die aangehegte lêers vind, maar as u die Raspberry Pi wil gebruik, is daar baie afdrukke hier.

5V Reguleerder

Ongeag watter bord u besluit het om u robot aan te bring, benodig u 'n 5V -reguleerder. Die nuutste Raspberry Pi 4 benodig maksimum 1.25A, maar Jetson Nano benodig tot 3A spanning, so ek het gekies dat die Pololu 5V 6A 'n kragreserwe vir toekomstige komponente (sensors, ligte, steppers …) het, maar enige goedkoop 5V 2A behoort te doen die werk. Die Jetson gebruik 'n 5,5 mm DC -vat en die Pi 'n mikro -USB, gryp die ooreenstemmende kabel en soldeer dit aan die regulatoruitgang.

LIDAR uitleg

Die LIDAR wat hier gebruik word, is die LDS-01, daar is verskillende 2D LIDAR wat gebruik kan word, soos RPLidar A1/A2/A3, YDLidar X4/G4 of selfs Hokuyo LIDAR's. Die enigste vereiste is dat dit deur 'n USB -aansluiting gekoppel moet word en in die middel van die struktuur geplaas moet word. As die LIDAR nie goed gesentreer is nie, kan die kaart wat deur die SLAM -algoritme geskep is, die geskatte posisie van mure en hindernisse van hul werklike posisie verskuif. As enige hindernisse van die robot die laserstraal oorsteek, sal dit die reikwydte en gesigsveld verminder.

LIDAR montering

Die LIDAR is gemonteer op 'n 3D -gedrukte deel wat sy vorm volg; die deel self word op 'n reghoekige plaat vasgemaak (eintlik in laaghout op die foto, maar kan ook in 3D gedruk word). Dan kan 'n adaptergedeelte die ensemble op die boonste skilpadplaat met nylon afstandhouers bevestig.

Kamera as ekstra sensor of LIDAR -vervanging

As u nie te veel geld in 'n LIDAR wil spandeer nie (wat ongeveer $ 100 kos), kies 'n kamera: daar bestaan ook SLAM -algoritmes wat slegs met 'n monokulêre RGB -kamera werk. Beide SBC aanvaar USB- of CSI -kamera.

Boonop laat die kamera u rekenaarvisie- en objekopsporingskripte uitvoer!

Vergadering

Voordat u die robot toemaak, moet u kabels deur die groter gate in die boonste plaat trek:

  • die ooreenstemmende kabel van die 5V -reguleerder na u SBC
  • die USB -kabel vanaf die programmeringspoort van die Arduino DUE (die naaste aan die DC -vat) na 'n USB -poort van u SBC

Hou dan die boonste plaat in posisie met 'n dosyn skroewe. U robot is nou gereed om geprogrammeer te word, GOED GEDOEN!

Stap 7: Laat dit beweeg

Stel die Arduino saam

Maak u gunsteling Arduino IDE oop en voer die projekmap met die naam own_turtlebot_core in, en kies dan u bord en die ooreenstemmende poort. U kan na hierdie uitstekende handleiding verwys.

Pas die kerninstellings aan

Die projek bestaan uit twee lêers, en die een moet by u robot aangepas word. Laat ons dus own_turtlebot_config.h oopmaak en ontdek watter lyne ons aandag vereis:

#define ARDUINO_DUE // ** Lewer kommentaar op hierdie reël as u nie 'n verskuldiging gebruik nie **

Moet slegs met Arduino DUE gebruik word, indien nie kommentaar lewer nie.

#definieer RATE_CONTROLLER_KP 130.0 // ** STEM HIERDIE WAARDE **

#definieer RATE_CONTROLLER_KD 5000000000000.0 // ** STEM HIERDIE WAARDE ** #definieer RATE_CONTROLLER_KI 0.00005 // ** TUNE HIERDIE WAARDE **

Die drie parameters stem ooreen met die koersbeheerderwins wat die PID gebruik om die gewenste snelheid te handhaaf. Afhangende van die batteryspanning, die massa van die robot, die wieldiameter en die meganiese ratkas van u motor, moet u hul waardes aanpas. PID is 'n klassieke kontroleerder, en u word nie hier uiteengesit nie, maar hierdie skakel moet u genoeg insette gee om u eie te stem.

/ * Definieer penne */

// motor A (regs) const byte motorRightEncoderPinA = 38; // ** WYSIG MET JOU PIN LW ** const byte motorRightEncoderPinB = 34; // ** WYSIG MET JOU PIN LW ** const byte enMotorRight = 2; // ** WYSIG MET JOU PIN LW ** const byte in1MotorRight = 4; // ** WYSIG MET JOU PIN LW ** const byte in2MotorRight = 3; // ** WYSIG MET JOU PIN LW ** // motor B (links) const byte motorLeftEncoderPinA = 26; // ** WYSIG MET JOU PIN LW ** const byte motorLeftEncoderPinB = 30; // ** WYSIG MET JOU PIN LW ** const byte enMotorLeft = 7; // ** WYSIG MET JOU PIN LW ** const byte in1MotorLeft = 6; // ** WYSIG MET JOU PIN LW ** const byte in2MotorLeft = 5; // ** WYSIG MET JOU PIN LW **

Hierdie blok definieer die pinout tussen die L298N en die Arduino, wysig eenvoudig die speldnommer sodat dit by u pas. As u klaar is met die config -lêer, moet u die kode saamstel en oplaai!

Installeer en stel ROS op

Nadat u hierdie stap bereik het, is die instruksies presies dieselfde as die in die handleiding van die uitstekende TurtleBot3, wat u deeglik moet volg

wel gedaan TurtleBot 3 is nou joune, en u kan al die bestaande pakkette en tutoriale met ROS uitvoer.

Ok, maar wat is ROS?

ROS staan vir Robots Operating System, dit lyk aanvanklik nogal ingewikkeld, maar dink nie aan 'n manier van kommunikasie tussen hardeware (sensors en aktuators) en sagteware (algoritmes vir navigasie, beheer, rekenaarvisie …). U kan byvoorbeeld u huidige LIDAR maklik met 'n ander model ruil sonder om u opset te onderbreek, want elke LIDAR publiseer dieselfde LaserScan -boodskap. ROS word wyd gebruik as robotika, Voer u eerste voorbeeld uit

Die 'hello world' -ekwivalent vir ROS bestaan uit die teleoperasie van u robot via die eksterne rekenaar. Wat u wil doen, is om snelheidsopdragte te stuur om die motors te laat draai; die opdragte volg hierdie pyp:

  • 'n turtlebot_teleop -knoop wat op die eksterne rekenaar werk, publiseer 'n "/cmd_vel" -onderwerp, insluitend 'n Twist -boodskap
  • hierdie boodskap word deur die ROS -boodskapsnetwerk na die SBC gestuur
  • Met 'n seriële node kan die "/cmd_vel" op die Arduino ontvang word
  • die Arduino lees die boodskap en stel die hoeksnelheid op elke motor in om by die gewenste lineêre en hoeksnelheid van die robot te pas

Hierdie operasie is eenvoudig en kan bereik word deur die opdragreëls hierbo te gebruik! As u meer gedetailleerde inligting wil hê, kyk net na die video.

[SBC]

roscore

[SBC]

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

[Afstandsrekenaar]

voer TURTLEBOT3_MODEL = $ {TB3_MODEL} uit

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Om verder te gaan

U moet 'n laaste ding weet voordat u al die amptelike voorbeelde in die handleiding probeer, elke keer as u hierdie opdrag ondervind:

roslaunch turtlebot3_bringup turtlebot3_robot.lunch

u moet eerder hierdie opdrag op u SBC uitvoer:

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

En as u 'n LIDAR het wat die gepaardgaande opdrag op u SBC het, voer ek in my geval 'n LDS01 uit met die onderstaande reël:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

En dit is alles, u het definitief u eie turtlebot gebou:) U is gereed om die fantastiese vermoëns van ROS te ontdek, en om visie en algoritmes vir masjienleer te kodeer.

Aanbeveel: