test

Dependencies:   mbed ros_lib_kinetic nhk19mr2_can_info splitData SerialHalfDuplex_HM

Revision:
21:61971fc18b90
Parent:
19:1adc7302cfd9
Child:
22:787a764271dd
diff -r 70cc6083e9c7 -r 61971fc18b90 Walk/Walk.cpp
--- a/Walk/Walk.cpp	Fri Feb 15 06:46:39 2019 +0000
+++ b/Walk/Walk.cpp	Sat Feb 16 05:00:19 2019 +0000
@@ -3,45 +3,57 @@
 #include "pi.h"
 //Orbitは足毎の軌道をあらわす。
 
-Orbit::Orbit(OrbitPattern orbitType)
-{
-    orbitType_ = orbitType;
-}
-
-void Orbit::SetStraightParam(float stridetime_s, float risetime_s, float stride_m, float height_m, float offset_x_m, float offset_y_m)
+void Orbit::SetStraightParam(float stridetime_s, float risetime_s,
+                             float stride_m, float height_m, float ground_m,
+                             float ellipse_center_x_m, float ellipse_center_y_m)
 {
     stridetime_s_ = stridetime_s;
     risetime_s_ = risetime_s;
     stride_m_ = stride_m;
     height_m_ = height_m;
-    offset_x_m_ = offset_x_m;
-    offset_y_m_ = offset_y_m;
+    ground_m_ = ground_m;
+    ellipse_center_x_m_ = ellipse_center_x_m;
+    ellipse_center_y_m_ = ellipse_center_y_m;
 }
 
-void Orbit::SetStandParam(float offset_y_m)
+void Orbit::SetStandParam(float ground_m)
 {
     stridetime_s_ = 1;
     risetime_s_ = 0;
     stride_m_ = 0;
     height_m_ = 0;
-    offset_x_m_ = 0;
-    offset_y_m_ = offset_y_m;
+    ground_m_ = ground_m;
+    ellipse_center_x_m_ = 0;
+    ellipse_center_y_m_ = ground_m;
 }
 
 //着地中の動き.直線軌道.等速
 OneLeg Orbit::StrideLine_(OneLeg leg, float phasetime_s)
 {
-    float x_m = -stride_m_ * phasetime_s / stridetime_s_ + stride_m_ * 0.5 + offset_x_m_;
-    float y_m = offset_y_m_;
+    float x_m = -stride_m_ * phasetime_s / stridetime_s_ + stride_m_ * 0.5 + ellipse_center_x_m_;
+    float y_m = ellipse_center_y_m_;
     leg.SetXY_m(x_m, y_m);
     return leg;
 }
-//空中の動き.楕円軌道
+//空中の動き.半分にきれいに切れる楕円軌道
 OneLeg Orbit::RiseEllipse_(OneLeg leg, float phasetime_s)
 {
     float rad = M_PI * (phasetime_s - stridetime_s_) / risetime_s_ + M_PI;
-    float x_m = stride_m_ * 0.5 * cos(rad) + offset_x_m_;
-    float y_m = height_m_ * sin(rad) + offset_y_m_;
+    float x_m = stride_m_ * 0.5 * cos(rad) + ellipse_center_x_m_;
+    float y_m = height_m_ * sin(rad) + ellipse_center_y_m_;
+    leg.SetXY_m(x_m, y_m);
+    return leg;
+}
+
+//空中の動き.完全に半分には切れない楕円軌道
+OneLeg Orbit::RiseEllipse2_(OneLeg leg, float phasetime_s)
+{
+    ///////////x,yを計算.注:計算は正しくないので直す必要がある。
+    float rad = M_PI * (phasetime_s - stridetime_s_) / risetime_s_ + M_PI;
+    float x_m = stride_m_ * 0.5 * cos(rad) + ellipse_center_x_m_;
+    float y_m = height_m_ * sin(rad) + ellipse_center_y_m_;
+    ///////////
+    //x,yを代入
     leg.SetXY_m(x_m, y_m);
     return leg;
 }