54 last_timestamp(ecl::TimeStamp()),
58 void init(
bool enable_acceleration_limiter
59 ,
double linear_acceleration_max_= 0.5,
double angular_acceleration_max_= 3.5
60 ,
double linear_deceleration_max_=-0.5*1.2,
double angular_deceleration_max_=-3.5*1.2)
62 is_enabled = enable_acceleration_limiter;
63 linear_acceleration_max = linear_acceleration_max_ ;
64 linear_deceleration_max = linear_deceleration_max_ ;
65 angular_acceleration_max = angular_acceleration_max_;
66 angular_deceleration_max = angular_deceleration_max_;
69 bool isEnabled()
const {
return is_enabled; }
78 std::vector<double>
limit(
const std::vector<double> &command) {
return limit(command[0], command[1]); }
80 std::vector<double>
limit(
const double &vx,
const double &wz)
82 std::vector<double> ret_val;
85 ecl::TimeStamp curr_timestamp;
87 ecl::TimeStamp duration = curr_timestamp - last_timestamp;
89 double linear_acceleration = ((double)(vx - last_vx)) / duration;
90 double angular_acceleration = ((double)(wz - last_wz)) / duration;
99 if( linear_acceleration > linear_acceleration_max )
100 command_vx = last_vx + linear_acceleration_max * duration;
101 else if( linear_acceleration < linear_deceleration_max )
102 command_vx = last_vx + linear_deceleration_max * duration;
105 last_vx = command_vx;
107 if( angular_acceleration > angular_acceleration_max )
108 command_wz = last_wz + angular_acceleration_max * duration;
109 else if( angular_acceleration < angular_deceleration_max )
110 command_wz = last_wz + angular_deceleration_max * duration;
113 last_wz = command_wz;
115 last_timestamp = curr_timestamp;
120 ret_val.push_back(command_vx);
121 ret_val.push_back(command_wz);
123 ret_val.push_back(0.0);
124 ret_val.push_back(0.0);
131 ecl::TimeStamp last_timestamp;
133 double last_vx, last_wz;
134 double command_vx, command_wz;
135 double linear_acceleration_max, linear_deceleration_max;
136 double angular_acceleration_max, angular_deceleration_max;
std::vector< double > limit(const std::vector< double > &command)
Limits the input velocity commands if gatekeeper is enabled.
Definition acceleration_limiter.hpp:78