s-shape control

Dependents:   wheel_test7 2019NHK_A_manual_red 2019NHK_A_manual_blue

Revision:
5:8dce5092a719
Parent:
4:40c5ac00bb5b
Child:
6:16a24200ab68
--- a/proto01.cpp	Mon Aug 26 06:10:05 2019 +0000
+++ b/proto01.cpp	Wed Sep 04 10:01:50 2019 +0000
@@ -3,11 +3,11 @@
 Proto1::Proto1(double accdis_, double decdis_, double maxspeed_, double s_vector_)
 {
     accdis    = accdis_;
-    accdis2   = accdis;
+    accdis2   = accdis_;
     decdis    = decdis_;
-    decdis2   = decdis;
+    decdis2   = decdis_;
     maxspeed  = maxspeed_;
-    maxspeed2 = maxspeed;
+    maxspeed2 = maxspeed_;
     s_vector  = s_vector_;
 }
 
@@ -21,17 +21,17 @@
         decdis    = decdis2;
         consdis   = targetDis - accdis - decdis;
     } else {
-        maxspeed /= 2;
-        accdis    = targetDis / 2;
-        decdis    = targetDis / 2;
-        consdis   = 0;
+        maxspeed  = maxspeed2 / 2.0;
+        accdis    = targetDis / 2.0;
+        decdis    = targetDis / 2.0;
+        consdis   = 0.0;
     }
     /*秘伝のコード*/ /*いじるな*/
     accsec = 2.0 / maxspeed * accdis;
     decsec = 2.0 / maxspeed * decdis;
 }
 
-void Proto1::target_xy(int targetx_, int targety_, int startx_, int starty_)
+void Proto1::targetXY(int targetx_, int targety_, int startx_, int starty_)
 {
     targetDis = hypot((float)(startx_-targetx_), (float)(starty_-targety_));
     startx    = startx_;
@@ -44,10 +44,10 @@
         decdis    = decdis2;
         consdis   = targetDis - accdis - decdis;
     } else {
-        maxspeed /= 2;
-        accdis    = targetDis / 2;
-        decdis    = targetDis / 2;
-        consdis   = 0;
+        maxspeed  = maxspeed2 / 2.0;
+        accdis    = targetDis / 2.0;
+        decdis    = targetDis / 2.0;
+        consdis   = 0.0;
     }
     /*秘伝のコード*/ /*いじるな*/
     accsec = 2.0 / maxspeed * accdis;
@@ -60,7 +60,7 @@
     nowDis = now - start;
 }
 
-void Proto1::Input_nowxy(int now_x, int now_y)
+void Proto1::Input_nowXY(int now_x, int now_y)
 {
     nowx      = now_x;
     nowy      = now_y;
@@ -70,17 +70,25 @@
 
 void Proto1::calculate()
 {
-    if (nowDis < accdis) {
-        counter = sqrt(2.0*accsec/maxspeed*nowDis);
-        vector = s_vector + (-1 * sin((2.0*PI/accsec)*counter) + (2.0*PI/accsec)*counter) / ((2.0*PI)/(maxspeed-s_vector));
-    } else if (nowDis >= accdis && nowDis < accdis+consdis) {
-        vector = maxspeed;
-    } else if (nowDis > (accdis+consdis)) {
-        counter = sqrt(2.0*decsec/maxspeed*fabs(targetDis-nowDis));
-        vector = (-1 * sin((2.0*PI/decsec)*counter) + (2.0*PI/decsec)*counter) / (2.0*PI/maxspeed);
-    } else {
-        vector = 0;
-    }
+//    if(targetDis <= (accdis+decdis)){
+//        if(nowDis >= (accdis+decdis)){
+//            vector = 0;
+//        }else{
+//            vector = maxspeed - s_vector;
+//        }
+//    }else{
+        if (nowDis < accdis) {
+            counter = sqrt(2.0*accsec/maxspeed*fabs(nowDis));
+            vector = s_vector + (-1 * sin((2.0*PI/accsec)*counter) + (2.0*PI/accsec)*counter) / ((2.0*PI)/(maxspeed-s_vector));
+        } else if (nowDis >= accdis && nowDis < accdis+consdis) {
+            vector = maxspeed;
+        } else if (nowDis > (accdis+consdis)) {
+            counter = sqrt(2.0*decsec/maxspeed*fabs(targetDis-nowDis));
+            vector = (-1 * sin((2.0*PI/decsec)*counter) + (2.0*PI/decsec)*counter) / (2.0*PI/maxspeed);
+        } else {
+            vector = 0;
+        }
+//    }
 }
 
 double Proto1::getvalue()