Monday, April 28, 2014

Embedded Systems Lesson 9

Date: 29/4 2014
Duration of Exercise: 3 timer
Group Members Participating:
Henrik Jørgensen
Michael Schiønning
William Thorsen

Mål

Målet med denne øvelsesgang er at gennemføre øvelserne til denne uges ugeseddel Navigation and Map Building

Plan

Planen for denne uge er:
  • Bygge en robot til øvelserne
  • Udføre opgaverne på ugesedlen 
  • Påbegynde blogindlæg

Fremgangsmåde

Vi lagde ud med at bygge basen til en robot ved at genbruge vores design fra forrige uges opgave. Derefter testede vi, hvilke hjul der ville være bedst til eksperimentet.

Vi startede med at prøve de store flade hjul med mål 81.6 x 15, fordi vi gerne ville hæve robotten så vi kunne få et roterende hjul ind under. Dette gjorde dog at udførselen af TachoNavigator blev meget "stor" med hensyn til arealet robotten kørte.

Efter et par test for at sikre os at koden virkede skiftede vi til de mindre 56 x 26 hjul og gjorde selve ruten for robotten 5 gange mindre, hvilket gav et fint lille areal hvor robotten kørte. De mindre hjul gjorde også at robotten bevægede sig mere roligt og forekom at have mindre slip imellem dækkene og overfladen. Desuden var svingene ikke så voldsomme og kastede ikke robotten ud af kurs. Aligevel kunne vi ikke konsistent få den tilbage til udgangspositionen.
Vi fik dog robotten til at give det samme resultat som Blightbot og derved finde frem til den distance den skal køre.

Koden kan findes her

Dernæst skulle vi som Maja Mataric placerer en marker for enden af robotten så vi kunne tegne den rute som vi havde kørt. Her opstod et problem med designet;

Vi havde spændt boardmarkeren foran med elastikker og da vi kørte robotten begyndte den at ryste så vi fik lange rækker af prikker eller bare ingenting.

For at løse dette forsøgte vi at sætte et par extra elastikker på som kunne presse boardmarkeren ned på whiteboardet.
Dette gav flere problemer da boardmarkeren da løftede robotten en smule og dermed havde hjulene ikke god kontakt med underlaget og den drejede da helt ud af kurs. I stedet for at bruge tid på et justere designet valgte vi at gå videre og bygge en ny robot fra bunden af med byggeguiden fra uge 7, da samme robot skal bruges til næste uges opgave, Sumobryderen.

 


Ovenstående kørsel er et resultat af

LegacyNavigator robot = 
new LegacyNavigator(wheelDiameter, trackDiameter, Motor.B, Motor.C, true);
for(int i = 0; i < 10; i++) {
robot.goTo(40F, 0F);
robot.goTo(20F, 20F);
robot.goTo(20F, -10F);
robot.goTo(0F,  0F);
}

Improved navigation.

En måde til at undgå objekter foran robotten er ved at bruge den  ultrasoniske sensor. Sensoren skal køre i en tråd hele tiden ved siden af selve vores rutenavigation. Registrerer den ultrasoniske sensor et objekt som er i vejen skal en ny rute beregnes.


Posering

Fremgangsmåden i [2] kaldes dead reckoning og deres implementation beregnes en fejlmargin set udfra hvor meget et givent hjul har kørt i forhold til hvad det burde have kørt. Denne korrektion for fejl kan ses som en P kontrol.


Fremgangsmåden i [5] er at beregne motorkraften udfra en model og så undervejs korrigere for eventuelle afvigelser. Da [5] ikke akkumulerer fejl bør den være mere præcis.


Beregningerne foretages i [5] ved tidsinterval kontra [2] der beregner efter en given kørt distance. Så her burde [5] også være mere præcis, dog kun så længe at tidsintervallet er mindre end distance intervallet i [2].


Lejos egen algoritme er implementeret i OdometryPoseProvider.updatePose()
Her ses det at Lejos skelner imellem det at dreje og det at køre lige ud. Denne skarpe opdeling virker til at give plads til akkumulering af fejlmargin da det hele afhænger af den drejede vinkel, som er upræcis.

Konklusion

I denne uge har vi arbejdet med tacho counteren og erfaret, at selvom der kan forekomme afvigelser, specielt når vores robot svingede, er det rimeligt simpelt at kunne præcisere robottens bevægelser vha. manipulering af tacho counteren. Der vil dog over tid nærmest uundgåeligt akkumulere fejl den antagede og reelle placering ved brug af dead-reckoning. Upræcise tachocounters, slip i dækkene o.l. gør at selv den perfekte algoritme vil afvige over tid.

No comments :

Post a Comment