mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-19 14:25:20 +03:00
Merge pull request #4992 from mikeller/fix_selectable_rates
Fixed Betaflight rates calculation. Moved `rates_type` into rate profile config in CLI.
This commit is contained in:
commit
b579ef2703
2 changed files with 7 additions and 5 deletions
|
@ -46,7 +46,7 @@
|
||||||
|
|
||||||
#include "sensors/battery.h"
|
#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 setpointRate[3], rcDeflection[3], rcDeflectionAbs[3];
|
||||||
static float throttlePIDAttenuation;
|
static float throttlePIDAttenuation;
|
||||||
|
@ -86,14 +86,15 @@ static int16_t rcLookupThrottle(int32_t tmp)
|
||||||
#define SETPOINT_RATE_LIMIT 1998.0f
|
#define SETPOINT_RATE_LIMIT 1998.0f
|
||||||
#define RC_RATE_INCREMENTAL 14.54f
|
#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]) {
|
if (currentControlRateProfile->rcExpo[axis]) {
|
||||||
const float expof = currentControlRateProfile->rcExpo[axis] / 100.0f;
|
const float expof = currentControlRateProfile->rcExpo[axis] / 100.0f;
|
||||||
rcCommandf = rcCommandf * power3(rcCommandfAbs) * expof + rcCommandf * (1 - expof);
|
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]) {
|
if (currentControlRateProfile->rates[axis]) {
|
||||||
const float rcSuperfactor = 1.0f / (constrainf(1.0f - (rcCommandfAbs * (currentControlRateProfile->rates[axis] / 100.0f)), 0.01f, 1.00f));
|
const float rcSuperfactor = 1.0f / (constrainf(1.0f - (rcCommandfAbs * (currentControlRateProfile->rates[axis] / 100.0f)), 0.01f, 1.00f));
|
||||||
angleRate *= rcSuperfactor;
|
angleRate *= rcSuperfactor;
|
||||||
|
@ -102,7 +103,7 @@ float applyBetaflightRates(int axis, float rcCommandf, const float rcCommandfAbs
|
||||||
return angleRate;
|
return angleRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
float applyRaceFlightRates(int axis, float rcCommandf, const float rcCommandfAbs)
|
float applyRaceFlightRates(const int axis, float rcCommandf, const float rcCommandfAbs)
|
||||||
{
|
{
|
||||||
UNUSED(rcCommandfAbs);
|
UNUSED(rcCommandfAbs);
|
||||||
|
|
||||||
|
@ -387,6 +388,7 @@ void initRcProcessing(void)
|
||||||
|
|
||||||
switch (currentControlRateProfile->rates_type) {
|
switch (currentControlRateProfile->rates_type) {
|
||||||
case RATES_TYPE_BETAFLIGHT:
|
case RATES_TYPE_BETAFLIGHT:
|
||||||
|
default:
|
||||||
applyRates = applyBetaflightRates;
|
applyRates = applyBetaflightRates;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -557,7 +557,7 @@ const clivalue_t valueTable[] = {
|
||||||
// PG_CONTROLRATE_PROFILES
|
// PG_CONTROLRATE_PROFILES
|
||||||
{ "thr_mid", VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmax = { 0, 100 }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, thrMid8) },
|
{ "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) },
|
{ "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]) },
|
{ "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]) },
|
{ "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]) },
|
{ "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]) },
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue