test

Dependencies:   mbed ros_lib_kinetic nhk19mr2_can_info splitData SerialHalfDuplex_HM

Revision:
34:89d701e15cdf
Parent:
32:dc684a0b8448
Child:
35:b4e1b8f25cd7
--- a/Walk/Walk.h	Thu Feb 28 09:39:02 2019 +0000
+++ b/Walk/Walk.h	Fri Mar 01 12:07:23 2019 +0000
@@ -1,6 +1,13 @@
 #ifndef INCLUDED_WALK_H
 #define INCLUDED_WALK_H
 #include "OneLeg.h"
+enum LegNum //足とシリアルサーボの番号
+{
+  RIGHT_B,
+  RIGHT_F,
+  LEFT_B,
+  LEFT_F,
+};
 enum TriangleParams
 {
   OFFSET_X_M,
@@ -28,6 +35,7 @@
   int StrideLineAccel_(OneLeg &leg, float phasetime_s); //着地中に慣性力を考慮して加減速
 
 public:
+void CalOtherParam();
   void SetTriangleParam(float offset_x_m, float offset_y_m, float stride_m, float height_m, float buffer_height_m,
                         float stridetime_s, float toptime_s, float buffer_time_s);
   int GetOrbit(OneLeg &leg, float phasetime_s);
@@ -37,20 +45,19 @@
 
 struct LineParam
 {
-  float time_s; //次の点に到達するまでにかける時間
+  float time_s; //x_m,y_mにいる時間
   float x_m;
   float y_m;
 };
 class FreeLineOrbit
 {
-  LineParam lineparams_[10]; //pointの数はmax10としている。多めにとっているだけ。
+  LineParam lineparams_[30]; //pointの数は多めにとっている。
   int point_num_;            //pointの数
 public:
   void SetFreeLinesParam(LineParam lineparams[], int point_num); //任意の直線の軌道を設定
   int GetOrbit(OneLeg &leg, float phasetime_s);
-  float GetOneWalkTime(); //足一周の時間
-                          //Standupのparam設定
-  void SetStandParam(float x_m, float y_m, float time_s);
+  float GetOneWalkTime();                                 //足一周の時間
+  void SetStandParam(float x_m, float y_m, float time_s); //Standupのparam設定
 };
 enum OrbitPattern
 {
@@ -71,11 +78,11 @@
 };
 class Walk
 {
+  Orbit orbit_[4];
   float offset_multi_[4];
 
 public:
   Walk();
-  Orbit orbit_[4];
   static float calctime_s_; //計算周期
   float phasetime_s_[4];
   //参照渡しされたonelegそれぞれにorbit_::GetOrbit関数を代入
@@ -101,10 +108,35 @@
   void SetAllLegTriangleParam(float offset_x_m, float offset_y_m, float stride_m, float height_m, float buffer_height_m,
                               float stridetime_s, float toptime_s, float buffer_time_s);
   void ChangeOneParam(int legnum, TriangleParams param, float val);
-
   //freeline
   void SetOneLegFreeLinesParam(int legnum, LineParam lineparams[], int point_num);
   void SetAllLegFreeLinesParam(LineParam lineparams[], int point_num);
 };
 
+class OverCome
+{
+  float start_x_m_[4]; //足のスタートx
+  float start_y_m_[4]; //足のスタートy
+  float d_x_m_;        //目標地点までのx
+  float goal_y_m_[4];  //目標地点までのy
+  float height_m_[4];
+  float gravity_dist_[4]; //重心ずらし距離
+  float d_time_;          //各動きの時間
+  float d_time_slow_;
+  int next_point_;        //次のparamのindex
+  LineParam legs_[4][30]; //多めに
+  void Rise(int legnum);
+  void Land(int legnum);
+  void Forward(int legnum);
+  void Step(int legnum);
+  void GravityMove(int legnum);
+  void StartPoint();
+  void GoalPoint();
+  void GetLine();
+
+public:
+  Walk walk;
+  OverCome(float start_x_m[4], float start_y_m[4],
+           float d_x_m, float goal_y_m[4], float height_m[4], float gravity_dist[4]);
+};
 #endif
\ No newline at end of file