test

Dependencies:   mbed ros_lib_kinetic nhk19mr2_can_info splitData SerialHalfDuplex_HM

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?

UserRevisionLine numberNew 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