mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-05 23:49:00 +08:00
[rotorcraft] RC_CLIMB cleanup
- add GUIDANCE_V_CLIMB_RC_DEADBAND (in pprz units, default MAX_PPRZ/10) - GUIDANCE_V_RC_CLIMB_DEAD_BAND is obsolete - GUIDANCE_V_MAX_RC_CLIMB_SPEED defaults to GUIDANCE_V_REF_MIN_ZD - GUIDANCE_V_MAX_RC_DESCENT_SPEED defaults to GUIDANCE_V_REF_MAX_ZD
This commit is contained in:
@@ -62,6 +62,19 @@ PRINT_CONFIG_VAR(GUIDANCE_V_NOMINAL_HOVER_THROTTLE)
|
||||
PRINT_CONFIG_VAR(GUIDANCE_V_ADAPT_THROTTLE_ENABLED)
|
||||
|
||||
|
||||
#ifndef GUIDANCE_V_CLIMB_RC_DEADBAND
|
||||
#define GUIDANCE_V_CLIMB_RC_DEADBAND MAX_PPRZ/10
|
||||
#endif
|
||||
|
||||
#ifndef GUIDANCE_V_MAX_RC_CLIMB_SPEED
|
||||
#define GUIDANCE_V_MAX_RC_CLIMB_SPEED GUIDANCE_V_REF_MIN_ZD
|
||||
#endif
|
||||
|
||||
#ifndef GUIDANCE_V_MAX_RC_DESCENT_SPEED
|
||||
#define GUIDANCE_V_MAX_RC_DESCENT_SPEED GUIDANCE_V_REF_MAX_ZD
|
||||
#endif
|
||||
|
||||
|
||||
uint8_t guidance_v_mode;
|
||||
int32_t guidance_v_ff_cmd;
|
||||
int32_t guidance_v_fb_cmd;
|
||||
@@ -98,10 +111,10 @@ int32_t guidance_v_thrust_coeff;
|
||||
|
||||
|
||||
#define GuidanceVSetRef(_pos, _speed, _accel) { \
|
||||
gv_set_ref(_pos, _speed, _accel); \
|
||||
guidance_v_z_ref = _pos; \
|
||||
guidance_v_zd_ref = _speed; \
|
||||
guidance_v_zdd_ref = _accel; \
|
||||
gv_set_ref(_pos, _speed, _accel); \
|
||||
guidance_v_z_ref = _pos; \
|
||||
guidance_v_zd_ref = _speed; \
|
||||
guidance_v_zdd_ref = _accel; \
|
||||
}
|
||||
|
||||
static int32_t get_vertical_thrust_coeff(void);
|
||||
@@ -131,12 +144,18 @@ void guidance_v_read_rc(void) {
|
||||
guidance_v_rc_delta_t = (int32_t)radio_control.values[RADIO_THROTTLE];
|
||||
|
||||
/* used in RC_CLIMB */
|
||||
guidance_v_rc_zd_sp = ((MAX_PPRZ/2) - (int32_t)radio_control.values[RADIO_THROTTLE]);
|
||||
DeadBand(guidance_v_rc_zd_sp, MAX_PPRZ/10);
|
||||
guidance_v_rc_zd_sp = (MAX_PPRZ/2) - (int32_t)radio_control.values[RADIO_THROTTLE];
|
||||
DeadBand(guidance_v_rc_zd_sp, GUIDANCE_V_CLIMB_RC_DEADBAND);
|
||||
|
||||
static const int32_t climb_scale = ABS(SPEED_BFP_OF_REAL(GUIDANCE_V_MAX_RC_CLIMB_SPEED) /
|
||||
(MAX_PPRZ/2 - GUIDANCE_V_CLIMB_RC_DEADBAND));
|
||||
static const int32_t descent_scale = ABS(SPEED_BFP_OF_REAL(GUIDANCE_V_MAX_RC_DESCENT_SPEED) /
|
||||
(MAX_PPRZ/2 - GUIDANCE_V_CLIMB_RC_DEADBAND));
|
||||
|
||||
if(guidance_v_rc_zd_sp > 0)
|
||||
guidance_v_rc_zd_sp = SPEED_BFP_OF_REAL(GUIDANCE_V_REF_MAX_ZD) / (MAX_PPRZ/2 - MAX_PPRZ/10) * guidance_v_rc_zd_sp;
|
||||
else
|
||||
guidance_v_rc_zd_sp = -SPEED_BFP_OF_REAL(GUIDANCE_V_REF_MIN_ZD) / (MAX_PPRZ/2 - MAX_PPRZ/10) * guidance_v_rc_zd_sp;
|
||||
guidance_v_rc_zd_sp *= descent_scale;
|
||||
else
|
||||
guidance_v_rc_zd_sp *= climb_scale;
|
||||
}
|
||||
|
||||
void guidance_v_mode_changed(uint8_t new_mode) {
|
||||
|
||||
@@ -58,14 +58,7 @@ int64_t gv_z_ref;
|
||||
#endif
|
||||
#define GV_MAX_ZDD BFP_OF_REAL(GUIDANCE_V_REF_MAX_ZDD, GV_ZDD_REF_FRAC)
|
||||
|
||||
#ifndef GUIDANCE_V_REF_MIN_ZD
|
||||
#define GUIDANCE_V_REF_MIN_ZD (-3.)
|
||||
#endif
|
||||
#define GV_MIN_ZD BFP_OF_REAL(GUIDANCE_V_REF_MIN_ZD , GV_ZD_REF_FRAC)
|
||||
|
||||
#ifndef GUIDANCE_V_REF_MAX_ZD
|
||||
#define GUIDANCE_V_REF_MAX_ZD ( 3.)
|
||||
#endif
|
||||
#define GV_MAX_ZD BFP_OF_REAL(GUIDANCE_V_REF_MAX_ZD , GV_ZD_REF_FRAC)
|
||||
|
||||
/* second order model natural frequency and damping */
|
||||
|
||||
@@ -32,6 +32,16 @@
|
||||
#include "math/pprz_algebra.h"
|
||||
#include "math/pprz_algebra_int.h"
|
||||
|
||||
|
||||
#ifndef GUIDANCE_V_REF_MIN_ZD
|
||||
#define GUIDANCE_V_REF_MIN_ZD (-3.)
|
||||
#endif
|
||||
|
||||
#ifndef GUIDANCE_V_REF_MAX_ZD
|
||||
#define GUIDANCE_V_REF_MAX_ZD ( 3.)
|
||||
#endif
|
||||
|
||||
|
||||
/** Update frequency
|
||||
*/
|
||||
#define GV_FREQ_FRAC 9
|
||||
|
||||
Reference in New Issue
Block a user