Implemented AvoidObject behaviour and TextLCD
[des2015.git] / mart / ev3 / ex2 / nl / ru / des / MarsRover.java
1 package nl.ru.des;
2
3 import lejos.hardware.Button;
4 import lejos.hardware.ev3.EV3;
5 import lejos.hardware.ev3.LocalEV3;
6 import lejos.hardware.lcd.Font;
7 import lejos.hardware.lcd.TextLCD;
8 import lejos.hardware.motor.EV3LargeRegulatedMotor;
9 import lejos.hardware.port.MotorPort;
10 import lejos.hardware.sensor.EV3ColorSensor;
11 import lejos.hardware.sensor.EV3TouchSensor;
12 import lejos.hardware.sensor.EV3UltrasonicSensor;
13 import lejos.robotics.SampleProvider;
14 import lejos.robotics.filter.ConcatenationFilter;
15 import lejos.robotics.filter.MeanFilter;
16 import lejos.robotics.subsumption.Arbitrator;
17 import lejos.robotics.subsumption.Behavior;
18 import nl.ru.des.behaviours.AvoidHighObjectBehaviour;
19 import nl.ru.des.behaviours.AvoidLowObjectBehaviour;
20 import nl.ru.des.behaviours.ShutdownBehaviour;
21 import nl.ru.des.behaviours.StayInFieldBehaviour;
22 import nl.ru.des.behaviours.WandererBehaviour;
23 import nl.ru.des.bluetooth.BTController;
24 import nl.ru.des.bluetooth.ColorMemory;
25
26 public class MarsRover {
27 public static final float SAMPLERATE = 100;
28
29 @SuppressWarnings("resource")
30 public static void main(String[] args) {
31 EV3 brick = LocalEV3.get();
32 TextLCD tlcd = brick.getTextLCD(Font.getSmallFont());
33 LCDPrinter.startLCDPrinter(tlcd);
34 System.setOut(LCDPrinter.getPrefixedPrintstream("out: ", tlcd));
35 System.setErr(LCDPrinter.getPrefixedPrintstream("err: ", tlcd));
36
37 ColorMemory mh = new ColorMemory();
38
39 LCDPrinter.print("Loading keylistener...");
40 brick.getKey("Escape").addKeyListener(new ButtonListener());
41
42 BTController btController;
43 LCDPrinter.print("Trying to pair");
44 //btController = BTController.getBTMaster("Rover1", mh); // Master
45 btController = BTController.getBTSlave(mh); // Slave
46 btController.start();
47
48 LCDPrinter.print("Robots are connected");
49
50 LCDPrinter.print("Loading motors...");
51 EV3LargeRegulatedMotor rightMotor = new EV3LargeRegulatedMotor(MotorPort.D);
52 EV3LargeRegulatedMotor leftMotor = new EV3LargeRegulatedMotor(MotorPort.A);
53 leftMotor.setSpeed(300);
54 rightMotor.setSpeed(300);
55 rightMotor.setAcceleration(1000);
56 leftMotor.setAcceleration(1000);
57
58 LCDPrinter.print("Loading touch sensors...");
59 SampleProvider touch = new ConcatenationFilter(
60 new EV3TouchSensor(brick.getPort("S1")).getTouchMode(),
61 new EV3TouchSensor(brick.getPort("S4")).getTouchMode());
62 LCDPrinter.print("Loading color sensor...");
63 SampleProvider color = new EV3ColorSensor(brick.getPort("S2")).getColorIDMode();
64
65 LCDPrinter.print("Loading ultrasone sensor...");
66 SampleProvider ultraSonic = new MeanFilter(new EV3UltrasonicSensor(brick.getPort("S3")).getDistanceMode(), 3);
67
68 LCDPrinter.print("Initializing behaviours...");
69 Behavior[] behaviorList = new Behavior[] {
70 new WandererBehaviour(color, leftMotor, rightMotor, mh),
71 new StayInFieldBehaviour(color, leftMotor, rightMotor),
72 new AvoidLowObjectBehaviour(leftMotor, rightMotor, touch),
73 new AvoidHighObjectBehaviour(leftMotor, rightMotor, ultraSonic),
74 new ShutdownBehaviour(mh)
75 };
76
77 LCDPrinter.print("Initializing arbitrator...");
78 Arbitrator arbitrator = new Arbitrator(behaviorList);
79 LCDPrinter.print("Press any button for takeoff!");
80 Button.waitForAnyPress();
81 arbitrator.start();
82 LCDPrinter.print("Finish");
83 }
84 }