Added victory behavior. Refactored some names.

This commit is contained in:
Miguel Angel Astor Romero
2016-05-23 12:39:23 -04:30
parent 283baef6b7
commit f65f24b6c5
6 changed files with 60 additions and 14 deletions

View File

@@ -18,11 +18,12 @@ import ve.ucv.ciens.cicore.icaro.ryabi.behaviors.WanderBehavior;
import ve.ucv.ciens.cicore.icaro.ryabi.sensors.FeatureDetectionListener; import ve.ucv.ciens.cicore.icaro.ryabi.sensors.FeatureDetectionListener;
import ve.ucv.ciens.cicore.icaro.ryabi.sensors.LightFeatureDetector; import ve.ucv.ciens.cicore.icaro.ryabi.sensors.LightFeatureDetector;
import ve.ucv.ciens.cicore.icaro.ryabi.behaviors.SensorCalibrationBehavior; import ve.ucv.ciens.cicore.icaro.ryabi.behaviors.SensorCalibrationBehavior;
import ve.ucv.ciens.cicore.icaro.ryabi.behaviors.VictoryBehavior;
import ve.ucv.ciens.cicore.icaro.ryabi.utils.QuitButtonListener; import ve.ucv.ciens.cicore.icaro.ryabi.utils.QuitButtonListener;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class RyABI { public class RyABI {
private static final float WHEEL_RADIUS = 56.0f; private static final float WHEEL_DIAMETER = 56.0f;
private static final float TRACK_WIDTH = 155.0f; private static final float TRACK_WIDTH = 155.0f;
private static ArcRotateMoveController pilot; private static ArcRotateMoveController pilot;
@@ -45,7 +46,7 @@ public class RyABI {
light = new LightSensor(SensorPort.S4); light = new LightSensor(SensorPort.S4);
/* Create the pilot. */ /* Create the pilot. */
pilot = new CompassPilot(compass, WHEEL_RADIUS, TRACK_WIDTH, Motor.A, Motor.C); pilot = new CompassPilot(compass, WHEEL_DIAMETER, TRACK_WIDTH, Motor.A, Motor.C);
/* Create the feature detectors and their listener. */ /* Create the feature detectors and their listener. */
rangeDetector = new RangeFeatureDetector(sonar, 20, 200); rangeDetector = new RangeFeatureDetector(sonar, 20, 200);
@@ -65,10 +66,11 @@ public class RyABI {
Button.ESCAPE.addButtonListener(new QuitButtonListener()); Button.ESCAPE.addButtonListener(new QuitButtonListener());
/* Create the behaviors. */ /* Create the behaviors. */
behaviors = new Behavior[3]; behaviors = new Behavior[4];
behaviors[0] = new WanderBehavior(pilot, sonar, touch, light, compass, WHEEL_RADIUS, TRACK_WIDTH); behaviors[0] = new WanderBehavior(pilot, sonar, touch, light, compass, WHEEL_DIAMETER, TRACK_WIDTH);
behaviors[1] = new SensorCalibrationBehavior(sonar, touch, light, compass, WHEEL_RADIUS, TRACK_WIDTH); behaviors[1] = new SensorCalibrationBehavior(sonar, touch, light, compass, WHEEL_DIAMETER, TRACK_WIDTH);
behaviors[2] = new AvoidObstaclesBehavior(pilot, sonar, touch, light, compass, WHEEL_RADIUS, TRACK_WIDTH); behaviors[2] = new AvoidObstaclesBehavior(pilot, sonar, touch, light, compass, WHEEL_DIAMETER, TRACK_WIDTH);
behaviors[3] = new VictoryBehavior(pilot, sonar, touch, light, compass, WHEEL_DIAMETER, TRACK_WIDTH);
/* Start the program. */ /* Start the program. */
arbitrator = new Arbitrator(behaviors, true); arbitrator = new Arbitrator(behaviors, true);

View File

@@ -13,16 +13,16 @@ public abstract class BaseBehavior implements Behavior {
protected TouchSensor touch; protected TouchSensor touch;
protected CompassHTSensor compass; protected CompassHTSensor compass;
protected LightSensor light; protected LightSensor light;
protected float wheelRadius; protected float wheelDiameter;
protected float trackWidth; protected float trackWidth;
public BaseBehavior(ArcRotateMoveController pilot, UltrasonicSensor sonar, TouchSensor touch, LightSensor light, CompassHTSensor compass, float wheelRadius, float trackWidth) { public BaseBehavior(ArcRotateMoveController pilot, UltrasonicSensor sonar, TouchSensor touch, LightSensor light, CompassHTSensor compass, float wheelDiameter, float trackWidth) {
this.pilot = pilot; this.pilot = pilot;
this.sonar = sonar; this.sonar = sonar;
this.touch = touch; this.touch = touch;
this.compass = compass; this.compass = compass;
this.light = light; this.light = light;
this.wheelRadius = wheelRadius; this.wheelDiameter = wheelDiameter;
this.trackWidth = trackWidth; this.trackWidth = trackWidth;
} }

View File

@@ -24,7 +24,7 @@ public class SensorCalibrationBehavior extends BaseBehavior {
@Override @Override
public void action() { public void action() {
System.out.println("Calib. compass"); System.out.println("Calib. compass");
DifferentialPilot p = new DifferentialPilot(wheelRadius, trackWidth, Motor.A, Motor.C); DifferentialPilot p = new DifferentialPilot(wheelDiameter, trackWidth, Motor.A, Motor.C);
p.setRotateSpeed(25); p.setRotateSpeed(25);
compass.startCalibration(); compass.startCalibration();
p.rotate(720, false); p.rotate(720, false);

View File

@@ -0,0 +1,44 @@
package ve.ucv.ciens.cicore.icaro.ryabi.behaviors;
import java.io.File;
import lejos.nxt.LightSensor;
import lejos.nxt.Sound;
import lejos.nxt.TouchSensor;
import lejos.nxt.UltrasonicSensor;
import lejos.nxt.addon.CompassHTSensor;
import lejos.robotics.navigation.ArcRotateMoveController;
import ve.ucv.ciens.cicore.icaro.ryabi.utils.RobotStateSingleton;
public class VictoryBehavior extends BaseBehavior {
private RobotStateSingleton state;
private File musicSample;
public VictoryBehavior(ArcRotateMoveController pilot, UltrasonicSensor sonar, TouchSensor touch, LightSensor light,
CompassHTSensor compass, float wheelDiameter, float trackWidth) {
super(pilot, sonar, touch, light, compass, wheelDiameter, trackWidth);
state = RobotStateSingleton.getInstance();
musicSample = new File("victory.wav");
if(!musicSample.exists())
musicSample = null;
}
@Override
public boolean takeControl() {
return state.getState() == RobotStateSingleton.States.VICTORY;
}
@Override
public void action() {
if(musicSample != null) {
int milis = Sound.playSample(musicSample);
try { Thread.sleep(milis); } catch(InterruptedException ie) { }
}
state.setState(RobotStateSingleton.States.DONE);
}
@Override
public void suppress() { }
}

View File

@@ -13,8 +13,8 @@ import ve.ucv.ciens.cicore.icaro.ryabi.utils.RobotStateSingleton;
public class WanderBehavior extends BaseBehavior { public class WanderBehavior extends BaseBehavior {
private RobotStateSingleton state; private RobotStateSingleton state;
public WanderBehavior(ArcRotateMoveController pilot, UltrasonicSensor sonar, TouchSensor touch, LightSensor light, CompassHTSensor compass, float wheelRadius, float trackWidth) { public WanderBehavior(ArcRotateMoveController pilot, UltrasonicSensor sonar, TouchSensor touch, LightSensor light, CompassHTSensor compass, float wheelDiameter, float trackWidth) {
super(pilot, sonar, touch, light, compass, wheelRadius, trackWidth); super(pilot, sonar, touch, light, compass, wheelDiameter, trackWidth);
state = RobotStateSingleton.getInstance(); state = RobotStateSingleton.getInstance();

View File

@@ -15,7 +15,7 @@ public final class RobotStateSingleton {
return SingletonHolder.INSTANCE; return SingletonHolder.INSTANCE;
} }
public void setState(States state) { public synchronized void setState(States state) {
this.state = state; this.state = state;
} }
@@ -24,6 +24,6 @@ public final class RobotStateSingleton {
} }
public enum States { public enum States {
WANDER, SEARCH_BALL, BALL_FOUND, VICTORY; WANDER, SEARCH_BALL, BALL_FOUND, VICTORY, DONE;
} }
} }