mandag den 3. januar 2011

Afsluttende projekt, 4. dag

Date: 3. Januar 2010
Duration of activity: 4½ hours
Group members participating: Heine Stokholm og Mads Møller Jensen

Dagens mål
  • Lave stregen på banen som robotten skal følge
  • Få robotten til at køre på banen vha de forskellige sekvenser
  • Kigge på repræsentationen af robottens input på computeren
  • Evt. Bluetooth-kommunikation


Plan
  • Lave en grå streg på banen som robotten kan navigere efter. Vi ønsker denne streg pga. af præcision vanskeligheder ved kompasset.
  • Implementere et program som robotten skal køre vha. de forskellige systemer, vi allerede har udviklet
  • Implementere et program som skal lave en grafisk repræsentation af de data vi får fra robotten

Stregen
Vi forsøgte at lave en grå streg af gaffatape på vores bane, men vi mødte et stort problem. For at stregen skal få robotten til at blive på midten af banen, skal stregen placeres ved siden af midten, da robotten jo vil korrigere i forhold til den grå farve på stregen og den hvide farve på pladen. Dette giver os et stort problem, da vi ikke kan vide med sikkerhed, hvilken vej robotten kommer fra, og dermed ikke kan vide på hvilken side af midten, stregen skal placeres. Vi vil derfor i første omgang forsøge at teste, om det er muligt for robotten at gennemføre uden at have en streg at korrigere efter. Dette er meget risikabelt, da vi tidligere har haft problemer med kompassets præcision og derved har en potentiel stor fejlmargin. Vi lægger derfor hovederne i blød for at finde et alternativ.

Sekvensstrategi
Vores program består af tre sekvenser:

  1. Identificer modulet
  2. Find ud af hvor vi skal hen næste gang
  3. Kør derhen
Disse tre sekvenser består af en masse små operationer. Ingen af de tre sekvenser var helt færdige, men vi kunne få robotten til at kører rundt 4x90 grader og bippe, når den så hvid, altså en mulig vej. Herefter valgte robotten en tilfældig vej, og kørte indtil den så en sort markering. Her fandt vi ud af, at vi er nødt til at have en rettesnor til robotten i form af en streg. Det var tydeligt for os at se, at det ikke ville fungere i længden ved kun at bruge kompasset, der simpelthen er for upræcist.  

Fred Martin skriver om fordele og ulemper ved en sekventiel strategi i kapitel 5.3 i bogen "Robotic Explorations". En sekventiel tilgang er en række handlinger man udfører for at opnå et ønsket mål. I vores tilfælde at mappe en bane, der er opbygget af moduler. Men disse handlinger er ikke nok i sig selv, hverken i Fred Martins Groucho tilfælde eller i vores. Da robotten er upræcis, er vi nødt til at have nogle feedbackloops for at korrigere. Dette har vi bl.a. i vores kompas PID-system og i den LineFollower vi er nødt til at lave. Sekventielle strategier egner sig godt i et statisk miljø. Groucho er en robot, som kæmper mod andre robotter i Robo-Pong, og den befinder sig dermed i et dynamisk miljø. Vi har derimod et rimeligt statisk miljø med en fast bane og kun en robot. Alligevel er der nogle ændringer i miljøet, som gør at robotten ikke fungerer perfekt. F.eks. Er det et stort problem at der løber strøm i gulvet og i sidepanelerne og det giver vores kompas store problemer. Vi mener dog, at den sekventielle tilgang er vejen at gå, da den opgave vi har opstillet minder meget om en matematisk algoritme, som også består af en række operationer som anvendes på noget data.


Grafisk repræsentation
Vi har lavet et meget simpelt program, som tager et array af strenge, og laver en grafisk repræsentation af disse strenge. I alt sin enkelthed ud på følgende:
  1. Vi gemmer de 11 forskellige banemoduler i et map. Hvert modul er repræsenteret af et 300x300 pixel jpeg-billede, som vi har lavet meget primitivt i paint.
  2. Vi læser array'et igennem, hvor hver streng repræsenterer et specifikt modul. Strengens placering i arrayet, afgør hvor i griddet det placeres. 
  3. Til sidst vises billederne i et grid som svarer til banens opbygning.
Programmet er lavet til at mappe vores specifikke bane, eller i hvert fald en bane af samme størrelse, dvs. 3x3 moduler. Placeringerne i arrayet giver følgende placering i griddet:
Koden for programmet kan ses her: RoadmapRepresentation.java
For at programmet virker skal man lave de 11 moduler og give dem de rigtige navne som er angivet i koden.

Stregen, del 2
Vi har besluttet os for alligevel at lave en grå streg på midten af banemodulerne. Vi kan kompensere for at robotten ikke kører præcis midt på modulet ved at flytte de små sorte markeringer. Markeringerne er i forvejen placeret i forhold til hvilken vej man kommer ind på et modul. Da vi altid vil køre på samme side af den grå streg, er det derfor muligt at flytte markeringerne. Dette betyder, at vi vil have problemer med at få lyssensoren helt ud og læse kanterne, fordi robotten ikke længere holder midt på modulet. Dette kan løses ved enten at forlænge armen som lyssensoren sidder på eller ved at gøre kanterne bredere.
Vi har lavet den tynde grå streg på banen.

Status
Vi har fået et program , der kan tage et streng-array og vise en grafisk repræsentation af de forskellige banemoduler. Vi har fået en streg som kan korrigere robotten, når kompasset er upræcist. Vi har set, hvor langt vi er med vores program.

Næste gang
Næste gang skal vi arbejde med at få sekvensstrategien til at virke og så skal vi flytte alle de sorte markeringer, så de passer til, at robotten kører ved siden af midten.

Referencer
Fred G. Martin, Robotic Exploration: "A Hands-On Introduction to Engineering", 2001 Prentice-Hall 

Ingen kommentarer:

Send en kommentar