Sadržaj:

Izgradite vlastitog robota Turtlebot !: 7 koraka
Izgradite vlastitog robota Turtlebot !: 7 koraka

Video: Izgradite vlastitog robota Turtlebot !: 7 koraka

Video: Izgradite vlastitog robota Turtlebot !: 7 koraka
Video: 5 лучших STEM-игрушек для детей в 2024 году 2024, Srpanj
Anonim
Izgradite vlastitog Turtlebot robota!
Izgradite vlastitog Turtlebot robota!
Izgradite vlastitog Turtlebot robota!
Izgradite vlastitog Turtlebot robota!
Izgradite vlastitog Turtlebot robota!
Izgradite vlastitog Turtlebot robota!

UREDI:

Dodatne informacije o softveru i kontroli dostupne su na ovoj poveznici:

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

Izravna veza na kôd je:

github.com/MattMgn/foxbot_core

Zašto ovaj projekt?

Turtlebot 3 savršena je platforma za dublje proučavanje elektronike, robotike, pa čak i umjetne inteligencije! Predlažem vam da izgradite vlastiti kornjača korak po korak s pristupačnim komponentama bez žrtvovanja značajki i performansi. Imajte na umu jednu stvar: čuvanje najboljeg od početnog robota, njegovu modularnost, jednostavnost i ogroman broj paketa za autonomnu navigaciju i AI iz zajednice otvorenog koda.

Ovaj je projekt prilika za početnike da steknu pojmove elektronike, mehanike i računalnih znanosti, a za iskusnije da dobiju moćnu platformu za testiranje i razvoj algoritama umjetne inteligencije.

Što ćete otkriti u ovom projektu?

Upravo ćete otkriti koji se bitni mehanički i elektronički dijelovi moraju čuvati od izvornog bota kako bi se zajamčila potpuna kompatibilnost.

Cijeli proces izrade bit će detaljan: od tiskanja 3D dijelova, sastavljanja i nekoliko komponenti, lemljenja i integriranja elektronike do konačnog sastavljanja koda na Arduinu. Ovaj će instruktor zaključiti na primjeru "zdravo svijeta" kako bi vas upoznao s ROS -om. Ako vam se nešto čini nejasnim, slobodno postavite pitanje!

Pribor

Elektronika:

1 x računalo s jednim računalom za pokretanje ROS -a, na primjer, može biti Raspberry Pi ili Jetson Nano

1 x Arduino DUE, mogli biste koristiti i UNO ili MEGA

1 x Proto-ploča koja odgovara Arduino DUE pin-out-u dostupna ovdje

2 x 12V DC motori s enkoderima (opcija 100 RPM)

1 x pokretač motora L298N

2 x 5V regulator

1 x baterija (na primjer 3S/4S LiPo baterija)

2 x ON/OFF prekidači

2 x LED

2 x 470kOhm otpornici

3 x 4 pinska JST konektora

1 x USB kabel (barem jedan između SBC -a i Arduina)

Senzori:

1 x Senzor struje (opcionalno)

1 x 9 stupnjeva slobode IMU (izborno)

1 x LIDAR (izborno)

Šasija:

16 x Turtlebot modularne ploče (koje se mogu i 3D ispisati)

2 x kotači promjera 65 mm (opcija širine 6 mm)

4 x najlonski odstojnici 30 mm (izborno)

20 x M3 umetci (opcionalno)

Drugi:

Žice

M2.5 i M3 vijci i umetci

3D pisač ili netko tko vam može ispisati dijelove

Ručna bušilica sa setom burgija poput ove

Korak 1: Opis

Opis
Opis
Opis
Opis

Ovaj robot je jednostavan diferencijalni pogon koji koristi 2 kotača izravno montirana na njihov motor i kotačić koji je postavljen straga kako bi spriječio pad robota. Robot je podijeljen u dva sloja:

donji sloj: s pogonskom skupinom (baterija, upravljački sklop motora i motori) i elektronikom "niske razine": Arduino mikrokontroler, regulator napona, prekidači …

gornji sloj: s "visokom razinom" elektronike, naime jednokrilno računalo i LIDAR

Ti su slojevi povezani ispisanim dijelovima i vijcima kako bi se osigurala robusnost strukture.

Elektronička shema

Shema bi mogla djelovati pomalo neuredno. To je shematski crtež i ne predstavlja sve žice, konektore i proto-ploču, ali se može pročitati na sljedeći način:

3S litij -ionska polimerna baterija kapaciteta 3000mAh napaja prvi krug, napaja i upravljačku ploču motora (L298N) i prvi 5V regulator za enkodere motora i Arduino. Ovaj krug je omogućen putem prekidača sa LED diodom koji označava njegovo UKLJUČENO/ISKLJUČENO stanje.

Ista baterija napaja drugi krug, ulazni napon se pretvara u 5V za napajanje jednokrilnog računala. I ovdje je krug omogućen putem prekidača i LED diode.

Dodatni senzori poput LIDAR -a ili kamere tada se mogu dodati izravno na Raspberry Pi putem USB -a ili CSI priključka.

Mehanički dizajn

Okvir robota sastoji se od 16 identičnih dijelova koji su formirali 2 sloja u kvadratu (širine 28 cm). Mnoštvo rupa omogućuje postavljanje dodatnih dijelova gdje god vam zatreba i nudi potpuni modularni dizajn. Za ovaj projekt odlučio sam nabaviti originalne ploče TurtleBot3, ali ih možete i 3D ispisati jer je njihov dizajn otvorenog koda.

Korak 2: Sklop bloka motora

Sklop bloka motora
Sklop bloka motora
Sklop bloka motora
Sklop bloka motora
Sklop bloka motora
Sklop bloka motora

Priprema motora

Prvi korak je dodati pjenastu traku debljine 1 mm oko svakog motora kako biste spriječili vibracije i buku kada se motor okreće.

Tiskani dijelovi

Nosač motora rezultira iz dva dijela koji drže motor poput poroka. Dostignuta su 4 vijka za pričvršćivanje motora u držač.

Svaki držač sastoji se od nekoliko rupa u kojima se nalaze umetci M3 koji se montiraju na konstrukciju. Postoji više rupa nego što je stvarno potrebno, dodatne rupe bi se na kraju mogle koristiti za montažu dodatnih dijelova.

Postavke 3D pisača: svi se dijelovi ispisuju sa sljedećim parametrima

  • Mlaznica promjera 0,4 mm
  • 15% ispune materijala
  • Sloj visine 0,2 mm

Kotač

Odabrani kotači prekriveni su gumom kako bi se povećalo prianjanje i osiguralo stanje kotrljanja. Stezni vijak održava kotač montiran na osovini motora. Promjer kotača trebao bi biti dovoljno velik da pređe manje nepravilnosti koraka i tla (ti su kotači promjera 65 mm).

Fiksacija

Kada završite s jednim blokom motora, ponovite prethodne operacije, a zatim ih jednostavno pričvrstite u sloj vijcima M3.

Korak 3: Prekidači i priprema kabela

Prekidači i priprema kabela
Prekidači i priprema kabela
Prekidači i priprema kabela
Prekidači i priprema kabela
Prekidači i priprema kabela
Prekidači i priprema kabela

Priprema kabela motora

Općenito, motor-koder dolazi s kabelom koji uključuje s jedne strane 6-pinski konektor koji povezuje stražnju stranu PCB-a kodera, te gole žice s druge strane.

Imate mogućnost izravnog lemljenja na svoju proto-ploču ili čak svoj Arduino, ali preporučujem vam da umjesto toga koristite ženska pin zaglavlja i JST-XH konektore. Tako ih možete priključiti/isključiti na svoju matičnu ploču i olakšati montažu.

Savjeti: možete dodati proširivu pletenicu s rukavima oko žica i komade skupljajuće cijevi u blizini konektora, čime ćete dobiti "čisti" kabel.

Prekidač i LED

Da biste omogućili dva strujna kruga, pripremite 2 LED i prekidačka kabela: prvo lemite otpornik od 470 kOhm na jedan od LED pina, a zatim lemite LED na jedan prekidač. Ovdje također možete koristiti komad skupljajuće cijevi da sakrijete otpornik iznutra. Pazite da lemite LED u pravom smjeru! Ponovite ovu operaciju da biste dobili dva prekidačka/LED kabela.

Skupština

Sastavite prethodno izrađene kabele na odgovarajućem 3D ispisanom dijelu. Za održavanje prekidača upotrijebite maticu, LED diode ne zahtijevaju ljepilo, samo dovoljno jako da se stave u rupu.

Korak 4: Ožičenje elektroničkih ploča

Ožičenje elektroničkih ploča
Ožičenje elektroničkih ploča
Ožičenje elektroničkih ploča
Ožičenje elektroničkih ploča
Ožičenje elektroničkih ploča
Ožičenje elektroničkih ploča

Raspored ploča

Proto-ploča koja odgovara rasporedu Arduino ploče koristi se za smanjenje broja žica. Na vrhu proto ploče L298N je naslagan sa Dupont ženskim zaglavljem (Dupont su zaglavlja tipa 'Arduino').

Priprema L298N

Izvorno, ploča L298N ne dolazi s odgovarajućim muškim Dupont zaglavljem, morate dodati red od 9 pinova ispod ploče. Morate napraviti 9 rupa sa svrdlom promjera 1 mm paralelno s postojećim rupama kao što možete vidjeti na slici. Zatim povežite odgovarajuće pinove 2 reda s materijalima za lemljenje i kratkim žicama.

Isključivanje L298N

L298N se sastoji od 2 kanala koji omogućuju kontrolu brzine i smjera:

smjera kroz 2 digitalna izlaza, nazvana IN1, IN2 za prvi kanal, te IN3 i IN4 za drugi

brzinu kroz 1 digitalni izlaz, nazvan ENA za prvi kanal i ENB za drugi

Odabrao sam sljedeći pin-out s Arduinom:

lijevi motor: IN1 na pin 3, IN2 na pin 4, ENA na pin 2

desni motor: IN3 na pin 5, IN4 na pin 6, ENB na pin 7

5V regulator

Čak i ako l298N normalno može osigurati 5V, ipak dodajem mali regulator. Napaja Arduino putem VIN priključka i 2 kodera na motorima. Ovaj ste korak mogli preskočiti izravno korištenjem ugrađenog L298N 5V regulatora.

JST konektori i pin-out kodera

Koristite 4 pinska ženska adaptera JST-XH konektora, svaki priključak je zatim povezan sa:

  • 5V od regulatora
  • a Tlo
  • dva porta za digitalni ulaz (na primjer: 34 i 38 za desni davač i 26 i 30 za lijevi)

Dodatni I2C

Kao što ste možda primijetili, na proto-ploči postoji dodatni 4pin JST konektor. Koristi se za povezivanje I2C uređaja poput IMU -a, možete učiniti isto pa čak i dodati vlastiti port.

Korak 5: Grupa motora i Arduino na donjem sloju

Motor Group i Arduino na donjem sloju
Motor Group i Arduino na donjem sloju
Motor Group i Arduino na donjem sloju
Motor Group i Arduino na donjem sloju
Motor Group i Arduino na donjem sloju
Motor Group i Arduino na donjem sloju

Fiksiranje motornih blokova

Nakon što se donji sloj sastavi s 8 Turtlebotovih ploča, jednostavno upotrijebite 4 vijka M3 izravno u umetcima za održavanje motornih blokova. Zatim možete priključiti žice za napajanje motora na izlaze L298N, a prethodno izrađene kabele na JST konektore na matičnoj ploči.

Raspodjela energije

Distribucija energije jednostavno se ostvaruje pomoću barijernog priključnog bloka. S jedne strane barijere pričvršćen je kabel s ženskim utikačem XT60 za spajanje na LiPo bateriju. S druge strane, naša dva LED/prekidačka kabela prethodno zalemljena su zašrafljena. Tako bi se svaki krug (Motor i Arduino) mogao omogućiti vlastitim prekidačem i odgovarajućom zelenom LED diodom.

Upravljanje kablovima

Brzo ćete se morati nositi s mnogo kabela! Da biste smanjili neuredan aspekt, možete upotrijebiti "tablicu" koja je prethodno 3D ispisana. Na stolu održavajte svoje elektroničke ploče dvostranom trakom, a ispod stola pustite žice da slobodno teku.

Održavanje baterije

Kako biste izbjegli izbacivanje baterije tijekom vožnje robota, jednostavno upotrijebite gumicu za kosu.

Kotačić

Nije zapravo kotač, već jednostavna polu -kugla učvršćena s 4 vijka na donjem sloju. Dovoljno je osigurati stabilnost robota.

Korak 6: Jednokrilno računalo i senzori na gornjem sloju

Računalo s jednom pločom i senzori na gornjem sloju
Računalo s jednom pločom i senzori na gornjem sloju
Računalo s jednom pločom i senzori na gornjem sloju
Računalo s jednom pločom i senzori na gornjem sloju
Računalo s jednom pločom i senzori na gornjem sloju
Računalo s jednom pločom i senzori na gornjem sloju

Koje jednokrilno računalo odabrati?

Ne moram vam predstavljati slavni Raspberry Pi, njegov broj slučajeva uporabe uvelike premašuje polje robotike. No, postoji mnogo snažniji izazov za Raspberry Pi koji biste mogli zanemariti. Doista, Jetson Nano iz Nvidije ugrađuje moćnu grafičku karticu sa 128 jezgri uz svoj procesor. Ova je grafička kartica razvijena za ubrzanje računskih skupih zadataka, poput obrade slike ili zaključivanja neuronske mreže.

Za ovaj projekt odabrao sam Jetson Nano i možete pronaći odgovarajući 3D dio među priloženim datotekama, ali ako želite ići s Raspberry Pi, ovdje ima mnogo kućišta za ispis.

Regulator 5V

Koju god ploču odlučili donijeti sa svojim robotom, potreban vam je regulator od 5 V. Najnoviji Raspberry Pi 4 zahtijeva 1,25A max, ali Jetson Nano zahtijeva do 3A na stres pa sam se odlučio za Pololu 5V 6A da ima rezervu snage za buduće komponente (senzore, svjetla, stepenice …), ali bilo koje jeftino 5V 2A bi trebalo Posao. Jetson koristi DC cijev od 5,5 mm, a Pi mikro USB, zgrabi odgovarajući kabel i lemi ga na izlaz regulatora.

LIDAR raspored

LIDAR koji se ovdje koristi je LDS-01, postoje i drugi 2D LIDAR-i koji se mogu koristiti poput RPLidar A1/A2/A3, YDLidar X4/G4 ili čak Hokuyo LIDAR-a. Jedini uvjet je da ga treba priključiti putem USB -a i postaviti centrirano iznad strukture. Doista, ako LIDAR nije dobro centriran, karta izrađena SLAM algoritmom može pomaknuti procijenjeni položaj zidova i prepreka s njihovog stvarnog položaja. Također, ako bilo koja prepreka od robota prijeđe lasersku zraku, to će smanjiti domet i vidno polje.

LIDAR montaža

LIDAR je montiran na 3D ispisani dio koji slijedi njegov oblik, a sam dio se drži na pravokutnoj ploči (zapravo u šperploči na slici, ali može se i 3D ispisati). Zatim adapterski dio omogućuje fiksiranje ansambla na gornju ploču kornjače pomoću najlonskih odstojnika.

Kamera kao dodatni senzor ili zamjena za LIDAR

Ako ne želite potrošiti previše novca na LIDAR (koji košta oko 100 USD), idite na kameru: postoje i SLAM algoritmi koji rade samo s monokularnom RGB kamerom. Oba SBC -a prihvaćaju USB ili CSI kameru.

Štoviše, kamera će vam omogućiti pokretanje skripti za računalni vid i otkrivanje objekata!

Skupština

Prije zatvaranja robota, provucite kabele kroz veće rupe na gornjoj ploči:

  • odgovarajući kabel od 5V regulatora do vašeg SBC -a
  • USB kabel s programskog porta Arduino DUE (najbliže DC cijevi) na USB priključak vašeg SBC -a

Zatim držite gornju ploču na mjestu s desetak vijaka. Vaš robot je sada spreman za programiranje, BRAVO!

Korak 7: Neka se pokrene

Sastavite Arduino

Otvorite svoj omiljeni Arduino IDE i uvezite mapu projekta pod nazivom own_turtlebot_core, a zatim odaberite ploču i odgovarajući port, možete se obratiti ovom izvrsnom vodiču.

Prilagodite osnovne postavke

Projekt se sastoji od dvije datoteke, a jednu je potrebno prilagoditi vašem robotu. Otvorimo dakle own_turtlebot_config.h i otkrijmo koji retci zahtijevaju našu pažnju:

#define ARDUINO_DUE // ** KOMENTIRAJTE OVU LINIJU AKO NE KORISTITE DUGU **

Treba se koristiti samo s Arduinom DUE, ako ne komentirate liniju.

#define RATE_CONTROLLER_KP 130.0 // ** NASTAVITE OVU VRIJEDNOST **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** TUNE THIS VALUE ** #define RATE_CONTROLLER_KI 0.00005 // ** TUNE THIS VALUE **

Ta 3 parametra odgovaraju dobicima regulatora brzine koje PID koristi za održavanje željene brzine. Ovisno o naponu baterije, masi robota, promjeru kotača i mehaničkom prijenosniku vašeg motora, morat ćete prilagoditi njihove vrijednosti. PID je klasični kontroler i ovdje nećete biti detaljno opisani, ali ova veza trebala bi vam dati dovoljno ulaza za prilagođavanje vlastitog.

/ * Definirajte pinove */

// motor A (desni) const byte motorRightEncoderPinA = 38; // ** IZMJENI VAŠIM PIN -om NB ** const byte motorRightEncoderPinB = 34; // ** IZMJENI VAŠIM PIN -om NB ** const byte enMotorRight = 2; // ** IZMJENI VAŠIM PIN -om NB ** const byte in1MotorRight = 4; // ** IZMJENI VAŠIM PIN -om NB ** const byte in2MotorRight = 3; // ** IZMJENI SA SVOJIM PIN -om NB ** // motor B (lijevo) const byte motorLeftEncoderPinA = 26; // ** IZMJENI SA SVOJIM PIN -om NB ** const byte motorLeftEncoderPinB = 30; // ** IZMJENI VAŠIM PIN -om NB ** const byte enMotorLeft = 7; // ** IZMJENI VAŠIM PIN -om NB ** const byte in1MotorLeft = 6; // ** IZMJENI VAŠIM PIN -om NB ** const byte in2MotorLeft = 5; // ** IZMJENITE SVOJIM PIN -om NB **

Ovaj blok definira pinout između L298N i Arduina, jednostavno izmijenite pin broj tako da odgovara vašem. Kada završite s konfiguracijskom datotekom, sastavite i prenesite kôd!

Instalirajte i konfigurirajte ROS

Kada dosegnete ovaj korak, upute su potpuno iste kao one navedene u izvrsnom priručniku TurtleBot3, morate ih pažljivo slijediti

Bravo TurtleBot 3 je sada vaš i možete pokrenuti sve postojeće pakete i vodiče s ROS -om.

U redu, ali što je ROS?

ROS označava operacijski sustav Roboti, na prvu se može činiti prilično složenim, ali nije, zamislite samo način komunikacije između hardvera (senzori i aktuatori) i softvera (algoritmi za navigaciju, upravljanje, računalni vid …). Na primjer, možete jednostavno zamijeniti svoj trenutni LIDAR s drugim modelom bez prekida vaših postavki, jer svaki LIDAR objavljuje istu poruku LaserScan. ROS se široko koristi u robotici, Izvedite svoj prvi primjer

Ekvivalent "hello world" za ROS sastoji se u daljinskom upravljanju vašim robotom putem udaljenog računala. Ono što želite učiniti je poslati naredbe brzine za pokretanje motora, naredbe slijede ovu cijev:

  • čvor turtlebot_teleop, koji radi na udaljenom računalu, objavljuje temu "/cmd_vel" uključujući poruku Twist
  • ova se poruka prosljeđuje putem mreže poruka ROS -a na SBC
  • serijski čvor omogućuje primanje "/cmd_vel" na Arduinu
  • Arduino čita poruku i postavlja kutnu brzinu na svakom motoru tako da odgovara željenoj linearnoj i kutnoj brzini robota

Ova je operacija jednostavna i može se postići pokretanjem gore navedenih naredbenih redaka! Ako želite detaljnije informacije, samo pogledajte video.

[SBC]

roscore

[SBC]

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

[Udaljeno računalo]

izvoz TURTLEBOT3_MODEL = $ {TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.pokretanje

Da idemo dalje

Morate znati posljednju stvar prije isprobavanja svih službenih primjera, u priručniku svaki put kad se suočite s ovom naredbom:

roslaunch turtlebot3_bringup turtlebot3_robot.pokretanje

morate pokrenuti ovu naredbu na svom SBC -u:

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

A ako imate LIDAR pokrenite povezanu naredbu na svom SBC -u, u mom slučaju pokrećem LDS01 s donjim redom:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

I to je sve, definitivno ste izgradili vlastitu kornjačicu:) Spremni ste otkriti fantastične mogućnosti ROS -a i kodirati algoritme vida i strojnog učenja.

Preporučeni: