Alexandru-Cătălin VASILE (78309) - Line Follower

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul consta in realizarea unui robotel Line Follower care se poate deplasa pe un traseu ce este definit de o linie neagra si un fundal alb.
Robotul va avea doua motoare prin intermediul carora va putea vira.
Algoritmul deplasarii va fi unul PID ce isi propune sa ofere cat mai putine oscilatii in deplasare.

Am plecat de la ideea ca un self-driving car poate fi construit si dupa input-uri simple, precum centrarea masinii intre doua linii albe.

Proiectul este util pentru mine deoarece construirea unui line follower implica cunoasterea in amanunt a componentelor si modul in care acestea comunica. Totodata, acesta are multe utilizari in practica: transportul marfii, trimiterea unui robotel in locuri inaccesibile oamenilor (tratarea directiei se va face dupa alte input-uri, insa algoritmul poate ramane acelasi).

Descriere generală

Principiul de functionare este urmatorul:

  • Microcontrolerul primeste informatii de la senzorii de culoare
  • In functie de informatiile primite, algoritmul PID determina unde se afla masina relativ la linia neagra
    • Se va lua o decizie asupra directiei deplasarii
  • Decizia ajunge la Engine Driver care va controla directia
    • Directia se controleaza prin rotirea la o turatie diferita a motoarelor

Hardware Design

Componente

Schema electrica

Software Design

Mediul de dezvoltare

Visual Studio, Windows 10.

Dezvoltarea pe windows 7 nu a fost posibila, deoarece USB-USART nu a fost detectat.

Descrierea algoritmului

In functie de valorile citite de catre senzori motoarele sunt activate corespunzator pentru a urmari linia. Euristica de transformare a valorilor citite de catre senzori este urmatoarea: se face o medie a valorilor unde fiecare valoare primeste o pondere multiplu de 1000, mai apoi media este impartita la suma valorilor. Prin urmare, functia de transformare aplica o euristica asupra valorilor pentru a comprima valorile la un singur numar. Aceasta este inspirata din documentatia de folosire QTR-8A si acopera cazul in care robotul pierde linia (in acest caz se va executa stanga / dreapta).

(sens0 * 0 + sens1 * 1000 + sens3 * 2000 + …) / (sens0 + sens1 + …)

Aceasta valoare primeste un offset pentru a face legatura intre miscarea stanga - valoare negativa si dreapta - valoare pozitiva. Dupa care se aplica algoritmul PID pentru a exprima directia deplasarii.

pid = KP * prop + KI * integral + KD * deriv

Pentru a nu avea erori foarte mari in deplasare, partea integrala se va reseta dupa un numar precizat de pasi.

Pentru incarcarea programului in placa am folosit bootloadHID.

Rezultate Obţinute

Concluzii

  • Proiectul a fost implementat in intregime, precizia deplasarii a fost mai buna decat ma asteptam.
  • In functie de traseul ales se pot alege alte valori pentru constantele algoritmului PID, este important sa se tina cont de faptul ca sunt influentate de viteza si de orice delay produs de cod.
  • In momentul de fata, robotul este limitat de motoarele alese si in acelasi timp si de sursa de alimentare: o baterie de 9V pentru DRV8833, o performanta mai buna ar putea fi atinsa cu doua baterii legate in paralel.

Download

Bibliografie/Resurse

Resurse Software

Resurse Hardware

  • Documentația în format PDF
pm/prj2018/rmatei/78923.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0