torsdag den 1. marts 2012

Lego LAB uge 5


Tilstede:
Mikkel Nielsen
Søren Bramer Schmidt
Peter Jessen


Tid brugt:
6 timer

Mål

Målet med dagens øvelse er at lave en Segway - det vil sige en tohjulet robot som kan balancere ved at bruge læsninger fra en lys-sensor som input til et PID loop.


Plan
Planen er skrevet således, at vi følger opgaveformuleringen for uge 5. [1]
1. Vi vil starte med at bygge robotten som beskrevet i NXTway. [2] 
2. Omskrive Sejway programmet fra bogen Maximum Lego NXTBuilding Robots with Java Brains [3], som beskrevet på forelæsningen (fjern I-leddet og bruge float i stedet for int)
3. Integrere BTcontrolledCar.java i Sejway programmet så vi kan ændre PID værdierne mens robotten kører for at optimere test. [4]
4. Find eksperimentelt gode værdier til vores robot og fysiske omgivelser

Resultater

1.Bygning af robot

 Vi byggede robotten ud fra tegninger fra [2]

 Da vi ikke havde præcise bygge instrukser, blev robotten ikke bygget helt som vist. Vi flyttede hjulene ud på ydersiden af robotten sammenlignet med [2]. Dette gav os mulighed for at udskifte hjulene med nogle større hjul, da det, efter vores teori, vil give os bedre mulighed for at holde balancen på segway'en.


  

2. Program til styring af Segway Vi forsøgte først at installere og afprøve programmet, som var givet til os i [3]. Dette viste sig ikke at være optimalt da værdierne i programmet ikke virkede på vores robot i de omgivelser vi befandt os i. Vi fandt ud af, at forskelle i lysforhold er meget vigtige, når der sættes konstanter i programmet.

Vi ændrede herefter programmet på følgende punkter.

1. Vi fjernede I-ledet,da vi ikke mente det havde en vigtig funktion.

2. Vi ændrede til float værdier og kunne derfor fjerne Scale-konstanten.

 Herefter forsøgte vi diverse værdier for konstanterne KP, og KD, og med forskellige kalibreringer af offset'et. Dette var dog en til langsom måde at teste på, så vi gik videre med bluetooth funktionalitet til at ændre programmets variable imens det køre.


3.Program for live overførsel af værdier via bluetooth

For at gøre det nemmere at ændre PID værdierne og kalibreringsoffsetet for vores Segway integrerede vi Bluetooth styring i NXT’en således, at vi kan sende nye værdier fra en computer, når vi har lyst. Dette er markant nemmere end at skulle ændre værdierne, compile og sende til NXT’en hver gang man vil teste.

Måden vi gjorde det på var ved at introducere en ny tråd på NXT’en, hvis eneste formål er at tjekke for, om der er kommet nye værdier, og i så fald, ændre dem. Denne tråds kode ser således ud [4]:

class ReadThread extends Thread {
   
        Sejway sejway;
       
        public ReadThread(Sejway sejway) {
               this.sejway = sejway;
        }
       
        public void run() {
       
               while (true) {

                       try {
                               sejway.KP = sejway.dis.readFloat();
                               sejway.KD = sejway.dis.readFloat();
                               sejway.offset = sejway.dis.readInt();
                       }

                       catch (IOException e) {}
               }
        }
}

Og denne tråd bliver så startet fra vores Segway, så den uafhængig af denne, bare står og tjekker for nye værdier.

I forhold til PC Controller delen, har vi bare ændret det til at passe med vores KP, KD og offset, ved at ændre textlables og ændre det til at sende floats i stedet for integers. Et eksempel på denne kan ses i næste afsnit, hvor vi også inkluderer værdierne for vores bedste forsøg med segwayen.

 

4.Eksperimentering

  Med programmerne på plads gik vi igang med at eksperimentere med variablerne. Vi udførte vores test på en hvid overflade ved almindelig dagslys. Vi gættede først et offset og nogle KP, og KD værdier. Med disse værdier startede vi robotten, og kunne observere at den falder forover eller bagover ved disse værdier. Vi ændrede herefter på offset'et for at stabilisere robotten omkring dens balance punkt. Med især KP værdien kunne vi ændre på hastigheden som robotten reagerede. Vi fandt frem til de mest optimale værdier, hvor robotten kunne stå oprejst i nogle sekunder.


Værdierne blev sat via vores bluetooth program, som vist på skærmbilledet her:



Med disse værdier fungerede vores robot som vist på videoen herunder:




 Status

Vi nåede det vi regnede med, bortset fra at vi selvfølgelig gerne ville have haft segwayen til at stå oprejst i længere tid, men det viste sig utrolig svært at opnå. I så fald, skulle man nok eksperimentere mere med forskellige værdier og muligvis også introducere en ny lyssensor, så man har en på begge "sider" af segwayen.


Referencer
[1] Lesson 5
[2] NXTWay

Ingen kommentarer:

Send en kommentar