Thursday, March 7, 2013

Week 6

Dato:

07-03-2013

Varighed:

Fælles lab: 5 timer
Blog: 3 timer

Deltagere:

Steffen Høi
Nikolaj Mols Hansen
Martin Vang
Ulrik Sahl Lystbæk

Status

Vi har forsøgt at få LEGO-robotten til at balancere vha. lyssensoren og farvesensoren og sat NXT Intelligent Brick horisontalt på robotten. Desuden har vi fået lavet en brugergrænseflade, så vi kan ændre variablerne for PID kontrollen løbende under runtime. Vi mangler at eksperimentere videre med at få LEGO-robotten til at balancere med farvesensoren, samt at prøve at få LEGO-robotten til at balancere vha. gyro-sensoren.

Mål

Målet for denne øvelsesgang er at lave opgaverne for "Week 6 - Communication and Embedded Systems"1 og derigennem eksperimentere med, hvordan man laver en selvbalancerende LEGO-robot inspireret af Steve Hassenplug's originale Legway kontrolleret af RCX'en2. Desuden er målet også at oprette et blogindlæg for denne laboratoriesession.

Plan

  • Løse opgaverne for "Week 6 - Communication and Embedded Systems"1.
  • Udarbejdelse af blogindlæg for "Week 6 - Communication and Embedded Systems"1.

Opgaver


Self-balancing robot with light sensor

Til denne opgave har vi samlet robotten, så den er som LGO modellen, efter Phillippe Hurbains3 anvisninger. Vi har brugt programmet Segway.java4 fra Brian Bagnall for, at få robotten til at stå. Når programmet startes, skal robotten holdes i balancerende tilstand for, at der er et udgangspunkt til at udregne størrelsen af fejl på målinger og derefter rette op efter.
Vi har lavet få justeringer på robotten for at hjulene sidder mere stramt, men ellers er vores første forsøg med  den standard beskrevne LGO model og koden fra Brian Bagnall. Resultatet af dette kan ses i videoen her:




Som det kunne ses på videon, var den ikke god til at stå lige. For at forbedre den, startede vi med at flytte lyssensoren længere op, og bagefter justerede vi de forskellige variabler i programmet. Det blev aldrig helt godt, men det blev bedre end den første udgave. Vores modificerede udgave af Segway programmet af Brian Bagnall kan ses i Segway.java. Da vi har flyttet lyssensoren længere op, har vi bl.a. forsøgt at ændre på konstanten 1.8F, som ganges på error. En video af den samme robot med den modificerede variable kan ses i nedenstående video:


Choice of parameters on-the-fly

For at have lettere ved hurtigt at ændre på konstanterne, hovedsageligt til PID kontrollen, til vores balancerende robot, modificerede vi GUI'en og kommunikationen fra PCcarController.java5 og BTcontrolledCar.java6. Først afprøvede vi dog programmerne PCcarController.java og BTcontrolledCar.java. Til BTcontrolledCar.java lavede vi et LeJOS NXT Project i Eclipse, som også indeholdt Car.java7. Til PCcarController.java lavede vi et LeJOS PC Project i Eclipse. Dette virkede fint, og vi fortsatte ved at tilpasse det til Sejway.java8, så vi under runtime af programmet har mulighed for at justere de ønskede konstanter. På samme tidspunkt byggede vi også robotten lidt om, så NXT Intelligent Brick blev placeret horisontalt i stedet for vertikalt. Denne udgave af robot ses på nedenstående billede:



Til vores kombination af Sejway.java og kommunikationen fra PCcarController.java og BTcontrolledCar.java lavede vi to projekter. Et LeJOS PC Project med klassen SejwayController.java9 til at have en GUI, som kan bruges til at uploade nye værdier til det program, der kører på robotten. GUI'en er en kopi af den fra PCcarController.java, men lidt modificeret. Resultatet ses på nedenstående billede:


Det andet, et LeJOS NXT Project som indeholder Sejway.java, der er programmet fra den ovenstående opgave, men nu med kommunikation, SejwayCommunicationImpl.java10, som står for at læse værdier der sendes fra PC-applikationen samt SejwayValues.java11, som indkapsler de variabler, der modtages fra PC-applikationen.

Der er ikke meget opfindsomhed i det kode, vi har lavet i forhold til de eksempler, vi har fået udleveret. Den største forskel er, at BTcontrolledCar.java venter på noget fra PC-applikationen og reagerer så på det, hvorimod vores Sejway.java hele tiden skal forsøge at balancere, mens den tjekker, om der er sendt data fra PC applikationen. Hvis der ikke er sendt noget, skal den vende tilbage til at balancere, og hvis der er sendt noget, skal den hente det og opdatere konstanterne til PID kontrollen og fortsætte med at balancere igen.
Vi bruger metoden available fra DataInputStream12 til at tjekke om PC-applikationen har sendt noget data, der venter på at blive læst.
Når vi sender data fra PC-applikationen til NXT-applikationen, sender vi hver gang alle de variable, vi har valgt, som skal være mulige at justere fra PC-applikationen. Alternativt kunne vi have nøjedes med at sende dem, der var blevet opdateret, men så skulle vi til at sende data med, som angiver hvilke variable, der er sendt og tjekke på det. Derfor vurderede vi, at det både var lettere og hurtigere at sende dem alle med hver gang.
PC-applikationen gjorde det lettere med at prøve at få robotten til at balancere, men vi fik den aldrig helt til at balancere helt perfekt. Vi håber på, at vi på et tidspunkt får tid til at gå tilbage til en udgave af LineFollower.java med PID kontrol, så vi kan lave en PC-applikation til den.

Self-balancing robot with color sensor

Vi har udskiftet lyssensoren på den balancerende robot med en farvesensor og prøvet på programmet fra ovenstående opgave. Det virker umiddelbart på samme niveau som med lyssensoren, vi har brugt indtil nu. Dvs. robotten stadig kan balancere nogenlunde, men ikke særligt længe uden hjælp. Vi har ikke nået at teste meget med farvesensoren, så vi fortsætter herfra i næste uge.

Self-balancing robots with gyro sensor

Denne opgave mangler vi at lave, hvilket vi vil gøre i næste uge.

Konklusion

Denne uge har vi eksperimenteret med hvordan, man kan få LEGO-robotten til at balancere vha. NXT lyssensoren samt farvesensoren ved at have arbejdet med opgaverne omhandlende disse. Vi har  desuden prøvet med forskellige opstillinger, hvor vi bl.a. har ændret på afstanden mellem sensorerne og den flade, vi har forsøgt at få LEGO-robotten til at balancere på, samt placeret NXT Intelligent Brick både horisontalt og vertikalt. Desuden har vi også forsøgt at slukke lyset for at gøre lokalet så mørkt som muligt, hvilket vi så havde en lille effekt på robottens evne til at balancere vha. lyssensoren og farvesensoren. Vi har endvidere etableret en trådløs baseret forbindelse mellem PC og NXT, så vi via en grafisk brugergrænseflade, som vi også har udviklet i denne uge, kan ændre på konstanterne i PID kontrollen løbende under runtime. Dette vil uden tvivl blive en stor hjælp for os senere hen, da det gør processen med at prøve sig frem med at justere på værdierne en del nemmere. Gennem vores arbejde med denne uges opgaver, har vi fået robotten til at balancere nogenlunde, men ikke særlig længe uden hjælp. Dette vil vi arbejde videre med i næste uge, hvor vi vil lave videre på opgaven med at få robotten til at balancere via farvesensoren, samt lave opgaven omhandlende balance vha. gyro-sensoren.

______________________________________________________________________________________________________

1. http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson5.dir/Lesson.html
2. http://www.teamhassenplug.org/robots/legway/
3. http://www.philohome.com/nxtway/nxtway.htm
4. http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson5.dir/Sejway.java
5. http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson5.dir/PCcarController.java
6. http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson5.dir/BTcontrolledCar.java
7. http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson5.dir/Car.java
8. http://dl.dropbox.com/u/995376/Sejway.java
9. http://dl.dropbox.com/u/995376/SejwayController.java
10. http://dl.dropbox.com/u/995376/CommunicationImpl.java
11. http://dl.dropbox.com/u/995376/SejwayValues.java
12. http://lejos.sourceforge.net/nxt/nxj/api/java/io/DataInputStream.html

No comments:

Post a Comment