33 double min_abs_velocity,
double max_abs_velocity,
35 double max_abs_angular_velocity,
36 double beta,
double lambda)
50 double& vel_x,
double& vel_th,
bool backward_motion)
53 double r = std::sqrt(x * x + y * y);
56 double delta = (backward_motion) ? std::atan2(-y, -x) : std::atan2(-y, x);
62 double a = std::atan(-
k1_ * theta2);
64 double k = -1.0/r * (
k2_ * (delta - a) + (1 + (
k1_/(1+((
k1_*theta2)*(
k1_*theta2)))))*sin(delta));
69 double approach_limit = std::sqrt(2 *
max_decel_ * r);
70 v = std::min(v, approach_limit);
94 const double min_abs_velocity,
95 const double max_abs_velocity,
96 const double max_abs_angular_velocity)
void setVelocityLimits(const double min_abs_velocity, const double max_abs_velocity, const double max_abs_angular_velocity)
Update the velocity limits.
double max_abs_angular_velocity_
GracefulController(double k1, double k2, double min_abs_velocity, double max_abs_velocity, double max_decel, double max_abs_angular_velocity, double beta, double lambda)
Constructor of the controller.
def normalize_angle(angle)
bool approach(const double x, const double y, const double theta, double &vel_x, double &vel_th, bool backward_motion=false)
Implements something loosely based on "A Smooth Control Law for Graceful Motion of Differential Wheel...