Library containing Crazyflie 2.0 controller classes: - Attitude estimator - Horizontal estimator - Vertical estimator - Attitude controller - Horizontal controller - Vertical controller - Mixer

Committer:
fbob
Date:
Thu Oct 18 12:53:22 2018 +0000
Revision:
19:83b357d6806e
Parent:
17:f682b4a5686d
Child:
20:4d0614886c80
Included zeta and omega_n

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fbob 5:b9947e3d20cf 1 #ifndef Parameters_h
fbob 5:b9947e3d20cf 2 #define Parameters_h
fbob 5:b9947e3d20cf 3
fbob 13:1a871ebd35bb 4 // Interrupt frequencies
fbob 15:155ca63b7884 5 const float f = 500.0f; // Hz
fbob 13:1a871ebd35bb 6 const float f_range = 20.0f; // Hz
fbob 17:f682b4a5686d 7 const float f_flow = 200.0f; // Hz
fbob 13:1a871ebd35bb 8 const float dt = 1.0f/f; // s
fbob 13:1a871ebd35bb 9 const float dt_range = 1.0f/f_range;// s
fbob 13:1a871ebd35bb 10 const float dt_flow = 1.0f/f_flow; // s
fbob 9:15058b4fa090 11
fbob 5:b9947e3d20cf 12 // Motor constants
fbob 5:b9947e3d20cf 13 const float alpha = 1.16e-07f;
fbob 5:b9947e3d20cf 14 const float beta = 7.149e-10f;
fbob 5:b9947e3d20cf 15
fbob 5:b9947e3d20cf 16 // Propeller constants
fbob 9:15058b4fa090 17 const float kl = 1.726e-08f; // N.s^2/rad^2
fbob 9:15058b4fa090 18 const float kd = 1.426e-10f; // N.m.s^2/rad^2
fbob 5:b9947e3d20cf 19
fbob 5:b9947e3d20cf 20 // Quadcopter dimensions
fbob 9:15058b4fa090 21 const float l = 0.033f; // m
fbob 9:15058b4fa090 22 const float m = 0.030f; // kg
fbob 9:15058b4fa090 23 const float I_xx = 16.0e-6f; // kg.m^2
fbob 9:15058b4fa090 24 const float I_yy = 16.0e-6f; // kg.m^2
fbob 9:15058b4fa090 25 const float I_zz = 29.0e-6f; // kg.m^2
fbob 5:b9947e3d20cf 26
fbob 9:15058b4fa090 27 // Gravity constant
fbob 19:83b357d6806e 28 const float pi = 3.1416f;
fbob 9:15058b4fa090 29 const float g = 9.81f; // m/s^2
fbob 7:220ce3839be8 30
fbob 9:15058b4fa090 31 // Attitude estimator weighthing (accelerometer X gyroscope)
fbob 15:155ca63b7884 32 const float rho_att = 0.01f;
fbob 5:b9947e3d20cf 33
fbob 19:83b357d6806e 34 // Attitude controller gains (roll/pitch)
fbob 19:83b357d6806e 35 const float Ts_phi = 0.9599f; // s
fbob 19:83b357d6806e 36 const float OS_phi = 0.3878f; // %
fbob 19:83b357d6806e 37 const float zeta_phi = abs(log(OS_phi))/sqrt(pow(log(OS_phi),2)+pow(pi,2));
fbob 19:83b357d6806e 38 const float omega_n_phi = 4.0f/(Ts_phi*zeta_phi);
fbob 19:83b357d6806e 39 const float K_phi = pow(omega_n_phi,2.0f);
fbob 19:83b357d6806e 40 const float K_p = 2.0f*zeta_phi*omega_n_phi;
fbob 19:83b357d6806e 41 const float K_theta = K_phi;
fbob 19:83b357d6806e 42 const float K_q = K_p;
fbob 19:83b357d6806e 43
fbob 19:83b357d6806e 44 // Attitude controller gains (yaw)
fbob 19:83b357d6806e 45 const float Ts_psi = 0.9599f; // s
fbob 19:83b357d6806e 46 const float OS_psi = 0.3878f; // %
fbob 19:83b357d6806e 47 const float zeta_psi = abs(log(OS_psi))/sqrt(pow(log(OS_psi),2)+pow(pi,2));
fbob 19:83b357d6806e 48 const float omega_n_psi = 4.0f/(Ts_psi*zeta_psi);
fbob 19:83b357d6806e 49 const float K_psi = pow(omega_n_psi,2.0f);
fbob 19:83b357d6806e 50 const float K_r = 2.0f*zeta_psi*omega_n_psi;
fbob 19:83b357d6806e 51
fbob 5:b9947e3d20cf 52 // Attitude controller time constants
fbob 17:f682b4a5686d 53 const float T_phi = 0.12f; // s
fbob 17:f682b4a5686d 54 const float T_theta = 0.12f; // s
fbob 9:15058b4fa090 55 const float T_psi = 0.2f; // s
fbob 9:15058b4fa090 56 const float T_p = 0.04f; // s
fbob 9:15058b4fa090 57 const float T_q = 0.04f; // s
fbob 9:15058b4fa090 58 const float T_r = 0.1f; // s
fbob 5:b9947e3d20cf 59
fbob 9:15058b4fa090 60 // Vertical estimator weighthing (measurement X prediction)
fbob 9:15058b4fa090 61 const float rho_ver = 0.3f;
fbob 7:220ce3839be8 62
fbob 19:83b357d6806e 63 // Vertical controller gains
fbob 19:83b357d6806e 64 const float Ts_z = 2.8571f; // s
fbob 19:83b357d6806e 65 const float OS_z = 0.0460f; // %
fbob 19:83b357d6806e 66 const float zeta_z = abs(log(OS_z))/sqrt(pow(log(OS_z),2)+pow(pi,2));
fbob 19:83b357d6806e 67 const float omega_n_z = 4.0f/(Ts_z*zeta_z);
fbob 19:83b357d6806e 68 const float K_z = pow(omega_n_z,2.0f);
fbob 19:83b357d6806e 69 const float K_w = 2.0f*zeta_z*omega_n_z;
fbob 19:83b357d6806e 70
fbob 19:83b357d6806e 71 // Vertical controller gains
fbob 16:54d2f299e404 72 const float zeta_take_off = 1.4f;
fbob 17:f682b4a5686d 73 const float omega_n_take_off = 2.0f;// rad/s
fbob 16:54d2f299e404 74 const float K_z_take_off = pow(omega_n_take_off,2.0f);
fbob 16:54d2f299e404 75 const float K_w_take_off = 2.0f*zeta_take_off*omega_n_take_off;
fbob 9:15058b4fa090 76
fbob 9:15058b4fa090 77 // Horizontal estimator weighthing (measurement X prediction)
fbob 15:155ca63b7884 78 const float rho_hor = 0.5f;
fbob 8:d05fe9f8bfb6 79
fbob 19:83b357d6806e 80 // Horizontal controller gains
fbob 19:83b357d6806e 81 const float Ts_x = 8.0f; // s
fbob 19:83b357d6806e 82 const float zeta_x = 1.118;
fbob 19:83b357d6806e 83 const float omega_n_x = 4.0f/(Ts_x*zeta_x);
fbob 19:83b357d6806e 84 const float K_x = pow(omega_n_x,2.0f);
fbob 19:83b357d6806e 85 const float K_u = 2.0f*zeta_x*omega_n_x;
fbob 19:83b357d6806e 86 const float K_y = K_x;
fbob 19:83b357d6806e 87 const float K_v = K_v;
fbob 19:83b357d6806e 88
fbob 8:d05fe9f8bfb6 89 // Horizontal controller time constants
fbob 15:155ca63b7884 90 const float T_u = 2.0f; // s
fbob 15:155ca63b7884 91 const float T_v = 2.0f; // s
fbob 17:f682b4a5686d 92 const float T_u_take_off = 4.0f; // s
fbob 17:f682b4a5686d 93 const float T_v_take_off = 4.0f; // s
fbob 7:220ce3839be8 94
fbob 6:3188b00263e8 95 #endif