Add switch for landing gear, pass it to actuators

This commit is contained in:
Julian Oes
2016-10-20 23:17:05 +02:00
committed by Lorenz Meier
parent 10c4ec2e1a
commit 2fff2ab9ac
8 changed files with 97 additions and 2 deletions
+45
View File
@@ -2544,6 +2544,33 @@ PARAM_DEFINE_INT32(RC_MAP_FLAPS, 0);
*/
PARAM_DEFINE_INT32(RC_MAP_TRANS_SW, 0);
/**
* Landing gear switch channel
*
* @min 0
* @max 18
* @group Radio Switches
* @value 0 Unassigned
* @value 1 Channel 1
* @value 2 Channel 2
* @value 3 Channel 3
* @value 4 Channel 4
* @value 5 Channel 5
* @value 6 Channel 6
* @value 7 Channel 7
* @value 8 Channel 8
* @value 9 Channel 9
* @value 10 Channel 10
* @value 11 Channel 11
* @value 12 Channel 12
* @value 13 Channel 13
* @value 14 Channel 14
* @value 15 Channel 15
* @value 16 Channel 16
* @value 17 Channel 17
* @value 18 Channel 18
*/
PARAM_DEFINE_INT32(RC_MAP_GEAR_SW, 0);
/**
* AUX1 Passthrough RC Channel
*
@@ -2976,6 +3003,24 @@ PARAM_DEFINE_FLOAT(RC_KILLSWITCH_TH, 0.25f);
*/
PARAM_DEFINE_FLOAT(RC_TRANS_TH, 0.25f);
/**
* Threshold for the landing gear switch
*
* 0-1 indicate where in the full channel range the threshold sits
* 0 : min
* 1 : max
* sign indicates polarity of comparison
* positive : true when channel>th
* negative : true when channel<th
*
* @min -1
* @max 1
* @group Radio Switches
*
*
*/
PARAM_DEFINE_FLOAT(RC_GEAR_TH, 0.25f);
/**
* PWM input channel that provides RSSI.
*
+17
View File
@@ -306,6 +306,7 @@ private:
int rc_map_offboard_sw;
int rc_map_kill_sw;
int rc_map_trans_sw;
int rc_map_gear_sw;
int rc_map_flaps;
@@ -330,6 +331,7 @@ private:
float rc_offboard_th;
float rc_killswitch_th;
float rc_trans_th;
float rc_gear_th;
bool rc_assist_inv;
bool rc_auto_inv;
bool rc_rattitude_inv;
@@ -340,6 +342,7 @@ private:
bool rc_offboard_inv;
bool rc_killswitch_inv;
bool rc_trans_inv;
bool rc_gear_inv;
float battery_voltage_scaling;
float battery_current_scaling;
@@ -379,6 +382,7 @@ private:
param_t rc_map_offboard_sw;
param_t rc_map_kill_sw;
param_t rc_map_trans_sw;
param_t rc_map_gear_sw;
param_t rc_map_flaps;
@@ -407,6 +411,7 @@ private:
param_t rc_offboard_th;
param_t rc_killswitch_th;
param_t rc_trans_th;
param_t rc_gear_th;
param_t battery_voltage_scaling;
param_t battery_current_scaling;
@@ -656,6 +661,7 @@ Sensors::Sensors() :
_parameter_handles.rc_map_offboard_sw = param_find("RC_MAP_OFFB_SW");
_parameter_handles.rc_map_kill_sw = param_find("RC_MAP_KILL_SW");
_parameter_handles.rc_map_trans_sw = param_find("RC_MAP_TRANS_SW");
_parameter_handles.rc_map_gear_sw = param_find("RC_MAP_GEAR_SW");
_parameter_handles.rc_map_aux1 = param_find("RC_MAP_AUX1");
_parameter_handles.rc_map_aux2 = param_find("RC_MAP_AUX2");
@@ -685,6 +691,7 @@ Sensors::Sensors() :
_parameter_handles.rc_offboard_th = param_find("RC_OFFB_TH");
_parameter_handles.rc_killswitch_th = param_find("RC_KILLSWITCH_TH");
_parameter_handles.rc_trans_th = param_find("RC_TRANS_TH");
_parameter_handles.rc_gear_th = param_find("RC_GEAR_TH");
/* Differential pressure offset */
@@ -862,6 +869,10 @@ Sensors::parameters_update()
warnx("%s", paramerr);
}
if (param_get(_parameter_handles.rc_map_gear_sw, &(_parameters.rc_map_gear_sw)) != OK) {
warnx("%s", paramerr);
}
if (param_get(_parameter_handles.rc_map_flaps, &(_parameters.rc_map_flaps)) != OK) {
PX4_WARN("%s", paramerr);
}
@@ -909,6 +920,9 @@ Sensors::parameters_update()
param_get(_parameter_handles.rc_trans_th, &(_parameters.rc_trans_th));
_parameters.rc_trans_inv = (_parameters.rc_trans_th < 0);
_parameters.rc_trans_th = fabs(_parameters.rc_trans_th);
param_get(_parameter_handles.rc_gear_th, &(_parameters.rc_gear_th));
_parameters.rc_gear_inv = (_parameters.rc_gear_th < 0);
_parameters.rc_gear_th = fabs(_parameters.rc_gear_th);
/* update RC function mappings */
_rc.function[rc_channels_s::RC_CHANNELS_FUNCTION_THROTTLE] = _parameters.rc_map_throttle - 1;
@@ -925,6 +939,7 @@ Sensors::parameters_update()
_rc.function[rc_channels_s::RC_CHANNELS_FUNCTION_OFFBOARD] = _parameters.rc_map_offboard_sw - 1;
_rc.function[rc_channels_s::RC_CHANNELS_FUNCTION_KILLSWITCH] = _parameters.rc_map_kill_sw - 1;
_rc.function[rc_channels_s::RC_CHANNELS_FUNCTION_TRANSITION] = _parameters.rc_map_trans_sw - 1;
_rc.function[rc_channels_s::RC_CHANNELS_FUNCTION_GEAR] = _parameters.rc_map_gear_sw - 1;
_rc.function[rc_channels_s::RC_CHANNELS_FUNCTION_FLAPS] = _parameters.rc_map_flaps - 1;
@@ -2131,6 +2146,8 @@ Sensors::rc_poll()
_parameters.rc_killswitch_th, _parameters.rc_killswitch_inv);
manual.transition_switch = get_rc_sw2pos_position(rc_channels_s::RC_CHANNELS_FUNCTION_TRANSITION,
_parameters.rc_trans_th, _parameters.rc_trans_inv);
manual.gear_switch = get_rc_sw2pos_position(rc_channels_s::RC_CHANNELS_FUNCTION_GEAR,
_parameters.rc_gear_th, _parameters.rc_gear_inv);
/* publish manual_control_setpoint topic */
if (_manual_control_pub != nullptr) {