mirror of
https://github.com/okalachev/flix.git
synced 2025-07-27 17:49:33 +00:00
Minor code cleanups and fixes
This commit is contained in:
parent
160e300566
commit
dbd413c234
@ -55,8 +55,6 @@ const struct Param {
|
|||||||
{"ss", &loopFreq, nullptr},
|
{"ss", &loopFreq, nullptr},
|
||||||
{"dt", &dt, nullptr},
|
{"dt", &dt, nullptr},
|
||||||
{"t", &t, nullptr},
|
{"t", &t, nullptr},
|
||||||
|
|
||||||
// {"m", &mode, nullptr},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void doCommand(String& command, String& value)
|
void doCommand(String& command, String& value)
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
#define YAWRATE_MAX 360 * DEG_TO_RAD
|
#define YAWRATE_MAX 360 * DEG_TO_RAD
|
||||||
#define MAX_TILT 30 * DEG_TO_RAD
|
#define MAX_TILT 30 * DEG_TO_RAD
|
||||||
|
|
||||||
#define RATES_LFP_ALPHA 0.8
|
#define RATES_LFP_ALPHA 0.8 // cutoff frequency ~ 250 Hz
|
||||||
#define RATES_D_LPF_ALPHA 0.2 // cutoff frequency ~ 40 Hz
|
#define RATES_D_LPF_ALPHA 0.2 // cutoff frequency ~ 40 Hz
|
||||||
|
|
||||||
enum { MANUAL, ACRO, STAB } mode = STAB;
|
enum { MANUAL, ACRO, STAB } mode = STAB;
|
||||||
@ -68,7 +68,6 @@ void control()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void interpretRC()
|
void interpretRC()
|
||||||
{
|
{
|
||||||
if (controls[RC_CHANNEL_MODE] < 0.25) {
|
if (controls[RC_CHANNEL_MODE] < 0.25) {
|
||||||
@ -81,6 +80,8 @@ void interpretRC()
|
|||||||
|
|
||||||
armed = controls[RC_CHANNEL_THROTTLE] >= 0.05 && controls[RC_CHANNEL_AUX] >= 0.5;
|
armed = controls[RC_CHANNEL_THROTTLE] >= 0.05 && controls[RC_CHANNEL_AUX] >= 0.5;
|
||||||
|
|
||||||
|
thrustTarget = controls[RC_CHANNEL_THROTTLE];
|
||||||
|
|
||||||
controlYaw = armed && mode == STAB && controls[RC_CHANNEL_YAW] == 0;
|
controlYaw = armed && mode == STAB && controls[RC_CHANNEL_YAW] == 0;
|
||||||
if (!controlYaw) {
|
if (!controlYaw) {
|
||||||
yawTarget = attitude.getYaw();
|
yawTarget = attitude.getYaw();
|
||||||
@ -151,25 +152,6 @@ void controlAttitude()
|
|||||||
// std::cout << "rsp: " << ratesTarget.x << " " << ratesTarget.y << std::endl;
|
// std::cout << "rsp: " << ratesTarget.x << " " << ratesTarget.y << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void controlAttitudeAlter()
|
|
||||||
{
|
|
||||||
if (!armed) {
|
|
||||||
rollPID.reset();
|
|
||||||
pitchPID.reset();
|
|
||||||
yawPID.reset();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector target = attitudeTarget.toEulerZYX();
|
|
||||||
Vector att = attitude.toEulerZYX();
|
|
||||||
|
|
||||||
ratesTarget.x = rollPID.update(target.x - att.x, dt);
|
|
||||||
ratesTarget.y = pitchPID.update(target.y - att.y, dt);
|
|
||||||
|
|
||||||
if (controlYaw) {
|
|
||||||
ratesTarget.z = yawPID.update(target.z - att.z, dt); // WARNING:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// passthrough mode
|
// passthrough mode
|
||||||
void controlManual()
|
void controlManual()
|
||||||
{
|
{
|
||||||
@ -178,8 +160,6 @@ void controlManual()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
thrustTarget = controls[RC_CHANNEL_THROTTLE]; // collective thrust
|
|
||||||
|
|
||||||
torqueTarget = ratesTarget * 0.01;
|
torqueTarget = ratesTarget * 0.01;
|
||||||
|
|
||||||
motors[MOTOR_FRONT_LEFT] = thrustTarget + torqueTarget.y + torqueTarget.x - torqueTarget.z;
|
motors[MOTOR_FRONT_LEFT] = thrustTarget + torqueTarget.y + torqueTarget.x - torqueTarget.z;
|
||||||
@ -207,9 +187,6 @@ void controlRate()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// collective thrust is throttle * 4
|
|
||||||
thrustTarget = controls[RC_CHANNEL_THROTTLE]; // WARNING:
|
|
||||||
|
|
||||||
Vector ratesFiltered = ratesFilter.update(rates);
|
Vector ratesFiltered = ratesFilter.update(rates);
|
||||||
|
|
||||||
torqueTarget.x = rollRatePID.update(ratesTarget.x - ratesFiltered.x, dt); // un-normalized "torque"
|
torqueTarget.x = rollRatePID.update(ratesTarget.x - ratesFiltered.x, dt); // un-normalized "torque"
|
||||||
@ -228,9 +205,6 @@ void controlRate()
|
|||||||
motors[MOTOR_REAR_LEFT] = thrustTarget - torqueTarget.y + torqueTarget.x + torqueTarget.z;
|
motors[MOTOR_REAR_LEFT] = thrustTarget - torqueTarget.y + torqueTarget.x + torqueTarget.z;
|
||||||
motors[MOTOR_REAR_RIGHT] = thrustTarget - torqueTarget.y - torqueTarget.x - torqueTarget.z;
|
motors[MOTOR_REAR_RIGHT] = thrustTarget - torqueTarget.y - torqueTarget.x - torqueTarget.z;
|
||||||
|
|
||||||
//indicateSaturation();
|
|
||||||
// desaturate(motors[0], motors[1], motors[2], motors[3]);
|
|
||||||
|
|
||||||
// constrain and reverse, multiple by -1 if reversed
|
// constrain and reverse, multiple by -1 if reversed
|
||||||
motors[0] = constrain(motors[0], 0, 1);
|
motors[0] = constrain(motors[0], 0, 1);
|
||||||
motors[1] = constrain(motors[1], 0, 1);
|
motors[1] = constrain(motors[1], 0, 1);
|
||||||
@ -238,36 +212,6 @@ void controlRate()
|
|||||||
motors[3] = constrain(motors[3], 0, 1);
|
motors[3] = constrain(motors[3], 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void desaturate(float& a, float& b, float& c, float& d)
|
|
||||||
{
|
|
||||||
float m = max(max(a, b), max(c, d));
|
|
||||||
if (m > 1) {
|
|
||||||
float diff = m - 1;
|
|
||||||
a -= diff;
|
|
||||||
b -= diff;
|
|
||||||
c -= diff;
|
|
||||||
d -= diff;
|
|
||||||
}
|
|
||||||
m = min(min(a, b), min(c, d));
|
|
||||||
if (m < 0) {
|
|
||||||
a -= m;
|
|
||||||
b -= m;
|
|
||||||
c -= m;
|
|
||||||
d -= m;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool motorsSaturation = false;
|
|
||||||
|
|
||||||
inline void indicateSaturation() {
|
|
||||||
bool sat = motors[0] > 1 || motors[1] > 1 || motors[2] > 1 || motors[3] > 1 ||
|
|
||||||
motors[0] < 0 || motors[1] < 0 || motors[2] < 0 || motors[3] < 0;
|
|
||||||
if (motorsSaturation != sat) {
|
|
||||||
motorsSaturation = sat;
|
|
||||||
setLED(motorsSaturation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* getModeName()
|
const char* getModeName()
|
||||||
{
|
{
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
|
@ -43,7 +43,7 @@ void logData()
|
|||||||
|
|
||||||
void dumpLog()
|
void dumpLog()
|
||||||
{
|
{
|
||||||
Serial.printf("t,rate.x,rate.y,rate.z,ratesTarget.x,ratesTarget.y,ratesTarget.z,"
|
Serial.printf("t,rates.x,rates.y,rates.z,ratesTarget.x,ratesTarget.y,ratesTarget.z,"
|
||||||
"attitude.x,attitude.y,attitude.z,attitudeTarget.x,attitudeTarget.y,attitudeTarget.z,thrustTarget\n");
|
"attitude.x,attitude.y,attitude.z,attitudeTarget.x,attitudeTarget.y,attitudeTarget.z,thrustTarget\n");
|
||||||
for (int i = 0; i < LOG_SIZE; i++) {
|
for (int i = 0; i < LOG_SIZE; i++) {
|
||||||
for (int j = 0; j < LOG_COLUMNS - 1; j++) {
|
for (int j = 0; j < LOG_COLUMNS - 1; j++) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user