Tid: 8 timer, Deltagere: Kenneth, Rawad.
Siden sidst:
Intet at bemærke.
Formål:
Formålet med denne session er at anvende vores viden fra session 3 omkring IRseekeren, til at designe og udvikle en opponent robot der er istand til at fange den fjernstyrede segway robot.
Plan
- Undersøg svingnings metode med IRSeeker
- Konstruktion af opponent robot
- Software arkitektur
- Evaluering af opponent robot
- Diskussion
- Konklusion
1. Undersøg svingnings metode med IRSeeker
Vi har fået den ide at vi måske kan forøge præcisionen af IRSeekeren ved at bevæge den fra side til side og så lave en løbende gennemsnit. Dermed vil flere af sensorerne i IRSeekeren være i brug når vinkelen skal bestemmes. Derudover vil lys intensiteten fra emitteren blive udjævnet og dette vil måske gøre det muligt at bestemme afstanden mere præcist.
Test
Testen er konstrueret på samme måde som vores tidligere test af IRSeekeren. En enkelt IRSeeker er fastgjort til en motor med en IR bold[1] placeret ca. 30 cm væk. Så drejes sensoren, ved hjælp af motoren, en omgang én grad af gangen mens målinger foretages. Til de initierende test vil vi aflæse målingerne vha. getDirection metoden beskrevet i denne blog[2] og logge dem ved at skrive dem i en fil vha. denne klasse[3]. Test koden bevæger sensoren et vist antal grader til hver side for den ønskede vinkel mens den tilføjer den aflæste værdier til et eksponentielt løbende gennemsnit. Følgende kode blev brugt i testen[4]. Her ses en optagelse af hvordan testen blev udført:
Første Test
Ved den første test valgte vi at give nye målinger en 5% indflydelse på den nye udregning af vinklen. IRSeekerens bevægelse blev sat til 10 grader i hver retning for midtpunktet.
Resultat:
Det ses at sensoren måler direction meget deterministisk hvilket får os til at tro at IRSeekeren bevæger sig for lidt. Samtidig er der ved skift fra en direction til den næste volsom oscillering som kan betyde at nye sensorværdier har for stor indflydelse på den “nye” direction.
I den anden test satte vi bevægelsen af IRSeekeren op til 20 grader i hver retning og indflydelsen fra nye sensorværdier ned til 1%.
Resultat:
Karakteristikken for sensormålingerne ser meget bedre ud efter ændringerne. Dog ved vi ikke om bidraget fra hver måling er for lille og hele målings sættet derfor er forsinket. Med den metode vi bruger vil direction altid være mindst en svingning forsinket da vi ikke tager højde for i hvilken vinkel IRSeekeren er når målingen bliver taget.
2. Konstruktion af opponent robot
Formålet med opponent robotten er at vælte den fjernstyrede segway. På baggrund af vores overvejelser i session 2. Har vi valgt at bygge opponent robotten med 3 hjul. Konstruktionen af opponent robotten er baseret på mindstorm education bogen side 8-23 Selve sensor placeringen er baseret på side 28-30 i samme bog.
Dog har vi modificeret designet lidt. Vi har valgt at sætte sensoren fast til en motor på toppen af robotten, som det kan ses på billedet herunder.
Dette giver os mulighed for at bevæge sensoren rundt vandret, og anvende svingings metoden beskrevet i afsnit 1.
3. Software arkitektur
Til software arkitekturen på opponent robotten anvendes en behavior based subsumption arkitektur. Der er grundlæggende defineret to behaviors til opponent robotten, hhv. DiscoverSegway og KillSegway. Arbitratoren og behavior klassen er skrevet af Ole Caprani [6][7]. Selve opponent robottens kode kan findes her [5].
DiscoverSegway er lavest i behavior hierakiet, og består af simpel rotation.
KillSegway overtager styring når der detekeres et signal på direction 4-6.
public int takeControl()
{
if (intensity >= 100 && direction > 3 && direction < 7)
return 100;
return 0;
}
Herefter sætter killsegway behavior fuld fart fremad og forsøger at ramme segwayen. Hvis direction ikke er 5, justeres retningen en smule ved hjælp af motorene.
public void action()
{
int motorPowerA = 0;
int motorPowerC = 0;
Sound.beep();
LCD.drawString("Attacking",0,3);
while (!_suppressed)
{
if(direction > 5.5)
{
motorPowerA = 65;
motorPowerC = 100;
}
if(direction < 4.5)
{
motorPowerA = 100;
motorPowerC = 65;
}
if(direction >= 4.5 && direction <= 5.5)
{
motorPowerA = 100;
motorPowerC = 100;
}
MotorPort.C.controlMotor(motorPowerC, 1);
MotorPort.A.controlMotor(motorPowerA, 1);
Thread.yield(); //don't exit till suppressed
}
MotorPort.A.controlMotor(0,3);
MotorPort.C.controlMotor(0,3);
Motor.A.suspendRegulation();
Motor.C.suspendRegulation();
}
Til selve motorstyrringen anvendte vi klassen Motor, og brugte forward(), backward() funktionerne. Efter vi testede at subsumption arkitekturen virkede, havde vi brug for mere præcis motor styring og skiftede til Motorport klassen. Da vi begyndte at anvende MotorPort klassens controlmotor funktioner, oplevede vi store problemer med subsumption arkitekturen. Når Killsegway behavior blev aktiveret, kunne andre behaviors ikke overtage når deres konditioner blev opfyldt.
Vi opdagede at dette skyldes motorregulering og løste problemet med at suspendere reguleringen når en behavior bliver afsluttet, som det kan ses i kode segmentet ovenover.
Svingingsmetoden er ikke anvendt i denne iteration af opponent robotten, da de er blevet arbejdet på parallelt vi vil forsøge at integrere disse i næste iteration.
4. Evaluering af opponent robot
Vi nåede desværre ikke at evaluere opponent robotten.
5. Diskussion
Seeker metode
Vi regner med at vi kan få nogle rimelig præcise målinger fra svingnings metoden og at den holder præcisionen selv når bolden befinder sig et stykke fra sensorens midte. Det er dog blevet overvejet om en høj præcision på direction også kan opnåes ved at bevæge IRSensoren så lyskilden(bolden) altid befinder sig imellem to sensorer. Som vi beskrev i Slut Projekt Session 4 overlapper nogle af sensorerne i IRSeekeren. Disse overlap er forholdsvis smalle og mens bolden befinder sig imellem to sensorer kan forskellen i lysintensiteten bruges til at bestemme boldens direction meget præcist. Hvis det er muligt at bevæge IRSeekeren så bolden hele tiden befinder sig i dette overlap kan præcisionen på direction måske øges og forsinkelsen måske mindskes.
Forbedret Svingnings metode
En anden metode som kunne forbedre svingnings metoden kunne være at aflæse vinkelen målingen bliver foretaget i. For dermed at gøre det muligt at udregne direction udfra et lavere antal samples og derefter tage højde for i hvilken vinkel de blev målt. Et lavere antal samples vil derfor også betyde et lavere delay.
6. Konklusion
Vi har testet IRSeekerens præcision i et svingnings scenarie og har fået resultater der tyder på at direction på IR bolden kan fastslås med højere nøjagtighed end tidligere. Disse målinger er ikke afsluttet og vi vil fortsætte med at udvikle og teste denne metode.
Referencer:
[1]:http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=WFB1015
[2]:http://legolabsblog.blogspot.dk/2012/06/slut-projekt-session-4.html
[3]:https://dl.dropbox.com/u/4447110/FileLogger.java
[4]:https://dl.dropbox.com/u/4447110/IRSeekerTest2.java
[5]:https://dl.dropbox.com/u/2779683/Opponent.java
[6]:https://dl.dropbox.com/u/2779683/Arbitrator.java
[7]:https://dl.dropbox.com/u/2779683/Behavior.java
No comments:
Post a Comment