Cuprins:

Construiți-vă propriul robot Turtlebot !: 7 pași
Construiți-vă propriul robot Turtlebot !: 7 pași

Video: Construiți-vă propriul robot Turtlebot !: 7 pași

Video: Construiți-vă propriul robot Turtlebot !: 7 pași
Video: [LEGO Mini Robot Film] 37 lego mini robot moc animații 3D și stop motion! 2024, Iulie
Anonim
Construiește-ți propriul robot Turtlebot!
Construiește-ți propriul robot Turtlebot!
Construiește-ți propriul robot Turtlebot!
Construiește-ți propriul robot Turtlebot!
Construiește-ți propriul robot Turtlebot!
Construiește-ți propriul robot Turtlebot!

EDITAȚI | ×:

Informații suplimentare legate de software și control sunt disponibile la acest link:

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

Legătura directă către cod este:

github.com/MattMgn/foxbot_core

De ce acest proiect?

Turtlebot 3 este platforma perfectă pentru adâncirea în electronică, robotică și chiar AI! Vă propun să vă construiți pas cu pas propriul turtlebot cu componente accesibile, fără a sacrifica caracteristicile și performanța. Cu un singur lucru în minte: păstrarea celor mai bune de la robotul inițial, modularitatea, simplitatea și numărul imens de pachete pentru navigație autonomă și AI din comunitatea open-source.

Acest proiect este o oportunitate pentru începători de a dobândi noțiuni de electronică, mecanică și științe informatice și pentru cei mai experimentați de a obține o platformă puternică pentru a testa și dezvolta algoritmi de inteligență artificială.

Ce veți descoperi în acest proiect?

Sunteți pe cale să descoperiți ce părți mecanice și electronice esențiale trebuie păstrate de botul original pentru a garanta compatibilitatea completă.

Întregul proces de construcție va fi detaliat: trecând de la imprimarea pieselor 3D, asamblarea și mai multe componente, lipirea și integrarea electronice până la finalizarea compilării codurilor pe Arduino. Acest instructiv se va încheia pe un exemplu de „salut lume” pentru a vă familiariza cu ROS. Dacă ceva pare neclar, nu ezitați să puneți întrebarea!

Provizii

Electronică:

1 x computer single board pentru a rula ROS, ar putea fi un Raspberry Pi sau un Jetson Nano, de exemplu

1 x Arduino DUE, puteți utiliza și UNO sau MEGA

1 x Proto-placă care se potrivește cu pin-out-ul Arduino DUE disponibil aici

2 motoare 12 x DC cu codificatoare (opțiune 100 RPM)

1 x driver motor L298N

2 x 5V regulator

1 x baterie (baterie LiPo 3S / 4S de exemplu)

2 comutatoare ON / OFF

2 x LED

2 rezistențe de 470kOhm

Conectori JST de 3 x 4 pini

1 x cablu USB (cel puțin unul între SBC și Arduino)

Senzori:

1 x senzor de curent (opțional)

1 x 9 grade IMU de libertate (opțional)

1 x LIDAR (opțional)

Şasiu:

16 plăci modulare Turtlebot (care pot fi imprimate și 3D)

2 x roti diametru 65mm (opțiune lățime 6mm)

4 x distanțiere din nailon 30mm (opțional)

20 x inserții M3 (opțional)

Alții:

Fire

Șuruburi și inserții M2.5 și M3

Imprimantă 3D sau cineva care poate imprima piesele pentru dvs.

Un burghiu manual cu un set de burghie ca acesta

Pasul 1: Descriere

Descriere
Descriere
Descriere
Descriere

Acest robot este o acționare diferențială simplă care folosește 2 roți montate direct pe motorul lor și o ruletă care este plasată în spate pentru a preveni căderea robotului. Robotul este împărțit în două straturi:

Stratul inferior: cu grupul de propulsie (baterie, controler de motor și motoare) și electronica de „nivel scăzut”: microcontroler Arduino, regulator de tensiune, comutatoare …

Stratul superior: cu dispozitivul electronic „de nivel înalt” și anume computerul cu placă unică și LIDAR

Aceste straturi sunt legate cu piese și șuruburi imprimate pentru a asigura robustețea structurii.

Schemă electronică

Schema ar putea părea cam dezordonată. Este un desen schematic și nu reprezintă toate firele, conectorii și placa proto, dar poate fi citit după cum urmează:

