This is an old revision of the document!
Table of Contents
LAB1
Date: September 5th 2008
Duration of activity: 9-13.30
Participants: Kasper, Johnny og Bent
Formål: Formålet med denne øvelse er at få installeret software og oprette kommunikation via USB/Bluetooth til NXT modulet, som vi har døbt Marvin. Herefter er det planen at lave en lille test af lys aktuatoren/sensoren ved at udlæse værdier målt ved forskellige underlag/farver. Til sidst uploades et lille program til Marvin, hvor robotten gerne skal kunne følge en sort linje ved hjælp af lys aktuatoren/sensoren. Derudover skal der ryddes op i LEGO kasserne, så alle de nødvendige sensorer og aktuatorer er at finde i kasserne.
Softwareinstallation/Kommunikation
Problemer med installation af software. Kan vise sig at være problematisk at køre på Vista, men kan installeres på XP og Linux. Det viser sig at være problematisk at flashe NXT modulet via USB og Bluetooth - vi kan ikke kommunikere med modulet. Det er ikke muligt at ressette NXT modulet, der formodes at være i stykker. Efter samtale med vejlederen vælges at skifte til et andet modul. Det nye modul befinder sig på Ole's kontor, men han er ikke tilstede. Efter at have testet, at dette nye modul kan resettes, vælger vi at anvende dette modul for at komme videre).
Vi fik herefter hjælp til at flashe fra en anden gruppe, hvorefter det var muligt at uploade programer til modulet.
I mellemtiden blev der iøvrigt indsamlet legostumper til kasserne.
Første upload af program
Uploadede programet linefollower, se herunder, og testede Marvin den optagenede bane. Programmet anvender en bang-bang controller, der med hjælp fra lys sensoren holder
Foretog ændringer i programmet og testede på banen, test ikke OK.
- Hastigheden svarede ikke til forventningerne, derfor ændrede vi programmet tilbage og skiftede batteri og foretog ny test. Problemet blev ikke løst. Testede motorer på en anden gruppes NXT modul, og motorerne virkede fint. Hentede et HELT NYT NXT modul, flashede, uploadede igen java koden fra hjemmesiden og testede endnu engang. Stadig samme problem.
Frustration!
Henter nu endnu engang java kode (linefollower) fra hjemmesiden for at være helt sikker. Sletter alt gammel kode, linker, uploader. Upload succesfuld
Det konkluderes, at vi har kørt med forkert kode - øv, men nu virker det!
Koden
Koden kan findes via linket http://legolab.daimi.au.dk/DigitalControl.dir/NXT/Lesson1.dir/Lesson.html.
import lejos.nxt.*; /** * A simple line follower for the LEGO 9797 car with * a single light sensor. * * The light sensor should be connected to port 3. The * left motor should be connected to port C and the right * motor to port B. * * Variables initialized with a constant string are used * in the LCD.drawString calls of the control loop to * avoid garbage collection. * * @author Ole Caprani * @version 22.08.08 */ public class LineFollower { public static void main (String[] aArg) throws Exception { String left = "Left "; String right= "Right"; LightSensor light = new LightSensor(SensorPort.S3); final int blackWhiteThreshold = 45; final int forward = 1; final int stop = 3; final int flt = 4; final int power = 80; // Use the light sensor as a reflection sensor light.setFloodlight(true); LCD.drawString("Light %: ", 0, 0); // Show light percent until LEFT is pressed while (! Button.LEFT.isPressed()){ LCD.drawInt(light.readValue(), 3, 9, 0); LCD.refresh(); } // Follow line until ESCAPE is pressed while (! Button.ESCAPE.isPressed()){ if (light.readValue() > blackWhiteThreshold){ // On white, turn right LCD.drawString(right, 0, 1); MotorPort.B.controlMotor(0,stop); MotorPort.C.controlMotor(power, forward); } else{ // On black, turn left LCD.drawString(left, 0, 1); MotorPort.B.controlMotor(power, forward); MotorPort.C.controlMotor(0,stop); } LCD.drawInt(light.readValue(), 3, 9, 0); LCD.refresh(); Thread.sleep(100); } // Stop car gently with free wheel drive MotorPort.B.controlMotor(0,flt); MotorPort.C.controlMotor(0,flt); LCD.clear(); LCD.drawString("Program stopped", 0, 0); LCD.refresh(); Thread.sleep(1000); } }
Test af Sensor - transmitter/Optokobler
Vi når at måle følgende intensiteter fra lysdioderne:
Overflade | Intensitet |
---|---|
sort | 36 |
hvid | 56 |
blå | 40-44 |
grå | 47 |
brun tape | 46-49 |
blåmønstret gulv | 41 |
Desuden bemærkes at afstanden har stor påvirkning på tallene.