Sadržaj:

Napravite vlastitog robota Turtlebot !: 7 koraka
Napravite vlastitog robota Turtlebot !: 7 koraka

Video: Napravite vlastitog robota Turtlebot !: 7 koraka

Video: Napravite vlastitog robota Turtlebot !: 7 koraka
Video: Массимо Банци: Как Arduino пробуждает воображение 2024, Novembar
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!

EDIT:

Dodatne informacije u vezi sa softverom i kontrolom dostupne su na ovom linku:

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

Direktna veza do koda je:

github.com/MattMgn/foxbot_core

Zašto ovaj projekat?

Turtlebot 3 je savršena platforma za dublje proučavanje elektronike, robotike, pa čak i umjetne inteligencije! Predlažem vam da napravite svoju vlastitu kornjačicu korak po korak sa pristupačnim komponentama bez žrtvovanja karakteristika i performansi. Imajući na umu jednu stvar: čuvanje najboljeg od početnog robota, njegovu modularnost, jednostavnost i ogroman broj paketa za autonomnu navigaciju i umjetnu inteligenciju iz zajednice otvorenog koda.

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

Šta ćete otkriti u ovom projektu?

Upravo ćete otkriti koji se bitni mehanički i elektronički dijelovi moraju čuvati od originalnog 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 kompajliranja koda na Arduinu. Ovo uputstvo će zaključiti na primjeru "zdravo svijeta" kako bi vas upoznalo s ROS -om. Ako vam se nešto čini nejasnim, slobodno postavite pitanje!

Supplies

Elektronika:

1 x Jednokrilni računar 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 470 kOhm 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 stepeni slobode IMU (opcionalno)

1 x LIDAR (opcionalno)

Šasija:

16 x Turtlebot modularne ploče (koje se takođe mogu 3D štampati)

2 x točkovi prečnika 65 mm (opcija širine 6 mm)

4 x najlonski odstojnici 30 mm (opcionalno)

20 x M3 umetci (opcionalno)

Ostali:

Žice

M2.5 i M3 vijci i umetci

3D štampač ili neko ko može odštampati dijelove umjesto vas

Ručna bušilica sa kompletom burgija poput ove

Korak 1: Opis

Opis
Opis
Opis
Opis

Ovaj robot je jednostavan diferencijalni pogon koji koristi 2 kotača direktno 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: sa pogonskom grupom (baterija, motorni kontroler i motori) i elektronikom „niskog nivoa“: Arduino mikrokontroler, regulator napona, prekidači …

gornji sloj: sa elektronikom „visokog nivoa“, naime jednostrukim računarom i LIDAR -om

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

Elektronska 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 preko prekidača sa LED diodom koji pokazuje njegovo stanje UKLJUČENO/ISKLJUČENO.

Ista baterija napaja drugi krug, ulazni napon se pretvara u 5V za napajanje računara sa jednim matičnim računarom. I ovdje je krug omogućen putem prekidača i LED diode.

Dodatni senzori, poput LIDAR -a ili kamere, tada se mogu dodati direktno na Raspberry Pi putem USB -a ili CSI porta.

Mehanički dizajn

Okvir robota sastoji se od 16 identičnih dijelova koji su formirali 2 sloja u kvadratu (širine 28 cm). Mnogo rupa omogućuje postavljanje dodatnih dijelova gdje god vam zatreba i nudi potpuni modularni dizajn. Za ovaj projekt odlučio sam nabaviti originalne TurtleBot3 ploče, 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.

Štampani delovi

Nosač motora rezultira iz dva dijela koji drže motor poput poroka. 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 zaista potrebno, dodatne rupe bi se na kraju mogle koristiti za montažu dodatnih dijelova.

Postavke 3D štampača: svi dijelovi se štampaju sa sljedećim parametrima

  • Mlaznica prečnika 0,4 mm
  • 15% ispune materijala
  • Sloj visine 0,2 mm

Točak

Odabrani kotači prekriveni su gumom kako bi se povećalo prianjanje i osiguralo stanje kotrljanja. Stezni vijak održava točak 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 i gole žice s druge strane.

Imate mogućnost izravnog lemljenja na vašu 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 dioda

Da biste omogućili dva kruga napajanja, 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.

Montaža

Sastavite prethodno izrađene kablove na odgovarajući 3D štampani dio. Za održavanje prekidača koristite maticu, LED diode ne zahtijevaju ljepilo, dovoljno je samo da ih postavite u otvor.

Korak 4: Ožičenje elektronskih ploča

Ožičenje elektronskih ploča
Ožičenje elektronskih ploča
Ožičenje elektronskih ploča
Ožičenje elektronskih ploča
Ožičenje elektronskih ploča
Ožičenje elektronskih 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 'poput Arduina').

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 sa 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.

L298N pin-out

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

smjer kroz 2 digitalna izlaza, nazvana IN1, IN2 za prvi kanal, i 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 korak možete 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 konektor je zatim povezan sa:

  • 5V od regulatora
  • a Zemlja
  • 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 Turtlebot 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.

Distribucija energije

Distribucija energije jednostavno se ostvaruje pomoću barijernog priključnog bloka. Na jednoj strani barijere je pričvršćen kabel sa ž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 sa 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 koristiti "tablicu" koja je prethodno 3D štampana. 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 dok vozite svog robota, jednostavno možete koristiti gumicu za kosu.

Kotačići

To zapravo nije kotač, već jednostavna polu -sfera učvršćena sa 4 vijka na donjem sloju. Dovoljno je osigurati stabilnost robota.

Korak 6: Jednokrilni računar i senzori na gornjem sloju

Računar sa jednom pločom i senzori na gornjem sloju
Računar sa jednom pločom i senzori na gornjem sloju
Računar sa jednom pločom i senzori na gornjem sloju
Računar sa jednom pločom i senzori na gornjem sloju
Računar sa jednom pločom i senzori na gornjem sloju
Računar sa jednom pločom i senzori na gornjem sloju

Koji single board računar izabrati?

Ne moram vam predstavljati slavni Raspberry Pi, njegov broj slučajeva uvelike premašuje polje robotike. No, postoji mnogo snažniji izazivač za Raspberry Pi koji biste mogli zanemariti. Zaista, Jetson Nano iz Nvidije ugrađuje moćnu grafičku karticu sa 128 jezgara pored svog procesora. Ova grafička kartica je 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, stepere …), 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 zahtjev je da ga treba priključiti putem USB -a i postaviti centrirano iznad strukture. Zaista, ako LIDAR nije dobro centriran, karta izrađena pomoću SLAM algoritma može pomaknuti procijenjenu poziciju zidova i prepreka s njihovog stvarnog položaja. Takođe, ako bilo koja prepreka od robota pređe laserski zrak, to će smanjiti domet i vidno polje.

LIDAR montaža

LIDAR je montiran na 3D štampani dio koji slijedi njegov oblik, a sam dio se drži na pravokutnoj ploči (zapravo u šperploči na slici, ali se može i 3D štampati). Zatim adapterski dio omogućava da se ansambl učvrsti 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.

Štaviše, kamera će vam omogućiti pokretanje računarskog vida i skripti za otkrivanje objekata!

Montaža

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 porta za programiranje 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

Kompilirajte Arduino

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

Podesite osnovne postavke

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

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

Treba koristiti samo s Arduino DUE, ako ne komentirate liniju.

#define RATE_CONTROLLER_KP 130.0 // ** PODESITE 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 zupčaniku 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.

/ * Definišite pinove */

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

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

Instalirajte i konfigurirajte ROS

Kada dosegnete ovaj korak, upute su potpuno iste kao i 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 šta je ROS?

ROS je skraćenica od Robots Operating System, na prvi pogled može izgledati prilično složeno, ali nije, zamislite samo način komunikacije između hardvera (senzori i aktuatori) i softvera (algoritmi za navigaciju, upravljanje, računarski 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 tome da daljinski upravljate vašim robotom putem daljinskog računara. Ono što želite učiniti je poslati naredbe brzine kako bi se motori vrtjeli, naredbe slijede ovu cijev:

  • čvor turtlebot_teleop, koji radi na udaljenom računaru, objavljuje temu "/cmd_vel" uključujući poruku Twist
  • ova poruka se prosljeđuje preko ROS mreže poruka na SBC
  • serijski čvor omogućava primanje "/cmd_vel" na Arduino
  • 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 linija! Ako želite detaljnije informacije, samo pogledajte video.

[SBC]

roscore

[SBC]

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

[Udaljeni računar]

izvezi TURTLEBOT3_MODEL = $ {TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Da idemo dalje

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

roslaunch turtlebot3_bringup turtlebot3_robot.launch

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 donjom linijom:

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, te kodirati vid i algoritme strojnog učenja.

Preporučuje se: