--- /dev/null
+/*\r
+ * StragegyMgr.java\r
+ *\r
+ * Copyright (c) 1993-2002 Sun Microsystems, Inc. All Rights Reserved.\r
+ *\r
+ * This software is the confidential and proprietary information of Sun\r
+ * Microsystems, Inc. ("Confidential Information"). You shall not\r
+ * disclose such Confidential Information and shall use it only in\r
+ * accordance with the terms of the license agreement you entered into\r
+ * with Sun.\r
+ *\r
+ * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF\r
+ * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r
+ * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r
+ * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR\r
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR\r
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.\r
+ */\r
+\r
+/**\r
+ * StrategyMgr - an isolation class ment for programmers to modify and create\r
+ * thier own code for robot strategy.\r
+ * \r
+ * @author Michael Gesundheit\r
+ * @version 1.0\r
+ */\r
+\r
+\r
+public class StrategyMgr {\r
+\r
+ \r
+ private MotorControl mc;\r
+ private static final int zeroSpeed = 45;\r
+ \r
+ private Random rand;\r
+ \r
+ private boolean DEBUGL = true;\r
+ // private boolean DEBUGL = false;\r
+\r
+ // private boolean DEBUG = true;\r
+ \r
+ private boolean DEBUG = true;\r
+\r
+ /**\r
+ * Constructor - Invoke communication to remote application thread\r
+ */\r
+ public StrategyMgr(@DELEGATE MotorControl motorControl) {\r
+ mc = motorControl;\r
+ rand = new Random();\r
+ }\r
+\r
+ void processSonars( byte sonarSensors) {\r
+\r
+ // 5 sensors. 1,2 are fromnt left and right.\r
+ // Sensor 3 is right side, 4 back and 5 is left side.\r
+ if ((sonarSensors & 0x1f) == 0) {\r
+ // No sensor data may mean dead area between sensors.\r
+ // Continue with the last gesture until any sensor\r
+ // provide data.\r
+ if (DEBUG) {\r
+ System.out.println("sonar: NO SONARS!!!!!!!!");\r
+ }\r
+ } else if ((sonarSensors & (RobotMain.LF_RT_FRONT)) == (RobotMain.LF_RT_FRONT)) {\r
+ if (DEBUG) {\r
+ System.out.println("sonar: straight");\r
+ }\r
+ straight();\r
+ } else if ((sonarSensors & RobotMain.LF_FRONT) == RobotMain.LF_FRONT) {\r
+ if (DEBUG) {\r
+ System.out.println("sonar: bearLeft");\r
+ }\r
+ bearLeft();\r
+ } else if ((sonarSensors & RobotMain.RT_FRONT) == RobotMain.RT_FRONT) {\r
+ if (DEBUG) {\r
+ System.out.println("sonar: bearRight");\r
+ }\r
+ bearRight();\r
+ } else if ((sonarSensors & RobotMain.RT_SIDE) == RobotMain.RT_SIDE) {\r
+ if (DEBUG) {\r
+ System.out.println("sonar: right");\r
+ }\r
+ spinRight();\r
+ } else if ((sonarSensors & RobotMain.LF_SIDE) == RobotMain.LF_SIDE) {\r
+ if (DEBUG) {\r
+ System.out.println("sonar: left");\r
+ }\r
+ spinLeft();\r
+ } else if ((sonarSensors & RobotMain.BK_SIDE) == RobotMain.BK_SIDE) {\r
+ if (DEBUG) {\r
+ System.out.println("sonar: spin180");\r
+ }\r
+ spin180();\r
+ }\r
+ }\r
+\r
+ void processLineSensors( byte lineSensorsMask) {\r
+\r
+ int count = 0;\r
+\r
+ while ((lineSensorsMask & RobotMain.LS_ALL) != 0) {\r
+\r
+ if (count > 100) {\r
+ // if the robot fail to get out of weird condition wihtin 100 steps,\r
+ // terminate while loop for stabilizing behavior.\r
+ stop();\r
+ break;\r
+ }\r
+ count++;\r
+\r
+ if ((lineSensorsMask & RobotMain.LS_ALL) == RobotMain.LS_ALL) {\r
+ if (DEBUGL)\r
+ System.out.println("Line Sensors - ALL");\r
+ stop();\r
+ } else if ((lineSensorsMask & RobotMain.LS_LEFT_RIGHT) == RobotMain.LS_LEFT_RIGHT) {\r
+ if (DEBUGL)\r
+ System.out.println("Line Sensors - Left & Right");\r
+ back();\r
+ try {\r
+ // Thread.sleep(1000);\r
+ } catch (InterruptedException ie) {\r
+ }\r
+ spin180();\r
+ try {\r
+ // Thread.sleep(1000);\r
+ } catch (InterruptedException ie) {\r
+ }\r
+ } else if ((lineSensorsMask & RobotMain.LS_LEFT_REAR) == RobotMain.LS_LEFT_REAR) {\r
+ if (DEBUGL)\r
+ System.out.println("Line Sensors - Left & Rear");\r
+ bearRight();\r
+ try {\r
+ // Thread.sleep(1000);\r
+ } catch (InterruptedException ie) {\r
+ }\r
+ } else if ((lineSensorsMask & RobotMain.LS_RIGHT_REAR) == RobotMain.LS_RIGHT_REAR) {\r
+ if (DEBUGL)\r
+ System.out.println("Line Sensors - Right & Rear");\r
+ bearLeft();\r
+ try {\r
+ // Thread.sleep(1000);\r
+ } catch (InterruptedException ie) {\r
+ }\r
+ } else if ((lineSensorsMask & RobotMain.LS_LEFT) == RobotMain.LS_LEFT) {\r
+ if (DEBUGL)\r
+ System.out.println("Line Sensors - Left");\r
+ backBearRight();\r
+\r
+ try {\r
+ // Thread.sleep(1000);\r
+ } catch (InterruptedException ie) {\r
+ }\r
+ } else if ((lineSensorsMask & RobotMain.LS_RIGHT) == RobotMain.LS_RIGHT) {\r
+ if (DEBUGL)\r
+ System.out.println("Line Sensors - Right");\r
+ backBearLeft();\r
+ try {\r
+ // Thread.sleep(1000);\r
+ } catch (InterruptedException ie) {\r
+ }\r
+ } else if ((lineSensorsMask & RobotMain.LS_REAR) == RobotMain.LS_REAR) {\r
+ if (DEBUGL)\r
+ System.out.println("Line Sensors - Rear");\r
+ straight();\r
+ try {\r
+ // Thread.sleep(1000);\r
+ } catch (InterruptedException ie) {\r
+ }\r
+ }\r
+ lineSensorsMask = TestSensorInput.getCommand();\r
+ }// while loop\r
+ }\r
+\r
+ public void stop() {\r
+ if (DEBUG)\r
+ System.out.println("StrageyMgr: stop....");\r
+ mc.setSpeedLeft(zeroSpeed);\r
+ mc.setSpeedRight(zeroSpeed);\r
+ }\r
+\r
+ public void search() {\r
+ if (DEBUG)\r
+ System.out.println("StrategyMgr: search....");\r
+ mc.setSpeedLeft(70);\r
+ mc.setSpeedRight(50);\r
+ }\r
+\r
+ public void straight() {\r
+ if (DEBUG)\r
+ System.out.println("StrategyMgr: strait....");\r
+ mc.setSpeedLeft(100);\r
+ mc.setSpeedRight(100);\r
+ }\r
+\r
+ public void spinRight() {\r
+ if (DEBUG)\r
+ System.out.println("StrategyMgr: spinRight....");\r
+ mc.setSpeedSpinLeft(100);\r
+ mc.setSpeedSpinRight(0);\r
+ }\r
+\r
+ public void spinLeft() {\r
+ if (DEBUG)\r
+ System.out.println("StrategyMgr: spinLeft....");\r
+ mc.setSpeedSpinLeft(0);\r
+ mc.setSpeedSpinRight(100);\r
+ }\r
+\r
+ public void spin180() {\r
+ int mod = (rand.nextInt() % 2);\r
+\r
+ if (DEBUG)\r
+ System.out.println("StrategyMgr: spin180....");\r
+ if (mod == 1) {\r
+ mc.setSpeedSpinLeft(0);\r
+ mc.setSpeedSpinRight(100);\r
+ } else {\r
+ mc.setSpeedSpinLeft(100);\r
+ mc.setSpeedSpinRight(0);\r
+ }\r
+ }\r
+\r
+ public void right() {\r
+ if (DEBUG)\r
+ System.out.println("StrategyMgr: right....");\r
+ mc.setSpeedTurnLeft(100);\r
+ mc.setSpeedRight(zeroSpeed);\r
+ }\r
+\r
+ public void left() {\r
+ if (DEBUG)\r
+ System.out.println("StrategyMgr: left....");\r
+ mc.setSpeedLeft(zeroSpeed);\r
+ mc.setSpeedTurnRight(100);\r
+ }\r
+\r
+ public void bearRight() {\r
+ if (DEBUG)\r
+ System.out.println("StrategyMgr: bearRight....");\r
+ mc.setSpeedTurnLeft(100);\r
+ mc.setSpeedTurnRight(60);\r
+ }\r
+\r
+ public void bearLeft() {\r
+ if (DEBUG)\r
+ System.out.println("StrategyMgr: bearLeft....");\r
+ mc.setSpeedTurnLeft(60);\r
+ mc.setSpeedTurnRight(100);\r
+ }\r
+\r
+ public void back() {\r
+ if (DEBUG)\r
+ System.out.println("StrategyMgr: back....");\r
+ mc.setSpeedLeft(0);\r
+ mc.setSpeedRight(0);\r
+ }\r
+\r
+ public void backBearLeft() {\r
+ if (DEBUG)\r
+ System.out.println("StrategyMgr: backBearLeft....");\r
+ mc.setSpeedLeft(30);\r
+ mc.setSpeedRight(0);\r
+ }\r
+\r
+ public void backBearRight() {\r
+ if (DEBUG)\r
+ System.out.println("StrategyMgr: backBearRight....");\r
+ mc.setSpeedLeft(0);\r
+ mc.setSpeedRight(30);\r
+ }\r
+}\r