Commit Graph

26 Commits

Author SHA1 Message Date
Beat Küng beaba44e5b mc mixer: prioritize roll/pitch over yaw for full airmode
Improves roll/pitch tracking in situations of large yaw demands.
2019-06-17 13:17:18 +02:00
Beat Küng 2f72e93d6f fix mixer multicopter: do not clip for max/min throttle
Except for the lower end with disabled airmode.

Otherwise the rate controller would disable the integrals, which can lead
to severe tracking loss in acro.
It is noticeable when flying in FPV, e.g. simply when throttling straight
up.

Relevant part in the rate controller:
https://github.com/PX4/Firmware/blob/master/src/modules/mc_att_control/mc_att_control_main.cpp#L702
2019-03-01 07:42:18 +01:00
Daniel Agar 60f2a92e3d replace <cfloat> with <float.h>
- <cfloat> isn't available in the NuttX c++ library
2019-01-06 19:20:57 -05:00
Beat Küng cfad556a16 mixer_multirotor: use reduce_only instead of -1000 for yaw thrust reduction
This is more accurate, because if we use -1000 as lower bound, a very large
yaw command can reduce thrust more than needed.

The difference can be seen in the following example
(with roll/pitch airmode):
p_dot_sp = -1.0 # roll acceleration
q_dot_sp = 0.9 # pitch acceleration
r_dot_sp = -0.9 # yaw acceleration
2018-12-13 09:50:07 +01:00
Beat Küng e8e3b00a10 refactor mixer: rename delta_outputs to desaturation_vector 2018-12-13 09:50:07 +01:00
Beat Küng cf66656258 mixer multirotor: add unit-tests
To run:
cd src/lib/mixer
make tests

This will validate the C++ implementation by taking the python
implementation as ground-truth. It runs through various actuator control
command values for all airmode variations and several mixer types.

The python script also allows to prototype new mixer algorithms.

It is not integrated into the existing build system, because it's easier
to use that way, with less dependencies, and faster testing workflow.
It could however be a bit more integrated.

Reference: https://github.com/Auterion/Flight_Control_Prototyping_Scripts/tree/master/control_allocation
2018-12-13 09:50:07 +01:00
Beat Küng c659d2bcc2 mixer: minor refactoring to reduce header include dependencies
- avoid including <px4_defines.h> from the math headers
- avoid driver include <drivers/drv_mixer.h> from the mixer
2018-12-13 09:50:07 +01:00
Beat Küng 8bcf54688a mixer: complete refactoring & add airmode for yaw
Provides a more generic desaturation algorithm, making it easier to
handle the different mixer strategies.

python reference implementation:
https://github.com/Auterion/Flight_Control_Prototyping_Scripts/tree/master/control_allocation

The behavior for non-airmode and roll/pitch airmode should be the
same as before.

CPU load is slightly higher for the non-airmode case (+0.5%), for airmode
it is the same.
2018-12-13 09:50:07 +01:00
Beat Küng 19ccab28bb mixer: use an enum for airmode 2018-12-13 09:50:07 +01:00
bresch 7cc00f41d2 AirModeYaw - Change airmode type from bool to int 2018-12-13 09:50:07 +01:00
Daniel Agar 222a91c6be mathlib delete Matrix, Quaternion, Vector 2018-05-23 17:27:09 -04:00
Beat Küng 202505fd73 mixer_multirotor: fix initialization of _outputs_prev
memset (http://www.cplusplus.com/reference/cstring/memset/) interprets
the value argument as unsigned char, so passing a float will not work.
2018-04-25 16:33:09 +02:00
Daniel Agar d2abd53692 mixer lib remove custom constrain and cleanup includes 2018-04-12 00:14:50 -04:00
bresch 81a80e0d56 Airmode - Minor rewording 2018-03-23 10:35:08 +01:00
bresch 7ef3ae8828 Multicopter mixer - Recompute safe roll_pitch_scale if not in air-mode
If not in air-mode the mixer is not able to apply positive boosting
and roll_pitch_scale is recomputed to apply symmetric - reduced - thrust.
This has the consequence to cut completely the outputs when the thrust is
set to zero.
2018-03-23 10:35:08 +01:00
Beat Küng f21ab05f48 mixer_multirotor: fix comment thrust_gain -> thrust_scale
Added in 262d9c790b.
2018-03-23 10:35:08 +01:00
bresch 6976232a20 Airmode - Add airmode parameter for multicopter mixer 2018-03-23 10:35:08 +01:00
bresch 851c3657d1 Multicopter mixer - Use already computed value instead of recomputing it 2018-03-23 10:35:08 +01:00
bresch 803eb9ac32 Multicopter mixer - Simplify and correct mistakes of roll-pitch motor saturation handling 2018-03-23 10:35:08 +01:00
bresch 450e7c6774 Multicopter mixer - Remove arbitraty boost gain during saturation 2018-03-23 10:35:08 +01:00
bresch 096e2ec629 Multicopter mixer - Always unsaturate high-saturated motors when possible 2018-03-23 10:35:08 +01:00
bresch df194b1de4 Multicopter mixer - Rewrite unnecessarily complicated conditions 2018-03-23 10:35:08 +01:00
bresch 5da2842dbc Multicopter mixer - Always unsaturate low-saturated motors when possible 2018-03-23 10:35:08 +01:00
Julien Lecoeur 262d9c790b MultirotorMixer: Apply thrust gain independently from other axes
Align the way motor output is computed with the model used in the mixer generation script.
previous:
`out = (roll_gain*roll + pitch_gain*pitch + yaw_gain*yaw + thrust)*out_gain`
new:
`out = roll_gain*roll + pitch_gain*pitch + yaw_gain*yaw + thrust_gain*thrust`
which is the standard matrix*vector multiplication.

This commit has 0 effect on symmetric platforms (i.e. most) as thrust_gain==1 on these platforms.
On asymmetric platform --where some thrust_gain are lower than 1-- the previous formulation resulted in coupling between thrust and other axes.

fixes #8628
2018-01-17 00:01:00 -05:00
Julien Lecoeur 26d95ef674 Mixers: Include mixer_multirotor_normalized.generated.h everywhere 2017-11-15 09:56:10 +01:00
Julien Lecoeur 89642a9203 Move src/module/systemlib/mixer to src/lib/mixer 2017-11-15 09:56:10 +01:00