1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-19 14:25:20 +03:00

Fixed Betaflight rates calculation. Moved rates_type into rate profile config in CLI.

This commit is contained in:
mikeller 2018-01-20 16:16:45 +13:00
parent c0b8f6c7dc
commit d9922c8227
2 changed files with 7 additions and 5 deletions

View file

@ -46,7 +46,7 @@
#include "sensors/battery.h"
typedef float (applyRatesFn)(int axis, float rcCommandf, const float rcCommandfAbs);
typedef float (applyRatesFn)(const int axis, float rcCommandf, const float rcCommandfAbs);
static float setpointRate[3], rcDeflection[3], rcDeflectionAbs[3];
static float throttlePIDAttenuation;
@ -86,14 +86,15 @@ static int16_t rcLookupThrottle(int32_t tmp)
#define SETPOINT_RATE_LIMIT 1998.0f
#define RC_RATE_INCREMENTAL 14.54f
float applyBetaflightRates(int axis, float rcCommandf, const float rcCommandfAbs)
float applyBetaflightRates(const int axis, float rcCommandf, const float rcCommandfAbs)
{
if (currentControlRateProfile->rcExpo[axis]) {
const float expof = currentControlRateProfile->rcExpo[axis] / 100.0f;
rcCommandf = rcCommandf * power3(rcCommandfAbs) * expof + rcCommandf * (1 - expof);
}
float angleRate = 200.0f * currentControlRateProfile->rcRates[axis] * rcCommandf;
const float rcRate = currentControlRateProfile->rcRates[axis] / 100.0f;
float angleRate = 200.0f * rcRate * rcCommandf;
if (currentControlRateProfile->rates[axis]) {
const float rcSuperfactor = 1.0f / (constrainf(1.0f - (rcCommandfAbs * (currentControlRateProfile->rates[axis] / 100.0f)), 0.01f, 1.00f));
angleRate *= rcSuperfactor;
@ -102,7 +103,7 @@ float applyBetaflightRates(int axis, float rcCommandf, const float rcCommandfAbs
return angleRate;
}
float applyRaceFlightRates(int axis, float rcCommandf, const float rcCommandfAbs)
float applyRaceFlightRates(const int axis, float rcCommandf, const float rcCommandfAbs)
{
UNUSED(rcCommandfAbs);
@ -387,6 +388,7 @@ void initRcProcessing(void)
switch (currentControlRateProfile->rates_type) {
case RATES_TYPE_BETAFLIGHT:
default:
applyRates = applyBetaflightRates;
break;

View file

@ -556,7 +556,7 @@ const clivalue_t valueTable[] = {
// PG_CONTROLRATE_PROFILES
{ "thr_mid", VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmax = { 0, 100 }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, thrMid8) },
{ "thr_expo", VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmax = { 0, 100 }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, thrExpo8) },
{ "rates_type", VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_RATES_TYPE }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rates_type) },
{ "rates_type", VAR_UINT8 | PROFILE_RATE_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_RATES_TYPE }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rates_type) },
{ "roll_rc_rate", VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmax = { 0, CONTROL_RATE_CONFIG_RC_RATES_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rcRates[FD_ROLL]) },
{ "pitch_rc_rate", VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmax = { 0, CONTROL_RATE_CONFIG_RC_RATES_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rcRates[FD_PITCH]) },
{ "yaw_rc_rate", VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmax = { 0, CONTROL_RATE_CONFIG_RC_RATES_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rcRates[FD_YAW]) },