Skip to content

Releases: emuflight/imu-f

IMUF 256 with PT(n)

24 Jun 16:11
5f44c3e
Compare
Choose a tag to compare

IMUF 256 with PT(n)

Warning

  • This version will saturate CPU at 32k pidloop. Please use a max of 16k pidloop unless using StrixF10 or Over-clocked HelioSpring.

Recommendation: IMUF 256.

  • Same technology as IMUF 254 (PT2) or IMUF 255 (PT3), except pilot-configurable PT order.

How-To

  • EmuFlight 0.4.0+ will use set imuf_ptn_order = 1,2,3,4.
  • Older version may use set imuf_sharpness = 1,2,3,4. All other values will default to 3.

Notes

  • PT filter rather than BiQuad.
  • Does not over-filter like 900X, 250, & 252.
  • Pilots may set IMUF LPF's to normal ranges (typically 90-120), depending on the aircraft.
  • Pilots are welcome to use any IMUF versions liked best. New IMUF releases are not requirements. You may even use original HelioRC IMUF if you prefer.
  • Some pilots have found 10.67k/10.67k gyro/pid loops to be best overall balance between gyro-noise and flight-control. You may achieve 10.67k loops by CLI command set gyro_sync_denom = 3.
  • Other gyro/pid loops that work well: 32/16, 16/16, 16/8, 8/8, 8/4

Compatibility

  • Any flightware version

Additional Information

Changleog:

  • Pilot configurable PT filter order

Example noise profiles from @Andrey with his personal preference as PT2:

PT1:
Andrey_PT1__9-imuf_ptntmp_0_noise

PT2:
Andrey_PT2__9-imuf_ptntmp_1_noise

PT3:
Andrey_PT3__9-imuf_ptntmp_2_noise

PT4:
Andrey_PT4__9-imuf_ptntmp_3_noise

IMUF 255 (PT3)

12 Jun 17:16
Compare
Choose a tag to compare

IMUF 255 (PT3)

Warning

  • This version will saturate CPU at 32k pidloop. Please use a max of 16k pidloop unless using StrixF10 or Over-clocked HelioSpring.

Recommendation: IMUF 254 (PT2) or IMUF 255 (PT3), depending on aircraft.

Notes

  • PT3 filter rather than BiQuad.
  • Does not over-filter like 900X, 250, & 252.
  • Pilots may revert IMUF LPF's to normal ranges (typically 90-120), depending on the aircraft.
  • Pilots are welcome to use any IMUF versions liked best. New IMUF releases are not requirements. You may even use original HelioRC IMUF if you prefer.
  • Sharpness has no effect on IMUF254 firmware.
  • Some pilots have found 10.67k/10.67k gyro/pid loops to be best overall balance between gyro-noise and flight-control. You may achieve 10.67k loops by CLI command set gyro_sync_denom = 3.
  • Other gyro/pid loops that work well: 32/16, 16/16, 16/8, 8/8, 8/4

Compatibility

  • Any flightware version

Additional Information

Changleog:

  • fix filter cutoffs
  • improve Kalman filter
  • change k calculation to be slightly more static
  • PT3 filter rather than BiQuad
  • non-dynamic gyro LPF
  • removed sharpness

IMUF 254 (PT2)

01 Jun 18:55
7447d82
Compare
Choose a tag to compare

IMUF 254 (PT2)

Warning

  • This version will saturate CPU at 32k pidloop. Please use a max of 16k pidloop unless using StrixF10 or Over-clocked HelioSpring.

Recommendation: IMUF 254 (PT2) or IMUF 255 (PT3), depending on aircraft.

Notes

  • PT2 filter rather than BiQuad.
  • Does not over-filter like 900X, 250, & 252.
  • Pilots may revert IMUF LPF's to normal ranges (typically 90-120), depending on the aircraft.
  • Pilots are welcome to use any IMUF versions liked best. New IMUF releases are not requirements. You may even use original HelioRC IMUF if you prefer.
  • Sharpness has no effect on IMUF254 firmware.
  • Some pilots have found 10.67k/10.67k gyro/pid loops to be best overall balance between gyro-noise and flight-control. You may achieve 10.67k loops by CLI command set gyro_sync_denom = 3.
  • Other gyro/pid loops that work well: 32/16, 16/16, 16/8, 8/8, 8/4

Compatibility

  • Any flightware version

Additional Information

Changleog:

  • fix filter cutoffs
  • improve Kalman filter
  • change k calculation to be slightly more static
  • PT2 filter rather than BiQuad
  • non-dynamic gyro LPF
  • remove sharpness

IMUF 250

21 Oct 14:35
2c63a94
Compare
Choose a tag to compare

IMUF 250

IMPORTANT NOTES

This imuf needs far less filtering than before, as such set your imuf_lowpass_roll/pitch/yaw to 150-200+ hz. This seems to give users the best experience with this version of the imuf.

Changleog:

  • Covariance math improvement.
  • Non-dynamic BiQuad gyro LPF.
  • Refactored sharpness, sharpness=0 is OFF

Notes:

  • Pilots are welcome to use any IMUF versions liked best. New IMUF releases are not requirements.
  • If you've heard of test-versions 9001 and 9002, this is equivalent to 9002. To make it 9001, simply turn off sharpness.

Compatibility

  • IMUF 250 binary for Helio/Strix hardware is compatible only with 0.3.X exclusively. Do not use for older 0.1.0 or 0.2.0.
  • Pilots are still welcome to use any IMUF version based on their personal preferences, but only 225 and above make use of the sharpness feature which require newer EmuFlight (0.2.32+, 0.3.0+).

The Windows® based tool is still required for flashing. Keep the "Original Helio Firmware" UN-checked, or you are really going to have a bad time. If for some reason you flash wrongly, just plug usb, and wait 5 full minutes for the DFU to connect.

Imperative:

  • Compatible only with 0.2.32+, 0.3.0+
  • Save your diff all and dump all prior to flashing IMUF.
  • Flashing may possibly cause invalid data in your settings, especially very-large LPF values that could cause fly-away. This is seldom; however, be sure to validate your LPF and other values. The CLI command defaults may not reset them properly, so set them manually if you see a problem.
  • The best option is to [re]flash EmuFlight 0.3.X firmware (with full-chip erase) after flashing the IMUF binary.
  • If your LPF values are in a normal range, then there is no issue to fix.

Thanks to

  • Paweł Spychalski for improved covariance math.
  • Andrey Semjonovs for extensive code testing and differentiation.

Additional Information

  • Sharpness math in IMUF250 is not applied same as previous versions, where:
src/filter/filter.c:83:	  sharpness = (float)filterConfig.sharpness / 250.0f;
src/filter/kalman.c:16:      filter->s = sharpness * 0.01f;
  • and where calculations in kalman_process (src/filter/kalman.c) are:
[...]
  if (kalmanState->s != 0.0f) {               //if sharpness non-zero
    float average = fabsf(target + kalmanState->lastX) * 0.5f;
    if (average > 10.0f) {
        float error = fabsf(target - kalmanState->lastX);
        float ratio = error / average;
        kalmanState->e = kalmanState->s * powf(ratio, 3.0f);  //"ratio" power 3 and multiply by a gain (sharpness)
    }
    //prediction update
    kalmanState->p = kalmanState->p + (kalmanState->q + kalmanState->e);
  } else {          //if sharpness zero (off)
    if (kalmanState->lastX != 0.0f) {
        kalmanState->e = fabsf(1.0f - (target / kalmanState->lastX));
    }
    //prediction update
    kalmanState->p = kalmanState->p + (kalmanState->q * kalmanState->e);
  }
[...]

IMUF 231

31 Dec 23:25
Compare
Choose a tag to compare

IMUF 231

IMPORTANT NOTES

Changleog:

  • Covariance math improvement.

Notes:

  • Identical to 230 except with backported Paweł Spychalski's cavarience math fix from EmuFlight source-code.
  • Pilots are welcome to use any IMUF versions liked best. New IMUF releases are not requirements.

Compatibility

  • IMUF 231 binary for Helio/Strix hardware is compatible only with 0.3.X exclusively. Do not use for older 0.1.0 or 0.2.0.
  • Pilots are still welcome to use any IMUF version based on their personal preferences, but only 225 and above make use of the sharpness feature which require newer EmuFlight (0.2.32+, 0.3.0+).

The Windows® based tool is still required for flashing. Keep the "Original Helio Firmware" UN-checked, or you are really going to have a bad time. If for some reason you flash wrongly, just plug usb, and wait 5 full minutes for the DFU to connect.

Imperative:

  • Compatible only with 0.2.32+, 0.3.0+
  • Save your diff all and dump all prior to flashing IMUF.
  • Flashing may possibly cause invalid data in your settings, especially very-large LPF values that could cause fly-away. This is seldom; however, be sure to validate your LPF and other values. The CLI command defaults may not reset them properly, so set them manually if you see a problem.
  • The best option is to [re]flash EmuFlight 0.3.X firmware (with full-chip erase) after flashing the IMUF binary.
  • If your LPF values are in a normal range, then there is no issue to fix.

Thanks to

  • Paweł Spychalski for improved covariance math.

Additional information:

  • Sharpness math in this IMUF is as follows:
src/filter/filter.c:83:	sharpness = (float)filterConfig.sharpness / 250.0f;
src/filter/filter.c:110:	float errorMultiplierX = ABS(setPoint.x - filteredData->rateData.x) * sharpness;
src/filter/filter.c:111:	float errorMultiplierY = ABS(setPoint.y - filteredData->rateData.y) * sharpness;
src/filter/filter.c:112:	float errorMultiplierZ = ABS(setPoint.z - filteredData->rateData.z) * sharpness;
  • Therefore, for no affect set sharpness = 250

IMUF 230

18 May 05:25
acc7392
Compare
Choose a tag to compare

IMUF 230 binary for Helio/Strix hardware is compatible only with 0.3.0 exclusively. Do not use for older 0.1.0 or 0.2.0.

IMUF 225 and IMUF 230 add the new Sharpness parameter to the IMUF filter. This changes how the dynamic biquad filter within the IMUF acts. Essentially a higher sharpness makes the dynamic biquad more dynamic based on error. Your IMUF_LPF value is the base value for the dynamic filter. Low values can be used if desired, a high sharpness is then required.

What makes IMUF 225 and IMUF 230 different? IMUF 225 uses cross axis data to help determine the Kalman filter. IMUF 230 uses no cross axis data to determine the kalman filter (how it is done in 0.3.0 for normal fc). IMUF 230 is recommended but you are free to fly what you like.

Users are still welcome to use RC209b (aka RC9b), RC211 (aka RC11), RC213, or 224.

The Windows® based tool is still required for flashing. Please keep the "Original Helio Firmware" UN-checked. If for some reason you flash wrongly, just plug usb, and wait 5 full minutes for the DFU to connect.

Imperative:

  • Do not use 225 & 230 on EmuFlight older than 0.2.32
  • Save your diff all and dump all prior to flashing IMUF.
  • Flashing may possibly cause invalid data in your settings, especially LPF's that could cause fly-away. This is seldom; however, be sure to validate your LPF and other values because the CLI command defaults may not reset them properly. The best option is [re]flash EmuFlight 0.3.0 firmware (with full-chip erase) after flashing the IMUF binary. If your LPF values are in a normal range, then there is no issue to fix.
    #For safety, ONLY IF your data is corrupted: reset default dTerm LPF's (OR set your own tuned preference)
    set dterm_lowpass_hz_roll = 100
    set dterm_lowpass_hz_pitch = 100
    set dterm_lowpass_hz_yaw = 100
    set dterm_lowpass2_hz_roll = 250
    set dterm_lowpass2_hz_pitch = 250
    set dterm_lowpass2_hz_yaw = 250
    

Additional information:

  • Sharpness math in this IMUF is as follows:
