-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathrov_model.h
104 lines (90 loc) · 3.11 KB
/
rov_model.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#ifndef ROV_MODEL_H
#define ROV_MODEL_H
#include <QObject>
#include <QVector>
#include <QTimer>
#define ANPA_MOD_CNT 24
extern double X[2000][2];
extern QVector<double> K;
struct InitData {
double m;
double Fa;
double Farx[3];
double cv1[4];
double cv2[4];
double cw1[4];
double cw2[4];
double lambda[6][6];
double Ta[6][8];
double J[3];
double kd;
double h[4]; //радиус-вектор координат центра водоизмещения НПА в связанной СК, [1]-x [2]-y [3]-z
double Td;
double depth_limit;
double max_depth;
}; //struct InitData
class ROV_Model : public QObject {
Q_OBJECT
public:
explicit ROV_Model(QObject *parent = 0);
virtual ~ROV_Model();
signals:
public slots:
private:
void start();
public:
void model(const float Upl,const float Upp,const float Usl,const float Usp, const float Uzl, const float Uzp);
void runge(const float Upl,const float Upp,const float Usl,const float Usp, const float Uzl, const float Uzp,const float Ttimer,const float dt=0.01);
double a[ANPA_MOD_CNT];
double da[ANPA_MOD_CNT];
//константы
double m;
double Fa;
double Farx[3];
double g;
double G;
double cv1[4];
double cv2[4];
double cw1[4];
double cw2[4];
double lambda[7][7];
double Ta[7][9];
double C[7][7];
double Vt[7]; //влиянние течения
double Wv[7]; //вектор силы моментов, вызванных внешними возмущениями
double J[4];
double kd;
double h[4]; //радиус-вектор координат центра водоизмещения НПА в связанной СК [1]-x [2]-y [3]-z
double Td;
double depth_limit;
double max_depth;
//переменные
double sumX, sumZ;
double cur_depth, Wx, Wy, Wz;
double Psi_g, Gamma_g, Tetta_g;
double Psi_gi, W_Psi_g, W_Gamma_g, W_Tetta_g;
int N;
double deltaSx, deltaSz;
double Ppl, Ppp, Psl, Psp, Pzl, Pzp;
double Ppl_x, Ppp_x, Psl_x, Psp_x, Pzl_x, Pzp_x;
double Ppl_y, Ppp_y, Psl_y, Psp_y, Pzl_y, Pzp_y;
double Ppl_z, Ppp_z, Psl_z, Psp_z, Pzl_z, Pzp_z;
double Upl, Upp, Usl, Usp, Uzl, Uzp; //напряжения движителей
double FloatageX, FloatageY, FloatageZ, Fdx, Fdy, Fdz, Fgx, Fgy, Fgz, Fcx, Fcy, Fcz;
double Mdx, Mdy, Mdz, Mgx, Mgy, Mgz, Mcx, Mcy, Mcz;
double Mpl_x, Mpp_x, Msl_x, Msp_x, Mzl_x, Mzp_x;
double Mpl_y, Mpp_y, Msl_y, Msp_y, Mzl_y, Mzp_y;
double Mpl_z, Mpp_z, Msl_z, Msp_z, Mzl_z, Mzp_z;
double Max,May,Maz; // моменты от силы Архимеда
double x_global, y_global, z_global;
double vx_local, vy_local, vz_local; //lineinye skorosti SPA v svyazannyh osyah
double vx_global, vy_global, vz_global;
public:
void resetModel();
void tick(const float Upl,const float Upp,const float Usl,const float Usp, const float Uzl, const float Uzp,const float Ttimer);
float Fx,Fy,Fz; //total forces for XYZ-axis
float Mx,My,Mz; //total moments for XYZ-axis
protected:
QTimer timer;
};
#endif // ROV_MODEL_H