mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-26 01:35:35 +03:00
change loiter control logic
This commit is contained in:
parent
2a62aff039
commit
83de3f941d
3 changed files with 35 additions and 27 deletions
|
@ -424,7 +424,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_POSHOLD_3D_INITIALIZE,
|
.persistentId = NAV_PERSISTENT_ID_POSHOLD_3D_INITIALIZE,
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_POSHOLD_3D_INITIALIZE,
|
.onEntry = navOnEnteringState_NAV_STATE_POSHOLD_3D_INITIALIZE,
|
||||||
.timeoutMs = 0,
|
.timeoutMs = 0,
|
||||||
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_REQUIRE_ANGLE | NAV_REQUIRE_THRTILT,
|
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_HOLD | NAV_REQUIRE_ANGLE | NAV_REQUIRE_THRTILT,
|
||||||
.mapToFlightModes = NAV_ALTHOLD_MODE | NAV_POSHOLD_MODE,
|
.mapToFlightModes = NAV_ALTHOLD_MODE | NAV_POSHOLD_MODE,
|
||||||
.mwState = MW_NAV_STATE_HOLD_INFINIT,
|
.mwState = MW_NAV_STATE_HOLD_INFINIT,
|
||||||
.mwError = MW_NAV_ERROR_NONE,
|
.mwError = MW_NAV_ERROR_NONE,
|
||||||
|
@ -439,7 +439,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_POSHOLD_3D_IN_PROGRESS,
|
.persistentId = NAV_PERSISTENT_ID_POSHOLD_3D_IN_PROGRESS,
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_POSHOLD_3D_IN_PROGRESS,
|
.onEntry = navOnEnteringState_NAV_STATE_POSHOLD_3D_IN_PROGRESS,
|
||||||
.timeoutMs = 10,
|
.timeoutMs = 10,
|
||||||
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_THRTILT | NAV_RC_ALT | NAV_RC_POS | NAV_RC_YAW,
|
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_HOLD | NAV_REQUIRE_ANGLE | NAV_REQUIRE_THRTILT | NAV_RC_ALT | NAV_RC_POS | NAV_RC_YAW,
|
||||||
.mapToFlightModes = NAV_ALTHOLD_MODE | NAV_POSHOLD_MODE,
|
.mapToFlightModes = NAV_ALTHOLD_MODE | NAV_POSHOLD_MODE,
|
||||||
.mwState = MW_NAV_STATE_HOLD_INFINIT,
|
.mwState = MW_NAV_STATE_HOLD_INFINIT,
|
||||||
.mwError = MW_NAV_ERROR_NONE,
|
.mwError = MW_NAV_ERROR_NONE,
|
||||||
|
@ -595,7 +595,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_RTH_CLIMB_TO_SAFE_ALT,
|
.persistentId = NAV_PERSISTENT_ID_RTH_CLIMB_TO_SAFE_ALT,
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_RTH_CLIMB_TO_SAFE_ALT,
|
.onEntry = navOnEnteringState_NAV_STATE_RTH_CLIMB_TO_SAFE_ALT,
|
||||||
.timeoutMs = 10,
|
.timeoutMs = 10,
|
||||||
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH | NAV_RC_POS | NAV_RC_YAW, // allow pos adjustment while climbind to safe alt
|
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_HOLD | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH | NAV_RC_POS | NAV_RC_YAW, // allow pos adjustment while climbing to safe alt
|
||||||
.mapToFlightModes = NAV_RTH_MODE | NAV_ALTHOLD_MODE,
|
.mapToFlightModes = NAV_RTH_MODE | NAV_ALTHOLD_MODE,
|
||||||
.mwState = MW_NAV_STATE_RTH_CLIMB,
|
.mwState = MW_NAV_STATE_RTH_CLIMB,
|
||||||
.mwError = MW_NAV_ERROR_WAIT_FOR_RTH_ALT,
|
.mwError = MW_NAV_ERROR_WAIT_FOR_RTH_ALT,
|
||||||
|
@ -656,7 +656,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_RTH_LOITER_PRIOR_TO_LANDING,
|
.persistentId = NAV_PERSISTENT_ID_RTH_LOITER_PRIOR_TO_LANDING,
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_RTH_LOITER_PRIOR_TO_LANDING,
|
.onEntry = navOnEnteringState_NAV_STATE_RTH_LOITER_PRIOR_TO_LANDING,
|
||||||
.timeoutMs = 500,
|
.timeoutMs = 500,
|
||||||
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH | NAV_RC_POS | NAV_RC_YAW,
|
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_HOLD | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH | NAV_RC_POS | NAV_RC_YAW,
|
||||||
.mapToFlightModes = NAV_RTH_MODE | NAV_ALTHOLD_MODE,
|
.mapToFlightModes = NAV_RTH_MODE | NAV_ALTHOLD_MODE,
|
||||||
.mwState = MW_NAV_STATE_LAND_SETTLE,
|
.mwState = MW_NAV_STATE_LAND_SETTLE,
|
||||||
.mwError = MW_NAV_ERROR_NONE,
|
.mwError = MW_NAV_ERROR_NONE,
|
||||||
|
@ -677,7 +677,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_RTH_LOITER_ABOVE_HOME,
|
.persistentId = NAV_PERSISTENT_ID_RTH_LOITER_ABOVE_HOME,
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_RTH_LOITER_ABOVE_HOME,
|
.onEntry = navOnEnteringState_NAV_STATE_RTH_LOITER_ABOVE_HOME,
|
||||||
.timeoutMs = 10,
|
.timeoutMs = 10,
|
||||||
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH | NAV_RC_POS | NAV_RC_YAW | NAV_RC_ALT,
|
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_HOLD | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH | NAV_RC_POS | NAV_RC_YAW | NAV_RC_ALT,
|
||||||
.mapToFlightModes = NAV_RTH_MODE | NAV_ALTHOLD_MODE,
|
.mapToFlightModes = NAV_RTH_MODE | NAV_ALTHOLD_MODE,
|
||||||
.mwState = MW_NAV_STATE_HOVER_ABOVE_HOME,
|
.mwState = MW_NAV_STATE_HOVER_ABOVE_HOME,
|
||||||
.mwError = MW_NAV_ERROR_NONE,
|
.mwError = MW_NAV_ERROR_NONE,
|
||||||
|
@ -696,7 +696,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_RTH_LANDING,
|
.persistentId = NAV_PERSISTENT_ID_RTH_LANDING,
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_RTH_LANDING,
|
.onEntry = navOnEnteringState_NAV_STATE_RTH_LANDING,
|
||||||
.timeoutMs = 10,
|
.timeoutMs = 10,
|
||||||
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_LAND | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH | NAV_RC_POS | NAV_RC_YAW,
|
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_HOLD | NAV_CTL_LAND | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH | NAV_RC_POS | NAV_RC_YAW,
|
||||||
.mapToFlightModes = NAV_RTH_MODE | NAV_ALTHOLD_MODE,
|
.mapToFlightModes = NAV_RTH_MODE | NAV_ALTHOLD_MODE,
|
||||||
.mwState = MW_NAV_STATE_LAND_IN_PROGRESS,
|
.mwState = MW_NAV_STATE_LAND_IN_PROGRESS,
|
||||||
.mwError = MW_NAV_ERROR_LANDING,
|
.mwError = MW_NAV_ERROR_LANDING,
|
||||||
|
@ -717,7 +717,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_RTH_FINISHING,
|
.persistentId = NAV_PERSISTENT_ID_RTH_FINISHING,
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_RTH_FINISHING,
|
.onEntry = navOnEnteringState_NAV_STATE_RTH_FINISHING,
|
||||||
.timeoutMs = 0,
|
.timeoutMs = 0,
|
||||||
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_LAND | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH,
|
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_HOLD | NAV_CTL_LAND | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH,
|
||||||
.mapToFlightModes = NAV_RTH_MODE | NAV_ALTHOLD_MODE,
|
.mapToFlightModes = NAV_RTH_MODE | NAV_ALTHOLD_MODE,
|
||||||
.mwState = MW_NAV_STATE_LAND_IN_PROGRESS,
|
.mwState = MW_NAV_STATE_LAND_IN_PROGRESS,
|
||||||
.mwError = MW_NAV_ERROR_LANDING,
|
.mwError = MW_NAV_ERROR_LANDING,
|
||||||
|
@ -828,7 +828,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_WAYPOINT_HOLD_TIME, // There is no state for timed hold?
|
.persistentId = NAV_PERSISTENT_ID_WAYPOINT_HOLD_TIME, // There is no state for timed hold?
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_WAYPOINT_HOLD_TIME,
|
.onEntry = navOnEnteringState_NAV_STATE_WAYPOINT_HOLD_TIME,
|
||||||
.timeoutMs = 10,
|
.timeoutMs = 10,
|
||||||
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_WP,
|
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_HOLD | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_WP,
|
||||||
.mapToFlightModes = NAV_WP_MODE | NAV_ALTHOLD_MODE,
|
.mapToFlightModes = NAV_WP_MODE | NAV_ALTHOLD_MODE,
|
||||||
.mwState = MW_NAV_STATE_HOLD_TIMED,
|
.mwState = MW_NAV_STATE_HOLD_TIMED,
|
||||||
.mwError = MW_NAV_ERROR_NONE,
|
.mwError = MW_NAV_ERROR_NONE,
|
||||||
|
@ -849,7 +849,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_WAYPOINT_RTH_LAND,
|
.persistentId = NAV_PERSISTENT_ID_WAYPOINT_RTH_LAND,
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_WAYPOINT_RTH_LAND,
|
.onEntry = navOnEnteringState_NAV_STATE_WAYPOINT_RTH_LAND,
|
||||||
.timeoutMs = 10,
|
.timeoutMs = 10,
|
||||||
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_LAND | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_WP,
|
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_HOLD | NAV_CTL_LAND | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_WP,
|
||||||
.mapToFlightModes = NAV_WP_MODE | NAV_ALTHOLD_MODE,
|
.mapToFlightModes = NAV_WP_MODE | NAV_ALTHOLD_MODE,
|
||||||
.mwState = MW_NAV_STATE_LAND_IN_PROGRESS,
|
.mwState = MW_NAV_STATE_LAND_IN_PROGRESS,
|
||||||
.mwError = MW_NAV_ERROR_LANDING,
|
.mwError = MW_NAV_ERROR_LANDING,
|
||||||
|
@ -887,7 +887,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_WAYPOINT_FINISHED,
|
.persistentId = NAV_PERSISTENT_ID_WAYPOINT_FINISHED,
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_WAYPOINT_FINISHED,
|
.onEntry = navOnEnteringState_NAV_STATE_WAYPOINT_FINISHED,
|
||||||
.timeoutMs = 10,
|
.timeoutMs = 10,
|
||||||
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_WP | NAV_AUTO_WP_DONE,
|
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_HOLD | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_WP | NAV_AUTO_WP_DONE,
|
||||||
.mapToFlightModes = NAV_WP_MODE | NAV_ALTHOLD_MODE,
|
.mapToFlightModes = NAV_WP_MODE | NAV_ALTHOLD_MODE,
|
||||||
.mwState = MW_NAV_STATE_WP_ENROUTE,
|
.mwState = MW_NAV_STATE_WP_ENROUTE,
|
||||||
.mwError = MW_NAV_ERROR_FINISH,
|
.mwError = MW_NAV_ERROR_FINISH,
|
||||||
|
@ -926,7 +926,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_EMERGENCY_LANDING_IN_PROGRESS,
|
.persistentId = NAV_PERSISTENT_ID_EMERGENCY_LANDING_IN_PROGRESS,
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_EMERGENCY_LANDING_IN_PROGRESS,
|
.onEntry = navOnEnteringState_NAV_STATE_EMERGENCY_LANDING_IN_PROGRESS,
|
||||||
.timeoutMs = 10,
|
.timeoutMs = 10,
|
||||||
.stateFlags = NAV_CTL_EMERG | NAV_REQUIRE_ANGLE,
|
.stateFlags = NAV_CTL_HOLD | NAV_CTL_EMERG | NAV_REQUIRE_ANGLE,
|
||||||
.mapToFlightModes = 0,
|
.mapToFlightModes = 0,
|
||||||
.mwState = MW_NAV_STATE_EMERGENCY_LANDING,
|
.mwState = MW_NAV_STATE_EMERGENCY_LANDING,
|
||||||
.mwError = MW_NAV_ERROR_LANDING,
|
.mwError = MW_NAV_ERROR_LANDING,
|
||||||
|
@ -944,7 +944,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_EMERGENCY_LANDING_FINISHED,
|
.persistentId = NAV_PERSISTENT_ID_EMERGENCY_LANDING_FINISHED,
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_EMERGENCY_LANDING_FINISHED,
|
.onEntry = navOnEnteringState_NAV_STATE_EMERGENCY_LANDING_FINISHED,
|
||||||
.timeoutMs = 10,
|
.timeoutMs = 10,
|
||||||
.stateFlags = NAV_CTL_EMERG | NAV_REQUIRE_ANGLE,
|
.stateFlags = NAV_CTL_HOLD | NAV_CTL_EMERG | NAV_REQUIRE_ANGLE,
|
||||||
.mapToFlightModes = 0,
|
.mapToFlightModes = 0,
|
||||||
.mwState = MW_NAV_STATE_LANDED,
|
.mwState = MW_NAV_STATE_LANDED,
|
||||||
.mwError = MW_NAV_ERROR_LANDING,
|
.mwError = MW_NAV_ERROR_LANDING,
|
||||||
|
@ -1053,7 +1053,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_FW_LANDING_CLIMB_TO_LOITER,
|
.persistentId = NAV_PERSISTENT_ID_FW_LANDING_CLIMB_TO_LOITER,
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_FW_LANDING_CLIMB_TO_LOITER,
|
.onEntry = navOnEnteringState_NAV_STATE_FW_LANDING_CLIMB_TO_LOITER,
|
||||||
.timeoutMs = 10,
|
.timeoutMs = 10,
|
||||||
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_AUTO_RTH,
|
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_HOLD | NAV_REQUIRE_ANGLE | NAV_AUTO_RTH,
|
||||||
.mapToFlightModes = NAV_FW_AUTOLAND,
|
.mapToFlightModes = NAV_FW_AUTOLAND,
|
||||||
.mwState = MW_NAV_STATE_LAND_IN_PROGRESS,
|
.mwState = MW_NAV_STATE_LAND_IN_PROGRESS,
|
||||||
.mwError = MW_NAV_ERROR_NONE,
|
.mwError = MW_NAV_ERROR_NONE,
|
||||||
|
@ -1074,7 +1074,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
|
||||||
.persistentId = NAV_PERSISTENT_ID_FW_LANDING_LOITER,
|
.persistentId = NAV_PERSISTENT_ID_FW_LANDING_LOITER,
|
||||||
.onEntry = navOnEnteringState_NAV_STATE_FW_LANDING_LOITER,
|
.onEntry = navOnEnteringState_NAV_STATE_FW_LANDING_LOITER,
|
||||||
.timeoutMs = 10,
|
.timeoutMs = 10,
|
||||||
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_AUTO_RTH,
|
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_HOLD | NAV_REQUIRE_ANGLE | NAV_AUTO_RTH,
|
||||||
.mapToFlightModes = NAV_FW_AUTOLAND,
|
.mapToFlightModes = NAV_FW_AUTOLAND,
|
||||||
.mwState = MW_NAV_STATE_LAND_IN_PROGRESS,
|
.mwState = MW_NAV_STATE_LAND_IN_PROGRESS,
|
||||||
.mwError = MW_NAV_ERROR_NONE,
|
.mwError = MW_NAV_ERROR_NONE,
|
||||||
|
@ -4081,17 +4081,21 @@ bool isLastMissionWaypoint(void)
|
||||||
/* Checks if Nav hold position is active */
|
/* Checks if Nav hold position is active */
|
||||||
bool isNavHoldPositionActive(void)
|
bool isNavHoldPositionActive(void)
|
||||||
{
|
{
|
||||||
// WP mode last WP hold and Timed/Alt Enforce hold positions
|
/* If the current Nav state isn't flagged as a hold point (NAV_CTL_HOLD) then
|
||||||
return isLastMissionWaypoint() ||
|
* waypoints are assumed to be hold points by default unless excluded as defined here */
|
||||||
NAV_Status.state == MW_NAV_STATE_HOLD_TIMED ||
|
|
||||||
posControl.waypointList[posControl.activeWaypointIndex].action == NAV_WP_ACTION_HOLD_TIME;
|
|
||||||
|
|
||||||
// RTH mode (spiral climb and Home positions but excluding RTH Trackback point positions) and POSHOLD mode
|
if (navGetCurrentStateFlags() & NAV_CTL_HOLD) {
|
||||||
// Also hold position during emergency landing if position valid
|
return true;
|
||||||
return (FLIGHT_MODE(NAV_RTH_MODE) && !posControl.flags.rthTrackbackActive) ||
|
}
|
||||||
FLIGHT_MODE(NAV_POSHOLD_MODE) ||
|
|
||||||
(posControl.navState == NAV_STATE_FW_LANDING_CLIMB_TO_LOITER || posControl.navState == NAV_STATE_FW_LANDING_LOITER) ||
|
if (FLIGHT_MODE(NAV_WP_MODE)) {
|
||||||
navigationIsExecutingAnEmergencyLanding();
|
return posControl.waypointList[posControl.activeWaypointIndex].action != NAV_WP_ACTION_WAYPOINT || isLastMissionWaypoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
return posControl.navState != NAV_STATE_FW_LANDING_APPROACH &&
|
||||||
|
posControl.navState != NAV_STATE_FW_LANDING_GLIDE &&
|
||||||
|
posControl.navState != NAV_STATE_FW_LANDING_FLARE &&
|
||||||
|
!posControl.flags.rthTrackbackActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
float getActiveSpeed(void)
|
float getActiveSpeed(void)
|
||||||
|
|
|
@ -290,9 +290,12 @@ static void calculateVirtualPositionTarget_FW(float trackingPeriod)
|
||||||
// Detemine if a circular loiter is required.
|
// Detemine if a circular loiter is required.
|
||||||
// For waypoints only use circular loiter when angular visibility is > 30 degs, otherwise head straight toward target
|
// For waypoints only use circular loiter when angular visibility is > 30 degs, otherwise head straight toward target
|
||||||
#define TAN_15DEG 0.26795f
|
#define TAN_15DEG 0.26795f
|
||||||
needToCalculateCircularLoiter = isNavHoldPositionActive() &&
|
|
||||||
(distanceToActualTarget <= (navLoiterRadius / TAN_15DEG)) &&
|
bool loiterApproachActive = isNavHoldPositionActive() &&
|
||||||
(distanceToActualTarget > 50.0f);
|
distanceToActualTarget <= (navLoiterRadius / TAN_15DEG) &&
|
||||||
|
distanceToActualTarget > 50.0f;
|
||||||
|
needToCalculateCircularLoiter = loiterApproachActive || (navGetCurrentStateFlags() & NAV_CTL_HOLD);
|
||||||
|
|
||||||
//if vtol landing is required, fly straight to homepoint
|
//if vtol landing is required, fly straight to homepoint
|
||||||
if ((posControl.navState == NAV_STATE_RTH_HEAD_HOME) && navigationRTHAllowsLanding() && checkMixerATRequired(MIXERAT_REQUEST_LAND)){
|
if ((posControl.navState == NAV_STATE_RTH_HEAD_HOME) && navigationRTHAllowsLanding() && checkMixerATRequired(MIXERAT_REQUEST_LAND)){
|
||||||
needToCalculateCircularLoiter = false;
|
needToCalculateCircularLoiter = false;
|
||||||
|
|
|
@ -334,6 +334,7 @@ typedef enum {
|
||||||
NAV_AUTO_WP_DONE = (1 << 15), // Waypoint mission reached the last waypoint and is idling
|
NAV_AUTO_WP_DONE = (1 << 15), // Waypoint mission reached the last waypoint and is idling
|
||||||
|
|
||||||
NAV_MIXERAT = (1 << 16), // MIXERAT in progress
|
NAV_MIXERAT = (1 << 16), // MIXERAT in progress
|
||||||
|
NAV_CTL_HOLD = (1 << 17), // Nav loiter active at position
|
||||||
} navigationFSMStateFlags_t;
|
} navigationFSMStateFlags_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue