-
Notifications
You must be signed in to change notification settings - Fork 276
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
Adding thrust coefficient calculation #1652
Adding thrust coefficient calculation #1652
Conversation
Signed-off-by: Marco A. Gutierrez <[email protected]>
Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]>
59ec256
to
f8550f1
Compare
Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]>
Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]>
Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]>
Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]>
Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]>
Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]>
Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]>
Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]>
4a7d797
to
0cd1d65
Compare
…_plugin Signed-off-by: Marco A. Gutierrez <[email protected]>
src/systems/thruster/Thruster.cc
Outdated
(((1 - this->wakeFraction) * this->linearVelocity) | ||
/ (this->propellerAngVel * this->propellerDiameter)); | ||
if (!std::isnan(calculatedThrustCoefficient) | ||
&& calculatedThrustCoefficient!=0) |
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.
@marcoag meta: hmm, something's off here. If the thrust coefficient is zero, then no thrust should apply. If the propeller angular velocity is zero, then no thrust should apply and the thrust coefficient is not defined (and it doesn't matter anyways). I see this cause-effect relationship is reversed in this plugin: we assume thrust is always applicable and compute propeller angular velocity. I think we should set that straight. Then you would not need this conditional.
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.
When the plugin starts the angular velocity is zero, making the thrust coefficient nan. Since it's used later on to calculate the propeller angular velocity then the model would never start moving. The intent of this check was to break this loop and use the default thrust coefficient which is 1 and won't affect the final result. I think it might suffice with the isnan
check for this or another option is to only update the thrust coefficient once the propeller angular velocity is not 0, maybe the later makes more sense?
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.
Ah, almost forgot to reply.
I guess my point is that the current implementation is not a good approximation. It takes thrust commands instead of propeller angular velocities, and applies forces instantaneously. That's why we are running into this odd corner cases. It makes me wonder, why use this improved thrust coefficient if the dynamics are not there.
Anyways, I think that if we want to keep everything as-is, we could (a) set propeller angular velocity to zero if thrust is zero, bypassing all calculations, and (b) solve the quadratic-like equation to get propeller angular velocity in all other cases, as if it had reached steady state instantaneously (like with forces).
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 don't know the reason to take thrust commands instead of propeller angular velocities here, the later would be even easier since it seems the thrust gets converter into an angular velocity anyway.
a) The propeller angular velocity would be zero if thrust is zero using calculations, so there doesn't seem a to be a need to bypass them.
Still the problem is a chicken egg dependency between velocity and thrust coefficient, due to a mutual dependency, if any of them is zero it would make the other one zero, preventing the vehicle to move when starting from stationary. With the conditional above I was trying to avoid this problem. I guess it makes more sense to only calculate when angular_velocity != 0
and use the default thrust coefficient (or latest) when that happens. Will add this change for now.
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.
As per offline discussion, let's go with this as-is. I ran a couple, very much simplified numerical experiments and the coefficient converges even if we start from a guess. I can't swear on convergence, but if the sim looks OK we should be fine.
solve the quadratic-like equation to get propeller angular velocity in all other cases, as if it had reached steady state instantaneously (like with forces).
Re: to myself. This is not super easy, I missed the linear velocity term in the thrust coefficient model.
src/systems/thruster/Thruster.hh
Outdated
/// - <wake_fraction> - Relative speed reduction between the water | ||
/// at the propeller vs behind the vessel. | ||
/// [Optional, defults to 0.2] | ||
/// - <alpha_1> - Constant given by the open water propeller diagram. Used | ||
/// in the calculation of the thrust coefficient. | ||
/// [Optional, defults to 1] | ||
/// - <alpha_2> - Constant given by the open water propeller diagram. Used | ||
/// in the calculation of the thrust coefficient. | ||
/// [Optional, defults to 0] |
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.
@marcoag bibliographic references here would be great.
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.
Added in 7351aab.
Signed-off-by: Marco A. Gutierrez <[email protected]>
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.
LGTM but for two relatively minor comments
src/systems/thruster/Thruster.cc
Outdated
// Only update if the thrust coefficient was not set by configuration | ||
// and angular velocity is not zero. Some velocity is needed to calculate | ||
// the thrust coefficient otherwise it will never start moving. | ||
if (!this->thrustCoefficientSet && this->propellerAngVel !=0) |
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.
@marcoag could the thrust coefficient ever become zero while moving (in other words, could either
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.
Also, I'm surprised the compiler didn't complain about a floating point comparison to zero. AFAIK std::abs(this->propellerAngVel) < std::numeric_limits<double>::epsilon()
would be a slightly more robust test.
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.
It did threw a warning, I assumed anything that is not a strict zero would work.
Changed to your suggestion: 51337cd.
Signed-off-by: Marco A. Gutierrez <[email protected]>
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.
LGTM pending green CI
Signed-off-by: Marco A. Gutierrez <[email protected]>
Codecov Report
@@ Coverage Diff @@
## ign-gazebo6 #1652 +/- ##
===============================================
+ Coverage 64.69% 64.73% +0.03%
===============================================
Files 321 321
Lines 26062 26155 +93
===============================================
+ Hits 16862 16931 +69
- Misses 9200 9224 +24
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here. |
👨🌾 Hi there! I was taking a look at this issue on the buildfarm and I noticed we have a new gcc warning.
On thruster.cc:247. Do you mind taking a look at how to solve/supress it? Thanks |
* Add topic parameter to thrust plugin (#1681) * Add topic parameter. Signed-off-by: Carlos Agüero <[email protected]> * 🎈 6.12.0: bumped minor and updated changelog (#1682) * bumped minor and updated changelog Signed-off-by: Dharini Dutia <[email protected]> * fixed changelog as per feedback and updated migration guide Signed-off-by: Dharini Dutia <[email protected]> Signed-off-by: Dharini Dutia <[email protected]> * Fix reference link in ackermann steering (#1683) Signed-off-by: Kenji Brameld <[email protected]> * Fix installation instructions on Ubuntu 22.04 (#1686) Signed-off-by: Silvio Traversaro <[email protected]> * Add a service to trigger functionality (#1611) * initial commit to allow plugin to call a service Signed-off-by: Liam Han <[email protected]> * adding tutorial and modifying the world sdf Signed-off-by: Liam Han <[email protected]> * added test for single input and single service output Signed-off-by: Liam Han <[email protected]> * added test for single input and multiple service output Signed-off-by: Liam Han <[email protected]> * added test for invalid matching service name => timeout Signed-off-by: Liam Han <[email protected]> * modified variables the camelCase Signed-off-by: Liam Han <[email protected]> * fixed typo, indentation, grammar, lines that exceeded 80 char Signed-off-by: Liam Han <[email protected]> * fixing ubuntu bionic ci issue Signed-off-by: Liam Han <[email protected]> * silly syntax mistake on expect_eq Signed-off-by: Liam Han <[email protected]> * added three more test cases that addesses incorrect response type, incorrect request type and false result Signed-off-by: Liam Han <[email protected]> * WIP: major restructuring and currently working. Requires more cleanup and test Signed-off-by: Liam Han <[email protected]> * WIP: fixed preprocessor define bug Signed-off-by: Liam Han <[email protected]> * WIP: working but extremely convoluted Signed-off-by: Liam Han <[email protected]> * WIP major modification but a lot of errors and tests failed Signed-off-by: Liam Han <[email protected]> * stable version: had to revert back to previous work. all tests passed Signed-off-by: Liam Han <[email protected]> * modified to use blocking Request method as well as reduce a service worker thread to just one thread with the publisher. all tests passed Signed-off-by: Liam Han <[email protected]> * stable version: had to revert back to previous work. all tests passed Signed-off-by: Liam Han <[email protected]> * successfully reverted and tested Signed-off-by: Liam Han <[email protected]> * fixing PR suggestions Signed-off-by: Liam Han <[email protected]> * changed string with 'serv' to 'srv' and included <mutex> to the header Signed-off-by: Liam Han <[email protected]> * fixed indentation and removed rep.set_data since it's unused on the client service Signed-off-by: Liam Han <[email protected]> * getting rid of the id Signed-off-by: Liam Han <[email protected]> * fixed race condition resulting seldom test failure Signed-off-by: Liam Han <[email protected]> * changed from triggerSrv to serviceCount. This compensates for the two threads running at different rate Signed-off-by: Liam Han <[email protected]> * braces indentation Signed-off-by: Mabel Zhang <[email protected]> * addressing gnu c compiler (gcc) warnings Signed-off-by: Liam Han <[email protected]> Signed-off-by: Liam Han <[email protected]> Signed-off-by: Mabel Zhang <[email protected]> Co-authored-by: Mabel Zhang <[email protected]> * Fix loading render engine plugins in GUI (#1694) Signed-off-by: Ian Chen <[email protected]> * Enable inherited model topic name. (#1689) Allows for inheriting model name for robotNamespace when SDF element is not set and provides a debug message showing the topics it subscribes to. Signed-off-by: Benjamin Perseghetti <[email protected]> Co-authored-by: Nate Koenig <[email protected]> * Add ResourceSpawner example file (#1701) Add an example file for the ResourceSpawner plugin. I'm using this to link from https://github.com/gazebosim/docs/blob/master/garden/Model_insertion_fuel.md. To improve gazebosim/garden-tutorial-party#1991. Signed-off-by: Jose Luis Rivero <[email protected]> Co-authored-by: Alejandro Hernández Cordero <[email protected]> * Update triggered_publisher.sdf (#1737) found a silly typo that was pushed back in PR (#1611) * Adds sky cubemap URI to the sky.proto's header (#1739) * Adds sky cubemap URI to the sky.proto's header Signed-off-by: Nate Koenig <[email protected]> * require sdf 12.6 Signed-off-by: Nate Koenig <[email protected]> Signed-off-by: Nate Koenig <[email protected]> Co-authored-by: Nate Koenig <[email protected]> * Return absolute path when finding a resource (#1741) * Adds sky cubemap URI to the sky.proto's header Signed-off-by: Nate Koenig <[email protected]> * Return absolute path when finding a resource Signed-off-by: Nate Koenig <[email protected]> Signed-off-by: Nate Koenig <[email protected]> Co-authored-by: Nate Koenig <[email protected]> * Restore Add System GUI plugin (#1685) * cherry pick aef3020 Signed-off-by: Ian Chen <[email protected]> * Adding thrust coefficient calculation (#1652) * adding thrust coefficient calculation Signed-off-by: Marco A. Gutierrez <[email protected]> * Update src/systems/thruster/Thruster.cc Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]> * Update src/systems/thruster/Thruster.cc Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]> * Update src/systems/thruster/Thruster.cc Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]> * Update src/systems/thruster/Thruster.cc Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]> * Update src/systems/thruster/Thruster.cc Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]> * Update src/systems/thruster/Thruster.cc Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]> * Update src/systems/thruster/Thruster.cc Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]> * Update src/systems/thruster/Thruster.cc Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]> * Update src/systems/thruster/Thruster.hh Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]> * thrust coefficient test and behavior updates Signed-off-by: Marco A. Gutierrez <[email protected]> * making float comparision more robust Signed-off-by: Marco A. Gutierrez <[email protected]> * fix float comparision and lint Signed-off-by: Marco A. Gutierrez <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]> Co-authored-by: Alejandro Hernández Cordero <[email protected]> * Enable/Disable individual hydrodynamic components. (#1692) This commit enables and disables individual components of the hydrodynamics. This is often useful for debugging odd behaviours of a hydrodynamic model. * Fortress: Removed warnings (#1754) * Fortress: Removed warnings * Removed unused speedlimit file (#1761) Signed-off-by: ahcorde <[email protected]> * Enable use of ign gazebo -s on Windows (take two) (#1764) * Enable use of ign gazebo -s on Windows Signed-off-by: Silvio <[email protected]> * Update src/CMakeLists.txt Co-authored-by: Alejandro Hernández Cordero <[email protected]> Signed-off-by: Silvio <[email protected]> * Fix cmdmodel6.rb and cmdgazebo6.rb contining the same code Signed-off-by: Silvio <[email protected]> Signed-off-by: Silvio <[email protected]> Co-authored-by: Alejandro Hernández Cordero <[email protected]> * Script and tutorial for generating procedural datasets with Blender (#1412) Signed-off-by: Andrej Orsula <[email protected]> * Fix scene_broadcaster_system test (#1766) Signed-off-by: Nate Koenig <[email protected]> Signed-off-by: Nate Koenig <[email protected]> Co-authored-by: Nate Koenig <[email protected]> * Lint Signed-off-by: Michael Carroll <[email protected]> * Clean build and update test Signed-off-by: Nate Koenig <[email protected]> Signed-off-by: Carlos Agüero <[email protected]> Signed-off-by: Dharini Dutia <[email protected]> Signed-off-by: Kenji Brameld <[email protected]> Signed-off-by: Silvio Traversaro <[email protected]> Signed-off-by: Liam Han <[email protected]> Signed-off-by: Mabel Zhang <[email protected]> Signed-off-by: Ian Chen <[email protected]> Signed-off-by: Benjamin Perseghetti <[email protected]> Signed-off-by: Jose Luis Rivero <[email protected]> Signed-off-by: Nate Koenig <[email protected]> Signed-off-by: Marco A. Gutierrez <[email protected]> Signed-off-by: ahcorde <[email protected]> Signed-off-by: Silvio <[email protected]> Signed-off-by: Andrej Orsula <[email protected]> Signed-off-by: Michael Carroll <[email protected]> Co-authored-by: Carlos Agüero <[email protected]> Co-authored-by: Dharini Dutia <[email protected]> Co-authored-by: Kenji Brameld <[email protected]> Co-authored-by: Silvio Traversaro <[email protected]> Co-authored-by: Liam Han <[email protected]> Co-authored-by: Mabel Zhang <[email protected]> Co-authored-by: Ian Chen <[email protected]> Co-authored-by: Benjamin Perseghetti <[email protected]> Co-authored-by: Jose Luis Rivero <[email protected]> Co-authored-by: Alejandro Hernández Cordero <[email protected]> Co-authored-by: Nate Koenig <[email protected]> Co-authored-by: Marco A. Gutierrez <[email protected]> Co-authored-by: Arjo Chakravarty <[email protected]> Co-authored-by: Andrej Orsula <[email protected]> Co-authored-by: Michael Carroll <[email protected]>
Signed-off-by: Marco A. Gutierrez [email protected]
🎉 New feature
Work towards osrf/lrauv#225
Summary
Thrust coefficient in Thruster plugin can only be set to a fixed number, by default 1. This PR adds a calculation that makes it depend on the velocity of the vehicle. The calculation implemented here is based Fossen's equations described in "Guidance and Control of Ocean Vehicles".
Test it
Checklist
codecheck
passed (See contributing)Note to maintainers: Remember to use Squash-Merge and edit the commit message to match the pull request summary while retaining
Signed-off-by
messages.