Përmbajtje:

Ndërtoni Robotin tuaj Turtlebot!: 7 hapa
Ndërtoni Robotin tuaj Turtlebot!: 7 hapa

Video: Ndërtoni Robotin tuaj Turtlebot!: 7 hapa

Video: Ndërtoni Robotin tuaj Turtlebot!: 7 hapa
Video: Si të shihni se kush e ka parë profilin tuaj në Facebook (Proces i ri) | 2024, Korrik
Anonim
Ndërtoni Robotin tuaj Turtlebot!
Ndërtoni Robotin tuaj Turtlebot!
Ndërtoni Robotin tuaj Turtlebot!
Ndërtoni Robotin tuaj Turtlebot!
Ndërtoni Robotin tuaj Turtlebot!
Ndërtoni Robotin tuaj Turtlebot!

EDIT:

Informacione të mëtejshme në lidhje me softuerin dhe kontrollin janë në dispozicion në këtë lidhje:

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

Lidhja e drejtpërdrejtë me kodin është:

github.com/MattMgn/foxbot_core

Pse ky projekt?

Turtlebot 3 është platforma perfekte për të hyrë thellë në elektronikë, robotikë dhe madje edhe AI! Unë ju propozoj që të ndërtoni turtlebot-in tuaj hap pas hapi me komponentë të përballueshëm pa sakrifikuar veçoritë dhe performancën. Me një gjë në mendje: mbajtja më e mirë nga roboti fillestar, modulariteti i tij, thjeshtësia dhe numri i madh i paketave për navigim autonom dhe AI nga komuniteti me burim të hapur.

Ky projekt është një mundësi për fillestarët të marrin nocione të elektronikës, mekanikës dhe shkencave kompjuterike, dhe për më me përvojë të marrin një platformë të fuqishme për të testuar dhe zhvilluar algoritme të inteligjencës artificiale.

Çfarë do të zbuloni në këtë projekt?

Ju jeni gati për të zbuluar se cilat pjesë thelbësore mekanike dhe elektronike duhet të mbahen nga bot origjinale për të garantuar përputhshmëri të plotë.

I gjithë procesi i ndërtimit do të jetë i detajuar: duke shkuar nga printimi i pjesëve 3D, montimi dhe disa përbërës, bashkimi dhe integrimi i elektronikës deri në përpilimin e kodit më në fund në Arduino. Ky udhëzues do të përfundojë në një shembull 'përshëndetje botë' për t'ju njohur me ROS. Nëse diçka duket e paqartë, mos ngurroni të bëni pyetje!

Furnizimet

Elektronikë:

1 x Kompjuter me një bord të vetëm për të drejtuar ROS, mund të jetë një Raspberry Pi ose një Jetson Nano për shembull

1 x Arduino PUER PUER shkak, ju gjithashtu mund të përdorni një UNO ose një MEGA

1 x Proto-bord që i përshtatet Arduino DUE pin-out i disponueshëm këtu

2 x 12V motorë DC me kodues (opsioni 100 RPM)

1 x drejtues motori L298N

2 x 5V rregullator

1 x bateri (bateri 3S/4S LiPo për shembull)

2 x çelësa ON/OFF

2 x LED

2 Rezistenca 4 x 470kOhm

3 x 4 kunja lidhëse JST

1 x kabllo USB (të paktën një midis SBC dhe Arduino)

Sensorë:

1 x Sensori aktual (opsional)

1 x 9 Shkallë të Lirisë IMU (opsionale)

1 x LIDAR (opsionale)

Shasia:

16 x pllaka modulare Turtlebot (të cilat gjithashtu mund të printohen 3D)

2 x rrota me diametër 65 mm (opsion me gjerësi 6 mm)

4 x ndarës najloni 30 mm (opsionale)

20 x futje M3 (opsionale)

Të tjerët:

Telat

Vida dhe futje M2.5 dhe M3

Printer 3D ose dikush që mund të printojë pjesët për ju

Një stërvitje dore me një grup stërvitje si kjo

Hapi 1: Përshkrimi

Përshkrim
Përshkrim
Përshkrim
Përshkrim

Ky robot është një makinë diferenciale e thjeshtë që përdor 2 rrota të montuara drejtpërdrejt në motorin e tyre dhe një rrotull që vendoset në pjesën e pasme për të parandaluar rënien e robotit. Roboti është i ndarë në dy shtresa:

Shtresa e Poshtme: me grupin shtytës (bateri, kontrollues motorësh dhe motorë), dhe elektronikë "të nivelit të ulët": mikrokontrollues Arduino, rregullator i tensionit, çelsin …

Shtresa e Epërme: me elektronikun e 'nivelit të lartë' domethënë Kompjuterin me një bord dhe LIDAR

Ato shtresa janë të lidhura me pjesë të shtypura dhe vida për të siguruar qëndrueshmërinë e strukturës.

Skema elektronike

Skema mund të duket pak e çrregullt. Shtë një vizatim skematik dhe nuk përfaqëson të gjitha telat, lidhësit dhe proto-bordin, por mund të lexohet si më poshtë:

Një bateri 3S Litihum Jon Polimer me kapacitet 3000mAh fuqizon qarkun e parë, ai fuqizon si bordin e kontrolluesit të motorit (L298N) ashtu edhe një rregullator të parë 5V për kodifikuesit motorikë dhe Arduino. Ky qark aktivizohet përmes një çelësi me një LED që tregon gjendjen e tij ON/OFF.

E njëjta bateri fuqizon një qark të dytë, tensioni i hyrjes konvertohet në 5V për të fuqizuar kompjuterin me një bord. Këtu gjithashtu, qarku aktivizohet përmes një ndërprerës dhe një LED.

Sensorë shtesë si një LIDAR ose një aparat fotografik mund të shtohen direkt në Raspberry Pi përmes USB ose portës CSI.

Dizajn mekanik

Korniza e robotit është e përbërë nga 16 pjesë identike që formuan 2 shtresa në katror (gjerësi 28cm). Vrimat e shumta lejojnë montimin e pjesëve shtesë kudo që ju nevojiten dhe ofrojnë një dizajn të plotë modular. Për këtë projekt, vendosa të marr pllakat origjinale të TurtleBot3, por gjithashtu mund t'i printoni 3D pasi dizajni i tyre është me burim të hapur.

Hapi 2: Montimi i bllokut motorik

Asambleja e Bllokut Motor
Asambleja e Bllokut Motor
Asambleja e Bllokut Motor
Asambleja e Bllokut Motor
Asambleja e Bllokut Motor
Asambleja e Bllokut Motor

Përgatitja motorike

Hapi i parë është të shtoni shirit shkumë të trashë 1 mm rreth secilit motor për të parandaluar dridhjet dhe zhurmën kur motori të rrotullohet.

Pjesë të shtypura

Mbajtësi i motorit rezulton në dy pjesë që e kapin motorin si një ves. 4 vida të arritura për të shtrënguar motorin në mbajtës.

Çdo mbajtës është i përbërë nga disa vrima që presin futje M3 për t'u montuar në strukturë. Ka më shumë vrima sesa nevojiten, vrimat shtesë përfundimisht mund të përdoren për të montuar një pjesë shtesë.

Cilësimet e printerit 3D: të gjitha pjesët printohen me parametrat e mëposhtëm

  • Hundë me diametër 0.4 mm
  • 15% mbushje materiale
  • Shtresa e lartësisë 0,2 mm

Rrota

Rrotat e zgjedhura janë të mbuluara me gome për të maksimizuar ngjitjen dhe për të siguruar gjendjen e rrotullimit pa rrëshqitje. Një vidë shtrënguese mban timonin e montuar në boshtin e motorit. Diametri i rrotës duhet të jetë mjaft i madh për të kapërcyer parregullsinë e vogël të hapit dhe tokës (ato rrota janë me diametër 65 mm).

Fiksim

Kur të keni bërë me një bllok motorik, përsëritni operacionet e mëparshme dhe pastaj thjesht fiksojini ato në shtresë me vida M3.

Hapi 3: Çelsat dhe përgatitja e kabllove

Çelësat dhe përgatitja e kabllove
Çelësat dhe përgatitja e kabllove
Çelësat dhe përgatitja e kabllove
Çelësat dhe përgatitja e kabllove
Çelësat dhe përgatitja e kabllove
Çelësat dhe përgatitja e kabllove

Përgatitja e kabllove motorike

Në përgjithësi, kodifikuesi i motorit vjen me një kabllo duke përfshirë në njërën anë një lidhës 6pin që lidh pjesën e pasme të PCB të koduesit dhe tela të zhveshur në anën tjetër.

Ju keni mundësinë t'i lidhni ato drejtpërdrejt në proto-bordin tuaj ose edhe në Arduino tuaj, por unë ju rekomandoj që të përdorni tituj femrash dhe lidhës JST-XH. Kështu ju mund t'i lidhni/shkëputni ato nga proto-bordi juaj dhe ta bëni montimin tuaj më të lehtë.

Këshilla: mund të shtoni një bishtalec të zgjerueshëm të mëngës rreth telave tuaj dhe pjesë të tubit të tkurrur pranë lidhësve, duke bërë kështu që do të merrni një kabllo 'të pastër'.

Ndërprerës dhe LED

Për të mundësuar dy qarqet e energjisë, përgatitni 2 kabllo LED dhe ndërroni: në fillim lidhni një rezistencë 470kOhm në njërën nga kunjat LED, pastaj lidhni LED -in në njërën kunj kalimi. Këtu gjithashtu, mund të përdorni një pjesë të tubit të tkurrjes për të fshehur rezistencën brenda. Kini kujdes të lidhni LED në drejtimin e duhur! Përsëriteni këtë operacion për të marrë dy kabllo switch/led.

Kuvendi

Mblidhni kabllot e bërë më parë në pjesën përkatëse të printuar 3D. Përdorni një arrë për të ruajtur ndërprerësin, LED -të nuk kërkojnë zam, mjafton të keni forcë të mjaftueshme për ta vendosur atë në vrimë.

Hapi 4: Instalimet e bordeve elektronike

Instalimet e bordeve elektronike
Instalimet e bordeve elektronike
Instalimet e bordeve elektronike
Instalimet e bordeve elektronike
Instalimet e bordeve elektronike
Instalimet e bordeve elektronike

Paraqitja e bordeve

Një proto-bord që përshtat planin e bordit Arduino përdoret për të zvogëluar numrin e telave. Në krye të proto-bordit, L298N është bërë pirg me kokën e femrës Dupont (Dupont janë titujt 'Arduino like').

Përgatitja L298N

Fillimisht, bordi L298N nuk vjen me kokën përkatëse mashkullore Dupont, ju duhet të shtoni një rresht me 9 kunja poshtë tabelës. Ju duhet të realizoni 9 vrima me stërvitje me diametër 1mm paralelisht me vrimat ekzistuese siç mund të shihni në foto. Pastaj lidhni kunjat përkatëse të 2 rreshtave me materiale bashkimi dhe tela të shkurtër.

L298N pin-out

L298N përbëhet nga 2 kanale që lejojnë kontrollin e shpejtësisë dhe drejtimit:

drejtimi përmes 2 daljeve dixhitale, të quajtura IN1, IN2 për kanalin e parë dhe IN3 dhe IN4 për të dytin

shpejtësia përmes 1 daljeve dixhitale, të quajtura ENA për kanalin e parë dhe ENB për të dytin

Zgjodha pin-out-in e mëposhtëm me Arduino:

motori i majtë: IN1 në pin 3, IN2 në pin 4, ENA në pin 2

motori i djathtë: IN3 në pin 5, IN4 në pin 6, ENB në pin 7

Rregullator 5V

Edhe nëse l298N normalisht është në gjendje të sigurojë 5V, unë prapë shtoj një rregullator të vogël. Ai fuqizon Arduino përmes portës VIN dhe 2 koduesit në motorë. Ju mund ta kaloni këtë hap duke përdorur drejtpërdrejt rregullatorin e integruar L298N 5V.

Lidhësit JST dhe Encoder pin-out

Përdorni 4 kunja adaptorë lidhës femra JST-XH, secili lidhës lidhet më pas me:

  • 5V nga rregullatori
  • një Tokë
  • dy porta dixhitale të hyrjes (për shembull: 34 dhe 38 për kodifikuesin e djathtë dhe 26 dhe 30 për atë të majtë)

Extra I2C

