Cuprins:

Robot avansat de urmărire a liniei: 22 de pași (cu imagini)
Robot avansat de urmărire a liniei: 22 de pași (cu imagini)

Video: Robot avansat de urmărire a liniei: 22 de pași (cu imagini)

Video: Robot avansat de urmărire a liniei: 22 de pași (cu imagini)
Video: 😱 ERA SA-SI PIARDA VEDEREA !! 2024, Iulie
Anonim
Image
Image
Prototipare - Perfboard
Prototipare - Perfboard

Acesta este un robot avansat care urmărește linia, bazat pe senzorul de linie Teensy 3.6 și QTRX, pe care l-am construit și la care lucrez de ceva timp. Există câteva îmbunătățiri majore în design și performanță de la robotul meu de linie anterioară. Viteza și răspunsul robotului s-au îmbunătățit. Structura generală este compactă și ușoară. Componentele sunt aranjate aproape de axa roții, astfel încât să minimizeze impulsul unghiular. Motoarele cu transmisie micro metalică de mare putere asigură cuplul adecvat, iar roțile din silicon din butuc din aluminiu oferă o tracțiune foarte necesară la viteze mari. Scuturile și codificatoarele de roți permit robotului să-i determine poziția și orientarea. Cu Teensyview montat la bord, toate informațiile relevante pot fi vizualizate și parametrii importanți ai programului pot fi actualizați folosind butoane.

Pentru a începe construirea acestui robot, veți avea nevoie de următoarele consumabile (și mult timp și răbdare la dispoziția dvs.).

Provizii

Electronică

  • Consiliul de dezvoltare Teensy 3.6
  • Scut Prop cu senzori de mișcare
  • Sparkfun TeensyView
  • Pololu QTRX-MD-16A Matrice de senzori de reflexie
  • PCB prototip pe două fețe de 15x20cm
  • Regulator de tensiune Step-Up / Step-Down Pololu S9V11F3S5
  • Regulator de tensiune reglabil 4-5-20V Pololu U3V70A
  • Micromotoare MP12 6V 1580 rpm cu codificator (x2)
  • DRV8833 Suport pentru șofer cu motor dublu (x2)
  • Baterie Li-Po de 3,7 V, 750 mAh
  • Comutator PORNIT / OPRIT
  • Condensator electrolitic 470uF
  • Condensator electrolitic 1000uF (x2)
  • Condensator ceramic 0.1uF (x5)
  • Butoane (x3)
  • LED verde de 10 mm (x2)

Hardware

  • Roată din silicon Atom 37x34mm (x2)
  • Rola cu bile Pololu cu bile metalice de 3/8”
  • Suport motor N20 (x2)
  • Șurub și piulițe

Cabluri și conectori

  • Firuri flexibile 24AWG
  • 24 pin FFC to DIP breakout și cablu FFC (tip A, lungime 150mm)
  • Antet rotund cu pin feminin
  • Terminal lung rotund cu antet feminin
  • Antet unghiular feminin cu două rânduri
  • Antet drept masculin cu unghi drept
  • Antet pin masculin
  • Antet pentru acul masculin

Instrumente

  • Multimetru
  • Ciocan de lipit
  • Sârmă de lipit
  • Dispozitiv de sârmă
  • Cleste de sarma

Pasul 1: Prezentare generală a sistemelor

Ca și în cazul proiectării mele anterioare a unui robot de auto-echilibrare, acest robot este un ansamblu de plăci de rupere montate pe o placă de perfecționare care servește și scopului unei structuri.

Principalele sisteme ale robotului sunt prezentate mai jos.

Microcontroler: placă de dezvoltare Teensy 3.6 cu procesor ARM Cortex-M4 pe 32 de biți de 180 MHz.

Senzor de linie: QTRX-MD-16A de la Pololu matrice de senzori de ieșire analogică cu 16 canale în aranjament de densitate medie (pas de senzor de 8 mm).

Unitate: 6V, 1580 rpm, motoare cu transmisie micro metalică de mare putere, cu codor magnetic pentru roți și roți din silicon montate pe butucuri din aluminiu.

Odometrie: perechi de codere magnetice pentru roți pentru estimarea coordonatelor și a distanței parcurse.

Senzor de orientare: Scut de protecție cu senzori de mișcare pentru estimarea poziției și direcției robotului.

Alimentare: baterie lipo de 3,7 V, 750 mAh ca sursă de alimentare. Regulatorul de ridicare / coborâre de 3,3 V alimentează microcontrolerul, senzorii și dispozitivul de afișare. Regulatorul de reglare reglabil alimentează cele două motoare.

Interfață utilizator: Teensyview pentru afișarea informațiilor. Breakout cu trei butoane pentru acceptarea intrărilor utilizatorului. Două numere de LED-uri verzi cu diametrul de 10 mm pentru indicarea stării în timpul rulării.

Pasul 2: Să începem prototiparea

Image
Image

Vom implementa circuitul de mai sus pe perfboard. Mai întâi trebuie să menținem plăcile de rupere pregătite prin lipirea antetelor pe ele. Videoclipul va oferi o idee cu privire la anteturile care ar trebui lipite pe ce plăci.

După ce lipiți anteturile pe panourile de rupere, stivați Teensyview și butonul de rupere pe partea de sus a Teensy.

Pasul 3: Prototipare - Perfboard

Prototipare - Perfboard
Prototipare - Perfboard

Obțineți prototipul dublu lateral de 15x20cm și marcați limita cu un marker permanent așa cum se arată în imagine. Găuriți găuri de dimensiuni M2 pentru montarea setului de senzori, roata rotativă și motoarele cu roți dințate micro-metalice în locații marcate cu un cerc alb. Mai târziu, vom tăia panoul de bord de-a lungul limitei după lipire și testarea tuturor componentelor.

Vom începe prototiparea prin lipirea știfturilor și soclurilor antet de pe panoul de perfecționare. Plăcile de rupere vor fi introduse ulterior pe aceste anteturi. Acordați o atenție deosebită poziției antetelor pe panoul de perfecționare. Vom conecta toate firele pe baza acestui aspect al antetelor.

Pasul 4: Prototipare - Scut Prop

Prototipare - Scut Prop
Prototipare - Scut Prop
Prototipare - Scut Prop
Prototipare - Scut Prop
Prototipare - Scut Prop
Prototipare - Scut Prop
Prototipare - Scut Prop
Prototipare - Scut Prop

Mai întâi vom lipi conexiunile la scutul de prop. Deoarece folosim doar senzorii de mișcare ai scutului de prop, trebuie să conectăm numai pinii SCL, SDA și IRQ în afară de pinii de 3V și de masă ai scutului de prop.

Odată ce conexiunea este completă, introduceți Teensy și scutul de prop și calibrați senzorii de mișcare urmând pașii menționați aici.

Pasul 5: Prototipare - Putere și masă

Prototipare - Putere și masă
Prototipare - Putere și masă

Lipiți toate conexiunile de alimentare și de masă referitoare la imagine. Introduceți toate plăcile de rupere în poziție și asigurați continuitatea folosind un multimetru. Verificați diferitele niveluri de tensiune la bord.

  • Tensiune de ieșire Li-po (de obicei între 3V și 4,2V)
  • Tensiunea de ieșire a regulatorului de urcare / coborâre (3,3 V)
  • Tensiunea de ieșire a regulatorului step-up reglabil (setată la 6V)

Pasul 6: Prototipare - Suport pentru șoferul motorului

Prototipare - Suport pentru șofer de motor
Prototipare - Suport pentru șofer de motor
Prototipare - Suport pentru șofer de motor
Prototipare - Suport pentru șofer de motor
Prototipare - Suport pentru șofer de motor
Prototipare - Suport pentru șofer de motor

Placa de transport DRV8833 cu motor dublu poate furniza curenți de vârf de 1,2 A continuu și 2 A pe canal. Vom conecta cele două canale în paralel pentru a acționa un motor. Lipiți conexiunile urmând pașii de mai jos.

  • Paralelați cele două intrări și cele două ieșiri ale suportului șoferului motorului, așa cum se arată în imagine.
  • Conectați firele de control de intrare la driverul motorului.
  • Conectați un condensator electrolitic 1000uF și un condensator ceramic 0,1uF pe terminalele Vin și Gnd ale celor două plăci purtătoare.
  • Conectați un condensator ceramic 0.1uF la terminalele de ieșire ale driverului motorului.

Pasul 7: Prototipare - antetul matricei senzorului de linie

Prototipare - antetul matricei senzorului de linie
Prototipare - antetul matricei senzorului de linie
Prototipare - antetul matricei senzorului de linie
Prototipare - antetul matricei senzorului de linie
Prototipare - antetul matricei senzorului de linie
Prototipare - antetul matricei senzorului de linie
Prototipare - antetul matricei senzorului de linie
Prototipare - antetul matricei senzorului de linie

Teensy 3.6 are două ADC - ADC0 și ADC1 care sunt multiplexate la 25 de pini accesibile. Putem accesa oricare doi pini din cele două ADC-uri în același timp. Vom conecta opt senzori de linie fiecare la ADC0 și ADC1. Senzorii de număr par vor fi conectați la ADC1 și senzorii de număr impar la ADC0. Lipiți conexiunile urmând pașii de mai jos. Ulterior vom conecta senzorul de linie folosind adaptorul și cablul FFC la DIP.

  • Conectați toți pinii uniformi ai senzorului (16, 14, 12, 10, 8, 6, 4, 2) așa cum se arată în imagine. Treceți firul pentru conectarea pinului 12 al senzorului prin partea din spate a panoului de perfecționare.
  • Conectați pinul de control al emițătorului (EVEN) la pinul Teensy 30.
  • Conectați toți pinii senzorilor impari (15, 13, 11, 9, 7, 5, 3, 1) așa cum se arată în imagine.
  • Conectați un condensator electrolitic 470uF pe Vcc și Gnd.

Dacă observați îndeaproape pinii senzorului de linie și pinii corespunzători ai antetului pe perboard, veți observa că rândul superior al senzorului de linie se mapează pe rândul inferior al antetului pe perboard și invers. Acest lucru se datorează faptului că atunci când conectăm senzorul de linie la perfboard folosind anteturi cu unghi drept cu două rânduri, rândurile se vor alinia corect. Mi-a luat destul timp să descopăr acest lucru și să corectez atribuțiile de pin în program.

Pasul 8: Prototipare - Motor și codificator cu micro reductor

Prototipare - Micro Gear Motor și Encoder
Prototipare - Micro Gear Motor și Encoder
  • Fixați motorul de transmisie micro metal cu codificator folosind suporturi pentru motor N20.
  • Conectați firele motorului și codificatorului așa cum se arată în imagine.
  • Codificator stâng - pinii Teensy 4 și 0
  • Codificator drept - pinii Teensy 9 și 27

Pasul 9: Prototipare - LED-uri

Prototipare - LED-uri
Prototipare - LED-uri
Prototipare - LED-uri
Prototipare - LED-uri

Cele două LED-uri indică dacă robotul a detectat sau nu un viraj. Am folosit un rezistor din seria 470-ohm pentru a conecta LED-urile la Teensy.

  • Anod LED stâng la pinul Teensy 6
  • Anod LED dreapta la pinul Teensy 8

Pasul 10: Prototipare - Breakouts

Image
Image
Prototipare - Breakouts
Prototipare - Breakouts

Acum, după ce am finalizat toate lipirile noastre pe panoul de perfecționare, putem tăia cu atenție de-a lungul limitei marcate pe panoul de perfecționare și putem elimina bucățile suplimentare de panou de perfecționare. De asemenea, atașați cele două roți și roata rotativă.

Introduceți toate plăcile de rupere în prizele respective. Pentru introducerea breakout-ului FFC-DIP și pentru fixarea senzorului de linie QTRX-MD-16A, consultați videoclipul.

Pasul 11: Prezentare generală a bibliotecilor software

Prezentare generală a bibliotecilor software
Prezentare generală a bibliotecilor software

Vom programa Teensy în Arduino IDE. Vom avea nevoie de niște biblioteci înainte de a începe. Bibliotecile pe care le vom folosi sunt:

  • Codificator
  • Teensyview
  • EEPROM
  • ADC
  • NXPMotionSense

Și unele care au fost scrise special pentru acest robot,

  • Apasa butonul
  • LineSensor
  • TeensyviewMenu
  • Motoare

Bibliotecile specifice acestui robot sunt discutate în detaliu și sunt disponibile pentru descărcare în pașii următori.

Pasul 12: Bibliotecile explicate - PushButton

Această bibliotecă este pentru interfațarea plăcii de separare a butonului cu Teensy. Funcțiile utilizate sunt

PushButton (int leftButtonPin, int centreButtonPin, int rightButtonPin);

Apelarea acestui constructor prin crearea unui obiect configurează pinii butonului în modul INPUT_PULLUP.

int8_t waitForButtonPress (nul);

Această funcție așteaptă până când este apăsat și eliberat un buton și returnează codul tastei.

int8_t getSingleButtonPress (void);

Această funcție verifică dacă un buton este apăsat și eliberat. Dacă da, returnează codul cheie altfel returnează zero.

Pasul 13: Biblioteci explicate - Senzor de linie

LineSensor este biblioteca pentru interfațarea matricei de senzori de linie cu Teensy. Următoarele sunt funcțiile utilizate.

LineSensor (nul);

Apelarea acestui constructor prin crearea unui obiect inițializează ADC0 și ADC1, citește valorile de prag, minime și maxime din EEPROM și configurează pinii senzorului în modul de intrare și pinul de control al emițătorului în modul de ieșire.

void calibrate (uint8_t calibrationMode);

Această funcție calibrează senzorii de linie. Modul calibration poate fi MIN_MAX sau MEDIAN_FILTER. Această funcție este explicată în detaliu într-un pas ulterior.

void getSensorsAnalog (uint16_t * sensorValue, modul uint8_t);

Citește matricea senzorului în oricare dintre cele trei moduri transmise ca argument. Modul este starea emițătorilor și poate fi ON, OFF sau TOGGLE. Modul TOGGLE compensează citirile senzorilor de reflectanță datorită luminii ambientale. Senzorii conectați la ADC0 și ADC1 sunt citite sincron.

int getLinePosition (uint16_t * sensorValue);

Calculează poziția matricei de senzori peste linie prin metoda medie ponderată.

uint16_t getSensorsBinary (uint16_t * sensorValue);

Returnează o reprezentare pe 16 biți a stării senzorilor. Unul binar indică faptul că senzorul este peste linie și un zero binar indică faptul că senzorul este în afara liniei.

uint8_t countBinary (uint16_t binaryValue);

Trecerea reprezentării pe 16 biți a valorilor senzorului către această funcție returnează numărul de senzori care sunt peste linie.

void getSensorsNormalized (uint16_t * sensorValue, modul uint8_t);

Citește valorile senzorului și constrânge fiecare valoare a senzorului la valorile minime și maxime corespunzătoare. Valorile senzorului sunt apoi mapate de la intervalul lor corespunzător min la maxim la intervalul 0 la 1000.

Pasul 14: Bibliotecile explicate - TeensyviewMenu

TeensyviewMenu este biblioteca unde pot fi accesate funcțiile pentru meniul de afișare. Următoarele sunt funcțiile utilizate.

TeensyViewMenu (nul);

Apelarea acestui constructor creează un obiect din clasa LineSensor, PushButton și TeensyView.

void intro (nul);

Aceasta este pentru navigarea în meniu.

test nul (nul);

Aceasta se apelează intern în meniu atunci când valorile senzorului de linie trebuie afișate pe Teensyview pentru testare.

Pasul 15: Biblioteci explicate - Motoare

Motors este biblioteca utilizată pentru acționarea celor două motoare. Următoarele sunt funcțiile utilizate.

Motoare (nul);

Apelarea acestui constructor prin crearea unui obiect configurează controlul direcției motorului și pinii de control PWM în modul de ieșire.

void setSpeed (int leftMotorSpeed, int rightMotorSpeed);

Apelarea acestei funcții conduce cele două motoare la viteze trecute ca argumente. Valoarea vitezei poate varia de la -255 la +255 cu un semn negativ care indică faptul că sensul de rotație este inversat.

Pasul 16: Testarea - Odometria codificatorului

Vom testa codificatoarele magnetice ale roților și vom afișa poziția și distanța parcurse de robot.

Încărcați DualEncoderTeensyview.ino. Programul afișează bifele codificatorului pe Teensyview. Codificatorul bifează creșterea dacă mutați robotul înainte și scade dacă îl mutați înapoi.

Acum încărcați EncoderOdometry.ino. Acest program afișează poziția robotului în ceea ce privește coordonatele x-y, afișează distanța totală parcursă în centimetri și unghiul rotit în grade.

Am făcut referire la Implementarea calculului mort prin odometrie pe un robot cu servo diferențial R / C de către Seattle Robotics Society pentru determinarea poziției din căpușele codificatorului.

Pasul 17: Testare - Senzori de mișcare a scutului

Asigurați-vă că ați calibrat senzorii de mișcare urmând pașii menționați aici.

Acum încărcați PropShieldTeensyView.ino. Ar trebui să puteți vedea valorile accelerometrului, giroscopului și magnetometrului tuturor celor trei axe pe Teensyview.

Pasul 18: Prezentare generală a programului

Programul pentru urmăritorul de linie avansat este scris în Arduino IDE. Programul funcționează în următoarea secvență explicată mai jos.

  • Valorile stocate în EEPROM sunt citite și se afișează meniul.
  • La apăsarea LAUNCH, programul intră în buclă.
  • Se citesc valorile normalizate ale senzorului de linie.
  • Valoarea binară a poziției liniei se obține folosind valorile normalizate ale senzorului.
  • Numărul numărului de senzori care sunt peste linie este calculat din valoarea binară a poziției liniei.
  • Ticurile codificatorului sunt actualizate și distanța totală parcursă, coordonatele x-y și unghiul sunt actualizate.
  • Pentru diferite valori ale numărului binar variind de la 0 la 16, se execută un set de instrucțiuni. Dacă numărul binar este în intervalul 1-5 și dacă senzorii care sunt peste linie sunt adiacenți unul cu celălalt, se apelează rutina PID. Rotația se realizează în alte combinații de valoare binară și număr binar.
  • În rutina PID (care este de fapt o rutină PD), motoarele sunt acționate la viteze calculate pe baza erorii, modificării erorii, valorilor Kp și Kd.

În prezent, programul nu măsoară valorile de orientare de la scutul de prop. Aceasta este o lucrare în curs și este în curs de actualizare.

Încărcați TestRun20.ino. Vom vedea cum să navigăm în meniu, să ajustăm setările și cum să calibrăm senzorii de linie în următorii pași după care vom testa robotul nostru.

Pasul 19: Navigarea în meniu și setări

Meniul are următoarele setări care pot fi navigate folosind butoanele stânga și dreapta și selectate folosind butonul central. Setările și funcțiile lor sunt descrise mai jos.

  1. CALIBRARE: Pentru a calibra senzorii de linie.
  2. TEST: Pentru a afișa valorile senzorului de linie.
  3. LANSARE: Pentru a începe următoarea linie.
  4. VITEZA MAXIMĂ: Pentru a seta limita superioară a vitezei robotului.
  5. VITEZA DE ROTARE: Pentru a seta limita superioară a vitezei robotului atunci când efectuează o virare, adică atunci când ambele roți se rotesc la viteze egale în direcții opuse.
  6. KP: Constanta proporțională.
  7. KD: Constanta derivată.
  8. RUN MODE: Pentru a selecta între două moduri de operare - NORMAL și ACCL. În modul NORMAL, robotul rulează la viteze predefinite corespunzătoare valorilor poziției liniei. În modul ACCL, VITEZA MAXIMĂ a robotului este înlocuită cu ACCL SPEED în etapele predefinite ale pistei. Aceasta poate fi utilizată pentru a accelera robotul în secțiuni drepte ale pistei. Următoarele setări sunt accesibile numai dacă RUN MODE este setat ca ACCL.
  9. LAP DISTANCE: Pentru a seta lungimea totală a pistei de curse.
  10. ACCL SPEED: Pentru a seta viteza de accelerație a robotului. Această viteză înlocuiește VITEZA MAXIMĂ în diferite etape ale pistei, după cum este definit mai jos.
  11. NU. DE ETAPE: Pentru a seta numărul de etape în care se utilizează ACCL SPEED.
  12. ETAPA 1: Pentru a seta distanțele de început și de sfârșit ale etapei în care VITEZA MAXIMĂ este substituită cu ACCL SPEED. Pentru fiecare etapă, distanțele de start și de sfârșit pot fi setate separat.

Pasul 20: Calibrarea senzorului de linie

Image
Image

Calibrarea senzorului de linie este procesul prin care se determină valoarea pragului fiecăruia dintre cei 16 senzori. Această valoare prag este utilizată pentru a decide dacă un anumit senzor este deasupra liniei sau nu. Pentru a determina valorile pragului a 16 senzori, folosim oricare dintre cele două metode.

FILTRU MEDIAN: În această metodă, senzorii de linie sunt așezați deasupra suprafeței albe și se ia un număr predefinit de citiri ale senzorilor pentru toți cei 16 senzori. Sunt determinate valorile mediane ale tuturor celor 16 senzori. Același proces se repetă după plasarea senzorilor de linie peste suprafața neagră. Valoarea prag este media valorilor mediane ale suprafețelor alb-negru.

MIN MAX: În această metodă, valorile senzorului sunt citite în mod repetat până când utilizatorul solicită oprirea. Valorile maxime și minime întâlnite de fiecare senzor sunt stocate. Valoarea prag este media valorilor minime și maxime.

Valorile de prag astfel obținute sunt mapate la intervalul 0 la 1000.

Calibrarea senzorilor de linie prin metoda MIN MAX este prezentată în videoclip. După calibrarea senzorilor de linie, datele pot fi vizualizate așa cum se arată în imagine. Se afișează următoarele informații.

  • O reprezentare binară pe 16 biți a poziției liniei cu un binar 1 care indică faptul că senzorul de linie corespunzător este peste linie și un binar 0 care indică faptul că senzorul de linie este în afara liniei.
  • Un număr al numărului total de senzori care sunt peste linie.
  • Valorile minime, maxime și ale senzorilor (brute și normalizate) ale celor 16 senzori, câte un senzor la un moment dat.
  • Poziția liniei în intervalul -7500 până la +7500.

Valorile senzorului de linie minim și maxim sunt apoi stocate în EEPROM.

Pasul 21: Test Run

Image
Image

Videoclipul este al unei testări în care robotul este programat să se oprească după ce finalizează o tură.

Pasul 22: Gânduri finale și îmbunătățiri

Concurs de roboți
Concurs de roboți

Hardware-ul care este pus împreună pentru a construi acest robot nu este utilizat la maximum de programul care îl rulează. O mulțime de îmbunătățiri ar putea fi făcute în partea programului. Senzorii de mișcare ai scutului nu sunt utilizați în prezent pentru determinarea poziției și orientării. Datele de odometrie de la codificatoare pot fi combinate cu datele de orientare de la scutul de prop pentru a determina cu exactitate poziția și direcția robotului. Aceste date pot fi apoi utilizate pentru a programa robotul să învețe pista în mai multe ture. Vă încurajez să experimentați această parte și să împărtășiți rezultatele.

Noroc.

Concurs de roboți
Concurs de roboți

Premiul II la Concursul de roboți

Recomandat: