Dependencies:   mbed

Revision:
3:a0b0e4acf5e9
Parent:
2:c507076bfd93
--- a/main.cpp	Fri Mar 22 15:22:15 2019 +0000
+++ b/main.cpp	Fri Mar 22 16:00:45 2019 +0000
@@ -10,7 +10,8 @@
 void poseEst(float p[], float radius, float enc_res, float b);
 void SpeedLim(float w[]);
 //int ReadSensors();
-void updateHist(int hist[][], int active[][],int x,int y);
+const int n = 200, activeSize = 11;
+void updateHist(int hist[][n], int active[][activeSize],int x,int y);
 int main(){
 
     button.mode(PullUp);
@@ -24,16 +25,16 @@
     //b = Distance between wheels, enc_res = Encoder Resolution, v = Calculated speed
     //k_v = Speed gain, k_s = Curvature gain, wratio = Angular speed ratio control command
     //Cells dim: 5x5cm |
-    const int = m = 200, n = 200, activeSize = 11;
+    const int m = 200;
     int hist[m][n] , active[activeSize][activeSize];
     float  w[3], v, p[3], p_obj[3], theta, theta_error, err, integral = 0.0;
     const float radius = 3.5, b = 13.3, enc_res = 1440, k_v = 7, 
-        k_s = 60, k_i = 1, sample_time = 0.05, Fcr = 1.0, d_stalker = 5.0;
+        k_s = 60, k_i = 0.0, sample_time = 0.05, Fcr = 1.0, d_stalker = 3.0;
 // ===============================================================================
 // =================================== COORDS ====================================
 // =============================================================================== 
     //Target coordinates
-    p_obj[0] = 400, p_obj[1] = 400, p_obj[2] = 0;
+    p_obj[0] = 200, p_obj[1] = 200, p_obj[2] = 0;
     //Initial coordinates:
     p[0] = 100, p[1] = 100, p[2] = 0;
 // ===============================================================================
@@ -42,8 +43,8 @@
     while(1){
         getCountsAndReset();
         pc.printf("Speeds: Left=%lf   Right=%lf\n", w[1], w[2]);
-        pc.printf("Odometer: X=%lf   Y=%lf   Theta=%lf\n", p[0], p[1], p[2]);
-        pc.printf("Position: X=%lf   Y=%lf   Theta=%lf\n", p[0], p[1], p[2]);
+        //pc.printf("Odometer: X=%lf   Y=%lf   Theta=%lf\n", p[0], p[1], p[2]);
+        pc.printf("Position: X=%lf   Y=%lf   Theta=%lf\n\n", p[0], p[1], p[2]);
         
         //Path calculation
         poseEst(p, radius, enc_res, b); //Pose estimation
@@ -54,12 +55,13 @@
         p[2] = atan2(sin(p[2]),cos(p[2]));
         theta_error = theta-p[2];
         w[0] = k_s*(theta_error); //direction gain
-        integral += err
+        integral += err;
         v = k_v*err+k_i*integral; //Speed gain
         w[1] = (v-(b/2)*w[0])/radius;
         w[2] = (v+(b/2)*w[0])/radius;
         SpeedLim(w);
-        if((fabs(p[0]-p_obj[0])+fabs(p[1]-p_obj[1])) < 1){
+        if((fabs(p[0]-p_obj[0])+fabs(p[1]-p_obj[1])) < 5){
+            pc.printf("\n YOU REACHED YOUR DESTINATION, THANK YOU FOR CHOOSING EMIRATES\n");
             setSpeeds(0,0);
         }
         else{
@@ -105,22 +107,22 @@
             w[1] = 150;
         }
     }
-    if(w[2] < 50 || w[1] < 50){
+    if(w[2] < 35 || w[1] < 35){
         if(wratio < 1){
-            w[1] = 50;
+            w[1] = 35;
             w[2] = w[1]*wratio;
         }
         else if(wratio > 1){
-            w[2] = 50;
+            w[2] = 35;
             w[1] = w[2]/wratio;
         }
         else{
-            w[2] = 50;
-            w[1] = 50;
+            w[2] = 35;
+            w[1] = 35;
         }
     }
 }
-void updateHist(int hist[i][j], int active[activeSize][activeSize],int x,int y){
+void updateHist(int hist[][n], int active[][activeSize],int x,int y){
     int aX=0;
     for(int i=x-(activeSize/2);i<x+(activeSize/2+1);i++){
         int aY=0;