mirror of https://github.com/ArduPilot/ardupilot
73 lines
1.8 KiB
C
73 lines
1.8 KiB
C
|
#pragma once
|
||
|
|
||
|
// VTOL assistance in a forward flight mode
|
||
|
|
||
|
class QuadPlane;
|
||
|
class VTOL_Assist {
|
||
|
public:
|
||
|
VTOL_Assist(QuadPlane& _quadplane):quadplane(_quadplane) {};
|
||
|
|
||
|
// check for assistance needed
|
||
|
bool should_assist(float aspeed, bool have_airspeed);
|
||
|
|
||
|
// Assistance not needed, reset any state
|
||
|
void reset();
|
||
|
|
||
|
// speed below which quad assistance is given
|
||
|
AP_Float speed;
|
||
|
|
||
|
// angular error at which quad assistance is given
|
||
|
AP_Int8 angle;
|
||
|
|
||
|
// altitude to trigger assistance
|
||
|
AP_Int16 alt;
|
||
|
|
||
|
// Time hysteresis for triggering of assistance
|
||
|
AP_Float delay;
|
||
|
|
||
|
// State from pilot
|
||
|
enum class STATE {
|
||
|
ASSIST_DISABLED,
|
||
|
ASSIST_ENABLED,
|
||
|
FORCE_ENABLED,
|
||
|
};
|
||
|
void set_state(STATE _state) { state = _state; }
|
||
|
|
||
|
// Logging getters for assist types
|
||
|
bool in_force_assist() const { return force_assist; }
|
||
|
bool in_speed_assist() const { return speed_assist; }
|
||
|
bool in_alt_assist() const { return alt_error.is_active(); }
|
||
|
bool in_angle_assist() const { return angle_error.is_active(); }
|
||
|
|
||
|
private:
|
||
|
|
||
|
// Default to enabled
|
||
|
STATE state = STATE::ASSIST_ENABLED;
|
||
|
|
||
|
class Assist_Hysteresis {
|
||
|
public:
|
||
|
// Reset state
|
||
|
void reset();
|
||
|
|
||
|
// Update state, return true when first triggered
|
||
|
bool update(const bool trigger, const uint32_t &now_ms, const uint32_t &trigger_delay_ms, const uint32_t &clear_delay_ms);
|
||
|
|
||
|
// Return true if the output is active
|
||
|
bool is_active() const { return active; }
|
||
|
|
||
|
private:
|
||
|
uint32_t start_ms;
|
||
|
uint32_t last_ms;
|
||
|
bool active;
|
||
|
};
|
||
|
Assist_Hysteresis angle_error;
|
||
|
Assist_Hysteresis alt_error;
|
||
|
|
||
|
// Force and speed assist have no hysteresis
|
||
|
bool force_assist;
|
||
|
bool speed_assist;
|
||
|
|
||
|
// Reference to access quadplane
|
||
|
QuadPlane& quadplane;
|
||
|
};
|