Commit Graph

81 Commits

Author SHA1 Message Date
bresch d47f9f155a MC mixer: replace multirotor_motor_limits by control_allocator_status
CA: fix saturation computation
Since the CA matrix is normalized, the same scale applied to be used when using the effectiveness matrix

MCRateControl: use control_allocator_status to get saturation info
2021-11-09 10:35:10 -05:00
Beat Küng 38fa65a47e control_allocator: remove direct mixer, add actuator_{motors,servos} instead 2021-10-18 18:45:19 -04:00
Julien Lecoeur 343cf5603e initial control allocation support
- control allocation module with multirotor, VTOL standard, and tiltrotor support
 - angular_velocity_controller
 - See https://github.com/PX4/PX4-Autopilot/pull/13351 for details

Co-authored-by: Silvan Fuhrer <silvan@auterion.com>
Co-authored-by: Roman Bapst <bapstroman@gmail.com>
2021-01-18 11:25:37 -05:00
Silvan Fuhrer 7c727edc3f Simple mixer: add output slew rate
This adds the option to limit the rate of change (slew rate) of an output that's mixed by a simple mixer.
To enable it, a positive number has to be added at the end (6th number) of the output scaler line of the mixer,
specifying the min rise time of this output.
E.g. O:      10000  10000      0 -10000  10000 20000 for a rise time of 2s, resp. a max slew rate of 0.5s^-1.

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2021-01-04 11:32:22 +01:00
Matthias Grob 16776ff6fb MultirotorMixer: hotfix [-1,1] scaling
After it was mistakenly rescaled in
26bac78eaf274cf58aacbc239cc8f2e865ba864c#diff-899d35a48340c6065702d4fa77b70f0d
#15563
2020-08-26 20:52:16 -04:00
Daniel Agar 26bac78eaf mixers: Multirotor remove text roll, pitch, yaw scaling and idle speed 2020-08-17 16:37:08 -04:00
Steve Nogar 48bf9268c3 rename Mixer to MixerBase to resolve case-insensitivity on mac 2020-07-31 09:37:49 -04:00
Julian Oes 9a96ca14be Tools: make Python import error more readable
The problem with printing the exception was that starting with
Python 3.6 the ImportError is yet another (sub) exception called
ModuleNotFoundError which can't be printed as a string and then triggers
another exception:

```
Traceback (most recent call last):
  File "/home/julianoes/src/Firmware/Tools/serial/generate_config.py", line 11, in <module>
    import jinja2
ModuleNotFoundError: No module named 'jinja2'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/julianoes/src/Firmware/Tools/serial/generate_config.py", line 13, in <module>
    print("Failed to import jinja2: " + e)
TypeError: must be str, not ModuleNotFoundError
```

As per @bkueng's suggestion the easiest is to cast the exception to str
and that way prevent the second exception.
2020-02-14 11:40:05 +01:00
Beat Küng 8020e82c1c MultirotorMixer: allow for longer mixer geometry names (16 instead of 8) 2020-02-13 03:49:16 -08:00
Beat Küng 73bd90ddd5 crazyflie: fix PWM channel ordering
Channels belonging to a certain timer were not all grouped together.
This is required by the .first_channel_index and .last_channel_index data
members.

We introduce a new mixer geometry to solve the problem.
2020-02-13 03:49:16 -08:00
Julian Oes 4329de9e3b Use Python 3 everywhere
Since Python 2 is retired in 4 months, we should move everything to 3.
2020-01-13 21:48:35 +00:00
Daniel Agar a8ea55d9b6 remove all <cmath> usage
* the NuttX c++ library is incomplete, let's avoid including it until we have a real standard library in place
2019-11-25 10:04:04 -05:00
Daniel Agar 75da6e351b mixer: organize by type 2019-11-22 16:48:10 -05:00
Daniel Agar a255789be4 mixer: px_generate_mixer use static constexpr 2019-11-22 15:00:25 -05:00
Daniel Agar cc7807c066 mixer: update to List<> container 2019-11-22 15:00:25 -05:00
Daniel Agar 79dc676c8f mixer: move MixerGroup out of Mixer hierarchy and delete mixer.h header 2019-11-22 15:00:25 -05:00
Daniel Agar 011186b8a5 mixer: delete copy constructors and operators 2019-11-22 15:00:25 -05:00
Daniel Agar a172858db2 mixer: move scale() and scale_check() to SimpleMixer 2019-11-22 15:00:25 -05:00
Daniel Agar 9a572b0cf2 mixer: delete unused SimpleMixer::pwm_input() 2019-11-22 15:00:25 -05:00
Daniel Agar 37ec78dc2a mixer library split into separate headers and name consistently 2019-11-22 15:00:25 -05:00
Beat Küng 3198610f85 src/platforms: move all headers to platforms/common/include/px4_platform_common
and remove the px4_ prefix, except for px4_config.h.

command to update includes:
for k in app.h atomic.h cli.h console_buffer.h defines.h getopt.h i2c.h init.h log.h micro_hal.h module.h module_params.h param.h param_macros.h posix.h sem.h sem.hpp shmem.h shutdown.h tasks.h time.h workqueue.h; do for i in $(grep -rl 'include <px4_'$k src platforms boards); do sed -i 's/#include <px4_'$k'/#include <px4_platform_common\/'$k/ $i; done; done
for in $(grep -rl 'include <px4_config.h' src platforms boards); do sed -i 's/#include <px4_config.h/#include <px4_platform_common\/px4_config.h'/ $i; done

Transitional headers for submodules are added (px4_{defines,log,time}.h)
2019-10-30 11:48:47 +01:00
Daniel Agar 380cae18d1 clang-tidy: partially fix modernize-use-equals-default 2019-10-27 19:19:07 -04:00
Beat Küng 617f37afbf mixer_{multicopter,helicopter}: add buffer size check
Fixes a potential buffer overflow if an MC/helicopter mixer is used that
exceeds the number of physical pins.
This is not a useful/flyable configuration, but the system still should
not crash.
2019-10-16 13:13:17 +02:00
Lasse 5ac0a3043b Clarify Documentation of THR_MDL_FAC
The documentation of the thrust model parameter `THR_MDL_FAC` did not
mention both thrust and "PWM" being relative values. Also the use of the
term PWM could be misleading, since the model is applicable to CAN ESCs
as well.

This commit rephrases the user documentation string and a few source
code comments, but no logic changes are made.

Closes PX4/Firmware#13105
2019-10-09 08:06:51 +02:00
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