Thursday, March 14, 2013

Week 7

Dato:

14-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. farvesensoren og gyrosensoren med NXT Intelligent Brick placeret horisontalt, hvilket var det, vi manglede at lave fra sidste uge. Desuden har vi bygget Braintenberg køretøjer med udgangspunkt i "figur 1"1 og programmeret dem inspireret af det, der stod beskrevet i de to noter af Tom Dean2.

Mål

Målet for denne laboratoriesession er at lave de resterende opgaver fra Week 6 ("Self-balancing robot with color sensor" og "Self-balancing robots with gyro sensor")3 samt at lave opgaverne for "Week 7 - Embodied Agents" og derigennem få et indblik i hvordan man kan lave Braintenberg køretøjer vha. NXT. Desuden er målet også at oprette et blogindlæg for denne laboratoriesession.

Plan

  • Løse opgaverne "Self-balancing robot with color sensor" og "Self-balancing robots with gyro sensor" fra "Week 6 - Communication and Embedded Systems"3.
  • Løse opgaverne for "Week 7 - Embodied Agents"4.
  • Udarbejdelse af blogindlæg for denne laboratoriesession.

Opgaver


Self-balancing robot with color sensor

Sidste uge udskiftede vi lyssensoren på vores LEGO-robot med en farvesensor og begyndte på at teste, om vi kunne få den til at balancere ved brug af farvesensoren. Efter at have testet videre på dette denne laboratoriesession, har vi erfaret at farvesensoren kan bruges lige så godt som lyssensoren. Den kan stadig balancere nogenlunde, men ikke særlig længe uden hjælp. Det er altså ikke lykkedes os at forbedre robottens evne til at balancere ved skiftet mellem disse to sensorer.

Self-balancing robot with gyro sensor

Før vi forsøgte med at bruge gyrosensoren til at få vores LEGO-robot til at balancere, afprøvede vi hvordan gyrosensoren virker5. Vi monterede den på toppen af vores robot så den pegede op ad, og startede med at prøve på at få gyrosensoren til at kalibrere, men vi kunne ikke få den til at kalibrere rigtigt. Problemerne vi fik med kalibreringen var fordi, vi forventede, at den skulle kalibreres til at have et udgangspunkt på 0, og man derefter kunne bruge den til at tage målinger på vinklen i forhold til udgangspunktet. Efter at have brugt en del tid på dette, besluttede vi os for at gå videre til denne uges opgaver. Vi fandt efterfølgende ud af at udgangspunktet ikke behøver at være 0, men at det skal bruges til at regne ændringen ud i forhold til målingen. Derudover kan gyrosensoren ikke give en værdi for, hvilken vinkel den befinder sig i i forhold til startpositionen, men den kan bruges til at finde accelerationen i en given retning.

Vehicle 1

Med udgangspunkt i Tom Deans noter om Braitenbergs køretøjer har vi lavet et program til en robot med 2 motorer og én lydsensor. Styrken, der tilføjes motorerne, er i denne opgave ens, hvilket vil sige at bilen enten kører lige frem eller bakker lige.
Vi startede med at mappe de rå værdier fra lydsensoren til en værdi mellem 0 til 100 og bruge det som styrke til motorerne. Derfor kunne den kun køre frem til at starte med, men efter at have ændret mapningen til at ligge mellem -100 til 100, brugte vi de negative værdier til at angive hastigheden, hvormed bilen skulle bakke.


Da vi startede på opgaven, havde vi placeret lydsensoren tæt på motorerne, men støjen fra motorerne påvirkede dens opførsel meget. Når den først begyndte at køre frem med høj hastighed, gjorde støjen fra motorerne at den fortsatte frem i samme tempo hele tiden. Derfor flyttede vi lydsensoren op på toppen, et godt stykke fra motorerne.
Den rå værdi som hentes fra lydsensoren kan ligge mellem 0 til 1023. Derfor startede vi med at bruge de værdier som min. og maks. til normaliseringen fra målingsværdi, til styrkeværdi til motoren. Med de værdier skulle der meget støj til at få bilen til at køre frem. Dette kunne som beskrevet af Braitenberg skyldes, at min og maks målingsværdierne ikke er realistiske i det miljø, vi tester vores robot. Derfor vil vi mens programmet kører løbende opdatere min. og maks. værdierne i forhold til de målinger der er taget. Dette gør vi ved at tjekke om hver måling er større end maks. eller mindre end min. Hvis den er større end maks. opdateres maks til målingens værdi. Hvis den er mindre end min. opdateres min. til målingens værdi. På den måde normaliseres sensor-målingerne ud fra det miljø robotten befinder sig i.

Den excitatoriske udgave bevægede sig aldrig tilbage med fuld styrke, da der hele tiden var lidt støj, f.eks. fra bilens motorer. Til gengæld kom den let til at bevæge sig hurtigt frem fordi, så snart en lydmåling lå over middel af min. og maks. værdierne, fik motorerne meget styrke frem. Den inhibitoriske udgave bevægede sig modsat af den excitatoriske. Programmet vi har skrevet til vehicle 1 kan ses i Vehicle1.java6.


Vehicle 2

Programmet vi har lavet til vehicle 2 ligner meget programmet fra vehicle 1. Den største forskel er at lydsensoren er skiftet ud med 2 lyssensorer, og de to motorer får styrke fra hver sin sensor. Derudover har vi tilføjet et array, som indeholder de seneste N målingsværdier7, og maks. og min. værdierne findes ud fra dette array. Vi lavede nogle forsøg med at tage robotten ud i skarpt sollys og bagefter tilbage i et mørkt rum. Der var en tydelig forbedring, når vi brugte arrayet til at begrænse maks og min værdierne. Hvis arrayet ikke blev brugt, havde robotten svært ved at tilpasse sig det nye miljø.

Den excitatoriske udgave kører væk fra lyset, hvilket kan ses i videoen her:


Den inhibitoriske kører mod lyset, hvilket kan ses i videoen her:


Vores program til vehicle 2 kan ses i Vehicle2.java8.

Vechicle 3

Til denne opgave monterede vi en ultrasonicsensor på bilen foruden de sensorer, som vi havde monteret på den i forrige opgave. Dvs. den nu har 2 lyssensorer, 1 ultrasonicsensor og 2 motorer. For at få målingerne fra ultrasonicsensoren med i bilens opførsel, normaliserede vi værdien fra dens målinger særskilt, mens vi stadig normaliserede værdien fra hver lyssensor, der bruges til hver sin motor. Den normaliserede værdi fra ultrasonicsensoren, bruger vi til at påvirke begge motorstyrker ens. Det betyder ikke at begge motorer får samme styrke, fordi de er også påvirket af hver sin lyssensor.
For at udregne en motorstyrke som er påvirket af både lyssensorerne og ultrasonicsensoren, har vi gjort følgende:

  1. Lyssensormålingerne og ultrasonicsensormålingerne har vi særskilt normaliseret til at ligge mellem 0 og 100.
  2. Den motorstyrke, der tilføjes, udregnes således: En normaliseret lyssensormålig - (100 - en normaliseret ultrasonicsensormåling).
Dette gør at bilen stadig enten følger lyset eller går væk fra lyset alt efter, om vi har brugt en excitatorisk eller inhibitorisk tilslutning mellem motorerne og lyssensorerne, samt at den holder afstand til genstande (så længe den kører lige frem). Resultatet kan ses i videoen nedenunder.

Koden til Vehicle 3 kan ses i Vehicle3.java9.

Konklusion

Denne uge har vi eksperimenteret videre med at få LEGO-robotten til at balancere vha. farvesensoren og gyrosensoren. Resultatet af dette var, at vi kunne få robotten til at balancere nogenlunde, men ikke særlig længe uden hjælp vha. farvesensoren, ligesom vi kunne det med lyssensoren fra sidste gang. Vi fik monteret gyrosensoren på robotten, men vi fik den aldrig robotten til at balancere ved at benytte denne. Dette skyldtes, at vi havde nogle problemer med at få den til at kalibrere til 0, som vi forventede, at den skulle, men vi erfarede senere at udgangspunktet ikke behøvede at være 0, og at vi i stedet for skulle have kigget på ændringen af en måling i forhold til udgangspunktet.
Vi har endvidere bygget Braintenberg køretøjer med udgangspunkt i figur 1 og programmeret dem inspireret af det, der stod beskrevet i de to noter af Tom Dean. Dette har vi gjort ved at bruge forskellige sensorer individuelt, men også ved at kombinere dem. Lydsensoren har vi brugt til at lave et køretøj, der bevæger sig enten hurtigere desto højere lyden fra omgivelserne er, eller modsat alt efter om forbindelserne er excitatoriske eller inhibatoriske. Desuden har vi brugt to lyssensorer til at styre, hver sin motor, hvor lyssensoren bestemmer, hvor meget power motoren skal have. Den excitatoriske udgave kørte væk fra lyset og den inhibatoriske kørte mod lyset. Til sidst monterede vi, foruden de to lyssensorer, ultrasonicsensoren på bilen, og implementerede en måde hvorpå, vi kunne kombinere de forskellige power-værdier til motorerne, som kom fra de forskellige sensorer.
____________________________________________________________________________________________________________

1. http://legolab.cs.au.dk/DigitalControl.dir/NXT/pictures.dir/vehicles.gif
2.
http://www.cs.brown.edu/people/tld/courses/cs148/02/introduction.html
http://www.cs.brown.edu/people/tld/courses/cs148/01/vehicles/vehicles.htm
3. https://services.brics.dk/java/courseadmin/DigitalControl/pages/Week+6+-+Communication+and+Embedded+Systems
4. https://services.brics.dk/java/courseadmin/DigitalControl/pages/Week+7+-+Embodied+Agents
5. http://lejos.sourceforge.net/nxt/nxj/api/lejos/nxt/addon/GyroSensor.html
6. https://sites.google.com/site/digikaison/Vehicle1.java
7. https://sites.google.com/site/digikaison/Measurement.java
8. https://sites.google.com/site/digikaison/Vehicle2.java
9. https://sites.google.com/site/digikaison/Vehicle3.java

No comments:

Post a Comment