A new firmware, called EmuFlight, was recently released to take advantage of the IMUF filtering once utilized within Butterflight and Helio flight controllers. EmuFlight allows the IMUF filter to be used on any flight controller and handles propwash, bent props, and wind with no problem.
With EmuFlight being a fork of ButterFlight, EmuFlight is quite similar to betaflight 3.5 except with many improvements. Word on the street is it flies awesome out of the box with default filters and PIDs. To get the latest updates as well as support from EmuFlight, you can join the discord at https://discord.gg/gdP9CwE.
- Feathered PIDs (previously Buttered PIDs, calculating the dterm using measurement which is smoother)
- IMUF filtering on all flight controllers
- i_decay (unique way of handling iTerm building during quick moves)
- EmuBoost and BoostLimit (creates an enhanced nonlinear pid controller (better noise handling when tuned) changes stick feel more organically than feedforward)
- EmuFlight uses different methods to calculate dTerm filtering than Betaflight (tuning dTerm and dTerm filters remains easier than before)
- GPS has been updated to allow for a sort of geofencing to make flying in French regions legal
- TPA is split into kP, kI and kD
- TPA can be a boosting factor now. Especially useful in conjunction with the iTerm
- AKK VTX hack on each build (no longer the need to download a special branch for this!)
Who should try EmuFlight?
Anyone flying anything larger than a 5inch needs to give EmuFlight a try. Tuning a 7inch or even a 10inch is made much simpler with the filtering capabilities.
Anyone who is/was flying Helio hardware can utilize the EmuFlight firmware. EmuFlight has updated the IMUF in Helio boards as well as updated the rest of the flight code.
Anyone who still flies Betaflight 3.5.x should give EmuFlight a try. EmuFlight is fairly similar to Betaflight 3.5.x but with many additions and advanced filtering.
EmuFlight is also the last opensource software to continue to support 32k. Many pilots prefer 32k, while others seem to prefer 4k. Many of the problems that 32k has seen in the past are solved by the better filtering that is found in EmuFlight. You can also turn the gyro to experimental mode; which almost completely removes the built in gyro lowpass filter (this is similar to what FlightOne does).
What is IMUF?
Since HelioRC made their IMUF filter and code opensource, EmuFlight was able to bring the IMUF filter to all flight controllers. The IMUF is a very unique filter that is based off of setpoint weight (stick input). This filter is amazing at handling propwash and bent props.
The IMUF is a main differentiator for EmuFlight. The IMUF does a great job of handling noise without the need of any RPM filtering. This makes whoops and toothpick size quads (which can’t natively support rpm filtering) fly extremely well.
Think of the Q setting as “Trust”. The more you “trust” the gyro measurement, the less filtering will be applied. Q values are “elastic”. The defaults (3000) are baseline values. This will predictably change based on conditions during flight; which results in a much more responsive and connected feel. This also reduces the potential for mid throttle oscillations, and other unwanted flight characteristics. In some instances MTO can be created from having a Q value which is to low. In those instances increases Q will help with MTO.
W is the amount of gyro readings which the IMUF filter looks at to determine its filter. Lower W gives a sharper stick feel. Larger craft prefer a higher W value. Increasing W does not increase delay in the filter, instead it just increases the window of gyro readings from the past that the filter looks at to make its calculations.
What is i_decay?
EmuFlight has a tuning parameter called i_decay. i_decay is a powerful tool for reducing iterm windup and bounceback at the end of quick flips and rolls. Increasing i_decay means that you can run a higher i without many of the negatives associated with a high i.How does it work?
i_decay works by taking the iterm windup which is normally accumulated during sharp moves and increases how quickly it shrinks. By increasing your i_decay you are literally increasing how quickly the iterm would naturally decrease after a windup. An i_decay of 1 actually turns off the functionality of the i_decay. An i_decay of 2 make the decrease in the iterm twice as fast while an i_decay of 5 makes the iterm decrease 5 times as fast as it normally would.