diff options
author | ilya <ilya@airdog.com> | 2014-11-25 19:13:54 +0200 |
---|---|---|
committer | ilya <ilya@airdog.com> | 2014-11-25 19:13:54 +0200 |
commit | 11b947bb8a298790f85379f5ebdf95949e854747 (patch) | |
tree | d2ccd7da268b3257ecbbba0805e3ca3e73f629ab | |
parent | 1931739b057c11da1f05dd4e26f8741fe6f1de76 (diff) | |
download | px4-firmware-11b947bb8a298790f85379f5ebdf95949e854747.tar.gz px4-firmware-11b947bb8a298790f85379f5ebdf95949e854747.tar.bz2 px4-firmware-11b947bb8a298790f85379f5ebdf95949e854747.zip |
Introduced A_REQUIRE_GPS parameter that controls if valid GPS is required for arming
-rw-r--r-- | src/modules/commander/commander.cpp | 13 | ||||
-rw-r--r-- | src/modules/commander/commander_params.c | 9 | ||||
-rw-r--r-- | src/modules/commander/state_machine_helper.cpp | 2 | ||||
-rw-r--r-- | src/modules/uORB/topics/vehicle_status.h | 2 |
4 files changed, 25 insertions, 1 deletions
diff --git a/src/modules/commander/commander.cpp b/src/modules/commander/commander.cpp index 3870e258d..35859887b 100644 --- a/src/modules/commander/commander.cpp +++ b/src/modules/commander/commander.cpp @@ -779,6 +779,7 @@ int commander_thread_main(int argc, char *argv[]) param_t _param_ef_throttle_thres = param_find("COM_EF_THROT"); param_t _param_ef_current2throttle_thres = param_find("COM_EF_C2T"); param_t _param_ef_time_thres = param_find("COM_EF_TIME"); + float battery_warning_level; float battery_critical_level; @@ -787,6 +788,8 @@ int commander_thread_main(int argc, char *argv[]) int battery_critical_use; int battery_flat_use; + int require_gps = 1; + param_t _param_battery_warning_level = param_find("BAT_WARN_LVL"); param_t _param_battery_critical_level = param_find("BAT_CRIT_LVL"); param_t _param_battery_flat_level = param_find("BAT_FLAT_LVL"); @@ -794,6 +797,7 @@ int commander_thread_main(int argc, char *argv[]) param_t _param_battery_critical_use = param_find("BAT_CRIT_USE"); param_t _param_battery_flat_use = param_find("BAT_FLAT_USE"); + param_t _param_require_gps = param_find("A_REQUIRE_GPS"); param_get(_param_battery_warning_level, &battery_warning_level); @@ -803,6 +807,7 @@ int commander_thread_main(int argc, char *argv[]) param_get(_param_battery_critical_use, &battery_critical_use); param_get(_param_battery_flat_use, &battery_flat_use); + param_get(_param_require_gps, &require_gps); float target_visibility_timeout_1; float target_visibility_timeout_2; @@ -871,6 +876,8 @@ int commander_thread_main(int argc, char *argv[]) /* vehicle status topic */ memset(&status, 0, sizeof(status)); + status.require_gps = require_gps; + status.condition_landed = true; // initialize to safe value // We want to accept RC inputs as default status.rc_input_blocked = false; @@ -1196,6 +1203,12 @@ int commander_thread_main(int argc, char *argv[]) param_get(_param_ef_throttle_thres, &ef_throttle_thres); param_get(_param_ef_current2throttle_thres, &ef_current2throttle_thres); param_get(_param_ef_time_thres, &ef_time_thres); + + param_get(_param_require_gps, &require_gps); + if (require_gps != status.require_gps) { + status.require_gps = require_gps; + status_changed = true; + } } orb_check(sp_man_sub, &updated); diff --git a/src/modules/commander/commander_params.c b/src/modules/commander/commander_params.c index 420e7b4ea..ef9f833a7 100644 --- a/src/modules/commander/commander_params.c +++ b/src/modules/commander/commander_params.c @@ -236,3 +236,12 @@ PARAM_DEFINE_FLOAT(A_TRGT_VSB_TO_1, 1.0f); * @max 30.0f */ PARAM_DEFINE_FLOAT(A_TRGT_VSB_TO_2, 5.0f); + +/** + * Valid GPS position is required to arm copter + * + * @group Airdog + * @min 0 + * @max 1 + */ +PARAM_DEFINE_INT32(A_REQUIRE_GPS, 1); diff --git a/src/modules/commander/state_machine_helper.cpp b/src/modules/commander/state_machine_helper.cpp index 66f5f5e2c..398e1d2d0 100644 --- a/src/modules/commander/state_machine_helper.cpp +++ b/src/modules/commander/state_machine_helper.cpp @@ -118,7 +118,7 @@ arming_state_transition(struct vehicle_status_s *status, ///< current vehicle s bool feedback_provided = false; //Arm only if have valid GPS position - if (new_arming_state == ARMING_STATE_ARMED && !status->condition_global_position_valid){ + if (new_arming_state == ARMING_STATE_ARMED && status->require_gps && !status->condition_global_position_valid) { ret = TRANSITION_DENIED; } else diff --git a/src/modules/uORB/topics/vehicle_status.h b/src/modules/uORB/topics/vehicle_status.h index fe44bada8..8a5fe6f62 100644 --- a/src/modules/uORB/topics/vehicle_status.h +++ b/src/modules/uORB/topics/vehicle_status.h @@ -203,6 +203,8 @@ struct vehicle_status_s { bool is_rotary_wing; + bool require_gps; + bool condition_battery_voltage_valid; bool condition_system_in_air_restore; /**< true if we can restore in mid air */ bool condition_system_sensors_initialized; |