Yaw Expo Feature
This commit is contained in:
parent
5bf687a150
commit
da8bb6f6fc
|
@ -185,6 +185,7 @@ Re-apply any new defaults as desired.
|
||||||
| default_rate_profile | Default = profile number | 0 | 2 | | Profile | UINT8 |
|
| default_rate_profile | Default = profile number | 0 | 2 | | Profile | UINT8 |
|
||||||
| rc_rate | | 0 | 250 | 90 | Rate Profile | UINT8 |
|
| rc_rate | | 0 | 250 | 90 | Rate Profile | UINT8 |
|
||||||
| rc_expo | | 0 | 100 | 65 | Rate Profile | UINT8 |
|
| rc_expo | | 0 | 100 | 65 | Rate Profile | UINT8 |
|
||||||
|
| rc_yaw_expo | | 0 | 100 | 0 | Rate Profile | UINT8 |
|
||||||
| thr_mid | | 0 | 100 | 50 | Rate Profile | UINT8 |
|
| thr_mid | | 0 | 100 | 50 | Rate Profile | UINT8 |
|
||||||
| thr_expo | | 0 | 100 | 0 | Rate Profile | UINT8 |
|
| thr_expo | | 0 | 100 | 0 | Rate Profile | UINT8 |
|
||||||
| roll_pitch_rate | | 0 | 100 | 0 | Rate Profile | UINT8 |
|
| roll_pitch_rate | | 0 | 100 | 0 | Rate Profile | UINT8 |
|
||||||
|
|
|
@ -301,6 +301,7 @@ static void resetControlRateConfig(controlRateConfig_t *controlRateConfig) {
|
||||||
controlRateConfig->thrMid8 = 50;
|
controlRateConfig->thrMid8 = 50;
|
||||||
controlRateConfig->thrExpo8 = 0;
|
controlRateConfig->thrExpo8 = 0;
|
||||||
controlRateConfig->dynThrPID = 0;
|
controlRateConfig->dynThrPID = 0;
|
||||||
|
controlRateConfig->rcYawExpo8 = 0;
|
||||||
controlRateConfig->tpa_breakpoint = 1500;
|
controlRateConfig->tpa_breakpoint = 1500;
|
||||||
|
|
||||||
for (uint8_t axis = 0; axis < FLIGHT_DYNAMICS_INDEX_COUNT; axis++) {
|
for (uint8_t axis = 0; axis < FLIGHT_DYNAMICS_INDEX_COUNT; axis++) {
|
||||||
|
@ -650,6 +651,7 @@ static bool isEEPROMContentValid(void)
|
||||||
void activateControlRateConfig(void)
|
void activateControlRateConfig(void)
|
||||||
{
|
{
|
||||||
generatePitchRollCurve(currentControlRateProfile);
|
generatePitchRollCurve(currentControlRateProfile);
|
||||||
|
generateYawCurve(currentControlRateProfile);
|
||||||
generateThrottleCurve(currentControlRateProfile, &masterConfig.escAndServoConfig);
|
generateThrottleCurve(currentControlRateProfile, &masterConfig.escAndServoConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -132,6 +132,7 @@ typedef struct controlRateConfig_s {
|
||||||
uint8_t thrExpo8;
|
uint8_t thrExpo8;
|
||||||
uint8_t rates[3];
|
uint8_t rates[3];
|
||||||
uint8_t dynThrPID;
|
uint8_t dynThrPID;
|
||||||
|
uint8_t rcYawExpo8;
|
||||||
uint16_t tpa_breakpoint; // Breakpoint where TPA is activated
|
uint16_t tpa_breakpoint; // Breakpoint where TPA is activated
|
||||||
} controlRateConfig_t;
|
} controlRateConfig_t;
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "io/rc_curves.h"
|
#include "io/rc_curves.h"
|
||||||
|
|
||||||
int16_t lookupPitchRollRC[PITCH_LOOKUP_LENGTH]; // lookup table for expo & RC rate PITCH+ROLL
|
int16_t lookupPitchRollRC[PITCH_LOOKUP_LENGTH]; // lookup table for expo & RC rate PITCH+ROLL
|
||||||
|
int16_t lookupYawRC[YAW_LOOKUP_LENGTH]; // lookup table for expo & RC rate YAW
|
||||||
int16_t lookupThrottleRC[THROTTLE_LOOKUP_LENGTH]; // lookup table for expo & mid THROTTLE
|
int16_t lookupThrottleRC[THROTTLE_LOOKUP_LENGTH]; // lookup table for expo & mid THROTTLE
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,6 +37,14 @@ void generatePitchRollCurve(controlRateConfig_t *controlRateConfig)
|
||||||
lookupPitchRollRC[i] = (2500 + controlRateConfig->rcExpo8 * (i * i - 25)) * i * (int32_t) controlRateConfig->rcRate8 / 2500;
|
lookupPitchRollRC[i] = (2500 + controlRateConfig->rcExpo8 * (i * i - 25)) * i * (int32_t) controlRateConfig->rcRate8 / 2500;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void generateYawCurve(controlRateConfig_t *controlRateConfig)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < PITCH_LOOKUP_LENGTH; i++)
|
||||||
|
lookupYawRC[i] = (2500 + controlRateConfig->rcYawExpo8 * (i * i - 25)) * i / 25;
|
||||||
|
}
|
||||||
|
|
||||||
void generateThrottleCurve(controlRateConfig_t *controlRateConfig, escAndServoConfig_t *escAndServoConfig)
|
void generateThrottleCurve(controlRateConfig_t *controlRateConfig, escAndServoConfig_t *escAndServoConfig)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
|
@ -18,9 +18,12 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define PITCH_LOOKUP_LENGTH 7
|
#define PITCH_LOOKUP_LENGTH 7
|
||||||
|
#define YAW_LOOKUP_LENGTH 7
|
||||||
#define THROTTLE_LOOKUP_LENGTH 12
|
#define THROTTLE_LOOKUP_LENGTH 12
|
||||||
extern int16_t lookupPitchRollRC[PITCH_LOOKUP_LENGTH]; // lookup table for expo & RC rate PITCH+ROLL
|
extern int16_t lookupPitchRollRC[PITCH_LOOKUP_LENGTH]; // lookup table for expo & RC rate PITCH+ROLL
|
||||||
|
extern int16_t lookupYawRC[YAW_LOOKUP_LENGTH]; // lookup table for expo & RC rate YAW
|
||||||
extern int16_t lookupThrottleRC[THROTTLE_LOOKUP_LENGTH]; // lookup table for expo & mid THROTTLE
|
extern int16_t lookupThrottleRC[THROTTLE_LOOKUP_LENGTH]; // lookup table for expo & mid THROTTLE
|
||||||
|
|
||||||
void generatePitchRollCurve(controlRateConfig_t *controlRateConfig);
|
void generatePitchRollCurve(controlRateConfig_t *controlRateConfig);
|
||||||
|
void generateYawCurve(controlRateConfig_t *controlRateConfig);
|
||||||
void generateThrottleCurve(controlRateConfig_t *controlRateConfig, escAndServoConfig_t *escAndServoConfig);
|
void generateThrottleCurve(controlRateConfig_t *controlRateConfig, escAndServoConfig_t *escAndServoConfig);
|
||||||
|
|
|
@ -400,6 +400,7 @@ const clivalue_t valueTable[] = {
|
||||||
{ "default_rate_profile", VAR_UINT8 | PROFILE_VALUE , &masterConfig.profile[0].defaultRateProfileIndex, 0, MAX_CONTROL_RATE_PROFILE_COUNT - 1 },
|
{ "default_rate_profile", VAR_UINT8 | PROFILE_VALUE , &masterConfig.profile[0].defaultRateProfileIndex, 0, MAX_CONTROL_RATE_PROFILE_COUNT - 1 },
|
||||||
{ "rc_rate", VAR_UINT8 | CONTROL_RATE_VALUE, &masterConfig.controlRateProfiles[0].rcRate8, 0, 250 },
|
{ "rc_rate", VAR_UINT8 | CONTROL_RATE_VALUE, &masterConfig.controlRateProfiles[0].rcRate8, 0, 250 },
|
||||||
{ "rc_expo", VAR_UINT8 | CONTROL_RATE_VALUE, &masterConfig.controlRateProfiles[0].rcExpo8, 0, 100 },
|
{ "rc_expo", VAR_UINT8 | CONTROL_RATE_VALUE, &masterConfig.controlRateProfiles[0].rcExpo8, 0, 100 },
|
||||||
|
{ "rc_yaw_expo", VAR_UINT8 | CONTROL_RATE_VALUE, &masterConfig.controlRateProfiles[0].rcYawExpo8, 0, 100 },
|
||||||
{ "thr_mid", VAR_UINT8 | CONTROL_RATE_VALUE, &masterConfig.controlRateProfiles[0].thrMid8, 0, 100 },
|
{ "thr_mid", VAR_UINT8 | CONTROL_RATE_VALUE, &masterConfig.controlRateProfiles[0].thrMid8, 0, 100 },
|
||||||
{ "thr_expo", VAR_UINT8 | CONTROL_RATE_VALUE, &masterConfig.controlRateProfiles[0].thrExpo8, 0, 100 },
|
{ "thr_expo", VAR_UINT8 | CONTROL_RATE_VALUE, &masterConfig.controlRateProfiles[0].thrExpo8, 0, 100 },
|
||||||
{ "roll_rate", VAR_UINT8 | CONTROL_RATE_VALUE, &masterConfig.controlRateProfiles[0].rates[FD_ROLL], 0, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX },
|
{ "roll_rate", VAR_UINT8 | CONTROL_RATE_VALUE, &masterConfig.controlRateProfiles[0].rates[FD_ROLL], 0, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX },
|
||||||
|
|
|
@ -281,7 +281,7 @@ const char *boardIdentifier = TARGET_BOARD_IDENTIFIER;
|
||||||
#define MSP_SET_RAW_GPS 201 //in message fix, numsat, lat, lon, alt, speed
|
#define MSP_SET_RAW_GPS 201 //in message fix, numsat, lat, lon, alt, speed
|
||||||
#define MSP_SET_PID 202 //in message P I D coeff (9 are used currently)
|
#define MSP_SET_PID 202 //in message P I D coeff (9 are used currently)
|
||||||
#define MSP_SET_BOX 203 //in message BOX setup (number is dependant of your setup)
|
#define MSP_SET_BOX 203 //in message BOX setup (number is dependant of your setup)
|
||||||
#define MSP_SET_RC_TUNING 204 //in message rc rate, rc expo, rollpitch rate, yaw rate, dyn throttle PID
|
#define MSP_SET_RC_TUNING 204 //in message rc rate, rc expo, rollpitch rate, yaw rate, dyn throttle PID, yaw expo
|
||||||
#define MSP_ACC_CALIBRATION 205 //in message no param
|
#define MSP_ACC_CALIBRATION 205 //in message no param
|
||||||
#define MSP_MAG_CALIBRATION 206 //in message no param
|
#define MSP_MAG_CALIBRATION 206 //in message no param
|
||||||
#define MSP_SET_MISC 207 //in message powermeter trig + 8 free for future use
|
#define MSP_SET_MISC 207 //in message powermeter trig + 8 free for future use
|
||||||
|
@ -918,6 +918,7 @@ static bool processOutCommand(uint8_t cmdMSP)
|
||||||
serialize8(currentControlRateProfile->thrMid8);
|
serialize8(currentControlRateProfile->thrMid8);
|
||||||
serialize8(currentControlRateProfile->thrExpo8);
|
serialize8(currentControlRateProfile->thrExpo8);
|
||||||
serialize16(currentControlRateProfile->tpa_breakpoint);
|
serialize16(currentControlRateProfile->tpa_breakpoint);
|
||||||
|
serialize8(currentControlRateProfile->rcYawExpo8);
|
||||||
break;
|
break;
|
||||||
case MSP_PID:
|
case MSP_PID:
|
||||||
headSerialReply(3 * PID_ITEM_COUNT);
|
headSerialReply(3 * PID_ITEM_COUNT);
|
||||||
|
@ -1364,7 +1365,7 @@ static bool processInCommand(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MSP_SET_RC_TUNING:
|
case MSP_SET_RC_TUNING:
|
||||||
if (currentPort->dataSize == 10) {//allow for tpa_breakpoint
|
if (currentPort->dataSize >= 11) {//allow for yaw expo
|
||||||
currentControlRateProfile->rcRate8 = read8();
|
currentControlRateProfile->rcRate8 = read8();
|
||||||
currentControlRateProfile->rcExpo8 = read8();
|
currentControlRateProfile->rcExpo8 = read8();
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
|
@ -1376,6 +1377,7 @@ static bool processInCommand(void)
|
||||||
currentControlRateProfile->thrMid8 = read8();
|
currentControlRateProfile->thrMid8 = read8();
|
||||||
currentControlRateProfile->thrExpo8 = read8();
|
currentControlRateProfile->thrExpo8 = read8();
|
||||||
currentControlRateProfile->tpa_breakpoint = read16();
|
currentControlRateProfile->tpa_breakpoint = read16();
|
||||||
|
currentControlRateProfile->rcYawExpo8 = read8();
|
||||||
} else {
|
} else {
|
||||||
headSerialError(0);
|
headSerialError(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -209,7 +209,8 @@ void annexCode(void)
|
||||||
tmp = 0;
|
tmp = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rcCommand[axis] = tmp * -masterConfig.yaw_control_direction;
|
tmp2 = tmp / 100;
|
||||||
|
rcCommand[axis] = (lookupYawRC[tmp2] + (tmp - tmp2 * 100) * (lookupYawRC[tmp2 + 1] - lookupYawRC[tmp2]) / 100) * -masterConfig.yaw_control_direction;
|
||||||
prop1 = 100 - (uint16_t)currentControlRateProfile->rates[axis] * ABS(tmp) / 500;
|
prop1 = 100 - (uint16_t)currentControlRateProfile->rates[axis] * ABS(tmp) / 500;
|
||||||
}
|
}
|
||||||
// FIXME axis indexes into pids. use something like lookupPidIndex(rc_alias_e alias) to reduce coupling.
|
// FIXME axis indexes into pids. use something like lookupPidIndex(rc_alias_e alias) to reduce coupling.
|
||||||
|
|
Loading…
Reference in New Issue