Browse Source

Vel smooth - Change jerk scheduling strategy

sbg
bresch 6 years ago committed by Roman Bapst
parent
commit
84665672ad
  1. 15
      src/lib/FlightTasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp

15
src/lib/FlightTasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp

@ -70,7 +70,8 @@ void FlightTaskManualPositionSmoothVel::_updateSetpoints()
_smoothing[2].setMaxVel(_constraints.speed_down); _smoothing[2].setMaxVel(_constraints.speed_down);
} }
Vector2f vel_xy = Vector2f(&_velocity(0)); Vector2f vel_xy_sp = Vector2f(&_velocity_setpoint(0));
Vector2f vel_xy_sp_smooth = Vector2f(&_vel_sp_smooth(0));
float jerk[3] = {_jerk_max.get(), _jerk_max.get(), _jerk_max.get()}; float jerk[3] = {_jerk_max.get(), _jerk_max.get(), _jerk_max.get()};
float jerk_xy = _jerk_max.get(); float jerk_xy = _jerk_max.get();
@ -79,9 +80,15 @@ void FlightTaskManualPositionSmoothVel::_updateSetpoints()
} }
if (_jerk_min.get() > FLT_EPSILON) { if (_jerk_min.get() > FLT_EPSILON) {
// interpolate between min and max jerk if (vel_xy_sp.length() < FLT_EPSILON) { // Brake
jerk_xy = math::min(_jerk_min.get() + (_jerk_max.get() - _jerk_min.get()) * vel_xy.length() / _constraints.speed_xy, jerk_xy = _jerk_min.get() + (_jerk_max.get() - _jerk_min.get());
_jerk_max.get());
} else if (vel_xy_sp.dot(vel_xy_sp_smooth) < -FLT_EPSILON) { // Reverse
jerk_xy = _jerk_max.get();
} else {
jerk_xy = _jerk_min.get();
}
} }
jerk[0] = jerk_xy; jerk[0] = jerk_xy;

Loading…
Cancel
Save