flight termination on geofence violation

This commit is contained in:
Thomas Gubler 2014-07-19 19:25:53 +02:00
parent fd50655354
commit 7baa337d9b
3 changed files with 19 additions and 0 deletions

View File

@ -1244,6 +1244,14 @@ int commander_thread_main(int argc, char *argv[])
if (updated) {
orb_copy(ORB_ID(position_setpoint_triplet), pos_sp_triplet_sub, &pos_sp_triplet);
/* Check for geofence violation */
if (pos_sp_triplet.geofence_violated) {
//XXX: make this configurable to select different actions (e.g. navigation modes)
/* this will only trigger if geofence is activated via param and a geofence file is present */
armed.force_failsafe = true;
status_changed = true;
} // no reset is done here on purpose, on geofence violation we want to stay in flighttermination
}
if (counter % (1000000 / COMMANDER_MONITORING_INTERVAL) == 0) {

View File

@ -335,6 +335,11 @@ Navigator::task_main()
/* Check geofence violation */
if (!_geofence.inside(&_global_pos)) {
/* inform other apps via the sp triplet */
_pos_sp_triplet.geofence_violated = true;
if (_pos_sp_triplet.geofence_violated != true) {
_pos_sp_triplet_updated = true;
}
/* Issue a warning about the geofence violation once */
if (!_geofence_violation_warning_sent) {
@ -342,6 +347,11 @@ Navigator::task_main()
_geofence_violation_warning_sent = true;
}
} else {
/* inform other apps via the sp triplet */
_pos_sp_triplet.geofence_violated = false;
if (_pos_sp_triplet.geofence_violated != false) {
_pos_sp_triplet_updated = true;
}
/* Reset the _geofence_violation_warning_sent field */
_geofence_violation_warning_sent = false;
}

View File

@ -97,6 +97,7 @@ struct position_setpoint_triplet_s
struct position_setpoint_s next;
unsigned nav_state; /**< report the navigation state */
bool geofence_violated; /**< true if the geofence is violated */
};
/**