O baterie 3S Litihum Ion Polymer cu o capacitate de 3000mAh alimentează primul circuit, alimentează atât placa de control a motorului (L298N), cât și un prim regulator de 5V pentru codificatoarele de motor și Arduino. Acest circuit este activat printr-un comutator cu un LED care indică starea ON / OFF.

Aceeași baterie alimentează un al doilea circuit, tensiunea de intrare este convertită la 5V pentru a alimenta computerul cu placă unică. Aici, circuitul este activat printr-un comutator și un LED.

Senzori suplimentari, cum ar fi un LIDAR sau o cameră, pot fi apoi adăugați direct pe Raspberry Pi prin USB sau prin portul CSI.

Design mecanic

Cadrul robotului este compus din 16 părți identice care au format 2 straturi pătrate (lățime de 28cm). Numeroasele găuri permit montarea de piese suplimentare oriunde ai nevoie și oferă un design modular complet. Pentru acest proiect, am decis să obțin plăcile originale TurtleBot3, dar le puteți imprima și 3D, deoarece designul lor este open source.

Pasul 2: Ansamblu bloc motor

Ansamblu bloc motor
Ansamblu bloc motor
Ansamblu bloc motor
Ansamblu bloc motor
Ansamblu bloc motor
Ansamblu bloc motor

Pregătirea motorului

Primul pas este să adăugați bandă de spumă de 1 mm grosime în jurul fiecărui motor pentru a preveni vibrațiile și zgomotul atunci când motorul se rotește.

Piese tipărite

Suportul motorului are ca rezultat două părți care prind motorul ca un menghină. 4 șuruburi realizate pentru a strânge motorul în suport.

Fiecare suport este compus din mai multe găuri care găzduiesc inserții M3 pentru a fi montate pe structură. Există mai multe găuri decât este de fapt necesar, găurile suplimentare putând fi utilizate în cele din urmă pentru a monta o parte suplimentară.

Setările imprimantei 3D: toate piesele sunt tipărite cu următorii parametri

  • Duza de 0,4 mm diametru
  • 15% umplutură de material
  • Strat de 0,2 mm înălțime

Roată

Roțile alese sunt acoperite cu cauciuc pentru a maximiza aderența și a asigura o stare de rulare fără alunecare. Un șurub de prindere menține roata montată pe arborele motorului. Diametrul roții trebuie să fie suficient de mare pentru a traversa nereguli minore în trepte și sol (acele roți au un diametru de 65 mm).

Fixare

După ce ați terminat cu un bloc motor, repetați operațiile anterioare și apoi fixați-le pur și simplu în strat cu șuruburi M3.

Pasul 3: Comutatoare și pregătirea cablului

Comutatoare și pregătirea cablurilor
Comutatoare și pregătirea cablurilor
Comutatoare și pregătirea cablurilor
Comutatoare și pregătirea cablurilor
Comutatoare și pregătirea cablurilor
Comutatoare și pregătirea cablurilor

Pregătirea cablului motorului

În general, codificatorul motorului vine cu un cablu care include pe o parte un conector de 6 pini care conectează partea din spate a PCB-ului codificatorului și fire goale pe cealaltă parte.

Aveți posibilitatea să le lipiți direct pe placa proto sau chiar pe Arduino, dar vă recomand să utilizați în schimb anteturi pin feminine și conectori JST-XH. Astfel, le puteți conecta / deconecta de pe placa dvs. proto și ușura asamblarea.

Sfaturi: puteți adăuga o împletitură extensibilă în jurul firelor și bucăți de tub micșorat lângă conectori, astfel veți obține un cablu „curat”.

Comutator și LED

Pentru a activa cele două circuite de alimentare, pregătiți 2 LED-uri și comutați cablurile: la început lipiți un rezistor de 470kOhm pe unul dintre pinii LED-uri, apoi lipiți LED-ul pe unul dintre pinii comutatorului. Aici, de asemenea, puteți utiliza o bucată de tub micșorat pentru a ascunde rezistența din interior. Aveți grijă să lipiți LED-ul în direcția corectă! Repetați această operație pentru a obține două cabluri de comutare / led.

Asamblare

Asamblați cablurile realizate anterior pe partea imprimată 3D corespunzătoare. Folosiți o piuliță pentru a menține comutatorul, LED-urile nu necesită lipici, ci doar o forță suficientă pentru a se potrivi în gaură.

Pasul 4: Cablarea plăcilor electronice

Cablarea plăcilor electronice
Cablarea plăcilor electronice
Cablarea plăcilor electronice
Cablarea plăcilor electronice
Cablarea plăcilor electronice
Cablarea plăcilor electronice

Dispunerea plăcilor

O proto-placă care se potrivește cu aspectul plăcii Arduino este utilizată pentru a reduce numărul de fire. În partea superioară a proto-plăcii, L298N este stivuit cu antet feminin Dupont (Dupont sunt anteturi „Arduino like”).

Pregătirea L298N

Inițial, placa L298N nu vine cu antetul Dupont masculin corespunzător, trebuie să adăugați un rând de 9 pini sub placă. Trebuie să realizați 9 găuri cu burghiu cu diametrul de 1 mm în paralel cu găurile existente, după cum puteți vedea în imagine. Apoi legați pinii corespunzători ai celor 2 rânduri cu materiale de lipit și fire scurte.

L298N pin-out

L298N este compus din 2 canale care permit controlul vitezei și direcției:

direcție prin 2 ieșiri digitale, numite IN1, IN2 pentru primul canal și IN3 și IN4 pentru al doilea

viteza prin 1 ieșiri digitale, numită ENA pentru primul canal și ENB pentru al doilea

Am ales următorul pin-out cu Arduino:

motor stânga: IN1 la pinul 3, IN2 la pinul 4, ENA la pinul 2

motorul drept: IN3 pe pinul 5, IN4 pe pinul 6, ENB pe pinul 7

Regulator 5V

Chiar dacă l298N este în mod normal capabil să furnizeze 5V, totuși adaug un regulator mic. Alimentează Arduino prin portul VIN și cele 2 codificatoare de pe motoare. Puteți sări peste acest pas folosind direct regulatorul încorporat L298N 5V.

Conectori JST și codificator pin-out

Utilizați adaptoare de conector femelă cu 4 pini JST-XH, fiecare conector este apoi conectat la:

  • 5V de la regulator
  • un sol
  • două porturi de intrare digitale (de exemplu: 34 și 38 pentru codificatorul din dreapta și 26 și 30 pentru cel din stânga)

I2C suplimentar

După cum probabil ați observat, există un conector JST suplimentar de 4 pini pe placa proto. Este folosit pentru conectarea dispozitivului I2C ca un IMU, puteți face același lucru și chiar puteți adăuga propriul port.

Pasul 5: Motor Group și Arduino pe stratul inferior

Motor Group și Arduino pe stratul inferior
Motor Group și Arduino pe stratul inferior
Motor Group și Arduino pe stratul inferior
Motor Group și Arduino pe stratul inferior
Motor Group și Arduino pe stratul inferior
Motor Group și Arduino pe stratul inferior

Fixarea blocurilor motor

Odată ce stratul inferior este asamblat cu cele 8 plăci Turtlebot, pur și simplu folosiți 4 șuruburi M3 direct în inserții pentru a menține blocurile motorului. Apoi, puteți conecta firele de alimentare ale motorului la ieșirile L298N și cablurile realizate anterior la conectorii JST proto-board.

Distributia puterii

Distribuția de energie se realizează pur și simplu cu un bloc terminal de barieră. Pe o parte a barierei, un cablu cu mufă XT60 este înșurubat pentru a se conecta la bateria LiPo. Pe de altă parte, cele două cabluri LED / comutatoare lipite anterior sunt înșurubate. Astfel, fiecare circuit (Motor și Arduino) ar putea fi activat cu propriul comutator și cu LED-ul verde corespunzător.

Organizare de cabluri

Repede va trebui să vă ocupați de o mulțime de cabluri! Pentru a reduce aspectul dezordonat, puteți utiliza „tabelul” imprimat anterior 3D. Pe masă, mențineți-vă plăcile electronice cu bandă dublă, iar sub masă lăsați firele să curgă liber.

Întreținerea bateriei

Pentru a evita ejectarea bateriei atunci când conduceți robotul, puteți utiliza pur și simplu o bandă elastică pentru păr.

Rola cu role

Nu chiar o ruletă, ci o simplă jumătate de sferă fixată cu 4 șuruburi pe stratul inferior. Este suficient pentru a asigura stabilitatea robotului.

Pasul 6: Computer cu placă unică și senzori pe stratul superior

Computer cu placă unică și senzori pe stratul superior
Computer cu placă unică și senzori pe stratul superior
Computer cu placă unică și senzori pe stratul superior
Computer cu placă unică și senzori pe stratul superior
Computer cu placă unică și senzori pe stratul superior
Computer cu placă unică și senzori pe stratul superior

Ce computer de bord unic să alegeți?

Nu trebuie să vă prezint faimosul Raspberry Pi, numărul cazurilor sale de utilizare depășește în mare măsură domeniul roboticii. Dar există un provocator mult mai puternic pentru Raspberry Pi pe care l-ați putea ignora. Într-adevăr, Jetson Nano de la Nvidia încorporează pe lângă procesorul său o placă grafică puternică de 128 de nuclee. Această placă grafică specială a fost dezvoltată pentru a accelera sarcini de calcul scumpe, cum ar fi procesarea imaginilor sau inferența rețelei neuronale.

Pentru acest proiect am ales Jetson Nano și puteți găsi partea 3D corespunzătoare printre fișierele atașate, dar dacă doriți să mergeți cu Raspberry Pi, există multe cazuri de imprimat aici.

Regulator 5V

Orice placă ați decis să aduceți pe robotul dvs., aveți nevoie de un regulator de 5V. Cel mai recent Raspberry Pi 4 necesită 1,25A max, dar Jetson Nano necesită până la 3A la stres, așa că am optat pentru Pololu 5V 6A pentru a avea o rezervă de putere pentru componentele viitoare (senzori, lumini, trepte …), dar orice 5V 2A ieftin ar trebui să facă treaba. Jetson utilizează un butoi DC de 5,5 mm, iar Pi un micro USB, apucă cablul corespunzător și lipiți-l la ieșirea regulatorului.

Aspect LIDAR

LIDAR-ul folosit aici este LDS-01, există diverse altele LIDAR 2D care ar putea fi utilizate precum RPLidar A1 / A2 / A3, YDLidar X4 / G4 sau chiar LIDAR-uri Hokuyo. Singura cerință este ca acesta să fie conectat prin USB și să fie plasat centrat deasupra structurii. Într-adevăr, dacă LIDAR nu este bine centrat, harta creată de algoritmul SLAM poate schimba poziția estimată a zidurilor și obstacolelor din poziția lor reală. De asemenea, dacă obstacole din robot traversează fasciculul laser, acesta va reduce autonomia și câmpul vizual.

Montare LIDAR

LIDAR este montat pe o parte tipărită 3D care îi urmează forma, partea în sine este ținută pe o placă dreptunghiulară (de fapt în placaj pe imagine, dar ar putea fi imprimată și 3D). Apoi, o piesă de adaptor permite fixarea ansamblului pe placa superioară turtlebot cu distanțiere din nailon.

Camera ca senzor suplimentar sau înlocuitor LIDAR

Dacă nu doriți să cheltuiți prea mulți bani într-un LIDAR (care costă în jur de 100 USD), alegeți o cameră: există și algoritmi SLAM care rulează numai cu o cameră RGB monoculară. Ambele SBC acceptă camere USB sau CSI.

Mai mult decât atât, camera vă va permite să rulați scripturi de vizualizare computerizată și de detectare a obiectelor!

Asamblare

Înainte de a închide robotul, treceți cablurile prin găurile mai mari din placa superioară:

  • cablul corespunzător de la regulatorul de 5V la SBC
  • cablul USB de la portul de programare al Arduino DUE (cel mai apropiat de butoiul DC) la un port USB al SBC

Apoi țineți placa superioară în poziție cu o duzină de șuruburi. Robotul dvs. este acum gata să fie programat, BINE FĂCUT!

Pasul 7: Make It Move

Compilați Arduino

Deschideți IDE-ul dvs. preferat Arduino și importați folderul proiectului numit own_turtlebot_core, apoi selectați placa și portul corespunzător, puteți consulta acest excelent tutorial.

Reglați setările Core

Proiectul este compus din două fișiere și unul trebuie să fie adaptat robotului dvs. Deci, să deschidem own_turtlebot_config.h și să descoperim ce linii necesită atenția noastră:

#define ARDUINO_DUE // ** COMENTAȚI ACEASTA LINIE DACĂ NU UTILIZAȚI UN DAT **

Ar trebui utilizat numai cu Arduino DUE, dacă nu comentează linia.

#define RATE_CONTROLLER_KP 130.0 // ** TUNE ACEASTA VALOARE **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** TUNE ACEASTA VALOARE ** #define RATE_CONTROLLER_KI 0,00005 // ** TUNE ACEASTA VALOR **

Acești 3 parametri corespund câștigurilor controlerului de viteză utilizate de PID pentru a menține viteza dorită. În funcție de tensiunea bateriei, de masa robotului, de diametrul roții și de angrenajul mecanic al motorului, va trebui să le adaptați valorile. PID este un controler clasic și nu veți fi detaliat aici, dar acest link ar trebui să vă ofere suficiente intrări pentru a vă regla propriile.

/ * Definiți pini * /

// motorul A (dreapta) octet const motorRightEncoderPinA = 38; // ** MODIFICĂ CU PIN-UL TĂU NB ** const octet motorRightEncoderPinB = 34; // ** MODIFICĂ CU PIN-UL TĂU NB ** const octet enMotorRight = 2; // ** MODIFICĂ CU PIN-UL TĂU NB ** octet const în1MotorRight = 4; // ** MODIFICĂ CU PIN-UL TĂU NB ** const octet in2MotorRight = 3; // ** MODIFICAȚI CU PIN-UL Dvs. NB ** // motorul B (stânga) octet const motorLeftEncoderPinA = 26; // ** MODIFICĂ CU PIN-UL TĂU NB ** const octet motorLeftEncoderPinB = 30; // ** MODIFICĂ CU PIN-UL TĂU NB ** const octet enMotorLeft = 7; // ** MODIFICĂ CU PIN-UL TĂU NB ** const octet în1MotorLeft = 6; // ** MODIFICĂ CU PIN-UL TĂU NB ** const octet in2MotorLeft = 5; // ** MODIFICAȚI CU PIN-ul Dvs. NB **

Acest bloc definește pinout-ul între L298N și Arduino, pur și simplu modificați numărul pinului pentru a se potrivi cu al dvs. După ce ați terminat cu fișierul de configurare, compilați și încărcați codul!

Instalați și configurați ROS

Odată ce ați ajuns la acest pas, instrucțiunile sunt exact aceleași cu cele detaliate în manualul excelent al TurtleBot3, trebuie să urmați scrupulos

bravo TurtleBot 3 este acum al tău și poți rula toate pachetele și tutorialele existente cu ROS.

Ok, dar ce este ROS?

ROS înseamnă Robots Operating System, ar putea părea destul de complex la început, dar nu este, imaginați-vă doar o modalitate de comunicare între hardware (senzori și actuatori) și software (algoritmi pentru navigație, control, viziune computerizată …). De exemplu, puteți schimba cu ușurință LIDAR-ul curent cu un alt model fără a vă întrerupe configurarea, deoarece fiecare LIDAR publică același mesaj LaserScan. ROS este utilizat pe scară largă este robotica, Rulați primul exemplu

Echivalentul „hello world” pentru ROS constă în teleoperarea robotului dvs. prin intermediul computerului la distanță. Ceea ce doriți să faceți este să trimiteți comenzi de viteză pentru a face motoarele să se rotească, comenzile urmează această conductă:

  • un nod turtlebot_teleop, care rulează pe computerul de la distanță, publică un subiect „/ cmd_vel”, inclusiv un mesaj Twist
  • acest mesaj este redirecționat prin rețeaua de mesaje ROS către SBC
  • un nod serial permite primirea „/ cmd_vel” pe Arduino
  • Arduino citește mesajul și setează rata unghiulară pe fiecare motor pentru a se potrivi cu viteza liniară și unghiulară dorită a robotului

Această operațiune este simplă și poate fi realizată prin rularea liniilor de comandă enumerate mai sus! Dacă doriți informații mai detaliate, urmăriți videoclipul.

[SBC]

roscore

[SBC]

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

[Computer la distanță]

export TURTLEBOT3_MODEL = $ {TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

A merge mai departe

Trebuie să știți un ultim lucru înainte de a încerca toate exemplele oficiale, în manual de fiecare dată când vă confruntați cu această comandă:

roslaunch turtlebot3_bringup turtlebot3_robot.launch

în schimb, trebuie să rulați această comandă pe SBC:

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

Și dacă aveți un LIDAR, executați comanda asociată pe SBC, în cazul meu, execut un LDS01 cu linia de mai jos:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

Și atât, v-ați construit definitiv propriul turtlebot:) Sunteți gata să descoperiți capacitățile fantastice ale ROS și să codificați viziunea și algoritmii de învățare automată.

Recomandat: