Paparazzi UAS  v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
oneloop_andi.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023 Tomaso De Ponti <tmldeponti@tudelft.nl>
3  *
4  * This file is part of paparazzi
5  *
6  * paparazzi is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * paparazzi is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with paparazzi; see the file COPYING. If not, see
18  * <http://www.gnu.org/licenses/>.
19  */
20 
26 #ifndef ONELOOP_ANDI_H
27 #define ONELOOP_ANDI_H
28 
32 #include "generated/airframe.h"
33 
34 #ifndef ANDI_NUM_ACT
35 #define ANDI_NUM_ACT COMMANDS_NB_REAL
36 #endif
37 
38 #ifndef ANDI_NUM_VIRTUAL_ACT
39 #define ANDI_NUM_VIRTUAL_ACT COMMANDS_NB_VIRTUAL
40 #endif
41 
42 // Number of virtual actuators (e.g. Phi, Theta). For now 2 and only 2 are supported but in the future this can be further developed.
43 #if ANDI_NUM_VIRTUAL_ACT < 2
44 #error "You must specify the number of virtual actuators to be at least 2"
45 #define ANDI_NUM_VIRTUAL_ACT 2
46 #endif
47 
48 #define ANDI_NUM_ACT_TOT (ANDI_NUM_ACT + ANDI_NUM_VIRTUAL_ACT)
49 
50 #ifndef ANDI_OUTPUTS
51 #error "You must specify the number of controlled axis (outputs)"
52 #define ANDI_OUTPUTS 6
53 #endif
54 #define ANDI_G_SCALING 1000.0f
55 
57 extern float actuator_state_1l[ANDI_NUM_ACT];
58 extern float nu[6];
60 extern float andi_u[ANDI_NUM_ACT_TOT];
61 extern float andi_du[ANDI_NUM_ACT_TOT];
62 extern float psi_des_deg;
63 
64 // Delete once hybrid nav is fixed //////////////////////////////////////////////////////////////////////////////////
66  float pos_gain;
67  float pos_gainz;
68  float speed_gain;
69  float speed_gainz;
70  float heading_bank_gain;
71  float liftd_asq;
72  float liftd_p80;
73  float liftd_p50;
74 };
76 extern bool force_forward;
79  float pos[3];
80  float vel[3];
81  float acc[3];
82  float jer[3];
83 };
84 
86  float pos[3];
87  float vel[3];
88  float acc[3];
89 };
90 
92  float att[3];
93  float att_d[3];
94  float att_2d[3];
95  float att_3d[3];
96 };
97 
99  float att[3];
100  float att_d[3];
101  float att_2d[3];
102 };
104  bool half_loop;
105  struct OneloopGuidanceRef gui_ref; // Guidance References
106  struct OneloopGuidanceState gui_state; // Guidance State
107  struct OneloopStabilizationRef sta_ref; // Stabilization References
108  struct OneloopStabilizationState sta_state; // Stabilization State
109 
110 };
111 
112 extern struct OneloopGeneral oneloop_andi;
113 
115  float omega_n;
116  float zeta;
117  float p3;
118 };
120  float k1[3];
121  float k2[3];
122  float k3[3];
123 };
125  float k2;
126  float k3;
127 };
128 
129 /*Declaration of Reference Model and Error Controller Gains*/
130 extern struct PolePlacement p_att_e;
131 extern struct PolePlacement p_att_rm;
132 /*Position Loop*/
133 extern struct PolePlacement p_pos_e;
134 extern struct PolePlacement p_pos_rm;
135 /*Altitude Loop*/
136 extern struct PolePlacement p_alt_e;
137 extern struct PolePlacement p_alt_rm;
138 /*Heading Loop*/
139 extern struct PolePlacement p_head_e;
140 extern struct PolePlacement p_head_rm;
141 /*Gains of EC and RM*/
142 extern struct Gains3rdOrder k_att_e;
143 extern struct Gains3rdOrder k_att_rm;
144 extern struct Gains2ndOrder k_head_e;
145 extern struct Gains2ndOrder k_head_rm;
146 extern struct Gains3rdOrder k_pos_e;
147 extern struct Gains3rdOrder k_pos_rm;
148 extern void oneloop_andi_init(void);
149 extern void oneloop_andi_enter(bool half_loop_sp);
151 extern void oneloop_andi_run(bool in_flight, bool half_loop, struct FloatVect3 PSA_des, int rm_order_h, int rm_order_v);
152 extern void oneloop_andi_RM(bool half_loop, struct FloatVect3 PSA_des, int rm_order_h, int rm_order_v);
153 extern void oneloop_andi_read_rc(bool in_flight, bool in_carefree, bool coordinated_turn);
154 extern void oneloop_from_nav(bool in_flight);
155 #endif // ONELOOP_ANDI_H
void oneloop_andi_read_rc(bool in_flight, bool in_carefree, bool coordinated_turn)
struct PolePlacement p_pos_e
Definition: oneloop_andi.c:427
bool force_forward
forward flight for hybrid nav
struct OneloopGuidanceState gui_state
Definition: oneloop_andi.h:106
struct OneloopStabilizationState sta_state
Definition: oneloop_andi.h:108
struct PolePlacement p_head_rm
Definition: oneloop_andi.c:434
struct Gains3rdOrder k_att_rm
Definition: oneloop_andi.c:437
struct guidance_indi_hybrid_params gih_params
struct PolePlacement p_att_rm
Definition: oneloop_andi.c:425
float g1g2_1l[ANDI_OUTPUTS][ANDI_NUM_ACT_TOT]
Definition: oneloop_andi.c:446
struct Gains3rdOrder k_att_e
Definition: oneloop_andi.c:436
struct Gains3rdOrder k_pos_e
Definition: oneloop_andi.c:440
struct Gains2ndOrder k_head_rm
Definition: oneloop_andi.c:439
float nu[6]
Definition: oneloop_andi.c:396
#define ANDI_NUM_ACT
Definition: oneloop_andi.h:35
void oneloop_from_nav(bool in_flight)
Function that maps navigation inputs to the oneloop controller for the generated autopilot.
struct PolePlacement p_alt_rm
Definition: oneloop_andi.c:431
struct OneloopGuidanceRef gui_ref
Definition: oneloop_andi.h:105
void oneloop_andi_RM(bool half_loop, struct FloatVect3 PSA_des, int rm_order_h, int rm_order_v)
Function to generate the reference signals for the oneloop controller.
struct Gains2ndOrder k_head_e
Definition: oneloop_andi.c:438
void oneloop_andi_set_failsafe_setpoint(void)
struct OneloopStabilizationRef sta_ref
Definition: oneloop_andi.h:107
float andi_u[ANDI_NUM_ACT_TOT]
Definition: oneloop_andi.c:393
void oneloop_andi_run(bool in_flight, bool half_loop, struct FloatVect3 PSA_des, int rm_order_h, int rm_order_v)
Main function that runs the controller and performs control allocation.
struct PolePlacement p_att_e
Definition: oneloop_andi.c:424
struct PolePlacement p_alt_e
Definition: oneloop_andi.c:430
struct PolePlacement p_head_e
Definition: oneloop_andi.c:433
#define ANDI_NUM_ACT_TOT
Definition: oneloop_andi.h:48
float andi_du[ANDI_NUM_ACT_TOT]
Definition: oneloop_andi.c:394
struct OneloopGeneral oneloop_andi
Definition: oneloop_andi.c:384
struct Gains3rdOrder k_pos_rm
Definition: oneloop_andi.c:441
float psi_des_deg
Definition: oneloop_andi.c:407
void oneloop_andi_enter(bool half_loop_sp)
Function that resets important values upon engaging Oneloop ANDI.
void oneloop_andi_init(void)
Init function of Oneloop ANDI controller
#define ANDI_OUTPUTS
Definition: oneloop_andi.h:52
struct PolePlacement p_pos_rm
Definition: oneloop_andi.c:428
float act_state_filt_vect_1l[ANDI_NUM_ACT]
float actuator_state_1l[ANDI_NUM_ACT]
Definition: oneloop_andi.c:398
General stabilization interface for rotorcrafts.
Common data structures shared by euler and quaternion int implementations.
Rotorcraft attitude reference generation.