Giroscop —informatii—> Microprocesor —voltaj—> Motoare —invartire—> Roti
Foloseste giroscopul pentru a prelua nivelul de inclinare. Porneste motoarele si invarte rotile in directia opusa (aceeasi directie cu caderea) pana se ajunge iar intr-o pozitie verticala. Apoi se permite iar caderea intr-o directie si repornirea rotilor, facand aceste comenzi la infinit.
Un robotel ce se sprijina de pamant doar folosind 2 roti, avand o structura cat de cat inalta, verticala. Rotile sunt conectate la motoare, alimentate de baterii. Motoarele sunt declansate de catre placuta Arduino, ce contine software-ul prezentat mai sus. Giroscopul transmite informatii despre unghiul de inclinare incontinuu microprocesorului, pentru a determina in ce fel sa activeze motoarele.
Componente:
Robotul final:
Tot algoritmul este format in mare din 3 mari componente:
Folosind functii specifice I2C, se preiau din senzor datele giroscopului. Avem acces si la un accelerometru, barometru si senzor de temperatura prin modulul ales, dar ne intereseaza doar giroscopul. In special, pe directia Ox, intrucat avem 2 roti si ne intereseaza doar miscarea fata-spate.
Cea mai simpla parte, atasam pinii 11 si 12 la cele 2 motoare si atasam unghiuri suplementare celor 2 servomotoare pentru o rotatie continua in aceeasi directie a robotului.
Se foloseste algoritmul PID (Proportional-Integral-Derivative) pentru a determina viteza servomotoarelor in functie de datele de la giroscop. Se primeste un input (in acest caz, unghiul dat de giroscop), un ideal (unghiul de echilibru al robotului) si rezulta un output din algortimul de PID control, folosind 3 valori ce trebuie tunate unic pentru fiecare robot:
Proportional: se calculeaza un output de viteza in functie de eroarea curenta fata de ideal.
Integral: In functie de magnitudiea si durata erorii, se calculeaza acceleratia.
Derivative: In functie de rata de schimbare a erorii se mai influenteaza viteza motoarelor.
Un robot nu foarte precis. Acesta are nevoie de sprijin din partea userului, din cauza unor caracteristici atat software cat si hardware: - motoare nu destul de puternice - neacuratati hardware din modul cum a fost construit, atat pentru directia imperfecta a motoarelor, cat si a centrului de greutate pozitionat mult in fata robotului - calibrare a constantelor pentru PID imprecise
Personal, a fost o provocare sa construiesc acest robot cu resurse minime cat sa fie stabil si cat de cat ok.
Insa, obiectiv si de departe, partea cea mai dificila dar si cea mai importanta a acestui proiect este calibrarea.
Cele trei constante, Kp = Proportional gain, Ki = Integral gain si Kd = Derivative gain, sunt foarte variabile in functie de fiecare robot si de specificatiile acestuia, cum ar fi greutatea, diametrul rotilor, puterea motoarelor, cat de des se primesc date de la senzor.
Aceste constante sunt extrem de dificil de calculat de mana sau cu vreun tool online, astfel incat pentru controllere PID in aproape toate cazurile se foloseste metoda “Trial and error”. Am subestimat cat timp imi va lua acest lucru si nu am ajuns sa ajung la rezultate ideale. Un alt motiv pentru aceasta concluzie este si ca nu am gasit motoare potrivite, iar servomotoarele mele hackuite cat sa fie continue nu au destula putere cat sa permita robotului sa raspunda la erori mari.
Totusi, pot spune ca pentru un astfel de robot, daca se doreste ajungerea la niste rezultate multumitoare, se pot petrece lejer cateva saptamani doar pe calibrarea parametrilor de mai sus. A fost un proces foarte interesant, foarte frustrant si foarte rewarding (nu in acelasi timp). As recomanda oricui sa parcurga un astfel de proiect.