-
Notifications
You must be signed in to change notification settings - Fork 346
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
Mobile robots: Twist limiter vs motor speed limiter #1346
Comments
Here my two cents:
Besides that, we should check:
|
Thanks for your comment @destogl
We have that now optional with
We (accidentally) have chosen the nav2 naming below, with
We (accidentally) have it similar, but only with non-abbreviated names ros2_controllers/diff_drive_controller/src/diff_drive_controller_parameter.yaml Lines 131 to 160 in c9ca6f7
I moved the diff_drive limiter logic to the RateLimiter in control_toolbox. We should compare the two algorithms and see if we can use the saturation_limiter also in the control_toolbox ros-controls/control_toolbox#287 |
I though that I could use a common implementation from the SpeedLimiter and the TractionLimiter to fix #1317 and remove duplicated code in this repo.
I created PRs for both to be moved to the control_toolbox repo
But I realized that they have a different approach and both have its design flaws.
Speed Limiter
Was designed to limit the input command, i.e., a body twist. It limits the velocity v (linear or rotation):
min_* values can be negative!
As reported with #1317, it might be useful to have different acceleration/deceleration limits.
Traction Limiter
Was designed to limit the output command, i.e., the motor velocity. As the error message suggests:
min_* values are always positive!
min_velocity < |v| < max_velocity
min_acceleration < |dv/dt| < max_acceleration
ifdv/dt > 0
ORmin_deceleration < |dv/dt| < max_deceleration
ifdv/dt < 0
min_jerk < |d2v/dt2| < max_jerk
This has the effect that
Can this behavior be useful at all?
Summary and Question
We discussed that once in a WG meeting that limiting the velocity output of the controller (motor velocity) does not make much sense once the limits from the URDF are enforced by the ressource_manager (see ros-controls/ros2_control#1526). But I see that the URDF specification is very limited, i.e., there is no difference of acceleration or deceleration. Is there a use-case for doing this at controller level?
For the twist command input to the controller: Which of the two limiters is the more appropriate one?
I have the feeling that the original SpeedLimiter with additional parameters for different values for deceleration than acceleration would do the job because I don't see the reason for the robot not moving with zero or constant velocity, but I can imagine that there are different limits for forward or reverse movement (different obstacle detection sensors for example).
The text was updated successfully, but these errors were encountered: