c46b5fdf551176c6cc2ba958bfda61da3bfe7ced
[IRC.git] / Robust / src / Benchmarks / SSJava / JavaNatorInfer / StrategyMgr.java
1 /*\r
2  * StragegyMgr.java\r
3  *\r
4  * Copyright (c) 1993-2002 Sun Microsystems, Inc. All Rights Reserved.\r
5  *\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
10  * with Sun.\r
11  *\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
18  */\r
19 \r
20 /**\r
21  * StrategyMgr - an isolation class ment for programmers to modify and create\r
22  * thier own code for robot strategy.\r
23  * \r
24  * @author Michael Gesundheit\r
25  * @version 1.0\r
26  */\r
27 \r
28 \r
29 public class StrategyMgr {\r
30 \r
31   \r
32   private MotorControl mc;\r
33   private static final int zeroSpeed = 45;\r
34   \r
35   private Random rand;\r
36   \r
37   private boolean DEBUGL = true;\r
38   // private boolean DEBUGL = false;\r
39 \r
40   // private boolean DEBUG = true;\r
41   \r
42   private boolean DEBUG = true;\r
43 \r
44   /**\r
45    * Constructor - Invoke communication to remote application thread\r
46    */\r
47   public StrategyMgr(@DELEGATE MotorControl motorControl) {\r
48     mc = motorControl;\r
49     rand = new Random();\r
50   }\r
51 \r
52   void processSonars( byte sonarSensors) {\r
53 \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
59       // provide data.\r
60       if (DEBUG) {\r
61         System.out.println("sonar: NO SONARS!!!!!!!!");\r
62       }\r
63     } else if ((sonarSensors & (RobotMain.LF_RT_FRONT)) == (RobotMain.LF_RT_FRONT)) {\r
64       if (DEBUG) {\r
65         System.out.println("sonar: straight");\r
66       }\r
67       straight();\r
68     } else if ((sonarSensors & RobotMain.LF_FRONT) == RobotMain.LF_FRONT) {\r
69       if (DEBUG) {\r
70         System.out.println("sonar: bearLeft");\r
71       }\r
72       bearLeft();\r
73     } else if ((sonarSensors & RobotMain.RT_FRONT) == RobotMain.RT_FRONT) {\r
74       if (DEBUG) {\r
75         System.out.println("sonar: bearRight");\r
76       }\r
77       bearRight();\r
78     } else if ((sonarSensors & RobotMain.RT_SIDE) == RobotMain.RT_SIDE) {\r
79       if (DEBUG) {\r
80         System.out.println("sonar: right");\r
81       }\r
82       spinRight();\r
83     } else if ((sonarSensors & RobotMain.LF_SIDE) == RobotMain.LF_SIDE) {\r
84       if (DEBUG) {\r
85         System.out.println("sonar: left");\r
86       }\r
87       spinLeft();\r
88     } else if ((sonarSensors & RobotMain.BK_SIDE) == RobotMain.BK_SIDE) {\r
89       if (DEBUG) {\r
90         System.out.println("sonar: spin180");\r
91       }\r
92       spin180();\r
93     }\r
94   }\r
95 \r
96   void processLineSensors( byte lineSensorsMask) {\r
97 \r
98      int count = 0;\r
99 \r
100     while ((lineSensorsMask & RobotMain.LS_ALL) != 0) {\r
101 \r
102       if (count > 100) {\r
103         // if the robot fail to get out of weird condition wihtin 100 steps,\r
104         // terminate while loop for stabilizing behavior.\r
105         stop();\r
106         break;\r
107       }\r
108       count++;\r
109 \r
110       if ((lineSensorsMask & RobotMain.LS_ALL) == RobotMain.LS_ALL) {\r
111         if (DEBUGL)\r
112           System.out.println("Line Sensors - ALL");\r
113         stop();\r
114       } else if ((lineSensorsMask & RobotMain.LS_LEFT_RIGHT) == RobotMain.LS_LEFT_RIGHT) {\r
115         if (DEBUGL)\r
116           System.out.println("Line Sensors - Left & Right");\r
117         back();\r
118         try {\r
119           // Thread.sleep(1000);\r
120         } catch (InterruptedException ie) {\r
121         }\r
122         spin180();\r
123         try {\r
124           // Thread.sleep(1000);\r
125         } catch (InterruptedException ie) {\r
126         }\r
127       } else if ((lineSensorsMask & RobotMain.LS_LEFT_REAR) == RobotMain.LS_LEFT_REAR) {\r
128         if (DEBUGL)\r
129           System.out.println("Line Sensors - Left & Rear");\r
130         bearRight();\r
131         try {\r
132           // Thread.sleep(1000);\r
133         } catch (InterruptedException ie) {\r
134         }\r
135       } else if ((lineSensorsMask & RobotMain.LS_RIGHT_REAR) == RobotMain.LS_RIGHT_REAR) {\r
136         if (DEBUGL)\r
137           System.out.println("Line Sensors - Right & Rear");\r
138         bearLeft();\r
139         try {\r
140           // Thread.sleep(1000);\r
141         } catch (InterruptedException ie) {\r
142         }\r
143       } else if ((lineSensorsMask & RobotMain.LS_LEFT) == RobotMain.LS_LEFT) {\r
144         if (DEBUGL)\r
145           System.out.println("Line Sensors - Left");\r
146         backBearRight();\r
147 \r
148         try {\r
149           // Thread.sleep(1000);\r
150         } catch (InterruptedException ie) {\r
151         }\r
152       } else if ((lineSensorsMask & RobotMain.LS_RIGHT) == RobotMain.LS_RIGHT) {\r
153         if (DEBUGL)\r
154           System.out.println("Line Sensors - Right");\r
155         backBearLeft();\r
156         try {\r
157           // Thread.sleep(1000);\r
158         } catch (InterruptedException ie) {\r
159         }\r
160       } else if ((lineSensorsMask & RobotMain.LS_REAR) == RobotMain.LS_REAR) {\r
161         if (DEBUGL)\r
162           System.out.println("Line Sensors - Rear");\r
163         straight();\r
164         try {\r
165           // Thread.sleep(1000);\r
166         } catch (InterruptedException ie) {\r
167         }\r
168       }\r
169       lineSensorsMask = TestSensorInput.getCommand();\r
170     }// while loop\r
171   }\r
172 \r
173   public void stop() {\r
174     if (DEBUG)\r
175       System.out.println("StrageyMgr: stop....");\r
176     mc.setSpeedLeft(zeroSpeed);\r
177     mc.setSpeedRight(zeroSpeed);\r
178   }\r
179 \r
180   public void search() {\r
181     if (DEBUG)\r
182       System.out.println("StrategyMgr: search....");\r
183     mc.setSpeedLeft(70);\r
184     mc.setSpeedRight(50);\r
185   }\r
186 \r
187   public void straight() {\r
188     if (DEBUG)\r
189       System.out.println("StrategyMgr: strait....");\r
190     mc.setSpeedLeft(100);\r
191     mc.setSpeedRight(100);\r
192   }\r
193 \r
194   public void spinRight() {\r
195     if (DEBUG)\r
196       System.out.println("StrategyMgr: spinRight....");\r
197     mc.setSpeedSpinLeft(100);\r
198     mc.setSpeedSpinRight(0);\r
199   }\r
200 \r
201   public void spinLeft() {\r
202     if (DEBUG)\r
203       System.out.println("StrategyMgr: spinLeft....");\r
204     mc.setSpeedSpinLeft(0);\r
205     mc.setSpeedSpinRight(100);\r
206   }\r
207 \r
208   public void spin180() {\r
209      int mod = (rand.nextInt() % 2);\r
210 \r
211     if (DEBUG)\r
212       System.out.println("StrategyMgr: spin180....");\r
213     if (mod == 1) {\r
214       mc.setSpeedSpinLeft(0);\r
215       mc.setSpeedSpinRight(100);\r
216     } else {\r
217       mc.setSpeedSpinLeft(100);\r
218       mc.setSpeedSpinRight(0);\r
219     }\r
220   }\r
221 \r
222   public void right() {\r
223     if (DEBUG)\r
224       System.out.println("StrategyMgr: right....");\r
225     mc.setSpeedTurnLeft(100);\r
226     mc.setSpeedRight(zeroSpeed);\r
227   }\r
228 \r
229   public void left() {\r
230     if (DEBUG)\r
231       System.out.println("StrategyMgr: left....");\r
232     mc.setSpeedLeft(zeroSpeed);\r
233     mc.setSpeedTurnRight(100);\r
234   }\r
235 \r
236   public void bearRight() {\r
237     if (DEBUG)\r
238       System.out.println("StrategyMgr: bearRight....");\r
239     mc.setSpeedTurnLeft(100);\r
240     mc.setSpeedTurnRight(60);\r
241   }\r
242 \r
243   public void bearLeft() {\r
244     if (DEBUG)\r
245       System.out.println("StrategyMgr: bearLeft....");\r
246     mc.setSpeedTurnLeft(60);\r
247     mc.setSpeedTurnRight(100);\r
248   }\r
249 \r
250   public void back() {\r
251     if (DEBUG)\r
252       System.out.println("StrategyMgr: back....");\r
253     mc.setSpeedLeft(0);\r
254     mc.setSpeedRight(0);\r
255   }\r
256 \r
257   public void backBearLeft() {\r
258     if (DEBUG)\r
259       System.out.println("StrategyMgr: backBearLeft....");\r
260     mc.setSpeedLeft(30);\r
261     mc.setSpeedRight(0);\r
262   }\r
263 \r
264   public void backBearRight() {\r
265     if (DEBUG)\r
266       System.out.println("StrategyMgr: backBearRight....");\r
267     mc.setSpeedLeft(0);\r
268     mc.setSpeedRight(30);\r
269   }\r
270 }\r