Category Archives: Smart Systems 2014 – BalanceBot

Uke 47. Den 10 uken.

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.

exel
Her er demonstrasjon av den siste koden under kjøring:

Uke 40 – Den sjette uken

I løpet av denne perioden har vi omprogrammert akselerometeret for å kompansere med gyro sensoren slik at vi får vinkelhastigheten via akselerometeret. Dette tok sin tid, og vi fant ut at det ikke var praktisk mulig å gjøre dette. Først pga. støy og at ut verdiene ikke var nøyaktige nok.

Dermed måtte vi tilbake til tegnebrettet, og fant da ut at vi måtte bruke PID hvor Inputen er vinkelen vi har og pådraget regnes ut av PID algoritmen. Derfor satt vi som mål å få avlesninger fra akselerometeret oppgitt i grader og ikke vinkelhastighet. Deretter måtte vi kalibrere sensoren, slik at sensoren leste 90* ved loddrett tilstand. Dette holdt ikke i og med at vi hadde mye støy som førte til feilsignaler innimellom. Dette gjorde at vi trengte litt research på filter for reduksjon av støy.

Dermed fant vi ut at vi trengte noen støyfilter i systemet vårt for å forhindre støyen på ut signalet, som har oppstått tidligere.

Vi la til 2 filtre til å begynne med, en som heter EMA og den andre SMA. Disse filterene ga oss litt mindre støy men vi er ikke helt fornøyde med utverdien.

Derfor bestemte vi oss for å lese oss opp på kalman filteret i og med at vi hadde hørt at det kunne løse problemet vi har.

Vi startet også å regne ut og bestemme verdier for konstantene våre i PID algoritmen, ved å velge en rekke med avvik fra den ønskede verdien (roboten i balanse, eller 90 grader) samt at vi skrev en ordentlig forklaring på PID regulatoren:

PID KP

pid full

pidfull2

 

Uke 39 – Den femte uken

Denne uken har vi prøvd å kjøre “segwayen” ved hjelp av en app til telefon som heter så mye som sensoduino. Appen gir oss mulighet til å bruke sensorene som er integrert i telefonen som en del av systemet vårt, slik at vi kunne prøve å kjøre den uten å ha fått gyroskop levert ennå. Dette viste oss at vi vil få et delay fra telefon til systemet som blir for stort slik at kjøretøyet ikke rekker å reagere før det er for sent.

sensoduinio

Resten av uken gikk til å finskrive koden, samt dokumentere arbeidet vårt.

Uke 38 – Den fjerde uken:

Denne uken ble vårt fjerde gruppemedlem Chadi Chehade med i gruppen vår.

Komponentene var nå montert på chassis og vi var klare for å finne en måte for å få roboten til å balansere på. vi prøvde først å løse problemstillingene ved å bruke fysikk som utgangspunkt,  vi så på en rapport fra en tidligere bachelor oppgave(Invertert pendel) vi så på ligningene de hadde brukt for moment og fart, og fant fort ut at dette var en litt for stor jobb å gå denne veien i dette faget her. Og etter en prat med Zoran Dokic(faglærer i blant annet reguleringsteknikk) ble vi enige om å bruke en PID regulator for å regulere bevegelsen på roboten vår.

ferdig koblet

Armaan og Albert startet så finne en algoritme for PID regulatoren, som de klarte å finne:

pid 1 pid 2 pid3

 

Uke 37 – Den tredje uken:

Neste utfordring var å lage et understell for roboten, det startet med å kjøpe opp masse universelle materialer.

  • Dobbeltsidig teip
  • Sakser
  • Super lim
  • Treverk plater
  • Pinner
  • Drill
  • Tre lim
  • Samt noen andre duppeditter.

Vi lagde en enkel 3D modell som viser hvordan prototypen vil se ut.

3d modell av robot

Vi diskuterte om å heller bruke treverk og lage noe etter modellen vi startet med. Det ble kjøpt opp materialer til dette. tanken var veldig enkel men det har vært enutfordring å få drillet hullene riktig ved første forsøk, vi måtte justere på hullene og pinnene slik at resultatet ble mindre skeivt enn det var tidligere. Det ble brukt superlim i starten, det gav dårlig resultat. Vi gikk for trelim istedet. Etter ca 24 timer var understellet på plass.

ferdig chassis

 

 

Uke 36 – Den andre uken:

Nå hadde vi fått vårt accelorometer og vi hadde skaffet noen plater av plast som vi tenkte vi kunne bruke som karosseriet til roboten, men vi fant fort ut at dette ikke var tilstrekkelig og bestemte oss for å bruke treverk istedenfor.

videre koblet vi opp kretsen til accelorometer, og startet å teste denne, samtidig som vi testet bluetooth – chipen vår.

plast chassis

plast 2

Uke 35 – Den første uken:

Den første uken gikk i hovedsak til planlegging og testing av de komponentene vi hadde. Det vi først og fremst planla var hvordan vi ville at roboten vår skulle fungere (stå og balansere på to hjul) og hvilke komponenter vi trengte for å få realisert dette målet. samtidig begynte vi å teste de komponentene vi allerede hadde, som først og fremst var vår arduino (mikrokontroller) og vi koblet opp vår bluetooth-chip og gjorde den klar for testing.

Komponentene vi bruker er:

  • DC motor
  • Motorkontroller
  • Batteripakke
  • 2 Hjul
  • Accelorometer
  • Gyroskop
  • Bluetooth – Chip
  • Arduino – Chip

 

Å få roboten til å balansere var vårt første store delmål i dette prosjektet. når roboten balanserte etter vårt ønske vil vi implementere bluetooth styring.

Gruppemedlemmene på dette tidspunktet var:

  • Albert Ngenzi
  • Armaan Kamboj
  • Mohamed Al-Hajg