diff --git a/ArduCopter/Copter.h b/ArduCopter/Copter.h index 5a44e67e35..def684cc83 100644 --- a/ArduCopter/Copter.h +++ b/ArduCopter/Copter.h @@ -607,6 +607,7 @@ private: RC_CONTINUE_IF_GUIDED = (1<<2), // 4 CONTINUE_IF_LANDING = (1<<3), // 8 GCS_CONTINUE_IF_PILOT_CONTROL = (1<<4), // 16 + RELEASE_GRIPPER = (1<<5), // 32 }; static constexpr int8_t _failsafe_priorities[] = { diff --git a/ArduCopter/Parameters.cpp b/ArduCopter/Parameters.cpp index 2603ee9caf..78efb96f92 100644 --- a/ArduCopter/Parameters.cpp +++ b/ArduCopter/Parameters.cpp @@ -951,7 +951,7 @@ const AP_Param::GroupInfo ParametersG2::var_info[] = { // @DisplayName: Failsafe options bitmask // @Description: Bitmask of additional options for battery, radio, & GCS failsafes. 0 (default) disables all options. // @Values: 0:Disabled, 1:Continue if in Auto on RC failsafe only, 2:Continue if in Auto on GCS failsafe only, 3:Continue if in Auto on RC and/or GCS failsafe, 4:Continue if in Guided on RC failsafe only, 8:Continue if landing on any failsafe, 16:Continue if in pilot controlled modes on GCS failsafe, 19:Continue if in Auto on RC and/or GCS failsafe and continue if in pilot controlled modes on GCS failsafe - // @Bitmask: 0:Continue if in Auto on RC failsafe, 1:Continue if in Auto on GCS failsafe, 2:Continue if in Guided on RC failsafe, 3:Continue if landing on any failsafe, 4:Continue if in pilot controlled modes on GCS failsafe + // @Bitmask: 0:Continue if in Auto on RC failsafe, 1:Continue if in Auto on GCS failsafe, 2:Continue if in Guided on RC failsafe, 3:Continue if landing on any failsafe, 4:Continue if in pilot controlled modes on GCS failsafe, 5:Release Gripper // @User: Advanced AP_GROUPINFO("FS_OPTIONS", 36, ParametersG2, fs_options, 0), diff --git a/ArduCopter/events.cpp b/ArduCopter/events.cpp index fb3695ad13..4cc03bbea7 100644 --- a/ArduCopter/events.cpp +++ b/ArduCopter/events.cpp @@ -378,5 +378,11 @@ void Copter::do_failsafe_action(Failsafe_Action action, ModeReason reason){ arming.disarm(AP_Arming::Method::FAILSAFE_ACTION_TERMINATE); #endif } + +#if GRIPPER_ENABLED == ENABLED + if (failsafe_option(FailsafeOption::RELEASE_GRIPPER)) { + copter.g2.gripper.release(); + } +#endif }