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.LightFeatureDetector;
|
||||
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;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
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 ArcRotateMoveController pilot;
|
||||
@@ -45,7 +46,7 @@ public class RyABI {
|
||||
light = new LightSensor(SensorPort.S4);
|
||||
|
||||
/* 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. */
|
||||
rangeDetector = new RangeFeatureDetector(sonar, 20, 200);
|
||||
@@ -65,10 +66,11 @@ public class RyABI {
|
||||
Button.ESCAPE.addButtonListener(new QuitButtonListener());
|
||||
|
||||
/* Create the behaviors. */
|
||||
behaviors = new Behavior[3];
|
||||
behaviors[0] = new WanderBehavior(pilot, sonar, touch, light, compass, WHEEL_RADIUS, TRACK_WIDTH);
|
||||
behaviors[1] = new SensorCalibrationBehavior(sonar, touch, light, compass, WHEEL_RADIUS, TRACK_WIDTH);
|
||||
behaviors[2] = new AvoidObstaclesBehavior(pilot, sonar, touch, light, compass, WHEEL_RADIUS, TRACK_WIDTH);
|
||||
behaviors = new Behavior[4];
|
||||
behaviors[0] = new WanderBehavior(pilot, sonar, touch, light, compass, WHEEL_DIAMETER, TRACK_WIDTH);
|
||||
behaviors[1] = new SensorCalibrationBehavior(sonar, touch, light, compass, WHEEL_DIAMETER, 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. */
|
||||
arbitrator = new Arbitrator(behaviors, true);
|
||||
|
@@ -13,16 +13,16 @@ public abstract class BaseBehavior implements Behavior {
|
||||
protected TouchSensor touch;
|
||||
protected CompassHTSensor compass;
|
||||
protected LightSensor light;
|
||||
protected float wheelRadius;
|
||||
protected float wheelDiameter;
|
||||
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.sonar = sonar;
|
||||
this.touch = touch;
|
||||
this.compass = compass;
|
||||
this.light = light;
|
||||
this.wheelRadius = wheelRadius;
|
||||
this.wheelDiameter = wheelDiameter;
|
||||
this.trackWidth = trackWidth;
|
||||
}
|
||||
|
||||
|
@@ -24,7 +24,7 @@ public class SensorCalibrationBehavior extends BaseBehavior {
|
||||
@Override
|
||||
public void action() {
|
||||
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);
|
||||
compass.startCalibration();
|
||||
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 {
|
||||
private RobotStateSingleton state;
|
||||
|
||||
public WanderBehavior(ArcRotateMoveController pilot, UltrasonicSensor sonar, TouchSensor touch, LightSensor light, CompassHTSensor compass, float wheelRadius, float trackWidth) {
|
||||
super(pilot, sonar, touch, light, compass, wheelRadius, trackWidth);
|
||||
public WanderBehavior(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();
|
||||
|
||||
|
@@ -15,7 +15,7 @@ public final class RobotStateSingleton {
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
public void setState(States state) {
|
||||
public synchronized void setState(States state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,6 @@ public final class RobotStateSingleton {
|
||||
}
|
||||
|
||||
public enum States {
|
||||
WANDER, SEARCH_BALL, BALL_FOUND, VICTORY;
|
||||
WANDER, SEARCH_BALL, BALL_FOUND, VICTORY, DONE;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user