-
Notifications
You must be signed in to change notification settings - Fork 13.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multicopter mixer saturation handling strategy -- continue #9062
Merged
+285
−88
Merged
Changes from 1 commit
Commits
Show all changes
17 commits
Select commit
Hold shift + click to select a range
b59cd4c
Multicopter mixer - Always unsaturate low-saturated motors when possible
bresch 5e02cbf
Multicopter mixer - Rewrite unnecessarily complicated conditions
bresch 50d521e
Multicopter mixer - Always unsaturate high-saturated motors when poss…
bresch 1d1f375
Multicopter mixer - Remove arbitraty boost gain during saturation
bresch 0728034
Multicopter mixer - Simplify and correct mistakes of roll-pitch motor…
bresch 077ca2f
Multicopter mixer - Use already computed value instead of recomputing it
bresch 9332881
Airmode - Add airmode parameter for multicopter mixer
bresch 57edc89
Airmode - Add support for UAVCAN
bresch 7552f4d
fmu + px4io: fixes for MC_AIRMODE parameter
bkueng d716637
mixer_multirotor: fix comment thrust_gain -> thrust_scale
bkueng c988ba2
cleanup uavcan_main: replace warnx with PX4_{INFO,ERR,DEBUG}
bkueng 57c5bdd
uavcan_main: use parameter_update to check for param updates
bkueng abc9502
snapdragon_pwm_out: add MC_AIRMODE support
bkueng e78872e
linux_pwm_out: add MC_AIRMODE support
bkueng 4410bd4
Multicopter mixer - Recompute safe roll_pitch_scale if not in air-mode
bresch 67ea636
PWMSim : add MC_AIRMODE support
bresch 6821696
Airmode - Minor rewording
bresch File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Multicopter mixer - Use already computed value instead of recomputing it
- Loading branch information
commit 077ca2f416c51d75ffc878217082ba9420dd86fc
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure what this formula is for...
When min and max are symetric with respect to the middle (thrust) then it's correct but can be simplified to
boost = 0.5f - thrust;
In an asymetric case, which I suppose the math is for, the result is incorrect according to my analysis. When I find any mistake I might have made or a better solution I'll suggest it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I found that the calculation here: https://github.com/PX4/Firmware/pull/9062/files#diff-40032af52ac957eae697d7d0a1856ef2R252 only scales roll and pitch (like the name suggests). This makes things unnecessary complicated when the mixer is not symetric.
If it's symetric boosting the thrust to be 0.5 is the right solution because all the authority gets used.
If it's not symetric it would be a lot easier to directly generate the correct output instead of rerunning and rescaling the whole mixer... Similar to what I did here: https://github.com/PX4/Firmware/pull/8485/files#diff-40032af52ac957eae697d7d0a1856ef2R215
Hopefully I'll get around to do a suggestion in a pr.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This formula is for the asymmetric case and is from the constraint
(max_out - thrust*thrust_scale)*roll_pitch_scale + (thrust + boost)*thrust_scale = 1.0
.Assuming the thrust_scale is 1.0, the constraint is
(max_out - thrust)*roll_pitch_scale + thrust + boost = 1.0
then
boost = 1 - (max_out - thrust)*roll_pitch_scale - thrust
.It could also be simplified by using the min output:
(min_out - thrust)*roll_pitch_scale + thrust + boost = 0
which gives
boost = -(min_out - thrust)*roll_pitch_scale - thrust
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@bresch Yeah I found all these variants also with the min:
but my script still gave the wrong output and just now when I wrote with you on slack I realized my script had a mistake in it. Sorry for the churn, it's correct.