Browse Source

Copter: Add Landing Gear functionality to main code

master
Robert Lefebvre 10 years ago committed by Randy Mackay
parent
commit
e10e020062
  1. 32
      ArduCopter/ArduCopter.pde
  2. 3
      ArduCopter/Parameters.h
  3. 8
      ArduCopter/Parameters.pde
  4. 3
      ArduCopter/defines.h
  5. 7
      ArduCopter/switches.pde

32
ArduCopter/ArduCopter.pde

@ -155,6 +155,7 @@
#if PARACHUTE == ENABLED #if PARACHUTE == ENABLED
#include <AP_Parachute.h> // Parachute release library #include <AP_Parachute.h> // Parachute release library
#endif #endif
#include <AP_LandingGear.h> // Landing Gear library
#include <AP_Terrain.h> #include <AP_Terrain.h>
// AP_HAL to Arduino compatibility layer // AP_HAL to Arduino compatibility layer
@ -723,6 +724,11 @@ static AP_EPM epm;
static AP_Parachute parachute(relay); static AP_Parachute parachute(relay);
#endif #endif
////////////////////////////////////////////////////////////////////////////////
// Landing Gear Controller
////////////////////////////////////////////////////////////////////////////////
static AP_LandingGear landinggear(relay);
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// terrain handling // terrain handling
#if AP_TERRAIN_AVAILABLE #if AP_TERRAIN_AVAILABLE
@ -782,6 +788,7 @@ static const AP_Scheduler::Task scheduler_tasks[] PROGMEM = {
{ one_hz_loop, 400, 42 }, { one_hz_loop, 400, 42 },
{ ekf_dcm_check, 40, 2 }, { ekf_dcm_check, 40, 2 },
{ crash_check, 40, 2 }, { crash_check, 40, 2 },
{ landinggear_update, 40, 1 },
{ gcs_check_input, 8, 550 }, { gcs_check_input, 8, 550 },
{ gcs_send_heartbeat, 400, 150 }, { gcs_send_heartbeat, 400, 150 },
{ gcs_send_deferred, 8, 720 }, { gcs_send_deferred, 8, 720 },
@ -856,6 +863,7 @@ static const AP_Scheduler::Task scheduler_tasks[] PROGMEM = {
{ one_hz_loop, 100, 420 }, { one_hz_loop, 100, 420 },
{ ekf_dcm_check, 10, 20 }, { ekf_dcm_check, 10, 20 },
{ crash_check, 10, 20 }, { crash_check, 10, 20 },
{ landinggear_update, 10, 10 },
{ gcs_check_input, 2, 550 }, { gcs_check_input, 2, 550 },
{ gcs_send_heartbeat, 100, 150 }, { gcs_send_heartbeat, 100, 150 },
{ gcs_send_deferred, 2, 720 }, { gcs_send_deferred, 2, 720 },
@ -1537,5 +1545,29 @@ static void tuning(){
} }
} }
// Run landing gear controller at 10Hz
static void landinggear_update(){
// If landing gear control is active, run update function.
if (g.ch7_option == AUX_SWITCH_LANDING_GEAR || g.ch8_option == AUX_SWITCH_LANDING_GEAR){
// last status (deployed or retracted) used to check for changes
static bool last_deploy_status;
landinggear.update();
// send event message to datalog if status has changed
if (landinggear.deployed() != last_deploy_status){
if (landinggear.deployed()){
Log_Write_Event(DATA_LANDING_GEAR_DEPLOYED);
} else {
Log_Write_Event(DATA_LANDING_GEAR_RETRACTED);
}
}
last_deploy_status = landinggear.deployed();
}
}
AP_HAL_MAIN(); AP_HAL_MAIN();

3
ArduCopter/Parameters.h

@ -78,6 +78,9 @@ public:
// Parachute object // Parachute object
k_param_parachute, // 17 k_param_parachute, // 17
// Parachute object
k_param_landinggear, // 18
// Misc // Misc
// //

8
ArduCopter/Parameters.pde

@ -391,14 +391,14 @@ const AP_Param::Info var_info[] PROGMEM = {
// @Param: CH7_OPT // @Param: CH7_OPT
// @DisplayName: Channel 7 option // @DisplayName: Channel 7 option
// @Description: Select which function if performed when CH7 is above 1800 pwm // @Description: Select which function if performed when CH7 is above 1800 pwm
// @Values: 0:Do Nothing, 2:Flip, 3:Simple Mode, 4:RTL, 5:Save Trim, 7:Save WP, 8:Multi Mode, 9:Camera Trigger, 10:RangeFinder, 11:Fence, 12:ResetToArmedYaw, 13:Super Simple Mode, 14:Acro Trainer, 16:Auto, 17:AutoTune, 18:Land, 19:EPM, 20:EKF, 21:Parachute Enable, 22:Parachute Release, 23:Parachute 3pos, 24:Auto Mission Reset, 25:AttCon Feed Forward, 26:AttCon Accel Limits, 27:Retract Mount, 28:Relay On/Off // @Values: 0:Do Nothing, 2:Flip, 3:Simple Mode, 4:RTL, 5:Save Trim, 7:Save WP, 8:Multi Mode, 9:Camera Trigger, 10:RangeFinder, 11:Fence, 12:ResetToArmedYaw, 13:Super Simple Mode, 14:Acro Trainer, 16:Auto, 17:AutoTune, 18:Land, 19:EPM, 20:EKF, 21:Parachute Enable, 22:Parachute Release, 23:Parachute 3pos, 24:Auto Mission Reset, 25:AttCon Feed Forward, 26:AttCon Accel Limits, 27:Retract Mount, 28:Relay On/Off, 29:Landing Gear
// @User: Standard // @User: Standard
GSCALAR(ch7_option, "CH7_OPT", CH7_OPTION), GSCALAR(ch7_option, "CH7_OPT", CH7_OPTION),
// @Param: CH8_OPT // @Param: CH8_OPT
// @DisplayName: Channel 8 option // @DisplayName: Channel 8 option
// @Description: Select which function if performed when CH8 is above 1800 pwm // @Description: Select which function if performed when CH8 is above 1800 pwm
// @Values: 0:Do Nothing, 2:Flip, 3:Simple Mode, 4:RTL, 5:Save Trim, 7:Save WP, 8:Multi Mode, 9:Camera Trigger, 10:RangeFinder, 11:Fence, 12:ResetToArmedYaw, 13:Super Simple Mode, 14:Acro Trainer, 16:Auto, 17:AutoTune, 18:Land, 19:EPM, 20:EKF, 21:Parachute Enable, 22:Parachute Release, 23:Parachute 3pos, 24:Auto Mission Reset, 25:AttCon Feed Forward, 26:AttCon Accel Limits, 27:Retract Mount, 28:Relay On/Off // @Values: 0:Do Nothing, 2:Flip, 3:Simple Mode, 4:RTL, 5:Save Trim, 7:Save WP, 8:Multi Mode, 9:Camera Trigger, 10:RangeFinder, 11:Fence, 12:ResetToArmedYaw, 13:Super Simple Mode, 14:Acro Trainer, 16:Auto, 17:AutoTune, 18:Land, 19:EPM, 20:EKF, 21:Parachute Enable, 22:Parachute Release, 23:Parachute 3pos, 24:Auto Mission Reset, 25:AttCon Feed Forward, 26:AttCon Accel Limits, 27:Retract Mount, 28:Relay On/Off, 29:Landing Gear
// @User: Standard // @User: Standard
GSCALAR(ch8_option, "CH8_OPT", CH8_OPTION), GSCALAR(ch8_option, "CH8_OPT", CH8_OPTION),
@ -883,6 +883,10 @@ const AP_Param::Info var_info[] PROGMEM = {
GOBJECT(parachute, "CHUTE_", AP_Parachute), GOBJECT(parachute, "CHUTE_", AP_Parachute),
#endif #endif
// @Group: LGR_
// @Path: ../libraries/AP_LandingGear/AP_LandingGear.cpp
GOBJECT(landinggear, "LGR_", AP_LandingGear),
// @Group: COMPASS_ // @Group: COMPASS_
// @Path: ../libraries/AP_Compass/Compass.cpp // @Path: ../libraries/AP_Compass/Compass.cpp
GOBJECT(compass, "COMPASS_", Compass), GOBJECT(compass, "COMPASS_", Compass),

3
ArduCopter/defines.h

@ -57,6 +57,7 @@
#define AUX_SWITCH_ATTCON_ACCEL_LIM 26 // enable/disable the roll, pitch and yaw accel limiting #define AUX_SWITCH_ATTCON_ACCEL_LIM 26 // enable/disable the roll, pitch and yaw accel limiting
#define AUX_SWITCH_RETRACT_MOUNT 27 // Retract Mount #define AUX_SWITCH_RETRACT_MOUNT 27 // Retract Mount
#define AUX_SWITCH_RELAY 28 // Relay pin on/off (only supports first relay) #define AUX_SWITCH_RELAY 28 // Relay pin on/off (only supports first relay)
#define AUX_SWITCH_LANDING_GEAR 29 // Landing gear controller
// values used by the ap.ch7_opt and ap.ch8_opt flags // values used by the ap.ch7_opt and ap.ch8_opt flags
#define AUX_SWITCH_LOW 0 // indicates auxiliar switch is in the low position (pwm <1200) #define AUX_SWITCH_LOW 0 // indicates auxiliar switch is in the low position (pwm <1200)
@ -303,6 +304,8 @@ enum FlipState {
#define DATA_PARACHUTE_DISABLED 49 #define DATA_PARACHUTE_DISABLED 49
#define DATA_PARACHUTE_ENABLED 50 #define DATA_PARACHUTE_ENABLED 50
#define DATA_PARACHUTE_RELEASED 51 #define DATA_PARACHUTE_RELEASED 51
#define DATA_LANDING_GEAR_DEPLOYED 52
#define DATA_LANDING_GEAR_RETRACTED 53
// Centi-degrees to radians // Centi-degrees to radians
#define DEGX100 5729.57795f #define DEGX100 5729.57795f

7
ArduCopter/switches.pde

@ -127,6 +127,7 @@ static void init_aux_switches()
case AUX_SWITCH_ATTCON_FEEDFWD: case AUX_SWITCH_ATTCON_FEEDFWD:
case AUX_SWITCH_ATTCON_ACCEL_LIM: case AUX_SWITCH_ATTCON_ACCEL_LIM:
case AUX_SWITCH_RELAY: case AUX_SWITCH_RELAY:
case AUX_SWITCH_LANDING_GEAR:
do_aux_switch_function(g.ch7_option, ap.CH7_flag); do_aux_switch_function(g.ch7_option, ap.CH7_flag);
break; break;
} }
@ -149,6 +150,7 @@ static void init_aux_switches()
case AUX_SWITCH_ATTCON_FEEDFWD: case AUX_SWITCH_ATTCON_FEEDFWD:
case AUX_SWITCH_ATTCON_ACCEL_LIM: case AUX_SWITCH_ATTCON_ACCEL_LIM:
case AUX_SWITCH_RELAY: case AUX_SWITCH_RELAY:
case AUX_SWITCH_LANDING_GEAR:
do_aux_switch_function(g.ch8_option, ap.CH8_flag); do_aux_switch_function(g.ch8_option, ap.CH8_flag);
break; break;
} }
@ -448,6 +450,11 @@ static void do_aux_switch_function(int8_t ch_function, uint8_t ch_flag)
case AUX_SWITCH_RELAY: case AUX_SWITCH_RELAY:
ServoRelayEvents.do_set_relay(0, ch_flag == AUX_SWITCH_HIGH); ServoRelayEvents.do_set_relay(0, ch_flag == AUX_SWITCH_HIGH);
break; break;
case AUX_SWITCH_LANDING_GEAR:
landinggear.set_cmd_mode(ch_flag);
break;
} }
} }

Loading…
Cancel
Save