mirror of
https://gitee.com/xiaohuolufeihua/bizhang_-obav.git
synced 2026-05-22 01:12:31 +00:00
VTOL QuadChute Maximum roll and pitch angles (#6665)
This commit is contained in:
committed by
Daniel Agar
parent
e892a51afb
commit
9ef87f1311
@@ -132,6 +132,8 @@ VtolAttitudeControl::VtolAttitudeControl() :
|
|||||||
_params_handles.vtol_type = param_find("VT_TYPE");
|
_params_handles.vtol_type = param_find("VT_TYPE");
|
||||||
_params_handles.elevons_mc_lock = param_find("VT_ELEV_MC_LOCK");
|
_params_handles.elevons_mc_lock = param_find("VT_ELEV_MC_LOCK");
|
||||||
_params_handles.fw_min_alt = param_find("VT_FW_MIN_ALT");
|
_params_handles.fw_min_alt = param_find("VT_FW_MIN_ALT");
|
||||||
|
_params_handles.fw_qc_max_pitch = param_find("VT_FW_QC_P");
|
||||||
|
_params_handles.fw_qc_max_roll = param_find("VT_FW_QC_R");
|
||||||
_params_handles.front_trans_time_openloop = param_find("VT_F_TR_OL_TM");
|
_params_handles.front_trans_time_openloop = param_find("VT_F_TR_OL_TM");
|
||||||
_params_handles.front_trans_time_min = param_find("VT_TRANS_MIN_TM");
|
_params_handles.front_trans_time_min = param_find("VT_TRANS_MIN_TM");
|
||||||
|
|
||||||
@@ -562,6 +564,14 @@ VtolAttitudeControl::parameters_update()
|
|||||||
param_get(_params_handles.fw_min_alt, &v);
|
param_get(_params_handles.fw_min_alt, &v);
|
||||||
_params.fw_min_alt = v;
|
_params.fw_min_alt = v;
|
||||||
|
|
||||||
|
/* maximum pitch angle (QuadChute) */
|
||||||
|
param_get(_params_handles.fw_qc_max_pitch, &l);
|
||||||
|
_params.fw_qc_max_pitch = l;
|
||||||
|
|
||||||
|
/* maximum roll angle (QuadChute) */
|
||||||
|
param_get(_params_handles.fw_qc_max_roll, &l);
|
||||||
|
_params.fw_qc_max_roll = l;
|
||||||
|
|
||||||
param_get(_params_handles.front_trans_time_openloop, &_params.front_trans_time_openloop);
|
param_get(_params_handles.front_trans_time_openloop, &_params.front_trans_time_openloop);
|
||||||
|
|
||||||
param_get(_params_handles.front_trans_time_min, &_params.front_trans_time_min);
|
param_get(_params_handles.front_trans_time_min, &_params.front_trans_time_min);
|
||||||
|
|||||||
@@ -210,6 +210,8 @@ private:
|
|||||||
param_t vtol_type;
|
param_t vtol_type;
|
||||||
param_t elevons_mc_lock;
|
param_t elevons_mc_lock;
|
||||||
param_t fw_min_alt;
|
param_t fw_min_alt;
|
||||||
|
param_t fw_qc_max_pitch;
|
||||||
|
param_t fw_qc_max_roll;
|
||||||
param_t front_trans_time_openloop;
|
param_t front_trans_time_openloop;
|
||||||
param_t front_trans_time_min;
|
param_t front_trans_time_min;
|
||||||
} _params_handles;
|
} _params_handles;
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ PARAM_DEFINE_FLOAT(VT_TRANS_TIMEOUT, 15.0f);
|
|||||||
PARAM_DEFINE_FLOAT(VT_TRANS_MIN_TM, 2.0f);
|
PARAM_DEFINE_FLOAT(VT_TRANS_MIN_TM, 2.0f);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* QuadChute
|
* QuadChute Altitude
|
||||||
*
|
*
|
||||||
* Minimum altitude for fixed wing flight, when in fixed wing the altitude drops below this altitude
|
* Minimum altitude for fixed wing flight, when in fixed wing the altitude drops below this altitude
|
||||||
* the vehicle will transition back to MC mode and enter failsafe RTL
|
* the vehicle will transition back to MC mode and enter failsafe RTL
|
||||||
@@ -307,6 +307,29 @@ PARAM_DEFINE_FLOAT(VT_TRANS_MIN_TM, 2.0f);
|
|||||||
*/
|
*/
|
||||||
PARAM_DEFINE_FLOAT(VT_FW_MIN_ALT, 0.0f);
|
PARAM_DEFINE_FLOAT(VT_FW_MIN_ALT, 0.0f);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* QuadChute Max Pith
|
||||||
|
*
|
||||||
|
* Maximum pitch angle before QuadChute engages
|
||||||
|
* Above this the vehicle will transition back to MC mode and enter failsafe RTL
|
||||||
|
* @min 0
|
||||||
|
* @max 180
|
||||||
|
* @group VTOL Attitude Control
|
||||||
|
*/
|
||||||
|
PARAM_DEFINE_INT32(VT_FW_QC_P, 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* QuadChute Max Roll
|
||||||
|
*
|
||||||
|
* Maximum roll angle before QuadChute engages
|
||||||
|
* Above this the vehicle will transition back to MC mode and enter failsafe RTL
|
||||||
|
* @min 0
|
||||||
|
* @max 180
|
||||||
|
* @group VTOL Attitude Control
|
||||||
|
*/
|
||||||
|
PARAM_DEFINE_INT32(VT_FW_QC_R, 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Airspeed less front transition time (open loop)
|
* Airspeed less front transition time (open loop)
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -194,12 +194,33 @@ bool VtolType::can_transition_on_ground()
|
|||||||
|
|
||||||
void VtolType::check_quadchute_condition()
|
void VtolType::check_quadchute_condition()
|
||||||
{
|
{
|
||||||
// fixed-wing minimum altitude, armed, !landed
|
|
||||||
if (_params->fw_min_alt > FLT_EPSILON
|
|
||||||
&& _armed->armed && !_land_detected->landed) {
|
|
||||||
|
|
||||||
if (-(_local_pos->z) < _params->fw_min_alt) {
|
if (_armed->armed && !_land_detected->landed) {
|
||||||
_attc->abort_front_transition("Minimum altitude");
|
matrix::Eulerf euler = matrix::Quatf(_v_att->q);
|
||||||
|
|
||||||
|
// fixed-wing minimum altitude
|
||||||
|
if (_params->fw_min_alt > FLT_EPSILON) {
|
||||||
|
|
||||||
|
if (-(_local_pos->z) < _params->fw_min_alt) {
|
||||||
|
_attc->abort_front_transition("Minimum altitude breached");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fixed-wing maximum pitch angle
|
||||||
|
if (_params->fw_qc_max_pitch > 0) {
|
||||||
|
|
||||||
|
if (fabs(euler.theta()) > fabs(math::radians(_params->fw_qc_max_pitch))) {
|
||||||
|
_attc->abort_front_transition("Maximum pitch angle exceeded");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fixed-wing maximum roll angle
|
||||||
|
if (_params->fw_qc_max_roll > 0) {
|
||||||
|
|
||||||
|
if (fabs(euler.phi()) > fabs(math::radians(_params->fw_qc_max_roll))) {
|
||||||
|
_attc->abort_front_transition("Maximum roll angle exceeded");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,6 +60,8 @@ struct Params {
|
|||||||
int vtol_type;
|
int vtol_type;
|
||||||
int elevons_mc_lock; // lock elevons in multicopter mode
|
int elevons_mc_lock; // lock elevons in multicopter mode
|
||||||
float fw_min_alt; // minimum relative altitude for FW mode (QuadChute)
|
float fw_min_alt; // minimum relative altitude for FW mode (QuadChute)
|
||||||
|
float fw_qc_max_pitch; // maximum pitch angle FW mode (QuadChute)
|
||||||
|
float fw_qc_max_roll; // maximum roll angle FW mode (QuadChute)
|
||||||
float front_trans_time_openloop;
|
float front_trans_time_openloop;
|
||||||
float front_trans_time_min;
|
float front_trans_time_min;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user