Scanner code will include the following: obstacle avoidance, hunting for victims, and localization checks.

Files at this revision

API Documentation at this revision

Comitter:
j_j205
Date:
Fri Mar 25 19:51:11 2016 +0000
Parent:
5:4d5601a9dffe
Commit message:
3/25/16 2:50 JJ

Changed in this revision

scanner.cpp Show annotated file Show diff for this revision Revisions of this file
scanner.h Show annotated file Show diff for this revision Revisions of this file
--- a/scanner.cpp	Tue Mar 22 18:11:36 2016 +0000
+++ b/scanner.cpp	Fri Mar 25 19:51:11 2016 +0000
@@ -23,21 +23,17 @@
     servoL.period(1.0/50.0);
     servoR.period(1.0/50.0);
 
-    float temp[13] = {0.0500, 0.0542, 0.0583, 0.0625, 0.0667, 0.0708,
-        0.0750, 0.0792, 0.0833, 0.0875, 0.0917, 0.0958,
-        0.1000};
+    float temp[7] = {0.0575, 0.0663, 0.0750, 0.0837, 0.0925,
+    0.1013, 0.1100}; // sub-micro
 
-    for (int i = 0; i < 13; i++)
+    for (int i = 0; i < 7; i++)
         DUTY[i] = temp[i];
-        // 0.05 = min duty cycle
-        // {0.0500, 0.0542, 0.0583, 0.0625, 0.0667, 0.0708,
-        // 0.0750, 0.0792, 0.0833, 0.0875, 0.0917, 0.0958,
-        // 0.1000};
 
     obstacle = 0;
     distLeft = 0.0;
     distRight = 0.0;
-    distForward = 0.0;
+    distForwardL = 0.0;
+    distForwardR = 0.0;
 
     // initializing to avoid status
     avoidFlag = 1;
@@ -51,6 +47,7 @@
     wait(0.2);
     pitEnable = 1;
     scanPit.attach(this, &Scanner::scan, period);
+pc.printf("Scanner created\n");
 }
 
 // FUNCTION:
@@ -67,8 +64,8 @@
     huntFlag = 1;
     invertL = -1;
     invertR = 1;
-    dutyL = HALF_DUTY;
-    dutyR = HALF_DUTY;
+    dutyL = MAX_DUTY;
+    dutyR = MIN_DUTY;
     servoL.write(DUTY[dutyL]);
     servoR.write(DUTY[dutyR]);
     wait(0.1);
@@ -116,16 +113,83 @@
     wait(0.1);
     distLeft = longRangeL.distInchesL();
     distRight = longRangeR.distInchesR();
-    dutyL = HALF_DUTY;
-    dutyR = HALF_DUTY;
+    dutyL = MAX_DUTY;
+    dutyR = MIN_DUTY;
     servoL.write(DUTY[dutyL]);
     servoR.write(DUTY[dutyR]);
     wait(0.1);
-    distForward = ( longRangeL.distInchesL() + longRangeR.distInchesR() )/2.0;
+    distForwardL = longRangeL.distInchesL();
+    distForwardR = longRangeR.distInchesR();
     pitEnable = 1;
 }
 
 // FUNCTION:
+//      void localizeLeft()
+// IN-PARAMETERS:
+//      None
+// OUT-PARAMETERS:
+//      None
+// DESCRIPTION:
+//      Using sensor longRangeR this method will localize to the wall
+//      to the left during stretches of forward motion where robot 
+//      should remain xxx distance from the left wall. 
+void Scanner::localizeLeft()
+{
+    /****** pseudocode *****
+    
+    dist = longRangeR dist measure
+    
+    if (dist > xxx dist)
+        pitEnable = 0
+        pause current route
+        adjust angle to left
+        unpause route
+        pitEnable = 1
+        
+        
+    else if (dist < xxx dist)
+        pitEnable = 0
+        pause current route
+        adjust angle to right
+        unpause route
+        pitEnable = 1
+    */
+}
+
+// FUNCTION:
+//      void localizeRight()
+// IN-PARAMETERS:
+//      None
+// OUT-PARAMETERS:
+//      None
+// DESCRIPTION:
+//      Using sensor longRangeL this method will localize to the wall
+//      to the left during stretches of forward motion where robot 
+//      should remain xxx distance from the left wall. This function
+//      will be called from scan when the localizeRightFlag is set.
+void localizeRight()
+{
+    /****** pseudocode *****
+    
+    dist = longRangeL dist measure
+    
+    if (dist > xxx dist)
+        pitEnable = 0
+        pause current route
+        adjust angle to right
+        unpause route
+        pitEnable = 1
+        
+    else if (dist < xxx dist)
+        pitEnable = 0
+        pause current route
+        adjust angle to left
+        unpause route
+        pitEnable = 1
+    */
+}
+
+// FUNCTION:
 //      scan()
 // IN-PARAMETERS:
 //      None
@@ -140,10 +204,12 @@
 {
     if (pitEnable == 1)
     {
-        // obtain distance measures from sensors
+        /*// obtain distance measures from sensors
         distLeft = longRangeL.distInchesL();
         distRight = longRangeR.distInchesR();
         
+        //check localize flags and make necessary method calls
+        
         // check avoid flag
         if (avoidFlag == 1)
         {
@@ -151,18 +217,17 @@
         }
         
         // check hunt flag
-        else if (huntFlag == 1)
+        if (huntFlag == 1)
         {
             // add hunt code
-        }
+        }*/
 
         // increment/decrement servo position
         dutyL += invertL;
         dutyR += invertR;
         servoL.write(DUTY[dutyL]);
         servoR.write(DUTY[dutyR]);
-        if(((dutyL == HALF_DUTY) && (dutyR == HALF_DUTY)) ||
-            ((dutyL == MIN_DUTY) && (dutyR == MAX_DUTY)) ||
+        if(((dutyL == MIN_DUTY) && (dutyR == MAX_DUTY)) ||
             ((dutyL == MAX_DUTY) && (dutyR == MIN_DUTY)))
         {
             invertL *= -1;
--- a/scanner.h	Tue Mar 22 18:11:36 2016 +0000
+++ b/scanner.h	Fri Mar 25 19:51:11 2016 +0000
@@ -14,14 +14,17 @@
     void huntMode();
     void avoidMode();
     void localize();
+    void localizeRight();
+    void localizeLeft();
     float getDistLeft() {return distLeft;}
     float getDistRight() {return distRight;}
-    float getDistForward() {return distForward;}
+    float getDistForwardL() {return distForwardL;}
+    float getDistForwardR() {return distForwardR;}
 
 private:
     static const int MIN_DUTY = 0;
-    static const int MAX_DUTY = 12;
-    static const int HALF_DUTY = 6;
+    static const int MAX_DUTY = 6;
+    static const int HALF_DUTY = 3;
     static const float DELTA_DUTY = 4.2e-3;
     float DUTY[13]; // {0.0500, 0.0542, 0.0583, 0.0625, 0.0667, 0.0708,
                     // 0.0750, 0.0792, 0.0833, 0.0875, 0.0917, 0.0958,
@@ -33,7 +36,8 @@
     int dutyR;
     float distLeft;
     float distRight;
-    float distForward;
+    float distForwardL;
+    float distForwardR;
     Serial &pc;
     PwmOut servoL;
     PwmOut servoR;
@@ -44,7 +48,8 @@
     float period;
     bool obstacle;
     bool huntFlag;
-    bool avoidFlag;
+    bool avoidFlag; 
+    bool objectFound;
 
     Ticker scanPit; // periodic interrupt timer