Claudio Micheli
5fe7992af5
mixer_group: improved get_multirotor_count () code readbility.
...
Signed-off-by: Claudio Micheli <claudio@auterion.com >
2019-08-09 09:41:17 +02:00
Claudio Micheli
1e04d718f6
uavcan escs: Modified esc_status reporting to have _rotor_count published.
...
Signed-off-by: Claudio Micheli <claudio@auterion.com >
2019-08-09 09:41:17 +02:00
Roman Bapst
b54a43fccc
UAVCAN driver: support throttle linearization (THR_MLD_FAC parameter)
...
Signed-off-by: RomanBapst <bapstroman@gmail.com >
2019-07-09 15:10:54 -04:00
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
Daniel Agar
6bb93936d1
cmake use ${PYTHON_EXECUTABLE} for mixer test
...
- needed for code coverage of python scripts
2019-04-07 16:35:31 -04:00
Daniel Agar
b9516d7e38
mixer move test_mixer_multirotor into cmake
2019-04-07 16:12:17 -04:00
Julian Oes
2ebb9d2ab5
mixer_multirotor.py: fixes for Python3
...
This fixed running `make tests` on Arch Linux where Python 3 is the
default.
2019-03-15 10:53:55 +01: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
Julian Oes
73ed9deac5
mixer: add missing include
2018-12-22 10:32:18 +01: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
418df2516d
mixer multirotor: add to CI
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
3eefc93e5d
mixer_multirotor.py: avoid scientific notation for vector printf
...
makes it easier to compare.
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
Beat Küng
9406fa5246
refactor mixer.h: use override keyword, fix set_airmode argument type (uint32_t -> int32_t)
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
246b879aea
require MODULE_NAME
2018-11-10 13:52:34 -05:00
bresch
b0bbc56d12
NullMixer - Send NAN instead of 0. NAN is mapped to disarmed in fmu and io. A Null mixer can now be used to set a fixed value: "disarmed" if the system is operational or "failsafe" in failsafe mode
2018-08-28 11:23:25 -04:00
Andreas Antener
4db149f6e7
mixer: set/get_trim needs to return the amount of channels consumed by the mixer even if the mixer doesn't support trims (or is empty)
2018-08-05 23:24:57 +02:00
Andreas Antener
f298d4bb4f
mixer: use global new line check for parsing the heli mixer
2018-08-05 23:24:57 +02:00
Beat Küng
c9d179676e
simple mixer: make output scalers O: optional and use default values instead
...
Reduces FLASH usage by about 4KB
Command to replace:
for i in *.mix; do sed -r -i '/O: +10000 +10000 +0 +-10000 +10000/d' $i; done
2018-05-25 07:57:08 +02:00
Daniel Agar
222a91c6be
mathlib delete Matrix, Quaternion, Vector
2018-05-23 17:27:09 -04:00
Daniel Agar
ea3acb7121
cmake remove circular linking and reorganize
...
- px4_add_module now requires MAIN
- px4_add_library doesn't automatically link
2018-04-29 21:48:54 -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
Coby
664001921e
quad_plus geometry fix typo in rear motor name ( #9008 )
2018-03-04 18:24:10 -05:00
Roman
04a89f7e9b
mixer lib: added methods to fetch the active trim values
...
Signed-off-by: Roman <bapstroman@gmail.com >
2018-02-23 15:28:22 +01:00
Roman
29c60a1fd4
mixer_group: do not clamp offset to arbitrary value
...
- allow the user to apply an offset that covers the entire servo range
Signed-off-by: Roman <bapstroman@gmail.com >
2018-02-23 15:28:22 +01:00
Julien Lecoeur
b7d7d1209b
px_generate_mixers.py: scale mixer so that sum(z_thrust_scale)==n_rotors
2018-01-17 00:01:00 -05: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
Daniel Agar
2756c76613
mixer lib delete old multi_tables.py and cleanup cmake ( #8658 )
2018-01-11 15:56:15 -05:00
Julien Lecoeur
9439eaa5fa
Python import error: Recommend pip over apt-get
...
closes #8297
The package python-toml does not exist in older (<= 14.04) versions of ubuntu.
2017-11-26 14:07:08 -05:00
Julien Lecoeur
26d95ef674
Mixers: Include mixer_multirotor_normalized.generated.h everywhere
2017-11-15 09:56:10 +01:00
Julien Lecoeur
4be4ad86a0
Mixers: Add geometry quad_s250aq
2017-11-15 09:56:10 +01:00
Julien Lecoeur
3a1c5f8a94
Mixers: do not allow several mixers with same name or key
2017-11-15 09:56:10 +01:00
Julien Lecoeur
76447b0f4e
Mixers: Use geometry filename as mixer name
2017-11-15 09:56:10 +01:00