Manual Smoth Vel - Override reActivate to not reset Z axis (prevented takeoff)

This commit is contained in:
bresch
2018-11-06 22:17:00 +01:00
committed by Roman Bapst
parent c3a4fff0cd
commit 90cee2d5ea
2 changed files with 32 additions and 3 deletions
@@ -42,16 +42,42 @@ bool FlightTaskManualPositionSmoothVel::activate()
{
bool ret = FlightTaskManualPosition::activate();
reset(Axes::XYZ);
return ret;
}
void FlightTaskManualPositionSmoothVel::reActivate()
{
reset(Axes::XY);
}
void FlightTaskManualPositionSmoothVel::reset(Axes axes)
{
int count;
switch (axes) {
case Axes::XY:
count = 2;
break;
case Axes::XYZ:
count = 3;
break;
default:
count = 0;
break;
}
// TODO: get current accel
for (int i = 0; i < 3; ++i) {
for (int i = 0; i < count; ++i) {
_smoothing[i].reset(0.f, _velocity(i), _position(i));
}
_position_lock_xy_active = false;
_position_setpoint_xy_locked(0) = NAN;
_position_setpoint_xy_locked(1) = NAN;
return ret;
}
void FlightTaskManualPositionSmoothVel::_updateSetpoints()
@@ -50,6 +50,7 @@ public:
virtual ~FlightTaskManualPositionSmoothVel() = default;
bool activate() override;
void reActivate() override;
protected:
@@ -63,6 +64,8 @@ protected:
)
private:
enum class Axes {XY, XYZ};
void reset(Axes axes);
VelocitySmoothing _smoothing[3]; ///< Smoothing in x, y and z directions
matrix::Vector3f _vel_sp_smooth;
bool _position_lock_xy_active{false};