test

Dependencies:   mbed ros_lib_kinetic nhk19mr2_can_info splitData SerialHalfDuplex_HM

Revision:
35:b4e1b8f25cd7
Parent:
34:89d701e15cdf
Child:
44:4aac39b8670b
diff -r 89d701e15cdf -r b4e1b8f25cd7 Walk/Walk.h
--- a/Walk/Walk.h	Fri Mar 01 12:07:23 2019 +0000
+++ b/Walk/Walk.h	Mon Mar 04 09:54:47 2019 +0000
@@ -1,142 +1,26 @@
 #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,
-  OFFSET_Y_M,
-  STRIDE_M,
-  HEIGHT_M,
-  BUFFER_HEIGHT_M,
-};
-//下記の論文を参照
-//https://static1.squarespace.com/static/542ddec8e4b0158794bd1036/t/5a861d1cc83025f3d460dfc3/1518738728029/gait-design-optimization-Final.pdf
-class TriangleOrbit
-{
-  float reverse_tanbeta_; //論文のβのtan
-  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_; //一時停止点から着地するまでの時間.
-
-  float top_x_m_, top_y_m_, buffer_x_m_, buffer_y_m_;   //事前に計算して保存しておく
-  int StrideLine_(OneLeg &leg, float phasetime_s);      //着地している間の軌道
-  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);
-  float GetOneWalkTime(); //足一周の時間
-  void ChangeOneParam(TriangleParams param, float val);
-};
-
-struct LineParam
-{
-  float time_s; //x_m,y_mにいる時間
-  float x_m;
-  float y_m;
-};
-class FreeLineOrbit
-{
-  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();                                 //足一周の時間
-  void SetStandParam(float x_m, float y_m, float time_s); //Standupのparam設定
-};
-enum OrbitPattern
-{
-  TRIANGLE,
-  FREELINES,
-};
-//足の軌道を設定するクラスの皮。全ての軌道クラスを継承して一つにまとめる。patternで使い分ける
-//関数は継承元のものも使えるので、継承元のクラスも見てください
-class Orbit : public TriangleOrbit, public FreeLineOrbit
-{
-  OrbitPattern pattern_;
-
-public:
-  Orbit(){}; //ただ宣言する用
-  Orbit(OrbitPattern pattern);
-  float GetOneWalkTime();                       //足一周の時間
-  int GetOrbit(OneLeg &leg, float phasetime_s); //legに目標x,yを代入
-};
+#include "orbit.h"
 class Walk
 {
-  Orbit orbit_[4];
-  float offset_multi_[4];
-
 public:
-  Walk();
+  Walk(OneLeg legs[4]);
+  Orbit orbit[4];
   static float calctime_s_; //計算周期
   float phasetime_s_[4];
+  float offset_multi[4];
+  OneLeg leg[4];
   //参照渡しされたonelegそれぞれにorbit_::GetOrbit関数を代入
   //GetOrbit関数にて軌道, 時間をもとに位置を決める
   //直接参照しているのはこの関数だけ
-  int Cal4LegsPosi(OneLeg leg[4]); //失敗したら1を返す。成功なら0
-  //足一周の時間
-  float GetOneWalkTime();
+  int Cal4LegsPosi(OneLeg legs[4]); //失敗したら1を返す。成功なら0
   //位相ずれの程度(値域[0,1])を入れる。
   void SetOffsetTime(float offset_multi0, float offset_multi1, float offset_multi2, float offset_multi3);
   //軌道がリンク定義外になっていないかチェック。reutn 0:ok 1:out
   // またoffsetの設定はここで行うので必ず呼び出す。
-  int CheckOrbit(OneLeg templateleg);
-  //一つの足の軌道を設定.軌道の代入にはこの関数を必ず通るようにする。
-  void SetOneOrbit(int legnum, Orbit orbit);
-  void SetAllOrbit(Orbit orbit); //全足の軌道を一括で設定.
-  //stand用
-  void SetOneLegStandParam(int legnum, float x_m, float y_m, float time_s);
-  void SetAllLegStandParam(float x_m, float y_m, float time_s); // 4足一括で設定できる
-  //triangle
-  void SetOneLegTriangleParam(int legnum, 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 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);
-};
+  int CheckOrbit();
+  void Copy(Walk &walk);
 
-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