Kristan Andersen, Simon Lykke, Jacob Styrup Bang

lørdag den 6. oktober 2007

Lesson 5 - The Robot Race

Dagens mål er at få lavet en robot, der kan gennemføre banen så hurtigt som muligt. Det har vi tænkt os at gøre i 3 del skridt.
  • Diskutere og vælge design af robot
  • Implementere programmet, der skal styre robotten
  • Optimere program og design
Ved sidste øvelsesgang fik vi lavet en robot der kunne følge en sort linie og stoppe på et grønt felt. Vi så det dog som en ret stor ulempe at robotten kun havde en sensor. Ved at tilføje flere sensorere kunne robotten vide mere om omgivelserne - fx til hvilken side af den sorte linie den kørte ud over. Vi legede lidt med ideen om at lade robotten køre på den sorte linie istedet for altid at køre lige ved siden af den, så den ikke behøvede at justere retningen så ofte, men med kun en sensor riskerede vi at komme i problemer. Ihvertfald med en simpel implementation, hvor vi starter robotten til venstre for linien og hvis den møder sort kører den bare lige ud, møder den hvidt igen må den være kørt ud over justerer tilbage mod startpositionen- dette kan gå galt i dette tilfælde:
Her starter NXT'en til venstre for stregen, møder sort og kører lige ud langs den hvide linie, men umiddelbart skulle den justere til venstre for at komme tilbage til udgangspositionen, men det vil gå galt fordi linien drejer.

Ved brug af flere sensorer, lad os bare sige 3 fordi NXT'en har 3 indgange, ville vi have mulighed for at kunne følge linien bedre. Ved en montering af sensorerne foran ligesom på nedenstående billede, ville det være let at aflæse hvilken retning banen går i.

Hvis den sorte linie drejer til højre vil den højre blå sensor begynde at aflæse sort og retningen skal justeres mod højre indtil den orange sensor aflæser sort og den højre blå aflæser hvid. På samme måde hvis linien skifter retning mod venstre.

Desværre var der ikke flere sensorer vi kunne låne, så denne løsning blev vi nød til at droppe.

Stadigvæk ville vi gerne have muligheden for at "se" mere af banen. Derfor kom vi på at vi kunne bruge en motor til at rotere sensoren, så den kunne lave et sweep af området foran banen:

I første omgang havde vi et hjul monteret på samme motor der roterede sensoren, så NXT'en bevægede sig i samme retning som sensoren. I princippet gjorde det bare at robotten blev led delt, men der var ikke rigtigt nogen fordel i forhold til den simple linefollower vi implementerede i sidste lektion.

Derfor besluttede vi at fjerne hjulet på den roterende sensor, så farvesensoren kunne rotere uden at påvirke retningen direkte. Håbet var at sweepet kunne laves hurtigt, så vi kunne få information om venstre og højre siden af den sorte linie og derudfra beregne hvordan NXT'en skulle køre.


Programmet blev implementeret således at sweepet prøver at følge linien. Dvs. at når sensoren har set sort og derefter hvid stopper den og roterer tilbage. Værdien hvor linien slutter til højre (hvis den slutter ellers den max_taco) og værdien til venstre, hvor linien slutter bruges til at beregne middelværdien x, der bruges til beregning af hastighederne på motorene der driver hjulene. Vores første forsøg kan ses i grafen nedenuden.

Ideen er at hvis x er positiv skal robotten dreje mod højre. Dvs. at venstre hjul får fuld hastighed, mens hastigheden på det højre hjul varieres. Desværre fandt vi ud af overstående gav en for kraftig styring og værdien blev justeret til den nedenstående graf, der så ud til at virke meget bedre.
Bortset fra det tilfælde hvor x er meget stor. Derfor indsatte vi to thresholds, et til at lade det ene hjul floate og et andet til at bakke på det ene hjul for at få skarpere sving ved store x-værdier.

Vi lavede en del justeringer, da det så ud som om at værdier ikke blev læst ordentligt ved høj hastighed på sweepet - se fx denne video hvor det går galt:


Endvidere fandt vi ud af at hvis den sorte linie drejer meget skarp kan vi risikere at et sweep kun læser hvidt og ingen sort. Dermed ville robotten ikke vide hvad skal gøre og vi blev nød til at implementere en løsning der sagde at hvis den kun så hvidt skulle den bare dreje til venstre for finde banen igen.
Endelig kom vi frem til et optimeret robot der rent faktisk ville kunne gennemføre banen, ved at ændre på motorhastigheder og thresholds. Langsomt men sikkert kørte den, uheldigvis fik vi en fejl læsning, da vi satte den til at stoppe på grønt. Derfor blev vi nød til at lave en counter på grønt, så der skulle gentagne målinger til før robotten konkluderer der er grønt og stopper.

Ingen kommentarer: