All posts by Tore Andre Einan

Selvbalanserende Robot Uke 49

Avsluttende blogginnlegg. Denne uken har vi gjort avsluttende forberedelser til presentasjon. Kort avsluttende informasjon om produktet:

  • Systemets funksjon: I PID regulatoren setter vi en ønsket vinkel vi vil at den skal regulere, som er setpoint. Input variabelen gis ifra MPU hvor vi henter vinkelaksellerasjon og vinkel posisjon og legger disse sammen vha komplimentær filter. Input og setpoint sammenlignes hele tiden og reguleringen kan justeres vha kp ki og kd verdien.  Output sendes da til motorkontrolleren og gir en verdi i forhold til hvor mye kraft motorene skal ha.
  • Dersom vi skulle fortsatt prosjektet ville vi prøvd å få implementert encoderene til motorene. Hvor vi vha disse kan finne vinkelhastighet/fart/posisjon. Vi ville også fokusert mer på å få implementert ett kalmanfilter som kan “forutse” neste posisjon vha estimater. og til slutt implementert et styringsystem vha bluetoothkontroller.

Link til kode og presentasjon kan du finne under.

https://drive.google.com/drive/folders/1aM7obNVLto-LxInUHKWGkC-UeDH4gPzk

 

Selvbalanserende Robot Uke 47

Vi har tegnet kretsen inn i Fritzing på nytt.

Bibliotekene vi har benyttet til koden er open source. De er som følger:

  • PID_v1.h
  • MPU6050_6Axis_MotionApps20.h
  • LMotorController.h
  • I2Cdev.h
  • Math.h

PID_v1 biblioteket brukes til å regulerer inngang mot utgang. Her setter vi Kp,Ki og Kd etter eget system. Output brukes i sammenheng med motor controller, og er en verdi i mellom -255 og +255 etter hvilken retning motorene skal gå. Denne verdien blir kalkulert igjennom PID kontrolleren i forhold til input. Input startet som bare vinkel, men ved hjelp av komplimentærfilter kombineres akselerasjon og gyro data fra MPU 6050 sensoren.

Selvbalanserende Robot Uke 46

Vi har tegnet et system diagram som viser hvordan systemene inad fungerer med hverandre. Arduinoen kommuniserer kontinuerlig med IMU(MPU6050) og leser av hvilke data gyroen og akselerometeret gir. Like så kommuniserer arduinoen med enkoderene, og ved help av dataen fra enkoderene kombinert med gyro og akselerometeret skal roboten balansere.

Motorene kommuniserer via L298 Motor Controller, som igjen kommuniserer med Arduino via EnA, In1, In2, EnB, In3 og In4.

Denne uken fikk vi byttet ut batteriet til motorene med et større batteri. Arbeidet med koden fortsetter. Det nye batteriet veier mer også, som skal være positivt for systemet.

Enkoderene til motorene måler pulser per omdreining på motoraksling. Vi har fått dem til å teller pulser og hvilken retning akslinene roterer. På grunn av manglende interrupt pins måtte vi bytte fra Arduino Nano til en Arduino Mega. Fortsatt får vi kun lest en av to pulser per hjul, da ble utfordringen å lese ut hvilken retning akslingen roterte. Dette løste vi ved å bruke verdiene fra output som er til motor kontrolleren og lese hvilken retning de roterer.

Selvbalanserende Robot Uke 44

Vi har valgt en Kp verdi ved å prøve oss frem, og har fått roboten til å prøve å balansere. Den vil ikke holde seg på plass, den kjører av gårde. Vi mistenker at det kommer av mangel på filter. Vi har også kommet frem til at batteriet til motorene ikke er kraftig nok.

Kalman Filter

Et Kalman filter fungerer slik at det tar en måling av en valgt variabel, f.eks hastighet, lager et estimat av den valgte målingen, og lager et optimalt variabel estimat. Bildet under illustrerer dette ganske godt.

http://bilgin.esme.org/BitsAndBytes/KalmanFilterforDummies

Denne bloggen gav oss en god forståelse på Kalman filteret.

Selvbalanserende Robot Uke 43

Denne uken fikk vi tegnet inn kretsen i Fritzing, og vi har nå bedre kontroll over koblingene til systemet.

Vi har også funnet riktige offset verdier til MPU 6050:

mpu.setXGyroOffset(44);

mpu.setYGyroOffset(-16);

mpu.setZGyroOffset(-10);

mpu.setZAccelOffset(626);

 

Dette får oss et steg nærmere for å få roboten til å balansere.

Selvbalanserende Robot Uke 40

Vi har jobbet videre med koden, men får ikke gjort så mye mer før platene til rammen er printet ut. Vi ser det begynner å bli litt rot med ledningene, så vi planlegger å tegne kretsen i Fritzing for å holde system på hvilke ledninger som går hvor.

Arbeidet med koden fortsetter. Vi har funnet ut litt mer om hvordan et Kalman filter fungerer, og vi har gjort noen beregninger av PID verdier på papiret.

Her har vi beregninger for vinkelen til roboten, tilsvarende må vi ha en PID-loop til for å regulere hastigheten til systemet.