mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-23 18:13:34 +08:00
Merge pull request #680 from PX4/ready_rtl_fix
navigator: forbid READY -> RTL transition
This commit is contained in:
@@ -695,7 +695,7 @@ Navigator::task_main()
|
|||||||
if (_vstatus.return_switch == RETURN_SWITCH_RETURN) {
|
if (_vstatus.return_switch == RETURN_SWITCH_RETURN) {
|
||||||
/* switch to RTL if not already landed after RTL and home position set */
|
/* switch to RTL if not already landed after RTL and home position set */
|
||||||
if (!(_rtl_state == RTL_STATE_DESCEND &&
|
if (!(_rtl_state == RTL_STATE_DESCEND &&
|
||||||
(myState == NAV_STATE_READY || myState == NAV_STATE_LAND || myState == NAV_STATE_LOITER)) &&
|
(myState == NAV_STATE_LAND || myState == NAV_STATE_LOITER)) &&
|
||||||
_vstatus.condition_home_position_valid) {
|
_vstatus.condition_home_position_valid) {
|
||||||
dispatch(EVENT_RTL_REQUESTED);
|
dispatch(EVENT_RTL_REQUESTED);
|
||||||
}
|
}
|
||||||
@@ -741,7 +741,7 @@ Navigator::task_main()
|
|||||||
|
|
||||||
case NAV_STATE_RTL:
|
case NAV_STATE_RTL:
|
||||||
if (!(_rtl_state == RTL_STATE_DESCEND &&
|
if (!(_rtl_state == RTL_STATE_DESCEND &&
|
||||||
(myState == NAV_STATE_READY || myState == NAV_STATE_LAND || myState == NAV_STATE_LOITER)) &&
|
(myState == NAV_STATE_LAND || myState == NAV_STATE_LOITER)) &&
|
||||||
_vstatus.condition_home_position_valid) {
|
_vstatus.condition_home_position_valid) {
|
||||||
dispatch(EVENT_RTL_REQUESTED);
|
dispatch(EVENT_RTL_REQUESTED);
|
||||||
}
|
}
|
||||||
@@ -749,9 +749,7 @@ Navigator::task_main()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case NAV_STATE_LAND:
|
case NAV_STATE_LAND:
|
||||||
if (myState != NAV_STATE_READY) {
|
dispatch(EVENT_LAND_REQUESTED);
|
||||||
dispatch(EVENT_LAND_REQUESTED);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -955,7 +953,7 @@ StateTable::Tran const Navigator::myTable[NAV_STATE_MAX][MAX_EVENT] = {
|
|||||||
/* EVENT_READY_REQUESTED */ {NO_ACTION, NAV_STATE_READY},
|
/* EVENT_READY_REQUESTED */ {NO_ACTION, NAV_STATE_READY},
|
||||||
/* EVENT_LOITER_REQUESTED */ {NO_ACTION, NAV_STATE_READY},
|
/* EVENT_LOITER_REQUESTED */ {NO_ACTION, NAV_STATE_READY},
|
||||||
/* EVENT_MISSION_REQUESTED */ {ACTION(&Navigator::start_mission), NAV_STATE_MISSION},
|
/* EVENT_MISSION_REQUESTED */ {ACTION(&Navigator::start_mission), NAV_STATE_MISSION},
|
||||||
/* EVENT_RTL_REQUESTED */ {ACTION(&Navigator::start_rtl), NAV_STATE_RTL},
|
/* EVENT_RTL_REQUESTED */ {NO_ACTION, NAV_STATE_READY},
|
||||||
/* EVENT_LAND_REQUESTED */ {NO_ACTION, NAV_STATE_READY},
|
/* EVENT_LAND_REQUESTED */ {NO_ACTION, NAV_STATE_READY},
|
||||||
/* EVENT_MISSION_CHANGED */ {NO_ACTION, NAV_STATE_READY},
|
/* EVENT_MISSION_CHANGED */ {NO_ACTION, NAV_STATE_READY},
|
||||||
/* EVENT_HOME_POSITION_CHANGED */ {NO_ACTION, NAV_STATE_READY},
|
/* EVENT_HOME_POSITION_CHANGED */ {NO_ACTION, NAV_STATE_READY},
|
||||||
@@ -1388,7 +1386,8 @@ Navigator::set_rtl_item()
|
|||||||
void
|
void
|
||||||
Navigator::request_loiter_or_ready()
|
Navigator::request_loiter_or_ready()
|
||||||
{
|
{
|
||||||
if (_vstatus.condition_landed) {
|
/* XXX workaround: no landing detector for fixedwing yet */
|
||||||
|
if (_vstatus.condition_landed && _vstatus.is_rotary_wing) {
|
||||||
dispatch(EVENT_READY_REQUESTED);
|
dispatch(EVENT_READY_REQUESTED);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user