ros2_control - rolling
Loading...
Searching...
No Matches
speed_limiter.hpp
1// Copyright 2020 PAL Robotics S.L.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15/*
16 * Author: Enrique Fernández
17 */
18
19#ifndef DIFF_DRIVE_CONTROLLER__SPEED_LIMITER_HPP_
20#define DIFF_DRIVE_CONTROLLER__SPEED_LIMITER_HPP_
21
22#include <limits>
23
24#include "control_toolbox/rate_limiter.hpp"
25
26namespace diff_drive_controller
27{
29{
30public:
49 explicit SpeedLimiter(
50 double min_velocity, double max_velocity, double max_acceleration_reverse,
51 double max_acceleration, double max_deceleration, double max_deceleration_reverse,
52 double min_jerk, double max_jerk)
53 {
55 min_velocity, max_velocity, max_acceleration_reverse, max_acceleration, max_deceleration,
56 max_deceleration_reverse, min_jerk, max_jerk);
57 }
77 double min_velocity, double max_velocity, double max_acceleration_reverse,
78 double max_acceleration, double max_deceleration, double max_deceleration_reverse,
79 double min_jerk, double max_jerk)
80 {
81 speed_limiter_.set_params(
82 min_velocity, max_velocity, max_acceleration_reverse, max_acceleration, max_deceleration,
83 max_deceleration_reverse, min_jerk, max_jerk);
84 }
93 double limit(double & v, double v0, double v1, double dt)
94 {
95 return speed_limiter_.limit(v, v0, v1, dt);
96 }
97
103 double limit_velocity(double & v) { return speed_limiter_.limit_value(v); }
104
112 double limit_acceleration(double & v, double v0, double dt)
113 {
114 return speed_limiter_.limit_first_derivative(v, v0, dt);
115 }
116
126 double limit_jerk(double & v, double v0, double v1, double dt)
127 {
128 return speed_limiter_.limit_second_derivative(v, v0, v1, dt);
129 }
130
131private:
132 control_toolbox::RateLimiter<double> speed_limiter_; // Instance of the new RateLimiter
133};
134
135} // namespace diff_drive_controller
136
137#endif // DIFF_DRIVE_CONTROLLER__SPEED_LIMITER_HPP_
Definition rate_limiter.hpp:32
T limit_value(T &v)
Limit the value.
Definition rate_limiter.hpp:258
T limit_second_derivative(T &v, T v0, T v1, T dt)
Limit the second_derivative.
Definition rate_limiter.hpp:302
T limit(T &v, T v0, T v1, T dt)
Limit the value, first_derivative, and second_derivative.
Definition rate_limiter.hpp:246
void set_params(T min_value=std::numeric_limits< T >::quiet_NaN(), T max_value=std::numeric_limits< T >::quiet_NaN(), T min_first_derivative_neg=std::numeric_limits< T >::quiet_NaN(), T max_first_derivative_pos=std::numeric_limits< T >::quiet_NaN(), T min_first_derivative_pos=std::numeric_limits< T >::quiet_NaN(), T max_first_derivative_neg=std::numeric_limits< T >::quiet_NaN(), T min_second_derivative=std::numeric_limits< T >::quiet_NaN(), T max_second_derivative=std::numeric_limits< T >::quiet_NaN())
Set the parameters.
Definition rate_limiter.hpp:169
T limit_first_derivative(T &v, T v0, T dt)
Limit the first_derivative.
Definition rate_limiter.hpp:271
Definition speed_limiter.hpp:29
double limit_jerk(double &v, double v0, double v1, double dt)
Limit the jerk.
Definition speed_limiter.hpp:126
double limit(double &v, double v0, double v1, double dt)
Limit the velocity, acceleration, and jerk.
Definition speed_limiter.hpp:93
SpeedLimiter(double min_velocity, double max_velocity, double max_acceleration_reverse, double max_acceleration, double max_deceleration, double max_deceleration_reverse, double min_jerk, double max_jerk)
Constructor.
Definition speed_limiter.hpp:49
void set_params(double min_velocity, double max_velocity, double max_acceleration_reverse, double max_acceleration, double max_deceleration, double max_deceleration_reverse, double min_jerk, double max_jerk)
Update parameters at runtime.
Definition speed_limiter.hpp:76
double limit_acceleration(double &v, double v0, double dt)
Limit the acceleration.
Definition speed_limiter.hpp:112
double limit_velocity(double &v)
Limit the velocity.
Definition speed_limiter.hpp:103