Varighed:
Tilstedeværende: Jonas, Simon
Siden sidst
Bluetoothforbindelse mellem NXT og PC er blevet oprettet. Det er blevet muligt at sende simple kommandoer over forbindelsen. Disse er; Forward, Backward, Left og Right.
Goals
Målet for i dag, er at få NXT'en til at følge en sort linie for derefter at stoppe i et kryds (intersection).
Derefter skal man kunne sende en kommando til robotten om at køre ud af en af de fire arme fra krydset.
Det næste mål er at udvide serveren, så spilleren kan styre Rabbit entiteten.
Plan
Vi har lavet følgende plan for i dag for at opnå målene.
- Opbygning af en system arkitektur til projektet.
- Udvidelse af server.
- Undersøge den farvesensor, som vi har modtaget.
- Programmere en NXT, som kan følge en linie og stoppe, når den ser et kryds.
- Udvide NXT'en til, at kunne køre ud af en given retning fra krydset.
Results
1:
Nedenfor præsenterer vi den system arkitektur, som er blevet lavet til projektet. Se beskrivelsen af projektet Her. På UML diagrammet på billede 2 er der kun vist den arkitektur, som indtil videre er blevet implementeret.
![]() |
| Billede 1 |
På billede 1 ses Hardware Arkitekturen, hvor også de forskellige komponenters roller er angivet. Arkitekturen består af en server, som har rollen Game Controller. Serveren er den centrale del, som skal står for at give kommandoer til entiteterne i spillet (NXT'erne). Kommunikation foregår over bluetooth.
Spilleren interagerer direkte med serveren gennem en GUI. Her har han mulighed for at starte et nyt spil, samt at foretage sit træk, når det er hans tur.
På billede 2 ses et UML diagram over softwarearkitekturen på serveren. I dette diagram er kommunikationen mellem server og NXT'er udeladt, da dette ikke er implementeret på serveren endnu. Serveren er på nuværende tidspunkt i stand til, at gennemføre et spil, hvor den styrer alle entiteterne selv.
2:
Den centrale klasse på serveren er ServerMainClass. Denne klasse står for at skabe selve spillet, GameModel, GUI'en til spillet, GameGUI, samt tråden der skal kører spillet når det startes fra GUI'en.
GameModel klassen skaber og holder styr på den enkle spil entiteterne (2 jæger, 1 kanin) , spillebrættet og AI'en der kontrollere jægerne.
Kontrol flowet i system er som følge: GameRunner tråden venter på input fra brugeren. Er inputtet et lovlig træk for kaninen, rykkes kanin både i GameModel samt GameGUI. Kontrollen overgives nu til GameModel der lader HunterAI rykke jægerne. Når dette er gjort rykker GameRunner jægerne i GameGUI til deres nye position. Kontrol forløbet forsætter nu forefra indtil, at der, på et givet tidspunkt, står en jæger 1 grid position væk fra kaninen. Enten horisontal eller diagonalt.
3:
For at teste farvesensoren blev der lavet følgende lille program, som kunne give feedback omkring hvilke værdier sensoren giver tilbage.
Til at følge linien, vil det være nok at bruge getLightValue(), da den returnerer en værdi der kan bruges i en PID controller.
Under forsøgende viste det sig, at sensoren skal være særdeles tæt på objektet, man ønsker at have farven af. Som det ses på billede 3, er der tale om millimeter.
4 og 5:
Til at følge en linie blev der implementeret en simple algoritme, som kigger på om farvesensoren ser hvid eller sort. Derefter drejer den så lidt til venstre eller højre alt efter hvad der ses. Det er et lidt Quick And Dirty fix, som efterfølgende skal rettes til en PID kontroller.
For at dreje robotten, bruges følgende algoritme. NXT’en beregner ud fra retningen, givet i kommandoen, og dens nuværende retning hvor mange grader den skal dreje. De grader den skal dreje divideres med 90 for at angive hvor mange sorte streger den skal se før den skal stoppe. Når robotten begynder at dreje måler den så på de lysværdier den får fra sin lyssensor. Hver gang den ser sort, tæller registrer den det. Hvis den har nået antallet af sorte streger den skal se stopper den, ellers venter den 150 millisekunder med at måle igen, så den samme streg ikke bliver registreret flere gange.
Dette kan lade sig gøre da banen er bygget op som vist på billedet fra Lab 11.
På filmen nedenfor kan ses hvordan robotten kan kontrolleres, med simple kommandoer.
Til næste gang:
- Lav kommunikation mellem NXT og server.
- Forsøg at få forbindelse til flere NXT på samme tid over Bluetooth.
2:
Den centrale klasse på serveren er ServerMainClass. Denne klasse står for at skabe selve spillet, GameModel, GUI'en til spillet, GameGUI, samt tråden der skal kører spillet når det startes fra GUI'en.
GameModel klassen skaber og holder styr på den enkle spil entiteterne (2 jæger, 1 kanin) , spillebrættet og AI'en der kontrollere jægerne.
Kontrol flowet i system er som følge: GameRunner tråden venter på input fra brugeren. Er inputtet et lovlig træk for kaninen, rykkes kanin både i GameModel samt GameGUI. Kontrollen overgives nu til GameModel der lader HunterAI rykke jægerne. Når dette er gjort rykker GameRunner jægerne i GameGUI til deres nye position. Kontrol forløbet forsætter nu forefra indtil, at der, på et givet tidspunkt, står en jæger 1 grid position væk fra kaninen. Enten horisontal eller diagonalt.
3:
For at teste farvesensoren blev der lavet følgende lille program, som kunne give feedback omkring hvilke værdier sensoren giver tilbage.
ColorSensor sensor = new ColorSensor(SensorPort.S1);Programmet blev herefter kørt og farvesensoren blev placeret over forskellige farver karton. Det viser sig at sensoren ret præcist kan bestemme hvilken farve den ser. getColor() metoden returnerer et Color object, som har en enum værdi der beskriver farven. Det kan vi bruge til at bestemme hvornår robotten kommer til et kryds, da disse skal bestå af en rød firkant.
while (!Button.ESCAPE.isPressed()){
int colorValue = sensor.getLightValue();
LCD.drawString("Colorvalue: "+colorValue,0,0);
colorValue = sensor.getRawLightValue();
LCD.drawString("Rawvalue: "+colorValue,0,1);
ColorSensor.Color color = sensor.getColor();
LCD.drawString("Color: "+color.getColor(),0,2);
color = sensor.getRawColor();
LCD.drawString("Raw: "+color.getColor(),0,3);
}
System.exit(1);
Til at følge linien, vil det være nok at bruge getLightValue(), da den returnerer en værdi der kan bruges i en PID controller.
Under forsøgende viste det sig, at sensoren skal være særdeles tæt på objektet, man ønsker at have farven af. Som det ses på billede 3, er der tale om millimeter.
![]() |
| Billede 3 |
4 og 5:
Til at følge en linie blev der implementeret en simple algoritme, som kigger på om farvesensoren ser hvid eller sort. Derefter drejer den så lidt til venstre eller højre alt efter hvad der ses. Det er et lidt Quick And Dirty fix, som efterfølgende skal rettes til en PID kontroller.
For at dreje robotten, bruges følgende algoritme. NXT’en beregner ud fra retningen, givet i kommandoen, og dens nuværende retning hvor mange grader den skal dreje. De grader den skal dreje divideres med 90 for at angive hvor mange sorte streger den skal se før den skal stoppe. Når robotten begynder at dreje måler den så på de lysværdier den får fra sin lyssensor. Hver gang den ser sort, tæller registrer den det. Hvis den har nået antallet af sorte streger den skal se stopper den, ellers venter den 150 millisekunder med at måle igen, så den samme streg ikke bliver registreret flere gange.
Dette kan lade sig gøre da banen er bygget op som vist på billedet fra Lab 11.
På filmen nedenfor kan ses hvordan robotten kan kontrolleres, med simple kommandoer.
Til næste gang:
- Lav kommunikation mellem NXT og server.
- Forsøg at få forbindelse til flere NXT på samme tid over Bluetooth.


