Paparazzi UAS
v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
|
Total Energy (speed + height) control for fixed wing vehicles. More...
#include "firmwares/fixedwing/guidance/energy_ctrl.h"
#include "state.h"
#include "firmwares/fixedwing/nav.h"
#include "generated/airframe.h"
#include "autopilot.h"
#include "modules/core/abi.h"
Go to the source code of this file.
Macros | |
#define | V_CTL_AUTO_GROUNDSPEED_MAX_SUM_ERR 100 |
#define | V_CTL_ALTITUDE_MAX_CLIMB 2; |
#define | STALL_AIRSPEED NOMINAL_AIRSPEED |
#define | V_CTL_GLIDE_RATIO 8. |
#define | AIRSPEED_SETPOINT_SLEW 1 |
#define | V_CTL_MAX_ACCELERATION 0.5 |
#define | V_CTL_ENERGY_IMU_ID ABI_BROADCAST |
#define | V_CTL_THROTTLE_SLEW 1. |
Functions | |
static void | ac_char_average (float *last_v, float new_v, int count) |
static void | ac_char_update (float throttle, float pitch, float climb, float accelerate) |
static void | accel_cb (uint8_t sender_id, uint32_t stamp, struct Int32Vect3 *accel) |
void | v_ctl_init (void) |
void | v_ctl_altitude_loop (void) |
outer loop More... | |
static float | low_pass_vdot (float v) |
void | v_ctl_climb_loop (void) |
Auto-throttle inner loop. More... | |
void | v_ctl_throttle_slew (void) |
Computes slewed throttle from throttle setpoint called at 20Hz. More... | |
Total Energy (speed + height) control for fixed wing vehicles.
Energy:
Equilibrium:
with:
Strategy:
Pseudo-Control Unit = dimensionless acceleration [g]
- pitch <-> pseudocontrol: sin(Theta) steers Vdot in [g] - throttle <-> pseudocontrol: motor characteristic as function of V x throttle steeds VDot
Definition in file energy_ctrl.c.
#define AIRSPEED_SETPOINT_SLEW 1 |
Definition at line 155 of file energy_ctrl.c.
#define STALL_AIRSPEED NOMINAL_AIRSPEED |
Definition at line 148 of file energy_ctrl.c.
#define V_CTL_ALTITUDE_MAX_CLIMB 2; |
Definition at line 143 of file energy_ctrl.c.
#define V_CTL_AUTO_GROUNDSPEED_MAX_SUM_ERR 100 |
Definition at line 129 of file energy_ctrl.c.
#define V_CTL_ENERGY_IMU_ID ABI_BROADCAST |
Definition at line 162 of file energy_ctrl.c.
#define V_CTL_GLIDE_RATIO 8. |
Definition at line 151 of file energy_ctrl.c.
#define V_CTL_MAX_ACCELERATION 0.5 |
Definition at line 158 of file energy_ctrl.c.
#define V_CTL_THROTTLE_SLEW 1. |
Definition at line 432 of file energy_ctrl.c.
|
static |
Definition at line 177 of file energy_ctrl.c.
Referenced by ac_char_update().
|
static |
Definition at line 182 of file energy_ctrl.c.
References ac_char_average(), ac_char_climb_count, ac_char_climb_max, ac_char_climb_pitch, ac_char_cruise_count, ac_char_cruise_pitch, ac_char_cruise_throttle, ac_char_descend_count, ac_char_descend_max, ac_char_descend_pitch, stateGetSpeedEnu_f(), and Int32Vect3::z.
Referenced by v_ctl_climb_loop().
|
static |
Definition at line 201 of file energy_ctrl.c.
References accel_imu_meas.
Referenced by v_ctl_init().
|
static |
Definition at line 309 of file energy_ctrl.c.
References lp_vdot.
Referenced by v_ctl_climb_loop().
void v_ctl_altitude_loop | ( | void | ) |
outer loop
Computes v_ctl_climb_setpoint and sets v_ctl_auto_throttle_submode
Definition at line 286 of file energy_ctrl.c.
References UtmCoor_f::alt, dt_navigation, STALL_AIRSPEED, stateGetPositionUtm_f(), v_ctl_altitude_error, v_ctl_altitude_pgain, v_ctl_altitude_pre_climb, v_ctl_altitude_setpoint, v_ctl_auto_airspeed_setpoint, v_ctl_climb_setpoint, and v_ctl_max_climb.
Referenced by navigation_task().
void v_ctl_climb_loop | ( | void | ) |
Auto-throttle inner loop.
Definition at line 324 of file energy_ctrl.c.
References ac_char_update(), accel_imu_meas, ACCELS_FLOAT_OF_BFP, AIRSPEED_SETPOINT_SLEW, autopilot, autopilot_throttle_killed(), controlled_throttle, dt_attidude, pprz_autopilot::launch, low_pass_vdot(), MAX_PPRZ, nav_pitch, stateGetAirspeed_f(), stateGetHorizontalSpeedNorm_f(), stateGetNedToBodyEulers_f(), stateGetSpeedEnu_f(), TRIM_UPPRZ, v_ctl_airspeed_pgain, v_ctl_auto_airspeed_controlled, v_ctl_auto_airspeed_setpoint, v_ctl_auto_airspeed_setpoint_slew, v_ctl_auto_groundspeed_igain, V_CTL_AUTO_GROUNDSPEED_MAX_SUM_ERR, v_ctl_auto_groundspeed_pgain, v_ctl_auto_groundspeed_setpoint, v_ctl_auto_groundspeed_sum_err, v_ctl_auto_pitch_of_airspeed_dgain, v_ctl_auto_pitch_of_airspeed_igain, v_ctl_auto_pitch_of_airspeed_pgain, v_ctl_auto_throttle_climb_throttle_increment, v_ctl_auto_throttle_nominal_cruise_pitch, v_ctl_auto_throttle_nominal_cruise_throttle, v_ctl_auto_throttle_of_airspeed_igain, v_ctl_auto_throttle_of_airspeed_pgain, v_ctl_auto_throttle_pitch_of_vz_pgain, v_ctl_climb_setpoint, v_ctl_desired_acceleration, v_ctl_energy_diff_igain, v_ctl_energy_diff_pgain, v_ctl_energy_total_igain, v_ctl_energy_total_pgain, V_CTL_GLIDE_RATIO, v_ctl_max_acceleration, v_ctl_mode, V_CTL_MODE_AUTO_CLIMB, v_ctl_pitch_setpoint, v_ctl_throttle_setpoint, FloatVect3::x, and EnuCoor_f::z.
Referenced by attitude_loop().
void v_ctl_init | ( | void | ) |
Definition at line 208 of file energy_ctrl.c.
References accel_cb(), accel_ev, v_ctl_airspeed_pgain, V_CTL_ALTITUDE_MAX_CLIMB, v_ctl_altitude_pgain, v_ctl_altitude_pre_climb, v_ctl_altitude_setpoint, v_ctl_auto_airspeed_setpoint, v_ctl_auto_airspeed_setpoint_slew, v_ctl_auto_groundspeed_igain, v_ctl_auto_groundspeed_pgain, v_ctl_auto_groundspeed_setpoint, v_ctl_auto_groundspeed_sum_err, v_ctl_auto_pitch_of_airspeed_dgain, v_ctl_auto_pitch_of_airspeed_igain, v_ctl_auto_pitch_of_airspeed_pgain, v_ctl_auto_throttle_climb_throttle_increment, v_ctl_auto_throttle_nominal_cruise_pitch, v_ctl_auto_throttle_nominal_cruise_throttle, v_ctl_auto_throttle_of_airspeed_igain, v_ctl_auto_throttle_of_airspeed_pgain, v_ctl_auto_throttle_pitch_of_vz_pgain, v_ctl_climb_setpoint, v_ctl_energy_diff_igain, v_ctl_energy_diff_pgain, V_CTL_ENERGY_IMU_ID, v_ctl_energy_total_igain, v_ctl_energy_total_pgain, v_ctl_max_acceleration, V_CTL_MAX_ACCELERATION, v_ctl_max_climb, v_ctl_mode, V_CTL_MODE_MANUAL, v_ctl_speed_mode, V_CTL_SPEED_THROTTLE, and v_ctl_throttle_setpoint.
void v_ctl_throttle_slew | ( | void | ) |
Computes slewed throttle from throttle setpoint called at 20Hz.
Computes throttle_slewed from throttle_setpoint.
Definition at line 437 of file energy_ctrl.c.
References MAX_PPRZ, TRIM_PPRZ, v_ctl_throttle_setpoint, V_CTL_THROTTLE_SLEW, and v_ctl_throttle_slewed.
Referenced by attitude_loop().
int ac_char_climb_count = 0 |
Definition at line 169 of file energy_ctrl.c.
Referenced by ac_char_update().
float ac_char_climb_max = 0.0f |
Definition at line 168 of file energy_ctrl.c.
Referenced by ac_char_update().
float ac_char_climb_pitch = 0.0f |
Definition at line 167 of file energy_ctrl.c.
Referenced by ac_char_update().
int ac_char_cruise_count = 0 |
Definition at line 175 of file energy_ctrl.c.
Referenced by ac_char_update().
float ac_char_cruise_pitch = 0.0f |
Definition at line 174 of file energy_ctrl.c.
Referenced by ac_char_update().
float ac_char_cruise_throttle = 0.0f |
Definition at line 173 of file energy_ctrl.c.
Referenced by ac_char_update().
int ac_char_descend_count = 0 |
Definition at line 172 of file energy_ctrl.c.
Referenced by ac_char_update().
float ac_char_descend_max = 0.0f |
Definition at line 171 of file energy_ctrl.c.
Referenced by ac_char_update().
float ac_char_descend_pitch = 0.0f |
Definition at line 170 of file energy_ctrl.c.
Referenced by ac_char_update().
|
static |
Definition at line 139 of file energy_ctrl.c.
Referenced by v_ctl_init().
|
static |
Definition at line 135 of file energy_ctrl.c.
Referenced by accel_cb(), and v_ctl_climb_loop().
|
static |
Definition at line 278 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop().
|
static |
Definition at line 279 of file energy_ctrl.c.
Referenced by v_ctl_altitude_loop().
float lp_vdot[5] |
Definition at line 306 of file energy_ctrl.c.
Referenced by low_pass_vdot().
float v_ctl_airspeed_pgain |
Definition at line 91 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_altitude_error |
in meters, (setpoint - alt) -> positive = too low
Definition at line 92 of file energy_ctrl.c.
Referenced by h_ctl_course_loop(), and v_ctl_altitude_loop().
float v_ctl_altitude_pgain |
Definition at line 90 of file energy_ctrl.c.
Referenced by v_ctl_altitude_loop(), and v_ctl_init().
float v_ctl_altitude_pre_climb |
Path Angle.
Definition at line 89 of file energy_ctrl.c.
Referenced by v_ctl_altitude_loop(), and v_ctl_init().
float v_ctl_altitude_setpoint |
in meters above MSL
Definition at line 88 of file energy_ctrl.c.
Referenced by callTCAS(), flight_benchmark_periodic(), nav_set_altitude(), send_desired(), v_ctl_altitude_loop(), and v_ctl_init().
float v_ctl_auto_airspeed_controlled |
Definition at line 123 of file energy_ctrl.c.
Referenced by send_airspeed(), v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_airspeed_setpoint |
in meters per second
Definition at line 121 of file energy_ctrl.c.
Referenced by flight_benchmark_periodic(), gls_run(), send_airspeed(), send_desired(), v_ctl_altitude_loop(), v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_airspeed_setpoint_slew |
Definition at line 122 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_groundspeed_igain |
Definition at line 127 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_groundspeed_pgain |
Definition at line 126 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_groundspeed_setpoint |
in meters per second
Definition at line 125 of file energy_ctrl.c.
Referenced by send_airspeed(), v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_groundspeed_sum_err |
Definition at line 128 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_pitch_of_airspeed_dgain |
Definition at line 113 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_pitch_of_airspeed_igain |
Definition at line 112 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_pitch_of_airspeed_pgain |
Definition at line 111 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_throttle_climb_throttle_increment |
Definition at line 106 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_throttle_cruise_throttle |
Definition at line 103 of file energy_ctrl.c.
Referenced by formation_flight(), potential_task(), start_formation(), and stop_formation().
float v_ctl_auto_throttle_nominal_cruise_pitch |
Definition at line 105 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_throttle_nominal_cruise_throttle |
Definition at line 104 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_throttle_of_airspeed_igain |
Definition at line 110 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_throttle_of_airspeed_pgain |
Definition at line 109 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_auto_throttle_pitch_of_vz_pgain |
Definition at line 107 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
uint8_t v_ctl_auto_throttle_submode = V_CTL_CLIMB_MODE_AUTO_THROTTLE |
Definition at line 76 of file energy_ctrl.c.
Referenced by h_ctl_course_loop(), nav_periodic_task(), and send_calibration().
float v_ctl_auto_throttle_sum_err = 0 |
Definition at line 77 of file energy_ctrl.c.
Referenced by send_calibration().
uint8_t v_ctl_climb_mode = V_CTL_CLIMB_MODE_AUTO_THROTTLE |
Definition at line 75 of file energy_ctrl.c.
float v_ctl_climb_setpoint |
Definition at line 98 of file energy_ctrl.c.
Referenced by gvf_parametric_low_level_control_3D(), send_desired(), v_ctl_altitude_loop(), v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_desired_acceleration |
Definition at line 101 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop().
float v_ctl_energy_diff_igain |
Definition at line 119 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_energy_diff_pgain |
Definition at line 118 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_energy_total_igain |
Definition at line 116 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_energy_total_pgain |
Definition at line 115 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_max_acceleration |
Definition at line 95 of file energy_ctrl.c.
Referenced by v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_max_climb |
Definition at line 94 of file energy_ctrl.c.
Referenced by v_ctl_altitude_loop(), and v_ctl_init().
uint8_t v_ctl_mode = V_CTL_MODE_MANUAL |
Definition at line 74 of file energy_ctrl.c.
Referenced by attitude_loop(), gvf_parametric_low_level_control_3D(), h_ctl_pitch_loop(), nav_home(), nav_periodic_task(), nav_skid_landing_glide(), nav_without_gps(), navigation_task(), send_mode(), v_ctl_climb_loop(), and v_ctl_init().
float v_ctl_pitch_setpoint |
Definition at line 133 of file energy_ctrl.c.
Referenced by attitude_loop(), h_ctl_guidance_loop(), and v_ctl_climb_loop().
uint8_t v_ctl_speed_mode |
Definition at line 135 of file energy_ctrl.c.
Referenced by gvf_parametric_low_level_control_3D(), and v_ctl_init().
pprz_t v_ctl_throttle_setpoint |
Definition at line 131 of file energy_ctrl.c.
Referenced by attitude_loop(), autopilot_static_on_rc_frame(), h_ctl_roll_loop(), nav_home(), v_ctl_climb_loop(), v_ctl_init(), and v_ctl_throttle_slew().
pprz_t v_ctl_throttle_slewed |
Definition at line 132 of file energy_ctrl.c.
Referenced by attitude_loop(), and v_ctl_throttle_slew().