Mihai NICOLAE (67454) - Two Wheeled Inverted Pendulum

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul presupune realizarea unui robot sub forma de turn, asezat pe doua roti, ce isi mentine starea verticala. Acest tip de robot se mai numeste si two wheeled inveted pendulum si reprezinta o implementare a celebrei probleme a pendulului invers. Video concept Aceasta problema nu este doar un subiect interesant de studiu, ci a dus la aparitia unor produse de succes cum ar fi Segway sau Hoverboard-ul si este intalnita adesea si in natura. Un exemplu in acest sens este corpul uman care isi mentine orientarea verticala in timpul mersului sau alergatului.

Descriere generală

Robotul se foloseste de un Inertial Measurement Unit(IMU) pentru a citit unghiul de inclinatie, un controller PID pentru a calcula o comanda si doua perechi driver-motor pentru a-si schimba unghiul de inclinatie. De asemenea, o pereche de encodere la nivelul rotilor ii specifica distanta parcursa. Pentru a mentine robotul in pozitia verticala trebuie parcursi urmatorii pasi:

  1. Se citeste unghiul de inclinatie a robotului pe axa relevanta.
  2. Datele sunt transmise la microcontroller pentru a fi procesate.
  3. Se determina comanda controllerlului PID.
  4. Comanda este trimisa la driverele de motoare.
  5. Robotul isi ajusteaza unghiul de inclinatie.

Hardware Design

Lista de piese

Giroscopul utilizat vine sub forma unui modul produs de Adafruit ce utilizeaza un senzor Bosch numit BNO055. Acesta cuprinde un giroscop, accelerometru, magnemtometru, precum si un filtru complementar care preia date de la toti cei trei senzori si determina cu o precizie sporita unghiul de inclinatie absolut pe fiecare axa.

Microcontrollerul(uC) este un Atmega328 in format surface mounted fara bootloader.

Driverele de Motoare sunt produse de Pololu, fiind suficient de puternice si eficiente cat sa lucreze cu tensiune intre 5V5 si 30V si curenti de peste 10A. Fiecare dintre aceste drivere primeste doua semnale de la uC. Un semnal DIR care isi specifica sensul de rotire al motoarelor si PWD, un semnal ce este amplificat si trimis la motoare. La baza, un driver de motoare este format dintr-o punte H, adica un set de patru tranzistori MOS, grupati doi cate doi. Semnalul DIR determina deschiderea a doi tranzistori si inchiderea celorlalti doi, determinand astfel sensul de rotire al motoarelor.

Acumulatorul Li-Po poate oferi curenti de ordinul zecilor de amperi, mentinand tensiunea de alimentare constanta. Pentru a determina nivelul de incarcare al bateriei, este necesara masurarea tensiunii la terminalele acesteia. Pentru a putea face acest lucru se foloseste un divizor de tensiune ce reduce tensiunea sub cea de alimentare a microcontrollerului. Aceasta este apoi masurata cu ajutorul unui pin cu functie de ADC.

Sursa in comutatie este un dispozitiv electric care face conversie de la tensiunea de alimentare de pe baterie la tensiunea nominala a motoarelor, in acest caz, 6V. Tensiunea de iesire se poate regla folosind un potentiometru. Avantajul acesteia fata de un regulator este eficienta si capacitatea de a debita curenti mari.

Motoarele sunt si ele produse de Pololu si au incorporat encodere care trimit un numar fix de impulsuri la uC pt fiecare rotire completa a rotii.

Lista completa:

  • Regulator L7805CV 1
  • Pin Header 1×2 2
  • Pin Header 3×2 1
  • Pin Header 1×6 1
  • Screw connector block 1×2 4
  • LED RGB: LF-5WAEMBGMBW 1
  • Pololu HIGH-POWER MOTOR DRIVER 18V15 2
  • Motoare Pololu Brushed 2
  • Dioda 10TQ045 1
  • ATmega328P-AU 1
  • Push Button 1
  • Switch 1
  • Bluetooth RN42HID-I/RM 1
  • Adafruit BNO055 1
  • Cristal LF XTAL003169 1
  • Rezistente si condensatori

Scheme Electrice

Pentru realizarea robotului am proiectat si corodat propria placa: \\

Placile dupa lipirea componentelor

Placa de sus, care contine bateria si partea de logica
300

Placa de jos, care contine motoarele si circuitele de putere

Software Design

Robotul a fost programat in AVR Embedded C++ folosind programatorul AVRISP MKII si soft-ul Avrdude pentru incarcarea codului. Codul a fost compilat cu avr-gcc. Software-ul ce ruleaza pe uC indeplineste numeroase functii:
Implementeaza controllerul PID:

  • Citeste unghiul de inclinatie al robotului (numit eroare) de la giroscop, prin protocolul I2C.
  • Elimina erorile astfel: Dupa 10 esantioane se face o medie, se elimina esantioanele care difera cu mai mult de 10% de medie si se calculeaza o noua medie care reprezinta unghiul citit fara erori.
  • Calculeaza numeric derivata si integrala.
  • Aplica formula controllerului PID, utilizand constante alese empiric.
  • Trimite comanda la driverele de motor printr-un semnal PWM.

Asigura comunicatia cu exteriorul

  • folosind modulul de Bluetooth pt debugging si control de la distanta.

Implementeaza mecanisme de siguranta

  • Daca robotul depaseste un unghi de inclinatie dupa care nu mai poate ajunge in pozitia initiala, acesta opreste motoarele si afiseaza o lumina rosie
  • Opreste robotul atunci cand bateria este descarcata pentru a nu atinge un nivel critic

Compenseaza pt Giroscope Drift
In anumite momente, giroscopul schimba ceea ce considera el ca este unghiul de 0 absolut cu cateva grade. Pentru a compensa pentru a ceasta eroare, deplasarea robotului inregistrata de encodere schimba unghiul, astfel ca dupa ce robotul se deplaseaza pe o distanta scurta, unghiul de 0 absolut este din nou precis.
Prin schimbarea manuala a valorii acestui unghi se poate obtine ghidarea fata-spate de la distanta.

Rezultate Obţinute

Robotul isi mentine orientarea verticala si poate fi ghidat fata-spate prin bluetooth. Rezultatul final poate fi vazut aici.

Download

Bibliografie/Resurse

Datasheed uC

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

  • Documentația în format PDF
pm/prj2017/avoinescu/twip.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