Siç mund ta keni vënë re, ka një lidhës shtesë 4pin JST në proto-bord. Përdoret për lidhjen e pajisjes I2C si një IMU, mund të bëni të njëjtën gjë dhe madje të shtoni portën tuaj.

Hapi 5: Motor Group dhe Arduino në shtresën e poshtme

Motor Group dhe Arduino në shtresën e poshtme
Motor Group dhe Arduino në shtresën e poshtme
Motor Group dhe Arduino në shtresën e poshtme
Motor Group dhe Arduino në shtresën e poshtme
Motor Group dhe Arduino në shtresën e poshtme
Motor Group dhe Arduino në shtresën e poshtme

Fiksimi i blloqeve motorike

Pasi të jetë montuar shtresa e poshtme me pllakat e 8 Turtlebot, thjesht përdorni 4 vida M3 direkt në futje për të ruajtur blloqet motorike. Pastaj mund të lidhni telat e fuqisë motorike në daljet L298N dhe kabllot e bërë më parë në lidhësit JST të proto-bordit.

Shpërndarja e energjisë

Shpërndarja e energjisë realizohet thjesht me një bllok terminal barrierë. Në njërën anë të barrierës, një kabllo me një prizë femërore XT60 është e dehur për t'u lidhur me baterinë LiPo. Nga ana tjetër, dy kabllot tona LED/kaloni të bashkuar më parë janë të dehur. Kështu çdo qark (Motor dhe Arduino) mund të aktivizohet me ndërprerësin e tij dhe LED -in e gjelbër përkatës.

Menaxhimi i kabllove

Shpejt do të duhet të merresh me shumë kabllo! Për të zvogëluar aspektin e çrregullt, mund të përdorni "tabelën" e printuar më parë 3D. Në tryezë, mbani bordet tuaja elektronike me shirit të dyanshëm dhe nën tryezë lërini telat të rrjedhin lirshëm.

Mirëmbajtja e baterisë

Për të shmangur nxjerrjen e baterisë kur drejtoni robotin tuaj, thjesht mund të përdorni një brez elastik të flokëve.

Roller roster

Jo vërtet një rrotull por një gjysmë sferë e thjeshtë e fiksuar me 4 vida në shtresën e poshtme. Shtë e mjaftueshme për të siguruar stabilitetin e robotit.

Hapi 6: Kompjuter me një bord dhe sensorë në shtresën e sipërme

Kompjuter me një bord dhe sensorë në shtresën e sipërme
Kompjuter me një bord dhe sensorë në shtresën e sipërme
Kompjuter me një bord dhe sensorë në shtresën e sipërme
Kompjuter me një bord dhe sensorë në shtresën e sipërme
Kompjuter me një bord dhe sensorë në shtresën e sipërme
Kompjuter me një bord dhe sensorë në shtresën e sipërme

Cilin kompjuter me një bord të vetëm për të zgjedhur?

Nuk kam nevojë t'ju paraqes Raspberry Pi të famshëm, numri i rasteve të përdorimit të tij tejkalon në masë të madhe fushën e robotikës. Por ka një sfidues shumë më të fuqishëm për Raspberry Pi që mund ta injoroni. Në të vërtetë Jetson Nano nga Nvidia ngërthen një kartë grafike të fuqishme 128-bërthamë përveç procesorit të saj. Kjo kartë grafike e veçantë është zhvilluar për të përshpejtuar detyrat e shtrenjta llogaritëse të tilla si përpunimi i imazhit ose përfundimi i rrjetit nervor.

Për këtë projekt zgjodha Jetson Nano dhe ju mund të gjeni pjesën përkatëse 3D midis skedarëve të bashkangjitur, por nëse doni të shkoni me Raspberry Pi ka shumë kuti të printueshme këtu.

Rregullatori 5V

Çfarëdo bordi që keni vendosur të sillni në robotin tuaj, keni nevojë për një rregullator 5V. Raspberry Pi 4 më i fundit kërkon 1.25A max, por Jetson Nano kërkon deri në 3A në stres, kështu që unë zgjodha që Pololu 5V 6A të ketë një rezervë energjie për komponentët e ardhshëm (sensorë, drita, stepa …), por çdo 5V 2A e lirë duhet të bëjë Punë. Jetson përdor një fuçi DC 5.5 mm dhe Pi një mikro USB, kapni kabllon përkatës dhe ngjiteni atë në daljen e rregullatorit.

Paraqitja e LIDAR

LIDAR i përdorur këtu është LDS-01, ka të tjerë të ndryshëm 2D LIDAR që mund të përdoren si RPLidar A1/A2/A3, YDLidar X4/G4 apo edhe LIDAR Hokuyo. Kërkesa e vetme është që ajo të lidhet me USB dhe të vendoset në qendër mbi strukturën. Në të vërtetë nëse LIDAR nuk është i përqendruar mirë, harta e krijuar nga algoritmi SLAM mund të zhvendosë pozicionin e vlerësuar të mureve dhe pengesave nga pozicioni i tyre real. Gjithashtu nëse ndonjë pengesë nga roboti kalon rreze lazer, ai do të zvogëlojë gamën dhe fushën e shikimit.

Montim LIDAR

LIDAR është montuar në një pjesë të printuar 3D që ndjek formën e saj, pjesa në vetvete mbahet në një pjatë drejtkëndore (në fakt në kompensatë në foto, por mund të printohet edhe 3D). Pastaj një pjesë përshtatëse lejon që ansambli të fiksohet në pllakën e sipërme të turtlebotit me ndarës najloni.

Kamera si sensor shtesë ose zëvendësim LIDAR

Nëse nuk doni të shpenzoni shumë para për një LIDAR (i cili kushton rreth 100 $), shkoni për një aparat fotografik: ekzistojnë gjithashtu algoritme SLAM që funksionojnë vetëm me një aparat monokular RGB. Të dy SBC pranojnë kamera USB ose CSI.

Për më tepër, kamera do t'ju lejojë të përdorni skriptet e vizionit të kompjuterit dhe zbulimin e objekteve!

Kuvendi

Para mbylljes së robotit, kaloni kabllot përmes vrimave më të mëdha në pllakën e sipërme:

  • kabllo përkatëse nga rregullatori 5V në SBC tuaj
  • kabllo USB nga Porti i Programimit i Arduino DUE (më i afërti me fuçinë DC) në një port USB të SBC tuaj

Pastaj mbajeni pllakën e sipërme në pozicion me një duzinë vida. Roboti juaj tani është gati për tu programuar, MIRELL MIR!

Hapi 7: Bëjeni që të lëvizë

Përpiloni Arduino

Hapni Arduino IDE -në tuaj të preferuar dhe importoni dosjen e projektit të quajtur own_turtlebot_core, pastaj zgjidhni tabelën tuaj dhe portin përkatës, të cilit mund t'i referoheni këtij udhëzuesi të shkëlqyer.

Rregulloni cilësimet kryesore

Projekti përbëhet nga dy skedarë, dhe një duhet të përshtatet me robotin tuaj. Pra, le të hapim own_turtlebot_config.h, dhe të zbulojmë se cilat linja kërkojnë vëmendjen tonë:

#përcaktoni ARDUINO_DUE // ** KOMENTONI KIST L LIN NFSE JU NUK PINGRDORNI P DR HER ** **

Duhet të përdoret vetëm me Arduino DUE, nëse jo komentoni linjën.

#përcakto RATE_CONTROLLER_KP 130.0 // ** TUNE KIST VAL VLER **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** TUNE KIST VAL VLER ** # #përcakto RATE_CONTROLLER_KI 0.00005 // ** TUNE KIST VAL VLER **

Ata 3 parametra korrespondojnë me fitimet e kontrollorit të normës të përdorura nga PID për të ruajtur shpejtësinë e dëshiruar. Në varësi të tensionit të baterisë, masës së robotit, diametrit të rrotave dhe ingranazheve mekanike të motorit tuaj, do t'ju duhet të përshtatni vlerat e tyre. PID është një kontrollues klasik dhe nuk do të jeni të detajuar këtu, por kjo lidhje duhet t'ju japë informacione të mjaftueshme për të akorduar tuajin.

/ * Përcaktoni kunjat */

// motori A (djathtas) const byte motorRightEncoderPinA = 38; // ** MODIFIKO ME PININ TUAJ NB ** konst byte motorRightEncoderPinB = 34; // ** MODIFIKONI ME PININ TUAJ NB ** konst byte enMotorRight = 2; // ** MODIFIKONI ME PININ TUAJ NB ** konst byte in1MotorRight = 4; // ** MODIFIKONI ME PININ TUAJ NB ** konst byte in2MotorRight = 3; // ** MODIFIKONI ME PININ TUAJ NB ** // motori B (majtas) const byte motorLeftEncoderPinA = 26; // ** NDRYSHO ME PININ TUAJ NB ** konst byte motorLeftEncoderPinB = 30; // ** NDRYSHO ME PININ TUAJ NB ** konst byte enMotorLeft = 7; // ** MODIFIKONI ME PININ TUAJ NB ** konst byte in1MotorLeft = 6; // ** MODIFIKONI ME PININ TUAJ NB ** konst byte in2MotorLeft = 5; // ** MODIFIKO ME PININ TUAJ NB **

Ky bllok përcakton pinout midis L298N dhe Arduino, thjesht modifikoni numrin e pinit që të përputhet me tuajin. Kur të keni mbaruar me skedarin e konfigurimit, përpiloni dhe ngarkoni kodin!

Instaloni dhe konfiguroni ROS

Pasi të keni arritur këtë hap, udhëzimet janë saktësisht të njëjta me ato të detajuara në manualin e shkëlqyer të TurtleBot3, duhet të ndiqni me përpikmëri

bërë mirë TurtleBot 3 tani është i juaji dhe mund të ekzekutoni të gjitha paketat dhe mësimet ekzistuese me ROS.

Mirë, por çfarë është ROS?

ROS qëndron për Robots Operating System, mund të duket mjaft komplekse në fillim, por nuk është, thjesht imagjinoni një mënyrë komunikimi midis pajisjeve (sensorë dhe aktivizues) dhe softuerëve (algoritme për navigim, kontroll, vizion kompjuterik…). Për shembull, ju lehtë mund ta ndërroni LIDAR -in tuaj aktual me një model tjetër pa prishur konfigurimin tuaj, sepse secili LIDAR publikon të njëjtin mesazh LaserScan. ROS është përdorur gjerësisht në robotikë, Drejtoni shembullin tuaj të parë

Ekuivalenti i "përshëndetjes botërore" për ROS konsiston në teleoperacionin e robotit tuaj përmes kompjuterit në distancë. Ajo që dëshironi të bëni është të dërgoni komandat e shpejtësisë për t'i bërë motorët të rrotullohen, komandat ndjekin këtë tub:

  • një nyje turtlebot_teleop, që funksionon në kompjuterin në distancë, publikoni një temë "/cmd_vel" duke përfshirë një mesazh Twist
  • ky mesazh përcillet përmes rrjetit të mesazheve ROS në SBC
  • një nyje serike lejon që "/cmd_vel" të merret në Arduino
  • Arduino lexon mesazhin dhe vendos shpejtësinë këndore në secilin motor që të përputhet me shpejtësinë e dëshiruar lineare dhe këndore të robotit

Ky operacion është i thjeshtë dhe mund të arrihet duke drejtuar linjat e komandës të listuara më sipër! Nëse doni informacion më të detajuar thjesht shikoni videon.

[SBC]

roskore

[SBC]

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

[Kompjuter në distancë]

eksporto TURTLEBOT3_MODEL = $ {TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key. Launch

Për të shkuar më tej

Duhet të dini një gjë të fundit para se të provoni të gjithë shembujt zyrtarë, në manual çdo herë që përballeni me këtë komandë:

roslaunch turtlebot3_bringup turtlebot3_robot.filloj

ju duhet të ekzekutoni këtë komandë në SBC tuaj në vend:

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

Dhe nëse keni një LIDAR drejtoni komandën e lidhur në SBC tuaj, në rastin tim unë drejtoj një LDS01 me rreshtin më poshtë:

roslaunch hls_lfcd_lds_driver hlds_laser. nis

Dhe kjo është e gjitha, ju keni ndërtuar përfundimisht turtlebotin tuaj:) Ju jeni gati për të zbuluar aftësitë fantastike të ROS, dhe për të koduar vizionin dhe algoritmet e mësimit të makinerisë.

Recommended: