Table of Contents

SpoTT - LineFollower

Introducere

SpoTT este un robot de linefollower, practic el urmareste o linie neagra (de 1,5 cm) pe un fundal alb. Ideea mi-a venit anul trecut cand am vazut cateva filmulete la un concurs. Parea rupt din alt domeniu pe care imi doream sa-l explorez si sa-l cultiv.

Este util nu neaparat din punct de vedere al utilitatii lui propriu-zise, ci a aplicatiilor care pleaca de la baza lui. Sunt convinsa ca o hala mare cu marfa poate fi aranjata si automatizata cu ajutorul unor robotei care se pot misca dupa o linie neagra si cateva repere pentru a muta diversele cutii ambalate etc.

Descriere generală

SpoTT este un robot autonom, iar scopul lui este sa termine traseul intr-un timp cat mai scurt. Pentru acest robot am ales un model care poate fi upgradat, adica, la adaugarea componentelor corespunzatoare el se poate transforma intr-un linefollower enhanced (pe langa linia neagra care trebuie urmarita, el poate detecta obstacole si sa le ocoleasca, sa treaca prin tunele si de asemenea sa mearga pe o linie intrerupta).

Hardware Design

Deoarece nu am cunostinte avansate de mecanica am incercat sa pastrez totul cat mai simplu, astfel am ales ca sasiu chiar placa de PCB deoarece astfel robotul este mai mic si mult mai usor facandu-l mult mai rapid (raportat la dimensiunea si motoarele alese).

Ca si motoare am ales Micro Metal Gearmotor HP cu reductie de 10:1 si roti de 32 x 7 mm, care sunt facute din plastic si au anvelope de silicon. Motoarele se alimenteaza la 9V si au 3000 RPM. Acestea sunt prinse de PCB cu ajutorul unui suport de motor special creat din plastic si a unor suruburi.

Pentru contrabalans am ales un ball caster de 9,5mm. Directia la robot fiind data astfel de diferenta de viteze dintre cele doua motoare si nu una clasica, akerman.

Deoarece este un sistem imperfect am ales sa montez in fata o „masca” pentru protectia senzorilor facuta din aluminiu, deoarece acestia nu rezista la un impact foarte mare.

Pentru alimentarea circuitului am ales un acumulator lipo de 11,4V.

Deoarece am conceput robotul sa aibe o dimensiune redusa, am ales sa folosesc in mare componente SMD pe un PCB dublu cablat.

L7805-SMD are la iesire un curent de 100mA, iar acesta nefiind suficient pentru toate componentele, a fost nevoie de 3 astfel de componente pentru a alimenta corespunzator toate componentele (7805 are 1A la iesire :P). Aceste componente sunt puse in paralel, ele fiind legate direct la butonul de alimentare, iar fiecare alimenteaza la randul lor anumite componente de pe robot (senzori, microcontroler, driver, etc).

Ca driver pentru motoare am folosit un L298-SMD.

Citirea liniei se realizeaza cu ajutorul unui modul de senzori.

Pentru o performanta mai buna am ales un stabilizator de tensiune care scoate continuu 9V pentru alimentarea motoarelor; desi treptat se consuma din baterie viteza maxima a robotului va fi aceeasi. Cu toate acestea, daca voltajul scade sub o anumita valoare acumulatorul va deveni inutil.

Evident, microcotrolerul face parte din familia AVR si anume Atmega328 – SMD.

Schema electrica:

Software Design

Pentru progrmarea robotului am ales una din metodele clasice, adica o forma de PID (proportional–integral–derivative). Deoarece era destul de complicat transpunerea unei integrale am ales o varianta aproximativa cu ceva modificari, adica un PD.

Formula PID:

sau:

Practic, microcontrolerul primeste date de la senzori pe care le prelucreaza.

In urma prelucrarii datelor se comanda fiecare motor (L298) si acestea se misca corespunzator. Pe langa acest algoritm am inclus si cazul in care robotul pierde linia (de exemplu: presupunem ca robotul intra cu o viteza mai mare intr-o curba si derapeaza, daca ultimul senzor cu care a vazut linia este cel din stanga robotul va vira spre stanga pentru a se reintoarce pe linie).

Pseudocod:

previous_error = setpoint - process_feedback
integral = 0
start:
  wait(dt)
  error = setpoint - process_feedback
  integral = integral + (error*dt)
  derivative = (error - previous_error)/dt
  output = (Kp*error) + (Ki*integral) + (Kd*derivative)
  previous_error = error
  if (no_line) return_to_line
  goto start
  

Upgrade

Penrtu a-l face flexibil, am luat in calcul si ideea de a depista si ocoli obstacole. Astfel am adaugat un senzor de distara Sharp pentru aceasta. Pentru depistarea tunelului am adaugat o fotorezistenta atasata in varful unui suport de lemn. Deoarece la concursuri obstacolul este plasat dupa tunel, fotorezistenta detecteaza tunelul si atunci se activeaza senzorul Sharp (evident si codul este updatat pentru a include aceste componente).

Rezultate Obţinute

Diploma de participare – RoboChallenge 2012

Locul 1 – International Competition for Mobile Robots „Line Following” – Third Edition 2012

Jurnal

Cel de a-l doilea test (16 Martie 2012):

SpoTT - Second attempt on track


















Pe hol in EG-uri (29 Martie 2012):

SpoTT @ACS - v1


















SpoTT @ACS - v2


















SpoTT @ACS - v3


















La Oradea - proba de viteza (30 Martie 2012):

SpoTT @Oradea - traseu viteza


















Concluzii

Desi este un proiect reusit, am avut si mici scapari:

Pentru urmatoarea varianta as vrea sa adaug si o turbina pentru o mai mare stabilitate in curbe, desi cel mai probabil o sa necesite motoare mai puternice. Un mic exemplu

Bibliografie/Resurse

Resurse Hardware:

http://www.societyofrobots.com/

http://www.robofun.ro/ - motoare, roti, microcontroler, senzori

http://www.tme.eu/ro/ - L298 SMD

http://www.syscomelco.ro/ - condensatori, diode, rezistente, tranzistori, placa fotorezist etc.

Resurse Software:

http://www.cs.brown.edu/people/tld/courses/cs148/02/sensors.html

http://www.cse.msu.edu/~cse251/project2a.html

http://en.wikipedia.org/wiki/PID_controller

Diagram Designer - l-am utilizat pentru realizarea schemei logice de mai sus

PS: Multumiri lui Dan Tudose pentru ajutorul acordat la corodare. :-)