Releases: emuflight/imu-f
IMUF 256 with PT(n)
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 to3
.
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
- Use the IMUF Flasher Tool for Flashing: https://github.com/emuflight/Nemesis/releases/tag/imuf-flasher-0.1.0
Changleog:
- Pilot configurable PT filter order
Example noise profiles from @Andrey with his personal preference as PT2:
IMUF 255 (PT3)
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
- Use the IMUF Flasher Tool for Flashing: https://github.com/emuflight/Nemesis/releases/tag/imuf-flasher-0.1.0
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)
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
- Use the IMUF Flasher Tool for Flashing: https://github.com/emuflight/Nemesis/releases/tag/imuf-flasher-0.1.0
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
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
anddump 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
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
anddump 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
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
anddump 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
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
anddump 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
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
anddump 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)
Along with EmuFlight version 0.2.0 comes IMUF 213! Enjoy everyone!
IMUF 209 (RC9b)
- Variable cutoff frequencies for all axis.
- This version reports
208
in CLI.