4 * Copyright (c) 1993-2002 Sun Microsystems, Inc. All Rights Reserved.
\r
6 * This software is the confidential and proprietary information of Sun
\r
7 * Microsystems, Inc. ("Confidential Information"). You shall not
\r
8 * disclose such Confidential Information and shall use it only in
\r
9 * accordance with the terms of the license agreement you entered into
\r
12 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
\r
13 * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
\r
14 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
\r
15 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
\r
16 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
\r
17 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
\r
21 * StrategyMgr - an isolation class ment for programmers to modify and create
\r
22 * thier own code for robot strategy.
\r
24 * @author Michael Gesundheit
\r
27 @LATTICE("C<V,V<T,V*")
\r
28 @METHODDEFAULT("THIS<IN,IN*,THISLOC=THIS,GLOBALLOC=THIS")
\r
29 public class StrategyMgr {
\r
32 private MotorControl mc;
\r
33 private static final int zeroSpeed = 45;
\r
35 private Random rand;
\r
37 private boolean DEBUGL = true;
\r
38 // private boolean DEBUGL = false;
\r
40 // private boolean DEBUG = true;
\r
42 private boolean DEBUG = true;
\r
45 * Constructor - Invoke communication to remote application thread
\r
47 public StrategyMgr(@DELEGATE MotorControl motorControl) {
\r
49 rand = new Random();
\r
52 void processSonars(@LOC("IN") byte sonarSensors) {
\r
54 // 5 sensors. 1,2 are fromnt left and right.
\r
55 // Sensor 3 is right side, 4 back and 5 is left side.
\r
56 if ((sonarSensors & 0x1f) == 0) {
\r
57 // No sensor data may mean dead area between sensors.
\r
58 // Continue with the last gesture until any sensor
\r
61 System.out.println("sonar: NO SONARS!!!!!!!!");
\r
63 } else if ((sonarSensors & (RobotMain.LF_RT_FRONT)) == (RobotMain.LF_RT_FRONT)) {
\r
65 System.out.println("sonar: straight");
\r
68 } else if ((sonarSensors & RobotMain.LF_FRONT) == RobotMain.LF_FRONT) {
\r
70 System.out.println("sonar: bearLeft");
\r
73 } else if ((sonarSensors & RobotMain.RT_FRONT) == RobotMain.RT_FRONT) {
\r
75 System.out.println("sonar: bearRight");
\r
78 } else if ((sonarSensors & RobotMain.RT_SIDE) == RobotMain.RT_SIDE) {
\r
80 System.out.println("sonar: right");
\r
83 } else if ((sonarSensors & RobotMain.LF_SIDE) == RobotMain.LF_SIDE) {
\r
85 System.out.println("sonar: left");
\r
88 } else if ((sonarSensors & RobotMain.BK_SIDE) == RobotMain.BK_SIDE) {
\r
90 System.out.println("sonar: spin180");
\r
96 void processLineSensors(@LOC("IN") byte lineSensorsMask) {
\r
98 @LOC("IN") int count = 0;
\r
100 while ((lineSensorsMask & RobotMain.LS_ALL) != 0) {
\r
103 // if the robot fail to get out of weird condition wihtin 100 steps,
\r
104 // terminate while loop for stabilizing behavior.
\r
110 if ((lineSensorsMask & RobotMain.LS_ALL) == RobotMain.LS_ALL) {
\r
112 System.out.println("Line Sensors - ALL");
\r
114 } else if ((lineSensorsMask & RobotMain.LS_LEFT_RIGHT) == RobotMain.LS_LEFT_RIGHT) {
\r
116 System.out.println("Line Sensors - Left & Right");
\r
119 // Thread.sleep(1000);
\r
120 } catch (InterruptedException ie) {
\r
124 // Thread.sleep(1000);
\r
125 } catch (InterruptedException ie) {
\r
127 } else if ((lineSensorsMask & RobotMain.LS_LEFT_REAR) == RobotMain.LS_LEFT_REAR) {
\r
129 System.out.println("Line Sensors - Left & Rear");
\r
132 // Thread.sleep(1000);
\r
133 } catch (InterruptedException ie) {
\r
135 } else if ((lineSensorsMask & RobotMain.LS_RIGHT_REAR) == RobotMain.LS_RIGHT_REAR) {
\r
137 System.out.println("Line Sensors - Right & Rear");
\r
140 // Thread.sleep(1000);
\r
141 } catch (InterruptedException ie) {
\r
143 } else if ((lineSensorsMask & RobotMain.LS_LEFT) == RobotMain.LS_LEFT) {
\r
145 System.out.println("Line Sensors - Left");
\r
148 // Thread.sleep(1000);
\r
149 } catch (InterruptedException ie) {
\r
151 } else if ((lineSensorsMask & RobotMain.LS_RIGHT) == RobotMain.LS_RIGHT) {
\r
153 System.out.println("Line Sensors - Right");
\r
156 // Thread.sleep(1000);
\r
157 } catch (InterruptedException ie) {
\r
159 } else if ((lineSensorsMask & RobotMain.LS_REAR) == RobotMain.LS_REAR) {
\r
161 System.out.println("Line Sensors - Rear");
\r
164 // Thread.sleep(1000);
\r
165 } catch (InterruptedException ie) {
\r
168 lineSensorsMask = TestSensorInput.getCommand();
\r
172 public void stop() {
\r
174 System.out.println("StrageyMgr: stop....");
\r
175 mc.setSpeedLeft(zeroSpeed);
\r
176 mc.setSpeedRight(zeroSpeed);
\r
179 public void search() {
\r
181 System.out.println("StrategyMgr: search....");
\r
182 mc.setSpeedLeft(70);
\r
183 mc.setSpeedRight(50);
\r
186 public void straight() {
\r
188 System.out.println("StrategyMgr: strait....");
\r
189 mc.setSpeedLeft(100);
\r
190 mc.setSpeedRight(100);
\r
193 public void spinRight() {
\r
195 System.out.println("StrategyMgr: spinRight....");
\r
196 mc.setSpeedSpinLeft(100);
\r
197 mc.setSpeedSpinRight(0);
\r
200 public void spinLeft() {
\r
202 System.out.println("StrategyMgr: spinLeft....");
\r
203 mc.setSpeedSpinLeft(0);
\r
204 mc.setSpeedSpinRight(100);
\r
207 public void spin180() {
\r
208 @LOC("THIS,StrategyMgr.V") int mod = (rand.nextInt() % 2);
\r
211 System.out.println("StrategyMgr: spin180....");
\r
213 mc.setSpeedSpinLeft(0);
\r
214 mc.setSpeedSpinRight(100);
\r
216 mc.setSpeedSpinLeft(100);
\r
217 mc.setSpeedSpinRight(0);
\r
221 public void right() {
\r
223 System.out.println("StrategyMgr: right....");
\r
224 mc.setSpeedTurnLeft(100);
\r
225 mc.setSpeedRight(zeroSpeed);
\r
228 public void left() {
\r
230 System.out.println("StrategyMgr: left....");
\r
231 mc.setSpeedLeft(zeroSpeed);
\r
232 mc.setSpeedTurnRight(100);
\r
235 public void bearRight() {
\r
237 System.out.println("StrategyMgr: bearRight....");
\r
238 mc.setSpeedTurnLeft(100);
\r
239 mc.setSpeedTurnRight(60);
\r
242 public void bearLeft() {
\r
244 System.out.println("StrategyMgr: bearLeft....");
\r
245 mc.setSpeedTurnLeft(60);
\r
246 mc.setSpeedTurnRight(100);
\r
249 public void back() {
\r
251 System.out.println("StrategyMgr: back....");
\r
252 mc.setSpeedLeft(0);
\r
253 mc.setSpeedRight(0);
\r
256 public void backBearLeft() {
\r
258 System.out.println("StrategyMgr: backBearLeft....");
\r
259 mc.setSpeedLeft(30);
\r
260 mc.setSpeedRight(0);
\r
263 public void backBearRight() {
\r
265 System.out.println("StrategyMgr: backBearRight....");
\r
266 mc.setSpeedLeft(0);
\r
267 mc.setSpeedRight(30);
\r