src/filter/filter.c:83:	sharpness = (float)filterConfig.sharpness / 250.0f;
src/filter/filter.c:110:	float errorMultiplierX = ABS(setPoint.x - filteredData->rateData.x) * sharpness;
src/filter/filter.c:111:	float errorMultiplierY = ABS(setPoint.y - filteredData->rateData.y) * sharpness;
src/filter/filter.c:112:	float errorMultiplierZ = ABS(setPoint.z - filteredData->rateData.z) * sharpness;
  • Therefore, for no affect set sharpness = 250

IMUF 225

31 Dec 23:15
Compare
Choose a tag to compare

IMUF 225 binary for Helio/Strix hardware is compatible only with 0.3.0 exclusively. Do not use for older 0.1.0 or 0.2.0.

IMUF 225 and IMUF 230 add the new Sharpness parameter to the IMUF filter. This changes how the dynamic biquad filter within the IMUF acts. Essentially a higher sharpness makes the dynamic biquad more dynamic based on error. Your IMUF_LPF value is the base value for the dynamic filter. Low values can be used if desired, a high sharpness is then required.

What makes IMUF 225 and IMUF 230 different? IMUF 225 uses cross axis data to help determine the Kalman filter. IMUF 230 uses no cross axis data to determine the kalman filter (how it is done in 0.3.0 for normal fc). IMUF 230 is recommended but you are free to fly what you like.

Users are still welcome to use RC209b (aka RC9b), RC211 (aka RC11), RC213, or 224.

The Windows® based tool is still required for flashing. Please keep the "Original Helio Firmware" UN-checked. If for some reason you flash wrongly, just plug usb, and wait 5 full minutes for the DFU to connect.

Imperative:

  • Do not use 225 & 230 on EmuFlight older than 0.2.32
  • Save your diff all and dump all prior to flashing IMUF.
  • Flashing may possibly cause invalid data in your settings, especially LPF's that could cause fly-away. This is seldom; however, be sure to validate your LPF and other values because the CLI command defaults may not reset them properly. The best option is [re]flash EmuFlight 0.3.0 firmware (with full-chip erase) after flashing the IMUF binary. If your LPF values are in a normal range, then there is no issue to fix.
    #For safety, ONLY IF your data is corrupted: reset default dTerm LPF's (OR set your own tuned preference)
    set dterm_lowpass_hz_roll = 100
    set dterm_lowpass_hz_pitch = 100
    set dterm_lowpass_hz_yaw = 100
    set dterm_lowpass2_hz_roll = 250
    set dterm_lowpass2_hz_pitch = 250
    set dterm_lowpass2_hz_yaw = 250
    

IMUF 224

06 Mar 22:16
Compare
Choose a tag to compare

IMUF 224 binary for Helio/Strix hardware is compatible with 0.1.0, 0.2.0, and development versions up to 0.2.31 inclusively. Afterward, only newer IMUF binary will work properly for dev versions 0.2.32 or newer including the soon to be released 0.3.0.

Users are still welcome to use RC209b (aka RC9b), RC211 (aka RC11), or RC213 as some may feel 224 is a bit too stiff.

The Windows® based tool is still required for flashing.

Imperative:

  • Save your diff all and dump all prior to flashing IMUF. Flashing may cause invalid data in your settings, especially LPF's that can cause fly-away. Be sure to validate your LPF and other values. defaults may not reset them. The best option is re-flash firmware (with full-chip erase) after IMUF flashing to be extra safe.
    #for safety if your data corrupted, reset defaults (OR set your own tuned preference)
    set dterm_lowpass_hz = 65
    set dterm_lowpass2_hz = 200
    set yaw_lowpass_hz = 0
    
  • Again, newer unreleased EmuFlight development versions and upcoming 0.3.0 require newer IMUF binaries. Do not use IMUF 225 or newer with EmuFlight firmware below 0.2.32.

IMUF 213 (RC213)

13 Dec 05:20
Compare
Choose a tag to compare

Along with EmuFlight version 0.2.0 comes IMUF 213! Enjoy everyone!

IMUF 209 (RC9b)

15 Sep 14:49
Compare
Choose a tag to compare
  • Variable cutoff frequencies for all axis.
  • This version reports 208 in CLI.