mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-20 05:33:33 +08:00
ManualSmoothingZ: better getMaxAcceleration handling
This commit is contained in:
committed by
Beat Küng
parent
0b551c1ede
commit
08dfd0c495
@@ -63,7 +63,7 @@ ManualSmoothingZ::smoothVelFromSticks(float vel_sp[2], const float dt)
|
|||||||
{
|
{
|
||||||
updateParams();
|
updateParams();
|
||||||
|
|
||||||
updateAcceleration(vel_sp[1], dt);
|
updateAcceleration(vel_sp, dt);
|
||||||
|
|
||||||
velocitySlewRate(vel_sp, dt);
|
velocitySlewRate(vel_sp, dt);
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ ManualSmoothingZ::setParams()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ManualSmoothingZ::updateAcceleration(float &vel_sp_prev, const float dt)
|
ManualSmoothingZ::updateAcceleration(float vel_sp[2], const float dt)
|
||||||
{
|
{
|
||||||
/* check if zero input stick */
|
/* check if zero input stick */
|
||||||
const bool is_current_zero = (fabsf(_stick) <= FLT_EPSILON);
|
const bool is_current_zero = (fabsf(_stick) <= FLT_EPSILON);
|
||||||
@@ -116,7 +116,8 @@ ManualSmoothingZ::updateAcceleration(float &vel_sp_prev, const float dt)
|
|||||||
/* reset slewrate: this ensures that there
|
/* reset slewrate: this ensures that there
|
||||||
* is no delay present because of the slewrate
|
* is no delay present because of the slewrate
|
||||||
*/
|
*/
|
||||||
vel_sp_prev = _vel;
|
|
||||||
|
vel_sp[1] = _vel;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,6 +139,7 @@ ManualSmoothingZ::updateAcceleration(float &vel_sp_prev, const float dt)
|
|||||||
|
|
||||||
case Intention::acceleration: {
|
case Intention::acceleration: {
|
||||||
|
|
||||||
|
_acc_state_dependent = (getMaxAcceleration(vel_sp) - _acc_max_down)
|
||||||
_acc_state_dependent = (getMaxAcceleration() - _acc_max_down)
|
_acc_state_dependent = (getMaxAcceleration() - _acc_max_down)
|
||||||
* fabsf(_stick) + _acc_max_down;
|
* fabsf(_stick) + _acc_max_down;
|
||||||
break;
|
break;
|
||||||
@@ -148,9 +150,35 @@ ManualSmoothingZ::updateAcceleration(float &vel_sp_prev, const float dt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
ManualSmoothingZ::getMaxAcceleration()
|
ManualSmoothingZ::getMaxAcceleration(float vel_sp[2])
|
||||||
{
|
{
|
||||||
return (_stick <= 0.0f) ? _acc_max_up : _acc_max_down;
|
/* Note: NED frame */
|
||||||
|
|
||||||
|
if (_stick < 0.0f) {
|
||||||
|
/* accelerating upward */
|
||||||
|
return _acc_max_up;
|
||||||
|
|
||||||
|
} else if (_stick > 0.0f) {
|
||||||
|
/* accelerating downward */
|
||||||
|
return _acc_max_down;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* want to brake */
|
||||||
|
|
||||||
|
if (fabsf(vel_sp[0] - vel_sp[1]) < FLT_EPSILON) {
|
||||||
|
/* at rest */
|
||||||
|
return _acc_max_up;
|
||||||
|
|
||||||
|
} else if (vel_sp[0] < 0.0f ) {
|
||||||
|
/* braking downward */
|
||||||
|
return _acc_max_down;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* braking upward */
|
||||||
|
return _acc_max_up;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
Reference in New Issue
Block a user