diff --git a/src/modules/commander/commander_tests/state_machine_helper_test.cpp b/src/modules/commander/commander_tests/state_machine_helper_test.cpp index 78bc4bc22bbc6b78e96f8f23bf9c2c3475c63a2d..570f2b5886810d411fcb4c10bf30863803de37a1 100644 --- a/src/modules/commander/commander_tests/state_machine_helper_test.cpp +++ b/src/modules/commander/commander_tests/state_machine_helper_test.cpp @@ -337,8 +337,8 @@ bool StateMachineHelperTest::mainStateTransitionTest(void) // TRANSITION_CHANGED tests - { "transition: MANUAL to ACRO", - MTT_ALL_NOT_VALID, + { "transition: MANUAL to ACRO - rotary", + MTT_ROTARY_WING, commander_state_s::MAIN_STATE_MANUAL, commander_state_s::MAIN_STATE_ACRO, TRANSITION_CHANGED }, { "transition: ACRO to MANUAL", @@ -399,6 +399,10 @@ bool StateMachineHelperTest::mainStateTransitionTest(void) // TRANSITION_DENIED tests + { "transition: MANUAL to ACRO - not rotary", + MTT_ALL_NOT_VALID, + commander_state_s::MAIN_STATE_MANUAL, commander_state_s::MAIN_STATE_ACRO, TRANSITION_DENIED }, + { "no transition: MANUAL to AUTO_MISSION - global position not valid", MTT_ALL_NOT_VALID, commander_state_s::MAIN_STATE_MANUAL, commander_state_s::MAIN_STATE_AUTO_MISSION, TRANSITION_DENIED }, diff --git a/src/modules/commander/state_machine_helper.cpp b/src/modules/commander/state_machine_helper.cpp index dadc6520095121ec0ab58b08f21987c75421e0ab..e979d07e04c2b0b70f0efe9a8894067a093d1d29 100644 --- a/src/modules/commander/state_machine_helper.cpp +++ b/src/modules/commander/state_machine_helper.cpp @@ -348,12 +348,17 @@ main_state_transition(struct vehicle_status_s *status, main_state_t new_main_sta /* transition may be denied even if the same state is requested because conditions may have changed */ switch (new_main_state) { case commander_state_s::MAIN_STATE_MANUAL: - case commander_state_s::MAIN_STATE_ACRO: - case commander_state_s::MAIN_STATE_RATTITUDE: case commander_state_s::MAIN_STATE_STAB: ret = TRANSITION_CHANGED; break; + case commander_state_s::MAIN_STATE_ACRO: + case commander_state_s::MAIN_STATE_RATTITUDE: + if (status->is_rotary_wing) { + ret = TRANSITION_CHANGED; + } + break; + case commander_state_s::MAIN_STATE_ALTCTL: /* need at minimum altitude estimate */ /* TODO: add this for fixedwing as well */