<<<
etheli.com Home Page
Cleanflight / Betaflight Patch:
Add horizon_tilt_effect command
My MiniFTC
Update (9/2017): This modification has been
merged into the Cleanflight / Betaflight code and is part of the released firmware
(CF v2.1.0+ / BF v3.2.0+). See here for documentation on the commands.
Note: The text below references an earlier version of the modification.
See here for the Betaflight version.
This Cleanflight
modification adds two new CLI commands, 'horizon_tilt_effect' and
'horizon_tilt_mode', which control the effect the current
inclination has on self-leveling in the Horizon flight mode. With
the existing horizon mode, the strength of the self-leveling is solely
dependent on the stick position. This is problematic when trying
to do maneuvers like large loops and fast-forward flight. Adding
a factor that takes into account the current inclination of the craft
provides a big improvement for these maneuvers and improves the "feel"
of horizon mode. (The current inclination is the number of
degrees of pitch or roll that the vehicle is away from level, whichever
is greater).
These commands affect Horizon mode for the LUX and
REWRITE controllers. The math is all integer based, so no
(slower) floating-point operations are involved when using the REWRITE
controller.
This mod also addresses an issue with the "Transition (Horizon)"
('d_level') parameter -- as of Cleanflight v1.13.0 the
'sensitivity_horizon' (LUX) and 'd_level' (REWRITE) CLI parameters were
merged so that both use the 'd_level' parameter. The problem is
that the ranges behave differently -- in LUX, increasing the value
results in more self leveling and zero results in no self leveling; in
REWRITE, increasing the value results in less self leveling. With
this mod, increasing the value results in more self leveling and zero
results in no self leveling. The default has been changed to 75,
which should give relatively unchanged default behavior for this
parameter on both PID controllers.
The original idea for this came from ctzsnooze (see CleanFlight issue #695);
I've expanded on it and turned it into a configurable option. One
characteristic of horizon mode I made a point of retaining is that,
when the vehicle is flat and the sticks are near center, the
self-leveling effect is not diminished by larger 'horizon_tilt_effect'
settings. Like in the existing horizon mode, the strength of the
self-leveling can be effectively managed using the "Strength (Horizon)"
('i_level') parameter. Also, the "Transition (Horizon)"
('d_level') parameter operates the same as before.
Setting 'horizon_tilt_effect' to 0 will run the old
horizon-mode behavior. For other values, see below:
horizon_tilt_effect 0|175|75: Controls the effect the current
inclination (tilt) has on self-leveling in the Horizon flight mode.
Larger values result in less self-leveling (more "acro") as the tilt of
the vehicle increases. The default value of 75 provides good
performance when doing large loops and fast-forward flight. With a
value of 0 the strength of the self-leveling would be solely dependent
on the stick position.
horizon_tilt_mode SAFE|EXPERT: Sets the preformance mode for
'horizon_tilt_effect'
SAFE = leveling always active when sticks centered:
This is the "safer" range because the self-leveling is always active
when the sticks are centered. So, when the vehicle is upside down (180
degrees) and the sticks are then centered, the vehicle will immediately
be self-leveled to upright and flat. (Note that after this kind of
very-fast 180-degree self-leveling, the heading of the vehicle can be
unpredictable.)
EXPERT = leveling can be totally off when inverted:
In this range, the inclination (tilt) of the vehicle can fully
"override" the self-leveling. In this mode, when the
'horizon_tilt_effect' parameter is set to around 75, and the vehicle is
upside down (180 degrees) and the sticks are then centered, the vehicle
is not self-leveled. This can be desirable for performing
more-acrobatic maneuvers and potentially for 3D-mode flying.
The 'horizon_tilt_effect' and 'horizon_tilt_mode' values are separate
for each profile,
and are implemented for both the LUX and REWRITE PID controllers.
This modification is posted as a GitHub pull request here: Add
horizon_tilt_effect command #2364
Below is a file of the modified firmware that may be used for
testing. It is based on the released Cleanflight v1.13.0.
Firmware file for Naze32: cleanflight_NAZE_v1.13.0rel_addHorTiltEffVbatHyst_20160821.hex
This firmware also adds the 'vbat_hysteresis' parameter, as described here. (If you'd like firmware files for
other boards posted, let me know.)
Note: These firmware files should be considered a beta-test
releases and are to be used at your own risk. After loading this
firmware the controller's
configuration may be reset to factory-default values, so the
configuration should be
backed up before and restored after the firmware update.
Complete source code is here
and here.
If you have questions/comments or find this patch useful, please let me know.
Betaflight version
A Betaflight version of the 'horizon_tilt_effect' modification is
posted as a GitHub pull request here: Add horizon_tilt_effect command (2) #2570. See here for documentation on the commands.
Below are firmware files for Betaflight v3.0.1 that have been modified to
support the 'horizon_tilt_effect' and 'horizon_tilt_mode' commands.
Betaflight v3.0.1 Naze: betaflight_NAZE_v3.0.1rel_addHorizonTiltEffect_20161204.hex
Betaflight v3.0.1 BeeBrain: betaflight_BEEBRAIN_v3.0.1rel_addHorizonTiltEffect_20161204.hex
Betaflight v3.0.1 SPRacingF3: betaflight_SPRACINGF3_v3.0.1rel_addHorizonTiltEffect_20161204.hex
Betaflight v3.0.1 SPRacingF3EVO: betaflight_SPRACINGF3EVO_v3.0.1rel_addHorizonTiltEffect_20161204.hex
Below are firmware files for Betaflight v3.1.6 that have
been modified to
support the 'horizon_tilt_effect' and 'horizon_tilt_mode' commands,
and also have a bug fix for the angle/accelerometer-trim direction (see
here for details).
Betaflight v3.1.6 Naze: betaflight_NAZE_v3.1.6rel_horTiltEff_angSignFix_20170304_1.hex
Betaflight v3.1.6 BeeBrain: betaflight_BEEBRAIN_v3.1.6rel_horTiltEff_angSignFix_20170304_1.hex
Betaflight v3.1.6 SPRacingF3: betaflight_SPRACINGF3_v3.1.6rel_horTiltEff_angSignFix_20170304_1.hex
Betaflight v3.1.6 SPRacingF3EVO: betaflight_SPRACINGF3EVO_v3.1.6rel_horTiltEff_angSignFix_20170304_1.hex
Betaflight v3.1.6 SPRacingF3NEO: betaflight_SPRACINGF3NEO_v3.1.6rel_horTiltEff_angSignFix_20170304_1.hex
Other builds for Betaflight may be found here.
(If you'd like firmware files for other boards posted, let me know.)
Source code for the Betaflight 3.0.1 version is here (.zip)
and here on GitHub.
Source code for the Betaflight 3.1.6 version is here (.zip)
and her on GitHub.
Note: These firmware files should be considered a beta-test
releases and are to be used at your own risk. After loading this
firmware the controller's
configuration may be reset to factory-default values, so the
configuration should be
backed up before and restored after the firmware update.
Click here to
contact me
Back to etheli.com home page