Browse Source

flight_tasks: pass previous setpoint as const reference

- perform setpoint checks in place to simplify and avoid copy
sbg
Daniel Agar 5 years ago
parent
commit
de59d6c788
  1. 2
      src/lib/flight_tasks/tasks/Auto/FlightTaskAuto.cpp
  2. 2
      src/lib/flight_tasks/tasks/Auto/FlightTaskAuto.hpp
  3. 47
      src/lib/flight_tasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.cpp
  4. 4
      src/lib/flight_tasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.hpp
  5. 2
      src/lib/flight_tasks/tasks/AutoMapper/FlightTaskAutoMapper.cpp
  6. 2
      src/lib/flight_tasks/tasks/AutoMapper/FlightTaskAutoMapper.hpp
  7. 2
      src/lib/flight_tasks/tasks/Descend/FlightTaskDescend.cpp
  8. 2
      src/lib/flight_tasks/tasks/Descend/FlightTaskDescend.hpp
  9. 2
      src/lib/flight_tasks/tasks/Failsafe/FlightTaskFailsafe.cpp
  10. 2
      src/lib/flight_tasks/tasks/Failsafe/FlightTaskFailsafe.hpp
  11. 2
      src/lib/flight_tasks/tasks/FlightTask/FlightTask.cpp
  12. 2
      src/lib/flight_tasks/tasks/FlightTask/FlightTask.hpp
  13. 2
      src/lib/flight_tasks/tasks/ManualAltitude/FlightTaskManualAltitude.cpp
  14. 2
      src/lib/flight_tasks/tasks/ManualAltitude/FlightTaskManualAltitude.hpp
  15. 26
      src/lib/flight_tasks/tasks/ManualAltitudeSmoothVel/FlightTaskManualAltitudeSmoothVel.cpp
  16. 4
      src/lib/flight_tasks/tasks/ManualAltitudeSmoothVel/FlightTaskManualAltitudeSmoothVel.hpp
  17. 2
      src/lib/flight_tasks/tasks/ManualPosition/FlightTaskManualPosition.cpp
  18. 2
      src/lib/flight_tasks/tasks/ManualPosition/FlightTaskManualPosition.hpp
  19. 46
      src/lib/flight_tasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp
  20. 4
      src/lib/flight_tasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.hpp
  21. 2
      src/lib/flight_tasks/tasks/Offboard/FlightTaskOffboard.cpp
  22. 2
      src/lib/flight_tasks/tasks/Offboard/FlightTaskOffboard.hpp
  23. 2
      src/lib/flight_tasks/tasks/Orbit/FlightTaskOrbit.cpp
  24. 2
      src/lib/flight_tasks/tasks/Orbit/FlightTaskOrbit.hpp
  25. 15
      src/lib/flight_tasks/tasks/Transition/FlightTaskTransition.cpp
  26. 4
      src/lib/flight_tasks/tasks/Transition/FlightTaskTransition.hpp

2
src/lib/flight_tasks/tasks/Auto/FlightTaskAuto.cpp

@ -48,7 +48,7 @@ FlightTaskAuto::FlightTaskAuto() :
} }
bool FlightTaskAuto::activate(vehicle_local_position_setpoint_s last_setpoint) bool FlightTaskAuto::activate(const vehicle_local_position_setpoint_s &last_setpoint)
{ {
bool ret = FlightTask::activate(last_setpoint); bool ret = FlightTask::activate(last_setpoint);
_position_setpoint = _position; _position_setpoint = _position;

2
src/lib/flight_tasks/tasks/Auto/FlightTaskAuto.hpp

@ -83,7 +83,7 @@ public:
FlightTaskAuto(); FlightTaskAuto();
virtual ~FlightTaskAuto() = default; virtual ~FlightTaskAuto() = default;
bool activate(vehicle_local_position_setpoint_s last_setpoint) override; bool activate(const vehicle_local_position_setpoint_s &last_setpoint) override;
bool updateInitialize() override; bool updateInitialize() override;
bool updateFinalize() override; bool updateFinalize() override;

47
src/lib/flight_tasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.cpp

@ -41,19 +41,30 @@
using namespace matrix; using namespace matrix;
bool FlightTaskAutoLineSmoothVel::activate(vehicle_local_position_setpoint_s last_setpoint) bool FlightTaskAutoLineSmoothVel::activate(const vehicle_local_position_setpoint_s &last_setpoint)
{ {
bool ret = FlightTaskAutoMapper::activate(last_setpoint); bool ret = FlightTaskAutoMapper::activate(last_setpoint);
checkSetpoints(last_setpoint); Vector3f vel_prev{last_setpoint.vx, last_setpoint.vy, last_setpoint.vz};
const Vector3f vel_prev(last_setpoint.vx, last_setpoint.vy, last_setpoint.vz); Vector3f pos_prev{last_setpoint.x, last_setpoint.y, last_setpoint.z};
const Vector3f pos_prev(last_setpoint.x, last_setpoint.y, last_setpoint.z); Vector3f accel_prev{last_setpoint.acceleration};
for (int i = 0; i < 3; i++) {
// If the position setpoint is unknown, set to the current postion
if (!PX4_ISFINITE(pos_prev(i))) { pos_prev(i) = _position(i); }
// If the velocity setpoint is unknown, set to the current velocity
if (!PX4_ISFINITE(vel_prev(i))) { vel_prev(i) = _velocity(i); }
// No acceleration estimate available, set to zero if the setpoint is NAN
if (!PX4_ISFINITE(accel_prev(i))) { accel_prev(i) = 0.f; }
}
for (int i = 0; i < 3; ++i) { for (int i = 0; i < 3; ++i) {
_trajectory[i].reset(last_setpoint.acceleration[i], vel_prev(i), pos_prev(i)); _trajectory[i].reset(accel_prev(i), vel_prev(i), pos_prev(i));
} }
_yaw_sp_prev = last_setpoint.yaw; _yaw_sp_prev = PX4_ISFINITE(last_setpoint.yaw) ? last_setpoint.yaw : _yaw;
_updateTrajConstraints(); _updateTrajConstraints();
return ret; return ret;
@ -69,30 +80,6 @@ void FlightTaskAutoLineSmoothVel::reActivate()
_trajectory[2].reset(0.f, 0.7f, _position(2)); _trajectory[2].reset(0.f, 0.7f, _position(2));
} }
void FlightTaskAutoLineSmoothVel::checkSetpoints(vehicle_local_position_setpoint_s &setpoints)
{
// If the position setpoint is unknown, set to the current postion
if (!PX4_ISFINITE(setpoints.x)) { setpoints.x = _position(0); }
if (!PX4_ISFINITE(setpoints.y)) { setpoints.y = _position(1); }
if (!PX4_ISFINITE(setpoints.z)) { setpoints.z = _position(2); }
// If the velocity setpoint is unknown, set to the current velocity
if (!PX4_ISFINITE(setpoints.vx)) { setpoints.vx = _velocity(0); }
if (!PX4_ISFINITE(setpoints.vy)) { setpoints.vy = _velocity(1); }
if (!PX4_ISFINITE(setpoints.vz)) { setpoints.vz = _velocity(2); }
// No acceleration estimate available, set to zero if the setpoint is NAN
for (int i = 0; i < 3; i++) {
if (!PX4_ISFINITE(setpoints.acceleration[i])) { setpoints.acceleration[i] = 0.f; }
}
if (!PX4_ISFINITE(setpoints.yaw)) { setpoints.yaw = _yaw; }
}
/** /**
* EKF reset handling functions * EKF reset handling functions
* Those functions are called by the base FlightTask in * Those functions are called by the base FlightTask in

4
src/lib/flight_tasks/tasks/AutoLineSmoothVel/FlightTaskAutoLineSmoothVel.hpp

@ -49,13 +49,11 @@ public:
FlightTaskAutoLineSmoothVel() = default; FlightTaskAutoLineSmoothVel() = default;
virtual ~FlightTaskAutoLineSmoothVel() = default; virtual ~FlightTaskAutoLineSmoothVel() = default;
bool activate(vehicle_local_position_setpoint_s last_setpoint) override; bool activate(const vehicle_local_position_setpoint_s &last_setpoint) override;
void reActivate() override; void reActivate() override;
protected: protected:
void checkSetpoints(vehicle_local_position_setpoint_s &setpoints);
/** Reset position or velocity setpoints in case of EKF reset event */ /** Reset position or velocity setpoints in case of EKF reset event */
void _ekfResetHandlerPositionXY() override; void _ekfResetHandlerPositionXY() override;
void _ekfResetHandlerVelocityXY() override; void _ekfResetHandlerVelocityXY() override;

2
src/lib/flight_tasks/tasks/AutoMapper/FlightTaskAutoMapper.cpp

@ -44,7 +44,7 @@ FlightTaskAutoMapper::FlightTaskAutoMapper() :
_sticks(this) _sticks(this)
{}; {};
bool FlightTaskAutoMapper::activate(vehicle_local_position_setpoint_s last_setpoint) bool FlightTaskAutoMapper::activate(const vehicle_local_position_setpoint_s &last_setpoint)
{ {
bool ret = FlightTaskAuto::activate(last_setpoint); bool ret = FlightTaskAuto::activate(last_setpoint);
_reset(); _reset();

2
src/lib/flight_tasks/tasks/AutoMapper/FlightTaskAutoMapper.hpp

@ -48,7 +48,7 @@ class FlightTaskAutoMapper : public FlightTaskAuto
public: public:
FlightTaskAutoMapper(); FlightTaskAutoMapper();
virtual ~FlightTaskAutoMapper() = default; virtual ~FlightTaskAutoMapper() = default;
bool activate(vehicle_local_position_setpoint_s last_setpoint) override; bool activate(const vehicle_local_position_setpoint_s &last_setpoint) override;
bool update() override; bool update() override;
protected: protected:

2
src/lib/flight_tasks/tasks/Descend/FlightTaskDescend.cpp

@ -36,7 +36,7 @@
#include "FlightTaskDescend.hpp" #include "FlightTaskDescend.hpp"
bool FlightTaskDescend::activate(vehicle_local_position_setpoint_s last_setpoint) bool FlightTaskDescend::activate(const vehicle_local_position_setpoint_s &last_setpoint)
{ {
bool ret = FlightTask::activate(last_setpoint); bool ret = FlightTask::activate(last_setpoint);
// stay level to minimize horizontal drift // stay level to minimize horizontal drift

2
src/lib/flight_tasks/tasks/Descend/FlightTaskDescend.hpp

@ -46,7 +46,7 @@ public:
virtual ~FlightTaskDescend() = default; virtual ~FlightTaskDescend() = default;
bool update() override; bool update() override;
bool activate(vehicle_local_position_setpoint_s last_setpoint) override; bool activate(const vehicle_local_position_setpoint_s &last_setpoint) override;
private: private:
DEFINE_PARAMETERS_CUSTOM_PARENT(FlightTask, DEFINE_PARAMETERS_CUSTOM_PARENT(FlightTask,

2
src/lib/flight_tasks/tasks/Failsafe/FlightTaskFailsafe.cpp

@ -36,7 +36,7 @@
#include "FlightTaskFailsafe.hpp" #include "FlightTaskFailsafe.hpp"
bool FlightTaskFailsafe::activate(vehicle_local_position_setpoint_s last_setpoint) bool FlightTaskFailsafe::activate(const vehicle_local_position_setpoint_s &last_setpoint)
{ {
bool ret = FlightTask::activate(last_setpoint); bool ret = FlightTask::activate(last_setpoint);
_position_setpoint = _position; _position_setpoint = _position;

2
src/lib/flight_tasks/tasks/Failsafe/FlightTaskFailsafe.hpp

@ -47,7 +47,7 @@ public:
virtual ~FlightTaskFailsafe() = default; virtual ~FlightTaskFailsafe() = default;
bool update() override; bool update() override;
bool activate(vehicle_local_position_setpoint_s last_setpoint) override; bool activate(const vehicle_local_position_setpoint_s &last_setpoint) override;
private: private:
DEFINE_PARAMETERS_CUSTOM_PARENT(FlightTask, DEFINE_PARAMETERS_CUSTOM_PARENT(FlightTask,

2
src/lib/flight_tasks/tasks/FlightTask/FlightTask.cpp

@ -10,7 +10,7 @@ const ekf_reset_counters_s FlightTask::zero_reset_counters = {};
const vehicle_constraints_s FlightTask::empty_constraints = {0, NAN, NAN, NAN, NAN, NAN, NAN, NAN, false, {}}; const vehicle_constraints_s FlightTask::empty_constraints = {0, NAN, NAN, NAN, NAN, NAN, NAN, NAN, false, {}};
const landing_gear_s FlightTask::empty_landing_gear_default_keep = {0, landing_gear_s::GEAR_KEEP, {}}; const landing_gear_s FlightTask::empty_landing_gear_default_keep = {0, landing_gear_s::GEAR_KEEP, {}};
bool FlightTask::activate(vehicle_local_position_setpoint_s last_setpoint) bool FlightTask::activate(const vehicle_local_position_setpoint_s &last_setpoint)
{ {
_resetSetpoints(); _resetSetpoints();
_setDefaultConstraints(); _setDefaultConstraints();

2
src/lib/flight_tasks/tasks/FlightTask/FlightTask.hpp

@ -80,7 +80,7 @@ public:
* @param last_setpoint last output of the previous task * @param last_setpoint last output of the previous task
* @return true on success, false on error * @return true on success, false on error
*/ */
virtual bool activate(vehicle_local_position_setpoint_s last_setpoint); virtual bool activate(const vehicle_local_position_setpoint_s &last_setpoint);
/** /**
* Call this to reset an active Flight Task * Call this to reset an active Flight Task

2
src/lib/flight_tasks/tasks/ManualAltitude/FlightTaskManualAltitude.cpp

@ -61,7 +61,7 @@ bool FlightTaskManualAltitude::updateInitialize()
return ret && PX4_ISFINITE(_position(2)) && PX4_ISFINITE(_velocity(2)) && PX4_ISFINITE(_yaw); return ret && PX4_ISFINITE(_position(2)) && PX4_ISFINITE(_velocity(2)) && PX4_ISFINITE(_yaw);
} }
bool FlightTaskManualAltitude::activate(vehicle_local_position_setpoint_s last_setpoint) bool FlightTaskManualAltitude::activate(const vehicle_local_position_setpoint_s &last_setpoint)
{ {
bool ret = FlightTask::activate(last_setpoint); bool ret = FlightTask::activate(last_setpoint);
_yaw_setpoint = NAN; _yaw_setpoint = NAN;

2
src/lib/flight_tasks/tasks/ManualAltitude/FlightTaskManualAltitude.hpp

@ -48,7 +48,7 @@ class FlightTaskManualAltitude : public FlightTask
public: public:
FlightTaskManualAltitude(); FlightTaskManualAltitude();
virtual ~FlightTaskManualAltitude() = default; virtual ~FlightTaskManualAltitude() = default;
bool activate(vehicle_local_position_setpoint_s last_setpoint) override; bool activate(const vehicle_local_position_setpoint_s &last_setpoint) override;
bool updateInitialize() override; bool updateInitialize() override;
bool update() override; bool update() override;

26
src/lib/flight_tasks/tasks/ManualAltitudeSmoothVel/FlightTaskManualAltitudeSmoothVel.cpp

@ -41,14 +41,22 @@
using namespace matrix; using namespace matrix;
bool FlightTaskManualAltitudeSmoothVel::activate(vehicle_local_position_setpoint_s last_setpoint) bool FlightTaskManualAltitudeSmoothVel::activate(const vehicle_local_position_setpoint_s &last_setpoint)
{ {
bool ret = FlightTaskManualAltitude::activate(last_setpoint); bool ret = FlightTaskManualAltitude::activate(last_setpoint);
// Check if the previous FlightTask provided setpoints // Check if the previous FlightTask provided setpoints
checkSetpoints(last_setpoint);
_smoothing.reset(last_setpoint.acceleration[2], last_setpoint.vz, last_setpoint.z); // If the position setpoint is unknown, set to the current postion
float z_sp_last = PX4_ISFINITE(last_setpoint.z) ? last_setpoint.z : _position(2);
// If the velocity setpoint is unknown, set to the current velocity
float vz_sp_last = PX4_ISFINITE(last_setpoint.vz) ? last_setpoint.vz : _velocity(2);
// No acceleration estimate available, set to zero if the setpoint is NAN
float az_sp_last = PX4_ISFINITE(last_setpoint.acceleration[2]) ? last_setpoint.acceleration[2] : 0.f;
_smoothing.reset(az_sp_last, vz_sp_last, z_sp_last);
return ret; return ret;
} }
@ -60,18 +68,6 @@ void FlightTaskManualAltitudeSmoothVel::reActivate()
_smoothing.reset(0.f, 0.f, _position(2)); _smoothing.reset(0.f, 0.f, _position(2));
} }
void FlightTaskManualAltitudeSmoothVel::checkSetpoints(vehicle_local_position_setpoint_s &setpoints)
{
// If the position setpoint is unknown, set to the current postion
if (!PX4_ISFINITE(setpoints.z)) { setpoints.z = _position(2); }
// If the velocity setpoint is unknown, set to the current velocity
if (!PX4_ISFINITE(setpoints.vz)) { setpoints.vz = _velocity(2); }
// No acceleration estimate available, set to zero if the setpoint is NAN
if (!PX4_ISFINITE(setpoints.acceleration[2])) { setpoints.acceleration[2] = 0.f; }
}
void FlightTaskManualAltitudeSmoothVel::_ekfResetHandlerPositionZ() void FlightTaskManualAltitudeSmoothVel::_ekfResetHandlerPositionZ()
{ {
_smoothing.setCurrentPosition(_position(2)); _smoothing.setCurrentPosition(_position(2));

4
src/lib/flight_tasks/tasks/ManualAltitudeSmoothVel/FlightTaskManualAltitudeSmoothVel.hpp

@ -48,7 +48,7 @@ public:
FlightTaskManualAltitudeSmoothVel() = default; FlightTaskManualAltitudeSmoothVel() = default;
virtual ~FlightTaskManualAltitudeSmoothVel() = default; virtual ~FlightTaskManualAltitudeSmoothVel() = default;
bool activate(vehicle_local_position_setpoint_s last_setpoint) override; bool activate(const vehicle_local_position_setpoint_s &last_setpoint) override;
void reActivate() override; void reActivate() override;
protected: protected:
@ -65,8 +65,6 @@ protected:
) )
private: private:
void checkSetpoints(vehicle_local_position_setpoint_s &setpoints);
void _updateTrajConstraints(); void _updateTrajConstraints();
void _setOutputState(); void _setOutputState();

2
src/lib/flight_tasks/tasks/ManualPosition/FlightTaskManualPosition.cpp

@ -56,7 +56,7 @@ bool FlightTaskManualPosition::updateInitialize()
&& PX4_ISFINITE(_velocity(1)); && PX4_ISFINITE(_velocity(1));
} }
bool FlightTaskManualPosition::activate(vehicle_local_position_setpoint_s last_setpoint) bool FlightTaskManualPosition::activate(const vehicle_local_position_setpoint_s &last_setpoint)
{ {
// all requirements from altitude-mode still have to hold // all requirements from altitude-mode still have to hold
bool ret = FlightTaskManualAltitude::activate(last_setpoint); bool ret = FlightTaskManualAltitude::activate(last_setpoint);

2
src/lib/flight_tasks/tasks/ManualPosition/FlightTaskManualPosition.hpp

@ -49,7 +49,7 @@ public:
FlightTaskManualPosition(); FlightTaskManualPosition();
virtual ~FlightTaskManualPosition() = default; virtual ~FlightTaskManualPosition() = default;
bool activate(vehicle_local_position_setpoint_s last_setpoint) override; bool activate(const vehicle_local_position_setpoint_s &last_setpoint) override;
bool updateInitialize() override; bool updateInitialize() override;
/** /**

46
src/lib/flight_tasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.cpp

@ -38,18 +38,28 @@
using namespace matrix; using namespace matrix;
bool FlightTaskManualPositionSmoothVel::activate(vehicle_local_position_setpoint_s last_setpoint) bool FlightTaskManualPositionSmoothVel::activate(const vehicle_local_position_setpoint_s &last_setpoint)
{ {
bool ret = FlightTaskManualPosition::activate(last_setpoint); bool ret = FlightTaskManualPosition::activate(last_setpoint);
// Check if the previous FlightTask provided setpoints // Check if the previous FlightTask provided setpoints
checkSetpoints(last_setpoint); Vector3f accel_prev{last_setpoint.acceleration};
const Vector2f accel_prev(last_setpoint.acceleration[0], last_setpoint.acceleration[1]); Vector3f vel_prev{last_setpoint.vx, last_setpoint.vy, last_setpoint.vz};
const Vector2f vel_prev(last_setpoint.vx, last_setpoint.vy); Vector3f pos_prev{last_setpoint.x, last_setpoint.y, last_setpoint.z};
const Vector2f pos_prev(last_setpoint.x, last_setpoint.y);
_smoothing_xy.reset(accel_prev, vel_prev, pos_prev); for (int i = 0; i < 3; i++) {
_smoothing_z.reset(last_setpoint.acceleration[2], last_setpoint.vz, last_setpoint.z); // If the position setpoint is unknown, set to the current postion
if (!PX4_ISFINITE(pos_prev(i))) { pos_prev(i) = _position(i); }
// If the velocity setpoint is unknown, set to the current velocity
if (!PX4_ISFINITE(vel_prev(i))) { vel_prev(i) = _velocity(i); }
// No acceleration estimate available, set to zero if the setpoint is NAN
if (!PX4_ISFINITE(accel_prev(i))) { accel_prev(i) = 0.f; }
}
_smoothing_xy.reset(Vector2f{accel_prev}, Vector2f{vel_prev}, Vector2f{pos_prev});
_smoothing_z.reset(accel_prev(2), vel_prev(2), pos_prev(2));
return ret; return ret;
} }
@ -62,28 +72,6 @@ void FlightTaskManualPositionSmoothVel::reActivate()
_smoothing_z.reset(0.f, 0.f, _position(2)); _smoothing_z.reset(0.f, 0.f, _position(2));
} }
void FlightTaskManualPositionSmoothVel::checkSetpoints(vehicle_local_position_setpoint_s &setpoints)
{
// If the position setpoint is unknown, set to the current postion
if (!PX4_ISFINITE(setpoints.x)) { setpoints.x = _position(0); }
if (!PX4_ISFINITE(setpoints.y)) { setpoints.y = _position(1); }
if (!PX4_ISFINITE(setpoints.z)) { setpoints.z = _position(2); }
// If the velocity setpoint is unknown, set to the current velocity
if (!PX4_ISFINITE(setpoints.vx)) { setpoints.vx = _velocity(0); }
if (!PX4_ISFINITE(setpoints.vy)) { setpoints.vy = _velocity(1); }
if (!PX4_ISFINITE(setpoints.vz)) { setpoints.vz = _velocity(2); }
// No acceleration estimate available, set to zero if the setpoint is NAN
for (int i = 0; i < 3; i++) {
if (!PX4_ISFINITE(setpoints.acceleration[i])) { setpoints.acceleration[i] = 0.f; }
}
}
void FlightTaskManualPositionSmoothVel::_ekfResetHandlerPositionXY() void FlightTaskManualPositionSmoothVel::_ekfResetHandlerPositionXY()
{ {
_smoothing_xy.setCurrentPosition(_position.xy()); _smoothing_xy.setCurrentPosition(_position.xy());

4
src/lib/flight_tasks/tasks/ManualPositionSmoothVel/FlightTaskManualPositionSmoothVel.hpp

@ -53,7 +53,7 @@ public:
virtual ~FlightTaskManualPositionSmoothVel() = default; virtual ~FlightTaskManualPositionSmoothVel() = default;
bool activate(vehicle_local_position_setpoint_s last_setpoint) override; bool activate(const vehicle_local_position_setpoint_s &last_setpoint) override;
void reActivate() override; void reActivate() override;
protected: protected:
@ -73,8 +73,6 @@ protected:
) )
private: private:
void checkSetpoints(vehicle_local_position_setpoint_s &setpoints);
void _updateTrajConstraints(); void _updateTrajConstraints();
void _updateTrajConstraintsXY(); void _updateTrajConstraintsXY();
void _updateTrajConstraintsZ(); void _updateTrajConstraintsZ();

2
src/lib/flight_tasks/tasks/Offboard/FlightTaskOffboard.cpp

@ -57,7 +57,7 @@ bool FlightTaskOffboard::updateInitialize()
&& PX4_ISFINITE(_velocity(1)); && PX4_ISFINITE(_velocity(1));
} }
bool FlightTaskOffboard::activate(vehicle_local_position_setpoint_s last_setpoint) bool FlightTaskOffboard::activate(const vehicle_local_position_setpoint_s &last_setpoint)
{ {
bool ret = FlightTask::activate(last_setpoint); bool ret = FlightTask::activate(last_setpoint);
_position_setpoint = _position; _position_setpoint = _position;

2
src/lib/flight_tasks/tasks/Offboard/FlightTaskOffboard.hpp

@ -48,7 +48,7 @@ public:
virtual ~FlightTaskOffboard() = default; virtual ~FlightTaskOffboard() = default;
bool update() override; bool update() override;
bool activate(vehicle_local_position_setpoint_s last_setpoint) override; bool activate(const vehicle_local_position_setpoint_s &last_setpoint) override;
bool updateInitialize() override; bool updateInitialize() override;
protected: protected:

2
src/lib/flight_tasks/tasks/Orbit/FlightTaskOrbit.cpp

@ -154,7 +154,7 @@ bool FlightTaskOrbit::checkAcceleration(float r, float v, float a)
return v * v < a * r; return v * v < a * r;
} }
bool FlightTaskOrbit::activate(vehicle_local_position_setpoint_s last_setpoint) bool FlightTaskOrbit::activate(const vehicle_local_position_setpoint_s &last_setpoint)
{ {
bool ret = FlightTaskManualAltitudeSmooth::activate(last_setpoint); bool ret = FlightTaskManualAltitudeSmooth::activate(last_setpoint);
_r = _radius_min; _r = _radius_min;

2
src/lib/flight_tasks/tasks/Orbit/FlightTaskOrbit.hpp

@ -53,7 +53,7 @@ public:
virtual ~FlightTaskOrbit() = default; virtual ~FlightTaskOrbit() = default;
bool applyCommandParameters(const vehicle_command_s &command) override; bool applyCommandParameters(const vehicle_command_s &command) override;
bool activate(vehicle_local_position_setpoint_s last_setpoint) override; bool activate(const vehicle_local_position_setpoint_s &last_setpoint) override;
bool update() override; bool update() override;
/** /**

15
src/lib/flight_tasks/tasks/Transition/FlightTaskTransition.cpp

@ -42,22 +42,13 @@ bool FlightTaskTransition::updateInitialize()
return FlightTask::updateInitialize(); return FlightTask::updateInitialize();
} }
bool FlightTaskTransition::activate(vehicle_local_position_setpoint_s last_setpoint) bool FlightTaskTransition::activate(const vehicle_local_position_setpoint_s &last_setpoint)
{ {
checkSetpoints(last_setpoint); _transition_altitude = PX4_ISFINITE(last_setpoint.z) ? last_setpoint.z : _position(2);
_transition_altitude = last_setpoint.z; _transition_yaw = PX4_ISFINITE(last_setpoint.yaw) ? last_setpoint.yaw : _yaw;
_transition_yaw = last_setpoint.yaw;
return FlightTask::activate(last_setpoint); return FlightTask::activate(last_setpoint);
} }
void FlightTaskTransition::checkSetpoints(vehicle_local_position_setpoint_s &setpoints)
{
// If the setpoint is unknown, set to the current estimate
if (!PX4_ISFINITE(setpoints.z)) { setpoints.z = _position(2); }
if (!PX4_ISFINITE(setpoints.yaw)) { setpoints.yaw = _yaw; }
}
bool FlightTaskTransition::update() bool FlightTaskTransition::update()
{ {
bool ret = FlightTask::update(); bool ret = FlightTask::update();

4
src/lib/flight_tasks/tasks/Transition/FlightTaskTransition.hpp

@ -47,13 +47,11 @@ public:
FlightTaskTransition() = default; FlightTaskTransition() = default;
virtual ~FlightTaskTransition() = default; virtual ~FlightTaskTransition() = default;
bool activate(vehicle_local_position_setpoint_s last_setpoint) override; bool activate(const vehicle_local_position_setpoint_s &last_setpoint) override;
bool updateInitialize() override; bool updateInitialize() override;
bool update() override; bool update() override;
private: private:
void checkSetpoints(vehicle_local_position_setpoint_s &setpoints);
float _transition_altitude = 0.0f; float _transition_altitude = 0.0f;
float _transition_yaw = 0.0f; float _transition_yaw = 0.0f;
}; };

Loading…
Cancel
Save