aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorilya <ilya@airdog.com>2014-11-25 19:13:54 +0200
committerilya <ilya@airdog.com>2014-11-25 19:13:54 +0200
commit11b947bb8a298790f85379f5ebdf95949e854747 (patch)
treed2ccd7da268b3257ecbbba0805e3ca3e73f629ab
parent1931739b057c11da1f05dd4e26f8741fe6f1de76 (diff)
downloadpx4-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.cpp13
-rw-r--r--src/modules/commander/commander_params.c9
-rw-r--r--src/modules/commander/state_machine_helper.cpp2
-rw-r--r--src/modules/uORB/topics/vehicle_status.h2
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;