De siste ukene har vi gått fra kodeskrivings fasen til feilsøking, nyeste koden består stort sett av en PID regulator, input og kontroll/innstillings system. I teorien skal man kunne justere på 3 variabler Kp, Ki og KD og andre konstanter for skalering. Konstantene gir tilgang til å justere hvordan roboten oppfører seg, men realiteten har vært helt annerledes. Det å implementere PID regulator i Arduino har vært en stor utfordring, det startet med at vi brukte et ferdig bibliotek lagt ut på playground men det viste seg at den ikke fungerte riktig begge veier (mulig vi har miskonfigurert dette).
Vi bestemte oss for å ikke bruke mer tid på dette og valgte heller å skrive inn PID koden manuelt. Deretter var det på tide å implementere det inn i systemet å justere tyngdepunkt, pådrag og retning på hjul.
Å justere på PID konstantene gav ingen forbedring, det har gått titalls timer på justeringer uten nytte. Vi har hatt mistanke om hardware svakheter, det har vært umulig å få roboten til å balansere basert på variable justeringer. Vi hadde blant annet et lite problem rettning på hjula (da motorene kjøre maksimalt en rettning så bytta dem rettning og kjørte i revers), vi har tatt kontakt med Dag i forbindelse med feilsøking og kunne da bruke Microsoft Exel til å lage grafer av test kjøring for feilsøking, rettningsfeilen ble fort oppdaget og løst. Etter dette har vi brukt denne metoden for å feilsøke forholdet mellom input og output. Jeg har tilpasset kallman filter biblioteket til å fungere med den nye MPU-modulen som endelig ankom. Nytt problem med dette var reaksjons tiden var alt for dårlig. Å justere på konstanter , prøve å finne ut om det er delay på systemet hjalp ikke.
I dag har vi bestemt oss for å skrive koden på nytt, fjerne all unødvendig kode (brukt tidligere). Nye koden begynte med kun kallman filter for å lese vinkelen på plattformen, leste av vinkelen der roboten kunne stå loddrett uten å falle. Denne verdien brukte vi som set point.
Videre har vi implementert motor koden som har blitt skrevet tidligere. koblet inn motor PWM direkte sammen med vinkelavlesningen (ganget med en konstant) for å teste reaksjonstiden. Når vi var fornøyd med resultatet implementerte vi PID igjen.
Nå er er reaksjonstiden akseptabel og håpet er på plass igjen! 🙂
Vi har tidligere vært uenige om motorene er raske nok til å kunne balansere roboten men hadde aldri fasitsvar på det før idag. Vi fant ut at det skal være mulig hvis avvik vinkelen holdes minimal ellers vil roboten aldri klare å ta igjen avviket, dette forutsetter at reaksjonstiden må være momentant med vinkel avviket slik at avviket holdes tilnærmet 0. Nå er det ny kode og nye muligheter, etter en del justering kan roboten endelig stå i noen sekunder før den faller igjen , for første gang med PID og ikke bare P (brukt tidligere). Det tok mye tid å justere variablene riktig. Vi ble ikke helt fornøyde med resultatet av denne justeringen men det var det vi fikk til idag, det er mye vibrasjon fram og tilbake, kommer av blant annet tomgang (død sone) på hjul og PID variablene. Det er rom for bedre balanseringstid innen denne uken! 🙂
Slik ser nåværende graf ut. utfordringen nå er å minke output slagene uten å påvirke “Read” negativt.
Her er demonstrasjon av den siste koden under kjøring:
https://www.youtube.com/watch?v=GH4X7uDVy8c