test
Dependencies: mbed ros_lib_kinetic nhk19mr2_can_info splitData SerialHalfDuplex_HM
Diff: Walk/Walk.h
- Revision:
- 34:89d701e15cdf
- Parent:
- 32:dc684a0b8448
- Child:
- 35:b4e1b8f25cd7
diff -r 945d634d4c9b -r 89d701e15cdf Walk/Walk.h --- 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