Added victory behavior. Refactored some names.
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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() { }
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user