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