CleanFlight Ervaringen

Probeer deze CLI command eens. Die heeft invloed op modificatie van de yaw rc command


https://github.com/cleanflight/cleanflight/blob/27db9ad0fe9a4d8abc05c59db201b8944324eea4/docs/Cli.md
Code:
small_angle If the copter tilt angle exceed this value the copter will refuse to arm. default is 25°. 0 180 25 Master UINT8

Ik heb de small_angle even op 0 gezet, kon wel nog armen maar het probleem blijft hetzelfde. Ik ga nu even de P waarden van beide copters vergelijken. Wel gek, wat komt die small_angle nu eigenlijk doen bij de updateMagHold? En van waar komt die waarde 70, wat is daarvan de bedoeling. Het lijkt me een soort filter om kleine correcties niet uit te voeren maar daarvoor dient toch de YAW_Deadband?
 
Laatst bewerkt:
Dit is de code in Harakiri. Buiten wat aanpassingen voor gebruik met GPS en het gebruik van de wrap_180 functie ipv de twee if statements zie ik niet zo direct een wezenlijk verschil. Maar ik ben dan ook geen kenner van dit taaltje! :-(

#ifdef MAG
if (sensors(SENSOR_MAG))
{
float magP;
if (abs(rcCommand[YAW]) < 70 && f.MAG_MODE)
{
if (DoingGPS()) magP = (float)cfg.gps_yaw; // Do slower mag P in gps mode
else magP = (float)cfg.P8[PIDMAG];
if (f.SMALL_ANGLES_25) rcCommand[YAW] -= wrap_180(heading - magHold) * magP / 30;// 18 deg
}
else magHold = heading;
}
#endif
 
Dit is de code in Harakiri. Buiten wat aanpassingen voor gebruik met GPS en het gebruik van de wrap_180 functie ipv de twee if statements zie ik niet zo direct een wezenlijk verschil. Maar ik ben dan ook geen kenner van dit taaltje! :-(

#ifdef MAG
if (sensors(SENSOR_MAG))
{
float magP;
if (abs(rcCommand[YAW]) < 70 && f.MAG_MODE)
{
if (DoingGPS()) magP = (float)cfg.gps_yaw; // Do slower mag P in gps mode
else magP = (float)cfg.P8[PIDMAG];
if (f.SMALL_ANGLES_25) rcCommand[YAW] -= wrap_180(heading - magHold) * magP / 30;// 18 deg
}
else magHold = heading;
}
#endif

Waar heb je dat gevonden?

Dit is wat ik in harakiri zie namelijk, wat eigenlijk hetzelfde is

https://github.com/Crashpilot1000/SummerGames2.5/blob/master/src/mw.c#L1226-L1239
 
Ik heb een vermoeden dat dit de bug is:
dif *= -masterConfig.yaw_control_direction;

yaw_control_direction draait polariteit om en daar is aan gesleuteld. Misschien men vergeten om hier aan te passen
 
Wel ja, in Harakiri SG 2.5, op dezelfde plaats als jij dus. Die werkt wel juist, in CF niet. Enkel gemerkt dat ik in de HK SG 2.5 wel Yaw Deadband heb opstaan, zelfs op 15.
 
Ik heb een vermoeden dat dit de bug is:
dif *= -masterConfig.yaw_control_direction;

yaw_control_direction draait polariteit om en daar is aan gesleuteld. Misschien men vergeten om hier aan te passen

Die YAW_direction bestond nog niet in SG 2.5, dat zou dus wel eens kunnen. Let wel dat mijn CF versie nog een oudere is, de 1.7.2.
 
Probeer eens de laatste versie cleanflight :D. Er is veel gesleuteld met yaw
Side note: op beide van mijn werkende Naze32s moest ik na upgrade van cf1.8 naar 1.9 de yaw_direction op 1 zetten ondanks dat ik configuratie gecopy/paste had in cli. Stond in beide gevallen op 0 na de upgrade. Was ff zoeken/google-en de eerste keer [emoji13]
 
Strange. yaw_direction not really new parameter. I am loosing sometimes flight mode values, when copy pasting whole config...

TIP: Use git for version control of the configuration!!! Helps a LOT to know whats going on :)
 
Met 1.9.0 zelfde resultaat. Het komt er dus op neer dat je geen kleine correcties kan uitvoeren op YAW als het compass op staat, zodra je de stick los laat herstelt hij zich naar de vorige richting. Eens je voorbij een bepaald punt komt springt hij plots naar die nieuwe richting en blijft dan ook in die richting staan. Je merkt het veel sneller als de YAW rate hoog staat, bij mij op 0.4.

Geen problemen gehad met de config van YAW_direction, maar ik stel alles terug manueel zonder backup of CLI dump.
 
Well.. Its as coded, Corrections within -70..+70 will give you JUMP back because:

Code:
if (ABS(rcCommand[YAW]) < 70 && FLIGHT_MODE(MAG_MODE)) {
  // Calculate difference between hold position AND CURRENT POSITION (heading)
        int16_t dif = heading - magHold;
// Keep value within -180...+180
        if (dif <= -180)  dif += 360;
        if (dif >= +180)   dif -= 360;
// Check where we need to turn, if yaw reversed, do opposite turn
        dif *= -masterConfig.yaw_control_direction;

// If attitude less then 25 degree - do small correction... MAG_P used as multiplier.
        if (STATE(SMALL_ANGLE))   rcCommand[YAW] -= dif * currentProfile->pidProfile.P8[PIDMAG] / 30;    // 18 deg

// But magHold will NOT be update at this point!!!!.

    } else
// If yaw command > 70 - do normal yaw and update magHold!!!!!
        magHold = heading;
}

So it WILL return you to the magHold heading if you do small corrections... If you do BIG correction, it will remember NEW magHold... I think it works just fine.

I think you better put MAG_HOLD on a switch and get on with it.
 
Laatst bewerkt:
Back
Top