Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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"
35
36#ifndef ANDI_NUM_ACT
37#define ANDI_NUM_ACT COMMANDS_NB_REAL
38#endif
39
40#ifndef ANDI_NUM_VIRTUAL_ACT
41#define ANDI_NUM_VIRTUAL_ACT COMMANDS_NB_VIRTUAL
42#endif
43
44// 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.
45#if ANDI_NUM_VIRTUAL_ACT < 2
46#error "You must specify the number of virtual actuators to be at least 2"
47#define ANDI_NUM_VIRTUAL_ACT 2
48#endif
49
50#define ANDI_NUM_ACT_TOT (ANDI_NUM_ACT + ANDI_NUM_VIRTUAL_ACT)
51
52#ifndef ANDI_OUTPUTS
53#error "You must specify the number of controlled axis (outputs)"
54#define ANDI_OUTPUTS 6
55#endif
56#define ANDI_G_SCALING 1000.0f
57
59#define CTRL_ANDI 0
60#define CTRL_INDI 1
61
62extern bool ctrl_off;
65extern float nu[6];
67extern float andi_u[ANDI_NUM_ACT_TOT];
68extern float andi_du[ANDI_NUM_ACT_TOT];
69extern float psi_des_deg;
70extern bool heading_manual;
71extern bool yaw_stick_in_auto;
72extern float fwd_sideslip_gain;
73extern struct FloatEulers eulers_zxy_des;
74extern float psi_des_rad;
75extern float k_as;
76extern float max_as;
77extern float gi_unbounded_airspeed_sp;
78
79/*Chirp test Variables*/
80extern bool chirp_on;
81extern float f0_chirp;
82extern float f1_chirp;
83extern float t_chirp;
84extern float A_chirp;
85extern int8_t chirp_axis;
86
87// Delete once hybrid nav is fixed //////////////////////////////////////////////////////////////////////////////////
89 float pos_gain;
90 float pos_gainz;
91 float speed_gain;
92 float speed_gainz;
94 float liftd_asq;
95 float liftd_p80;
96 float liftd_p50;
97};
99//extern bool force_forward;
102 float pos[3];
103 float vel[3];
104 float acc[3];
105 float jer[3];
106};
107
109 float pos[3];
110 float vel[3];
111 float acc[3];
112};
113
115 float att[3];
116 float att_d[3];
117 float att_2d[3];
118 float att_3d[3];
119};
120
122 float att[3];
123 float att_d[3];
124 float att_2d[3];
125};
129 struct OneloopGuidanceRef gui_ref; // Guidance References
130 struct OneloopGuidanceState gui_state; // Guidance State
131 struct OneloopStabilizationRef sta_ref; // Stabilization References
132 struct OneloopStabilizationState sta_state; // Stabilization State
133
134};
135
136extern struct OneloopGeneral oneloop_andi;
137
139 float omega_n;
140 float zeta;
141 float p3;
142};
144 float k1[3];
145 float k2[3];
146 float k3[3];
147};
149 float k2;
150 float k3;
151};
152
173
175 struct CF2_t p;
176 struct CF2_t q;
177 struct CF2_t r;
178 struct CF4_t p_dot;
179 struct CF4_t q_dot;
180 struct CF2_t r_dot;
181 struct CF2_t ax;
182 struct CF2_t ay;
183 struct CF2_t az;
184};
185extern struct Oneloop_CF_t cf;
196
197extern int16_t temp_pitch;
198/*Declaration of Reference Model and Error Controller Gains*/
199extern struct PolePlacement p_att_e;
200extern struct PolePlacement p_att_rm;
201/*Position Loop*/
202extern struct PolePlacement p_pos_e;
203extern struct PolePlacement p_pos_rm;
204/*Altitude Loop*/
205extern struct PolePlacement p_alt_e;
206extern struct PolePlacement p_alt_rm;
207/*Heading Loop*/
208extern struct PolePlacement p_head_e;
209extern struct PolePlacement p_head_rm;
210/*Gains of EC and RM*/
211extern struct Gains3rdOrder k_att_e;
212extern struct Gains3rdOrder k_att_rm;
213extern struct Gains2ndOrder k_head_e;
214extern struct Gains2ndOrder k_head_rm;
215extern struct Gains3rdOrder k_pos_e;
216extern struct Gains3rdOrder k_pos_rm;
217extern void oneloop_andi_init(void);
218extern void oneloop_andi_enter(bool half_loop_sp, int ctrl_type);
220extern void oneloop_andi_run(bool in_flight, bool half_loop, struct FloatVect3 PSA_des, int rm_order_h, int rm_order_v);
221extern void oneloop_andi_RM(bool half_loop, struct FloatVect3 PSA_des, int rm_order_h, int rm_order_v, bool in_flight_oneloop);
222extern void oneloop_andi_read_rc(bool in_flight, bool in_carefree, bool coordinated_turn);
223extern void oneloop_from_nav(bool in_flight);
224extern void guidance_set_min_max_airspeed(float min_airspeed, float max_airspeed);
225#endif // ONELOOP_ANDI_H
euler angles
int32_t max_airspeed
Simple first order low pass filter with bilinear transform.
Fourth order Butterworth low pass filter.
Second order low pass filter structure.
uint16_t foo
Definition main_demo5.c:58
void oneloop_andi_read_rc(bool in_flight, bool in_carefree, bool coordinated_turn)
struct PolePlacement p_pos_e
struct OneloopGuidanceState gui_state
struct notch_axis_t yaw
struct OneloopStabilizationState sta_state
struct CF4_t q_dot
struct PolePlacement p_head_rm
void oneloop_andi_RM(bool half_loop, struct FloatVect3 PSA_des, int rm_order_h, int rm_order_v, bool in_flight_oneloop)
Function to generate the reference signals for the oneloop controller.
void oneloop_andi_enter(bool half_loop_sp, int ctrl_type)
Function that resets important values upon engaging Oneloop ANDI.
Butterworth2LowPass feedback_filt
float freq_set
struct Gains3rdOrder k_att_rm
struct guidance_indi_hybrid_params gih_params
float feedback
float freq_set
struct FloatEulers eulers_zxy_des
float freq
struct PolePlacement p_att_rm
float g1g2_1l[ANDI_OUTPUTS][ANDI_NUM_ACT_TOT]
float out
int16_t temp_pitch
struct CF2_t az
float max_as
struct Gains3rdOrder k_att_e
float psi_des_rad
float model
bool ctrl_off
struct Gains3rdOrder k_pos_e
struct Gains2ndOrder k_head_rm
float t_chirp
float tau
float nu[6]
#define ANDI_NUM_ACT
Butterworth4LowPass feedback_filt
Butterworth4LowPass model_filt
float f0_chirp
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
struct OneloopGuidanceRef gui_ref
struct CF2_t p
struct Gains2ndOrder k_head_e
bool chirp_on
void oneloop_andi_set_failsafe_setpoint(void)
struct OneloopStabilizationRef sta_ref
void guidance_set_min_max_airspeed(float min_airspeed, float max_airspeed)
float andi_u[ANDI_NUM_ACT_TOT]
struct Oneloop_CF_t cf
float fwd_sideslip_gain
float f1_chirp
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
float freq
struct PolePlacement p_alt_e
float A_chirp
struct PolePlacement p_head_e
struct notch_axis_t pitch
int8_t chirp_axis
#define ANDI_NUM_ACT_TOT
float andi_du[ANDI_NUM_ACT_TOT]
bool heading_manual
struct OneloopGeneral oneloop_andi
struct Gains3rdOrder k_pos_rm
struct CF2_t ay
float feedback
struct notch_axis_t roll
struct CF2_t q
struct CF2_t r
float psi_des_deg
void oneloop_andi_init(void)
Init function of Oneloop ANDI controller
float model
float gi_unbounded_airspeed_sp
struct SecondOrderNotchFilter filter
#define ANDI_OUTPUTS
float k_as
struct CF2_t r_dot
struct PolePlacement p_pos_rm
bool yaw_stick_in_auto
float act_state_filt_vect_1l[ANDI_NUM_ACT]
struct CF2_t ax
struct CF4_t p_dot
float actuator_state_1l[ANDI_NUM_ACT]
float tau
float out
Butterworth2LowPass model_filt
General stabilization interface for rotorcrafts.
Common data structures shared by euler and quaternion int implementations.
Rotorcraft attitude reference generation.
short int16_t
Typedef defining 16 bit short type.
signed char int8_t
Typedef defining 8 bit char type.