aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Gubler <thomasgubler@gmail.com>2013-11-06 18:07:19 +0100
committerThomas Gubler <thomasgubler@gmail.com>2013-11-06 18:07:19 +0100
commit249500188040b12d5930d839dfc94de270378072 (patch)
tree181e906c9c3557fbda84d74157629e377cbebce3
parentdd5de28ed92144d767c613ae1db76c0255cea554 (diff)
downloadpx4-firmware-249500188040b12d5930d839dfc94de270378072.tar.gz
px4-firmware-249500188040b12d5930d839dfc94de270378072.tar.bz2
px4-firmware-249500188040b12d5930d839dfc94de270378072.zip
parametrize some landing parameters
-rw-r--r--src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp22
-rw-r--r--src/modules/fw_pos_control_l1/fw_pos_control_l1_params.c3
2 files changed, 21 insertions, 4 deletions
diff --git a/src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp b/src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp
index 0127160fb..0e5f805b4 100644
--- a/src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp
+++ b/src/modules/fw_pos_control_l1/fw_pos_control_l1_main.cpp
@@ -215,6 +215,10 @@ private:
float land_slope_angle;
float land_slope_length;
+ float land_H1_virt;
+ float land_flare_alt_relative;
+ float land_thrust_lim_horizontal_distance;
+
} _parameters; /**< local copies of interesting parameters */
struct {
@@ -254,6 +258,10 @@ private:
param_t land_slope_angle;
param_t land_slope_length;
+ param_t land_H1_virt;
+ param_t land_flare_alt_relative;
+ param_t land_thrust_lim_horizontal_distance;
+
} _parameter_handles; /**< handles for interesting parameters */
@@ -383,6 +391,9 @@ FixedwingPositionControl::FixedwingPositionControl() :
_parameter_handles.land_slope_angle = param_find("FW_LND_ANG");
_parameter_handles.land_slope_length = param_find("FW_LND_SLLR");
+ _parameter_handles.land_H1_virt = param_find("FW_LND_HVIRT");
+ _parameter_handles.land_flare_alt_relative = param_find("FW_LND_FLALT");
+ _parameter_handles.land_thrust_lim_horizontal_distance = param_find("FW_LND_TLDIST");
_parameter_handles.time_const = param_find("FW_T_TIME_CONST");
_parameter_handles.min_sink_rate = param_find("FW_T_SINK_MIN");
@@ -466,6 +477,9 @@ FixedwingPositionControl::parameters_update()
param_get(_parameter_handles.land_slope_angle, &(_parameters.land_slope_angle));
param_get(_parameter_handles.land_slope_length, &(_parameters.land_slope_length));
+ param_get(_parameter_handles.land_H1_virt, &(_parameters.land_H1_virt));
+ param_get(_parameter_handles.land_flare_alt_relative, &(_parameters.land_flare_alt_relative));
+ param_get(_parameter_handles.land_thrust_lim_horizontal_distance, &(_parameters.land_thrust_lim_horizontal_distance));
_l1_control.set_l1_damping(_parameters.l1_damping);
_l1_control.set_l1_period(_parameters.l1_period);
@@ -479,7 +493,7 @@ FixedwingPositionControl::parameters_update()
_tecs.set_vertical_accel_limit(_parameters.vertical_accel_limit);
_tecs.set_height_comp_filter_omega(_parameters.height_comp_filter_omega);
_tecs.set_speed_comp_filter_omega(_parameters.speed_comp_filter_omega);
- _tecs.set_roll_throttle_compensation(math::radians(_parameters.roll_throttle_compensation));
+ _tecs.set_roll_throttle_compensation(_parameters.roll_throttle_compensation);
_tecs.set_speed_weight(_parameters.speed_weight);
_tecs.set_pitch_damping(_parameters.pitch_damping);
_tecs.set_indicated_airspeed_min(_parameters.airspeed_min);
@@ -816,10 +830,10 @@ FixedwingPositionControl::control_position(const math::Vector2f &current_positio
float airspeed_approach = 1.3f * _parameters.airspeed_min;
float landing_slope_angle_rad = math::radians(_parameters.land_slope_angle);
- float flare_relative_alt = 15.0f;
- float motor_lim_horizontal_distance = 30.0f;//be generous here as we currently have to rely on the user input for the waypoint
+ float flare_relative_alt = _parameters.land_flare_alt_relative;
+ float motor_lim_horizontal_distance = _parameters.land_thrust_lim_horizontal_distance;//be generous here as we currently have to rely on the user input for the waypoint
float L_wp_distance = get_distance_to_next_waypoint(prev_wp.getX(), prev_wp.getY(), curr_wp.getX(), curr_wp.getY()) * _parameters.land_slope_length;
- float H1 = 10.0f;
+ float H1 = _parameters.land_H1_virt;
float H0 = flare_relative_alt + H1;
float d1 = flare_relative_alt/tanf(landing_slope_angle_rad);
float flare_constant = (H0 * d1)/flare_relative_alt;//-flare_length/(logf(H1/H0));
diff --git a/src/modules/fw_pos_control_l1/fw_pos_control_l1_params.c b/src/modules/fw_pos_control_l1/fw_pos_control_l1_params.c
index 61d665b17..f206d808e 100644
--- a/src/modules/fw_pos_control_l1/fw_pos_control_l1_params.c
+++ b/src/modules/fw_pos_control_l1/fw_pos_control_l1_params.c
@@ -116,3 +116,6 @@ PARAM_DEFINE_FLOAT(FW_T_HRATE_P, 0.05f);
PARAM_DEFINE_FLOAT(FW_LND_ANG, 10.0f);
PARAM_DEFINE_FLOAT(FW_LND_SLLR, 0.9f);
+PARAM_DEFINE_FLOAT(FW_LND_HVIRT, 10.0f);
+PARAM_DEFINE_FLOAT(FW_LND_FLALT, 15.0f);
+PARAM_DEFINE_FLOAT(FW_LND_TLDIST, 30.0f);