mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-23 14:03:33 +08:00
FlightTask: Weather vane cleanup
Remove the entire external yaw handler, dynamic memory allocation, pointer passing logic. Directly instanciate the weather vane instance in the flight tasks that support it.
This commit is contained in:
@@ -39,6 +39,7 @@ px4_add_library(FlightTaskManualPosition
|
||||
target_link_libraries(FlightTaskManualPosition
|
||||
PRIVATE
|
||||
CollisionPrevention
|
||||
WeatherVane
|
||||
PUBLIC
|
||||
FlightTaskManualAltitude
|
||||
)
|
||||
|
||||
@@ -41,11 +41,6 @@
|
||||
|
||||
using namespace matrix;
|
||||
|
||||
FlightTaskManualPosition::FlightTaskManualPosition() : _collision_prevention(this)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool FlightTaskManualPosition::updateInitialize()
|
||||
{
|
||||
bool ret = FlightTaskManualAltitude::updateInitialize();
|
||||
@@ -141,14 +136,15 @@ void FlightTaskManualPosition::_updateSetpoints()
|
||||
|
||||
_updateXYlock(); // check for position lock
|
||||
|
||||
// check if an external yaw handler is active and if yes, let it update the yaw setpoints
|
||||
if (_weathervane_yaw_handler != nullptr && _weathervane_yaw_handler->is_active()) {
|
||||
_weathervane.update();
|
||||
|
||||
if (_weathervane.isActive()) {
|
||||
_yaw_setpoint = NAN;
|
||||
|
||||
// only enable the weathervane to change the yawrate when position lock is active (and thus the pos. sp. are NAN)
|
||||
if (PX4_ISFINITE(_position_setpoint(0)) && PX4_ISFINITE(_position_setpoint(1))) {
|
||||
// vehicle is steady
|
||||
_yawspeed_setpoint += _weathervane_yaw_handler->get_weathervane_yawrate();
|
||||
_yawspeed_setpoint += _weathervane.getWeathervaneYawrate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,23 +41,17 @@
|
||||
#pragma once
|
||||
|
||||
#include <lib/collision_prevention/CollisionPrevention.hpp>
|
||||
#include <lib/weather_vane/WeatherVane.hpp>
|
||||
#include "FlightTaskManualAltitude.hpp"
|
||||
|
||||
class FlightTaskManualPosition : public FlightTaskManualAltitude
|
||||
{
|
||||
public:
|
||||
FlightTaskManualPosition();
|
||||
|
||||
FlightTaskManualPosition() = default;
|
||||
virtual ~FlightTaskManualPosition() = default;
|
||||
bool activate(const trajectory_setpoint_s &last_setpoint) override;
|
||||
bool updateInitialize() override;
|
||||
|
||||
/**
|
||||
* Sets an external yaw handler which can be used to implement a different yaw control strategy.
|
||||
*/
|
||||
void setYawHandler(WeatherVane *yaw_handler) override { _weathervane_yaw_handler = yaw_handler; }
|
||||
|
||||
|
||||
protected:
|
||||
void _updateXYlock(); /**< applies position lock based on stick and velocity */
|
||||
void _updateSetpoints() override;
|
||||
@@ -71,8 +65,6 @@ protected:
|
||||
private:
|
||||
uint8_t _reset_counter{0}; /**< counter for estimator resets in xy-direction */
|
||||
|
||||
WeatherVane *_weathervane_yaw_handler =
|
||||
nullptr; /**< external weathervane library, used to implement a yaw control law that turns the vehicle nose into the wind */
|
||||
|
||||
CollisionPrevention _collision_prevention; /**< collision avoidance setpoint amendment */
|
||||
WeatherVane _weathervane{this}; /**< weathervane library, used to implement a yaw control law that turns the vehicle nose into the wind */
|
||||
CollisionPrevention _collision_prevention{this}; /**< collision avoidance setpoint amendment */
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user