User Tools

Site Tools


marvin:lab1

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.

Herunder ses nogle billeder fra øvelsen.
lab1-1.jpg lab1-2.jpg lab1-3.jpg

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.

Upload af program til NXT modulet

Uploadede programet linefollower.java, se herunder, og testede Marvin på den optegnede bane. Programmet anvender en bang-bang controller, der med hjælp fra lyssensoren holder får Marvin til at køre langs den sorte linje. Testen viser at controlleren er for simpel, men vi agtede ikke umiddelbart at justere på controlleren. Istedet foretages ændringer i den tilførte motorpower programmet, hvorefter der testes på banen. Denne test er ikke godkendt, idet Motorerne opførte uens. Hastigheden svarede ikke til forventningerne, og 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 programmet igen og testede endnu engang. Stadig samme problem.
Herefter Hentes nu endnu engang java koden, linefollower.java fra hjemmesiden for at være helt sikker. Sletter alt det gamle kode, linker, uploader. Der teste forfra og det må 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 har målt 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 mellem sensoren og overfladen samt den generelle lyssætning i rummet har stor påvirkning på tallene. Det er muligt at koble lyssenorer til af den gamle type med en konnektor, men vi har ikke målt på disse.

Konklusion

Det lykkes ikke at flashe NXT modulet, og det lader til, at vi for fremtiden er afhængige af andres hjælp, hvis vi får brug for at flashe igen. Til gengæld kan vi uploade programmer via bluetooth, hvilket fungerer fint. De problemer vi havde med, at motorerne ikke agerede lige effektivt på trods af ens parametre softwaremæssigt, lod til at skyldes en selvforskyldt softwarefejl, men det bemærkes, at batterierne har stor indflydelse på aktuatorernes performance. Dette bør der muligvis tages hensyn til i fremtidige øvelser. Lyssensoren af den nye type er god til at skelne mellem hvid og sort, men til gengæld er det svært at måle forskel på blå og grå. Det må desuden konkluderes at kodeeksemplet med en bang bang kontroller er alt for simpel til at lave en god linefollower med.

Forslag til forbedring

For at lave en god linefollower skal oscillationerne mellem venstre og højre reduceres, så bilen kører i mere bløde kurver. Dertil er idéen fx at tilføje flere lyssensorer, så man kan føde systemet med mere information om banens struktur. Bang bang styringen er for simpel til dette, så der skal laves en mere avanceret styring.

marvin/lab1.txt · Last modified: 2008/10/09 20:32 by rieper