aboutsummaryrefslogtreecommitdiff
path: root/src/modules/commander/commander.cpp
diff options
context:
space:
mode:
authorAnton Babushkin <anton.babushkin@me.com>2014-01-31 22:44:05 +0100
committerAnton Babushkin <anton.babushkin@me.com>2014-01-31 22:44:05 +0100
commit7f4f9a5f5f6c4921453f3e0c98531bcb4e44d981 (patch)
tree00e5760d1992cafbc99b22b936705b2466041c60 /src/modules/commander/commander.cpp
parentd933d523eb74ee2290c56afcd11fe8e85c6e702b (diff)
downloadpx4-firmware-7f4f9a5f5f6c4921453f3e0c98531bcb4e44d981.tar.gz
px4-firmware-7f4f9a5f5f6c4921453f3e0c98531bcb4e44d981.tar.bz2
px4-firmware-7f4f9a5f5f6c4921453f3e0c98531bcb4e44d981.zip
ACRO mode implemented
Diffstat (limited to 'src/modules/commander/commander.cpp')
-rw-r--r--src/modules/commander/commander.cpp35
1 files changed, 31 insertions, 4 deletions
diff --git a/src/modules/commander/commander.cpp b/src/modules/commander/commander.cpp
index c39833713..89294fc76 100644
--- a/src/modules/commander/commander.cpp
+++ b/src/modules/commander/commander.cpp
@@ -619,9 +619,10 @@ int commander_thread_main(int argc, char *argv[])
char *main_states_str[MAIN_STATE_MAX];
main_states_str[0] = "MANUAL";
- main_states_str[1] = "SEATBELT";
- main_states_str[2] = "EASY";
- main_states_str[3] = "AUTO";
+ main_states_str[1] = "ACRO";
+ main_states_str[2] = "SEATBELT";
+ main_states_str[3] = "EASY";
+ main_states_str[4] = "AUTO";
char *arming_states_str[ARMING_STATE_MAX];
arming_states_str[0] = "INIT";
@@ -1510,6 +1511,17 @@ check_mode_switches(struct manual_control_setpoint_s *sp_man, struct vehicle_sta
} else {
status->mission_switch = MISSION_SWITCH_MISSION;
}
+
+ /* acro switch */
+ if (!isfinite(sp_man->acro_switch)) {
+ status->acro_switch = ACRO_SWITCH_NONE;
+
+ } else if (sp_man->acro_switch > STICK_ON_OFF_LIMIT) {
+ status->acro_switch = ACRO_SWITCH_ACRO;
+
+ } else {
+ status->acro_switch = ACRO_SWITCH_NORMAL;
+ }
}
transition_result_t
@@ -1520,7 +1532,11 @@ set_main_state_rc(struct vehicle_status_s *status)
switch (status->mode_switch) {
case MODE_SWITCH_MANUAL:
- res = main_state_transition(status, MAIN_STATE_MANUAL);
+ if (status->acro_switch == ACRO_SWITCH_ACRO) {
+ res = main_state_transition(status, MAIN_STATE_ACRO);
+ } else {
+ res = main_state_transition(status, MAIN_STATE_MANUAL);
+ }
// TRANSITION_DENIED is not possible here
break;
@@ -1600,6 +1616,17 @@ set_control_mode()
control_mode.flag_control_velocity_enabled = false;
break;
+ case MAIN_STATE_ACRO:
+ control_mode.flag_control_manual_enabled = true;
+ control_mode.flag_control_auto_enabled = false;
+ control_mode.flag_control_rates_enabled = true;
+ control_mode.flag_control_attitude_enabled = false;
+ control_mode.flag_control_altitude_enabled = false;
+ control_mode.flag_control_climb_rate_enabled = false;
+ control_mode.flag_control_position_enabled = false;
+ control_mode.flag_control_velocity_enabled = false;
+ break;
+
case MAIN_STATE_SEATBELT:
control_mode.flag_control_manual_enabled = true;
control_mode.flag_control_auto_enabled = false;