test

Dependencies:   mbed ros_lib_kinetic nhk19mr2_can_info splitData SerialHalfDuplex_HM

Walk/Walk.h

Committer:
shimizuta
Date:
2019-02-12
Revision:
14:d7cb429946f4
Parent:
13:e7ecdb20665a
Child:
18:0033ef1814ba

File content as of revision 14:d7cb429946f4:

#ifndef INCLUDED_WALK_H
#define INCLUDED_WALK_H
#include "OneLeg.h"
enum OrbitPattern
{
    ELLIPSE,
};
//足の軌道を設定するクラス。軌道は様々であることを考慮してコンストラクタでの代入は控えたい
class Orbit
{
    OrbitPattern orbitType_;
    float stridetime_s_;
    float risetime_s_;
    float stride_m_;
    float height_m_;                                   //足の上げ幅
    float ground_m_;                                   //着地するときの高さ
    OneLeg StrideLine_(OneLeg leg, float phasetime_s); //時間をもとに位置を取得したインスタンスを直接返して代入させる
    OneLeg RiseEllipse_(OneLeg leg, float phasetime_s);
    OneLeg OrbitEllipse_(OneLeg leg, float phasetime_s); //Stride, Riseを組み合わせて周期を作る

  public:
    Orbit(){};
    //コンストラクタは代入のみ
    Orbit(OrbitPattern orbitType);
    //このクラスのメイン privateへのアクセス関数
    OneLeg GetOrbit(OneLeg leg, float phasetime_s);

    void SetStraightParam(float stridetime_s, float risetime_s, float stride_m, float height_m, float ground_m);
    float GetOneWalkTime(); //足一周の時間
};

//4足の足の動かし方を保存するクラス
class Walk
{
    float phasetime_s_;
    float offsettime_s_[4];

  public:
    //4脚の軌道, 位相を代入して歩行方法を確定する
    //コンストラクタではメンバの代入のみ行っている
    Walk(Orbit orbit[4], float offsettime_s[4], float cycletime_s);
    float cycletime_s_; //計算周期
    Orbit orbit_[4];
    //参照渡しされたonelegそれぞれにorbit_::GetOrbit関数を代入
    //GetOrbit関数にて軌道, 時間をもとに位置を決める
    //直接参照しているのはこの関数だけ
    void Cal4LegsPosi(OneLeg (&leg)[4]);
};
#endif