This is an old revision of the document!
3pi roboti lihtsa joonejärgimise algoritmi kasutamisel on näha, et robot sõidab mööda joont kergelt sikk sakk meetodil. Lisaks võib suurematel kiirustel robot kergelt joone pealt välja sõita. Sujuvamaks liikumiseks on võimalik lisada juurde andureid, et joonel olekut paremini kontrollida, kuid see lisab juurde palju riistvara ja võib tekitada rohkem probleeme. Parem lahendus on lisada olemasolevale riistvarale tarkvarasse PID regulaator. Nii saab olemasolevate anduritega roboti väga sujuvalt joont järgima panna. PID regulaatori kasutamisel on põhi raskuspunktiks regulaatori komponentide mõju seadistamine. PID regulaatori puhul on 3 komponenti
Regulaator ei pea alati sisaldama kõiki kolme parameetrit. Olenevalt süsteemist on lihtsam piirduda ühe parameetri või kahe kombinatsiooniga: P, PI, PD, I, ID.
Seadesuurus ja vea arvutamine
Seadesuurus (Setpoint) on joonejärgija roboti puhul positsioon, kus joone kulgemise telg ühtib roboti keskteljega. Selle suuruse järgi leiab vea ehk nihke soovitud positsioonist:
viga = hetke_positsioon - seadesuurus;
3pi roboti andurite summa on vahemikus 0 kuni 4000. Keskoht ehk soovitud seadesuurus on seega 2000. Andurite summa muutub siis antud valemi järgi vahemikus -2000 kuni 2000.
PID komponendid
Proportsionaalne komponent on juba leitud eelmises punktis ehk on võrdne otsese veaga.
Integraalse komponendi puhul liidetakse iga PID regulaatori tsükli läbimisel veale juurde uus viga:
integraalne = integraalne + viga;
Derivatiivne komponent eeldab eelmise PID regulaatori tsüklist otsese vea meelde jätmist. Selleks tuleb pärast derivatiivse komponendi arvutamist lisada rida eelmise vea meelde jätmiseks. Derivatiivse komponendi arvutamine ise on järgmine:
derivatiivne = eelmine_derivatiivne - derivatiivne; eelmine_viga = viga;
Võimendustegurid
PID regulaatori komponentide mõju kiireks ja lihtsamaks seadistamiseks on kõige parem kasutada võimendustegureid, mis suurendavad või vähendavad vea mõju. ATmega328p on võimeline arvutama ujukoma arve aga on selle tegemise juures palju aeglasem kui täisarvude puhul. Seega on efektiivsem arvutada täisarvude korrutamise ja jagmisega. Selle tõttu on iga komponendi kohta 2 võimendustegurit.
#define KP 1 #define KP_ 20 #define KI 1 #define KI_ 100 #define KD 3 #define KD_ 2
PID regulaatori väljund
PID väljundiks on ka täisarv, sest mootorite juhtimisel ei kasutata ujukoma arve. PID regulaatori tulemus on kõigi komponentide summa:
output = KP*viga/KP_ + KI*integraalne/KI_ + KD*derivatiivne/KD_;
Väljundit tuleb piirata, et see ei ületaks mootorite maksimaalset kiirust.
if(output > motor_max_speed) output = motor_max_speed; if(output < -motor_max_speed) output = -motor_max_speed;
Mootorite juhtimine
Mootorite juhtimine on erinev negatiivse ja positiivse PID regulaatori väljundi puhul. Kasutatakse negatiivse tagasisidega juhtimist, mis tähendab, et üks ratas liigub täiskiirusel ja vastavalt väljundi suurusele pidurdatakse teist. Arvestades 3pi andruite tagastatavat summat 0-4000 (0 vasakul ja 4000 paremal), siis tuleb negatiivse väljundi puhul pidurdada vasakut ja positiivse korral paremat ratast.
if(output > 0) { mootor_vasak = motor_max_speed; mootor_parem = motor_max_speed - output; } else { mootor_vasak = motor_max_speed + output; mootor_parem = motor_max_speed; }