Robotics Term Project / Mbed 2 deprecated Robottics_Motion

Dependencies:   mbed

Revision:
2:4988d0424f29
Parent:
1:a6e23913e047
Child:
3:9f5346fc58b3
diff -r a6e23913e047 -r 4988d0424f29 ai.cpp
--- a/ai.cpp	Tue May 24 06:39:58 2016 +0000
+++ b/ai.cpp	Tue May 24 06:40:52 2016 +0000
@@ -1,1 +1,222 @@
-mpkpokop
\ No newline at end of file
+
+
+****  receive and return by bluetooth **************
+float xC, yC // car's position
+
+float angleC // car's angle 
+
+float xP,yP //position that car need to reach
+
+float angleR // relative angle between car-nextSpot angle and car's angle, angleP - angle C, based on 0~360 degree system
+
+****  specs of everything   ***************
+
+float longC // car's length
+
+float ballSize // ball size
+
+float longB // long of the court
+
+float wideB // wide of the court
+
+*****  Code Begin  **********
+
+yB1 yB2 xB3 xB4 // broder conditions
+
+yB1 = 0-longC
+
+yB2 = 0-wideB + longC 
+
+xB3 = longC 
+
+xB4 = longB-longC
+*******************************************************************************
+
+遠離邊界  
+
+car:
+
+
+
+matlab:
+
+
+
+
+********************************************************************************
+
+****************  funcBorder()  *****************************************
+
+funcBorder() // check if car is too close to the border
+
+  if(yC > yB1 || yC < yB2 || xC < xB3 || xC > xB4){
+
+    if(yC > yB1) // 靠近上邊界
+    {
+        if(xC < xB3) //左上角  
+        {
+           if(angleC <= 90 && angleC >0)         //   I
+            
+            //clockwise, to angleC = -45
+            
+           else if(angleC <= 180 && angleC >90)  //   II
+            
+            //back 0.5*longC, judge again
+            
+           else if(angleC <= 270 && angleC 180)  //   III
+            
+            //counter clockwise, to angleC = -45
+
+           else if(angleC <= 360 && angleC 270)  //  IV
+            
+            //forward 0.5*longC, judge again
+
+        }
+        else if(xC > xB4) //右上角  
+        {
+           if(angleC <= 90 && angleC >0)         //   I
+            
+            //back 0.5*longC, judge again
+            
+           else if(angleC <= 180 && angleC >90)  //   II
+            
+            //counter clockwise, to angleC = -135
+            
+           else if(angleC <= 270 && angleC 180)  //   III
+            
+            //forward 0.5*longC, judge again
+
+           else if(angleC <= 360 && angleC 270)  //  IV
+            
+            //clockwise, to angleC = -135
+          
+        }
+        else //上邊界 
+        {
+          if(angleC = -90 || angleC = 90)
+          {} // do nothing, turn to next point
+          else
+          {smallAngle(-90);} // turn to 90, then turn to next point
+        }
+        
+    }
+    else if(yC < yB2) // 靠近下邊界
+    {
+        if(xC < xB3) //左下角 
+        {
+           if(angleC <= 90 && angleC >0)         //   I
+            
+            //forward 0.5*longC, judge again
+            
+           else if(angleC <= 180 && angleC >90)  //   II
+            
+            //clockwise, to angleC = 45
+            
+           else if(angleC <= 270 && angleC 180)  //   III
+            
+            //back 0.5*longC, judge again
+
+           else if(angleC <= 360 && angleC 270)  //  IV
+            
+            //counter clockwise, to angleC = 45
+          
+        }
+        else if(xC > xB4) //右下角
+        {
+           if(angleC <= 90 && angleC >0)         //   I
+            
+            //counter clockwise, to angleC = 135
+            
+           else if(angleC <= 180 && angleC >90)  //   II
+            
+            //forward 0.5*longC, judge again
+            
+           else if(angleC <= 270 && angleC 180)  //   III
+            
+            //clockwise, to angleC = 135
+
+           else if(angleC <= 360 && angleC 270)  //  IV
+            
+            //back 0.5*longC, judge again
+          
+        }
+        else //下邊界  
+        {       
+          if(angleC = -90 || angleC = 90)
+          {} // do nothing, turn to next point
+          else
+          {smallAngle(90);} // turn to 90, then turn to next point
+        }
+
+    else if(xC < xB3) //靠近左邊界
+    {
+          if(angleC = 0 || angleC = 180)
+          {} // do nothing, turn to next point
+          else
+          {smallAngle(0);} // turn to 90, then turn to next point
+    }
+
+    else if(xC > xB4) //靠近右邊界     
+    {
+          if(angleC = 0 || angleC = 180)
+          {} // do nothing, turn to next point
+          else
+          {smallAngle(180);} // turn to 90, then turn to next point
+    }
+  }
+    
+****************  smallAngle()  *****************************************
+
+smallAngle( float goodAngle ) // use the smallest turn to right angle  ccw / cw,  based on 0~360 degree system
+{
+    if(angleR - angleC <= 180 ) // CW
+    {
+        // turn clockwise to goodAngle;
+    }
+    else if(angleR - angleC > 180) //CCW
+    {
+        // turn counter clockwise to goodAngle;
+    }
+}
+
+***************   turnCW() ***********************************
+
+turnCW(float goodAngle)
+{
+  // turn clockwise to goodAngle;
+}
+
+***************   turnCCW() ***********************************
+
+turnCCW(float goodAngle)
+{
+  // turn counter clockwise to goodAngle;
+}
+
+
+**********  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+