PID controller feedforward
commit17e76e48f633bd092e2e6e861e6fccd300a33630
authorBruce Luckcuck <github@etracer.net>
Sun, 24 Jun 2018 12:49:28 +0000 (24 08:49 -0400)
committerBruce Luckcuck <github@etracer.net>
Sat, 21 Jul 2018 14:26:23 +0000 (21 10:26 -0400)
tree09cce0053327cd98419c01ec0f154f94e507590b
parent625b23915e6d29221b60adb50b0fb2f7ae7eac7b
PID controller feedforward
Restructures the PID controller to decouple feedforward from D.

Cleaned up the structure of the PID controller; moved some feature-based enhancements out of the main structure.

Feedforward becomes a separate component of the PID controller and there is now:
f_pitch
f_roll
f_yaw

The default values of 60 for pitch and roll matches the default setpoint weight used in BF3.4.  Yaw previously had no setpoint weight capability so the default here needs to be discussed.  Currently it's also set to 60 and flight testing seems positive.  Feedforward on yaw adds a lot of value so I don't think we want to default to 0.  Instead we need decide on the default.

All occurences of setpoint weight have been replaced by feedforward. "setpoint_relax_ratio" has been renamed to "feedforward_transition".

The pidSum now consists of P + I + D + F.

D has been added back for yaw (disabled by default with d_yaw = 0). We've found little need for D for normal quads but it may have value for other configurations - particularly tricopters.

Updated CMS menus to support adjusting the feedforward for each axis.

Changed the default for "rc_interp_ch" to be "RPYT".  Need yaw to be smoothed to support feedforward.

Open issues:

Needs BFC support
- Need to add support for the axis "F" gains.
- Remove "setpoint weight" slider.
- Rename "D Setpoint transition" to "Feedforward transition"

Needs BBE support
- Header "setpoint_relaxation_ratio" has been renamed "feedforward_transition"
- Header "dterm_setpoint_weight" has been replaced with an array named "feed_forward_weight".
  example: H feed_forward_weight:65,60,60    (R,P,Y)
- PID component "AXISF" has been added for all axes. Should be handled like P, I and D values.
- PidSum calculation needs to include F.

Needs LUA script support
- Support the renamed "setpoint_relax_ratio".
- Support for feedforward weight on all 3 axes.

Open code issues:
- rc_adjustments.c - support for adjusting feedforward weight for all axes. Currently only supporting roll - needs coordination with BFC.
13 files changed:
src/main/blackbox/blackbox.c
src/main/cms/cms_menu_imu.c
src/main/fc/config.c
src/main/fc/rc_adjustments.c
src/main/flight/pid.c
src/main/flight/pid.h
src/main/interface/msp.c
src/main/interface/settings.c
src/main/io/osd.c
src/main/pg/rx.c
src/main/target/ALIENWHOOP/config.c
src/main/target/NAZE/config.c
src/test/unit/pid_unittest.cc