test
Dependencies: mbed ros_lib_kinetic nhk19mr2_can_info splitData SerialHalfDuplex_HM
Walk/Walk.h@29:7d8b8011a88d, 2019-02-27 (annotated)
- Committer:
- shimizuta
- Date:
- Wed Feb 27 12:16:18 2019 +0000
- Revision:
- 29:7d8b8011a88d
- Parent:
- 27:79b4b932a6dd
- Child:
- 32:dc684a0b8448
can move triangle orbit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shimizuta | 11:e81425872740 | 1 | #ifndef INCLUDED_WALK_H |
shimizuta | 11:e81425872740 | 2 | #define INCLUDED_WALK_H |
shimizuta | 11:e81425872740 | 3 | #include "OneLeg.h" |
shimizuta | 27:79b4b932a6dd | 4 | enum OrbitPattern |
shimizuta | 27:79b4b932a6dd | 5 | { |
shimizuta | 29:7d8b8011a88d | 6 | TRIANGLE, |
shimizuta | 27:79b4b932a6dd | 7 | }; |
shimizuta | 29:7d8b8011a88d | 8 | //下記の論文を参照 |
shimizuta | 29:7d8b8011a88d | 9 | //https://static1.squarespace.com/static/542ddec8e4b0158794bd1036/t/5a861d1cc83025f3d460dfc3/1518738728029/gait-design-optimization-Final.pdf |
shimizuta | 29:7d8b8011a88d | 10 | class TriangleOrbit |
shimizuta | 27:79b4b932a6dd | 11 | { |
shimizuta | 29:7d8b8011a88d | 12 | float reverse_tanbeta_; //論文のβのtan |
shimizuta | 29:7d8b8011a88d | 13 | float start_x_m_; |
shimizuta | 29:7d8b8011a88d | 14 | float start_y_m_; |
shimizuta | 29:7d8b8011a88d | 15 | float stride_m_; |
shimizuta | 29:7d8b8011a88d | 16 | float height_m_; //足上げ幅 |
shimizuta | 29:7d8b8011a88d | 17 | float buffer_height_m_; //着地直前で止める高さ |
shimizuta | 29:7d8b8011a88d | 18 | float stridetime_s_; |
shimizuta | 29:7d8b8011a88d | 19 | float toptime_s_; //頂点に行くまでの時間 |
shimizuta | 29:7d8b8011a88d | 20 | float buffer_time_s_; //一時停止点から着地するまでの時間. |
shimizuta | 29:7d8b8011a88d | 21 | |
shimizuta | 29:7d8b8011a88d | 22 | float top_x_m_, top_y_m_, buffer_x_m_, buffer_y_m_; //事前に計算して保存しておく |
shimizuta | 29:7d8b8011a88d | 23 | int StrideLine_(OneLeg &leg, float phasetime_s); //着地している間の軌道 |
shimizuta | 29:7d8b8011a88d | 24 | int StrideLineAccel_(OneLeg &leg, float phasetime_s); //着地中に慣性力を考慮して加減速 |
shimizuta | 11:e81425872740 | 25 | |
shimizuta | 29:7d8b8011a88d | 26 | public: |
shimizuta | 29:7d8b8011a88d | 27 | void SetTriangleParam(float start_x_m, float start_y_m, float stride_m, float height_m, float buffer_height_m, |
shimizuta | 29:7d8b8011a88d | 28 | float stridetime_s, float toptime_s, float buffer_time_s); |
shimizuta | 29:7d8b8011a88d | 29 | int GetOrbit(OneLeg &leg, float phasetime_s); |
shimizuta | 29:7d8b8011a88d | 30 | float GetOneWalkTime(); //足一周の時間 |
shimizuta | 29:7d8b8011a88d | 31 | }; |
shimizuta | 29:7d8b8011a88d | 32 | |
shimizuta | 29:7d8b8011a88d | 33 | //足の軌道を設定するクラスの皮。全ての軌道クラスを継承して一つにまとめる。patternで使い分ける |
shimizuta | 29:7d8b8011a88d | 34 | class Orbit : public TriangleOrbit |
shimizuta | 29:7d8b8011a88d | 35 | { |
shimizuta | 29:7d8b8011a88d | 36 | OrbitPattern pattern_; |
shimizuta | 29:7d8b8011a88d | 37 | |
shimizuta | 29:7d8b8011a88d | 38 | public: |
shimizuta | 29:7d8b8011a88d | 39 | Orbit(){}; //ただ宣言する用 |
shimizuta | 29:7d8b8011a88d | 40 | Orbit(OrbitPattern pattern); |
shimizuta | 29:7d8b8011a88d | 41 | float GetOneWalkTime(); //足一周の時間 |
shimizuta | 29:7d8b8011a88d | 42 | int GetOrbit(OneLeg &leg, float phasetime_s); //legに目標x,yを代入 |
shimizuta | 27:79b4b932a6dd | 43 | }; |
shimizuta | 11:e81425872740 | 44 | class Walk |
shimizuta | 11:e81425872740 | 45 | { |
shimizuta | 29:7d8b8011a88d | 46 | Orbit orbit_[4]; |
shimizuta | 29:7d8b8011a88d | 47 | float offset_multi_[4]; |
shimizuta | 11:e81425872740 | 48 | |
shimizuta | 29:7d8b8011a88d | 49 | public: |
shimizuta | 29:7d8b8011a88d | 50 | Walk(); |
shimizuta | 29:7d8b8011a88d | 51 | static float calctime_s_; //計算周期 |
shimizuta | 29:7d8b8011a88d | 52 | float phasetime_s_[4]; |
shimizuta | 29:7d8b8011a88d | 53 | //参照渡しされたonelegそれぞれにorbit_::GetOrbit関数を代入 |
shimizuta | 29:7d8b8011a88d | 54 | //GetOrbit関数にて軌道, 時間をもとに位置を決める |
shimizuta | 29:7d8b8011a88d | 55 | //直接参照しているのはこの関数だけ |
shimizuta | 29:7d8b8011a88d | 56 | int Cal4LegsPosi(OneLeg leg[4]); //失敗したら1を返す。成功なら0 |
shimizuta | 29:7d8b8011a88d | 57 | //足一周の時間 |
shimizuta | 29:7d8b8011a88d | 58 | float GetOneWalkTime(); |
shimizuta | 29:7d8b8011a88d | 59 | //位相ずれの程度(値域[0,1])を入れる。 |
shimizuta | 29:7d8b8011a88d | 60 | void SetOffsetTime(float offset_multi0, float offset_multi1, float offset_multi2, float offset_multi3); |
shimizuta | 29:7d8b8011a88d | 61 | //軌道がリンク定義外になっていないかチェック。reutn 0:ok 1:out |
shimizuta | 29:7d8b8011a88d | 62 | // またoffsetの設定はここで行うので必ず呼び出す。 |
shimizuta | 29:7d8b8011a88d | 63 | int CheckOrbit(OneLeg templateleg); |
shimizuta | 29:7d8b8011a88d | 64 | //一つの足の軌道を設定.軌道の代入にはこの関数を必ず通るようにする。 |
shimizuta | 29:7d8b8011a88d | 65 | void SetOneOrbit(int legnum, Orbit orbit); |
shimizuta | 29:7d8b8011a88d | 66 | void SetAllOrbit(Orbit orbit); //全足の軌道を一括で設定. |
shimizuta | 29:7d8b8011a88d | 67 | //stand用 |
shimizuta | 29:7d8b8011a88d | 68 | void SetOneLegStandParam(int legnum, float x_m, float y_m, float time_s); |
shimizuta | 29:7d8b8011a88d | 69 | void SetAllLegStandParam(float x_m, float y_m, float time_s); // 4足一括で設定できる |
shimizuta | 29:7d8b8011a88d | 70 | //triangle |
shimizuta | 29:7d8b8011a88d | 71 | void SetOneLegTriangleParam(int legnum, float start_x_m, float start_y_m, float stride_m, float height_m, float buffer_height_m, |
shimizuta | 29:7d8b8011a88d | 72 | float stridetime_s, float toptime_s, float buffer_time_s); |
shimizuta | 29:7d8b8011a88d | 73 | void SetAllLegTriangleParam(float start_x_m, float start_y_m, float stride_m, float height_m, float buffer_height_m, |
shimizuta | 29:7d8b8011a88d | 74 | float stridetime_s, float toptime_s, float buffer_time_s); |
shimizuta | 11:e81425872740 | 75 | }; |
shimizuta | 11:e81425872740 | 76 | #endif |