Kobayashi Akihiro / ActiveCaster

Dependents:   ActiveCaster_ ActiveCaster_2

Committer:
e5119053f6
Date:
Fri Jan 28 15:43:18 2022 +0000
Revision:
2:f206311600ee
Parent:
0:5e4f1e288e2a
DDSS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
e5119053f6 0:5e4f1e288e2a 1 #ifndef PATHTRACKING_h
e5119053f6 0:5e4f1e288e2a 2 #define PATHTRACKING_h
e5119053f6 0:5e4f1e288e2a 3
e5119053f6 0:5e4f1e288e2a 4 #include "mbed.h"
e5119053f6 0:5e4f1e288e2a 5 #include "PIDclass.h"
e5119053f6 0:5e4f1e288e2a 6 #include "Filter.h"
e5119053f6 0:5e4f1e288e2a 7 #include "define.h"
e5119053f6 0:5e4f1e288e2a 8
e5119053f6 0:5e4f1e288e2a 9 #define PATHNUM 50
e5119053f6 0:5e4f1e288e2a 10 #define POINTNUM 100
e5119053f6 0:5e4f1e288e2a 11
e5119053f6 0:5e4f1e288e2a 12 #define FOLLOW_TANGENT ( 0 )
e5119053f6 0:5e4f1e288e2a 13 #define FOLLOW_COMMAND ( 1 )
e5119053f6 0:5e4f1e288e2a 14 //#define FOLLOW_ICHIPID ( 2 )
e5119053f6 0:5e4f1e288e2a 15 #define POSITION_PID ( 2 )
e5119053f6 0:5e4f1e288e2a 16
e5119053f6 0:5e4f1e288e2a 17 #define MODE_START ( 0 )
e5119053f6 0:5e4f1e288e2a 18 #define MODE_NORMAL ( 1 )
e5119053f6 0:5e4f1e288e2a 19 #define MODE_STOP ( 2 )
e5119053f6 0:5e4f1e288e2a 20 #define MODE_START_STOP ( 3 )
e5119053f6 0:5e4f1e288e2a 21
e5119053f6 0:5e4f1e288e2a 22 class PathTracking{
e5119053f6 0:5e4f1e288e2a 23 public:
e5119053f6 0:5e4f1e288e2a 24 /*********** 変数宣言 ***********/
e5119053f6 0:5e4f1e288e2a 25 double Px[POINTNUM], Py[POINTNUM];
e5119053f6 0:5e4f1e288e2a 26 double refangle[PATHNUM], refvel[PATHNUM];
e5119053f6 0:5e4f1e288e2a 27 int acc_mode[PATHNUM], acc_count[PATHNUM];
e5119053f6 0:5e4f1e288e2a 28 double dec_tbe[PATHNUM];
e5119053f6 0:5e4f1e288e2a 29
e5119053f6 0:5e4f1e288e2a 30 // ベジエ曲線関連
e5119053f6 0:5e4f1e288e2a 31 double Ax[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 32 double Bx[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 33 double Cx[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 34 double Dx[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 35
e5119053f6 0:5e4f1e288e2a 36 double Ay[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 37 double By[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 38 double Cy[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 39 double Dy[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 40
e5119053f6 0:5e4f1e288e2a 41 // 内積関連
e5119053f6 0:5e4f1e288e2a 42 double a_be[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 43 double b_be[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 44 double c_be[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 45 double d_be[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 46 double e_be[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 47 double f_be[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 48 double d_be_[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 49 double e_be_[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 50 double f_be_[ PATHNUM ];
e5119053f6 0:5e4f1e288e2a 51
e5119053f6 0:5e4f1e288e2a 52 double onx, ony;
e5119053f6 0:5e4f1e288e2a 53 double angle, dist;
e5119053f6 0:5e4f1e288e2a 54 double preAngle = 1.5708;
e5119053f6 0:5e4f1e288e2a 55 double t_be, pre_t_be;
e5119053f6 0:5e4f1e288e2a 56 double dist2goal;
e5119053f6 0:5e4f1e288e2a 57 double epsilon;
e5119053f6 0:5e4f1e288e2a 58
e5119053f6 0:5e4f1e288e2a 59 double refVx, refVy, refVz;
e5119053f6 0:5e4f1e288e2a 60 double refKakudo;
e5119053f6 0:5e4f1e288e2a 61 double tmpPx, tmpPy;
e5119053f6 0:5e4f1e288e2a 62
e5119053f6 0:5e4f1e288e2a 63 /*********** 関数宣言 ***********/
e5119053f6 0:5e4f1e288e2a 64 PathTracking(int xmode);
e5119053f6 0:5e4f1e288e2a 65 // tを求めるための方程式
e5119053f6 0:5e4f1e288e2a 66 double func(int p, double t);
e5119053f6 0:5e4f1e288e2a 67 double dfunc(int p, double t);
e5119053f6 0:5e4f1e288e2a 68 // tにおけるベジエ曲線の座標を求める関数
e5119053f6 0:5e4f1e288e2a 69 double bezier_x(int p, double t);
e5119053f6 0:5e4f1e288e2a 70 double bezier_y(int p, double t);
e5119053f6 0:5e4f1e288e2a 71 // ベジエ曲線式の1階微分
e5119053f6 0:5e4f1e288e2a 72 double dbezier_x(int p, double t);
e5119053f6 0:5e4f1e288e2a 73 double dbezier_y(int p, double t);
e5119053f6 0:5e4f1e288e2a 74
e5119053f6 0:5e4f1e288e2a 75 void initSettings();
e5119053f6 0:5e4f1e288e2a 76
e5119053f6 0:5e4f1e288e2a 77 void calcRefpoint();
e5119053f6 0:5e4f1e288e2a 78 int calcRefvel();
e5119053f6 0:5e4f1e288e2a 79
e5119053f6 0:5e4f1e288e2a 80 void incrPathnum(double conv_length, double conv_tnum);
e5119053f6 0:5e4f1e288e2a 81 void setConvPara(double conv_length, double conv_tnum);
e5119053f6 0:5e4f1e288e2a 82 int getPathNum();
e5119053f6 0:5e4f1e288e2a 83 void setPathNum(int);
e5119053f6 0:5e4f1e288e2a 84
e5119053f6 0:5e4f1e288e2a 85 void setMode(int);
e5119053f6 0:5e4f1e288e2a 86 int getMode();
e5119053f6 0:5e4f1e288e2a 87
e5119053f6 0:5e4f1e288e2a 88 void setMaxPathnum(int);
e5119053f6 0:5e4f1e288e2a 89
e5119053f6 0:5e4f1e288e2a 90 void setPosiPIDxPara(float xKp, float xKi, float xKd);
e5119053f6 0:5e4f1e288e2a 91 void setPosiPIDyPara(float xKp, float xKi, float xKd);
e5119053f6 0:5e4f1e288e2a 92 void setPosiPIDzPara(float xKp, float xKi, float xKd);
e5119053f6 0:5e4f1e288e2a 93 void setYokozurePIDPara(float xKp, float xKi, float xKd);
e5119053f6 0:5e4f1e288e2a 94 void setKakudoPIDPara(float xKp, float xKi, float xKd);
e5119053f6 0:5e4f1e288e2a 95 void kakudoPIDinit();
e5119053f6 0:5e4f1e288e2a 96 void setRefKakudo();
e5119053f6 0:5e4f1e288e2a 97
e5119053f6 0:5e4f1e288e2a 98 double getRefVper();
e5119053f6 0:5e4f1e288e2a 99 double getRefVrot();
e5119053f6 0:5e4f1e288e2a 100
e5119053f6 0:5e4f1e288e2a 101 private:
e5119053f6 0:5e4f1e288e2a 102 int path_num;
e5119053f6 0:5e4f1e288e2a 103 int mode;
e5119053f6 0:5e4f1e288e2a 104 int max_pathnum;
e5119053f6 0:5e4f1e288e2a 105 int count_acc;
e5119053f6 0:5e4f1e288e2a 106
e5119053f6 0:5e4f1e288e2a 107 double conv_length;
e5119053f6 0:5e4f1e288e2a 108 double conv_tnum;
e5119053f6 0:5e4f1e288e2a 109
e5119053f6 0:5e4f1e288e2a 110 bool mode_changed;
e5119053f6 0:5e4f1e288e2a 111 bool init_done;
e5119053f6 0:5e4f1e288e2a 112
e5119053f6 0:5e4f1e288e2a 113 double tan, per, rot;
e5119053f6 0:5e4f1e288e2a 114 };
e5119053f6 0:5e4f1e288e2a 115
e5119053f6 0:5e4f1e288e2a 116 #endif