Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tuning indication on OSD(and GCS) #28831

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions ArduPlane/tuning.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ const uint8_t AP_Tuning_Plane::tuning_set_az[] = { TUNING_AZ_P, TU
const uint8_t AP_Tuning_Plane::tuning_set_rate_pitchDP[]= { TUNING_RATE_PITCH_D, TUNING_RATE_PITCH_P };
const uint8_t AP_Tuning_Plane::tuning_set_rate_rollDP[]= { TUNING_RATE_ROLL_D, TUNING_RATE_ROLL_P };
const uint8_t AP_Tuning_Plane::tuning_set_rate_yawDP[]= { TUNING_RATE_YAW_D, TUNING_RATE_YAW_P };
const uint8_t AP_Tuning_Plane::tuning_set_dp_roll_pitch[] = { TUNING_RLL_D, TUNING_RLL_P, TUNING_PIT_D, TUNING_PIT_P };
const uint8_t AP_Tuning_Plane::tuning_set_pidff_roll[] = { TUNING_RLL_P, TUNING_RLL_I, TUNING_RLL_D, TUNING_RLL_FF };
const uint8_t AP_Tuning_Plane::tuning_set_pidff_pitch[] = { TUNING_PIT_P, TUNING_PIT_I, TUNING_PIT_D, TUNING_PIT_FF };

// macro to prevent getting the array length wrong
#define TUNING_ARRAY(v) ARRAY_SIZE(v), v
Expand All @@ -53,6 +56,9 @@ const AP_Tuning_Plane::tuning_set AP_Tuning_Plane::tuning_sets[] = {
{ TUNING_SET_RATE_PITCHDP, TUNING_ARRAY(tuning_set_rate_pitchDP) },
{ TUNING_SET_RATE_ROLLDP, TUNING_ARRAY(tuning_set_rate_rollDP) },
{ TUNING_SET_RATE_YAWDP, TUNING_ARRAY(tuning_set_rate_yawDP) },
{ TUNING_SET_DP_ROLL_PITCH, TUNING_ARRAY(tuning_set_dp_roll_pitch) },
{ TUNING_SET_PIDFF_ROLL, TUNING_ARRAY(tuning_set_pidff_roll) },
{ TUNING_SET_PIDFF_PITCH, TUNING_ARRAY(tuning_set_pidff_pitch) },
{ 0, 0, nullptr }
};

Expand Down
6 changes: 6 additions & 0 deletions ArduPlane/tuning.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,9 @@ class AP_Tuning_Plane : public AP_Tuning
TUNING_SET_RATE_PITCHDP = 8,
TUNING_SET_RATE_ROLLDP = 9,
TUNING_SET_RATE_YAWDP = 10,
TUNING_SET_DP_ROLL_PITCH = 11,
TUNING_SET_PIDFF_ROLL = 12,
TUNING_SET_PIDFF_PITCH = 13,
};

AP_Float *get_param_pointer(uint8_t parm) override;
Expand All @@ -112,6 +115,9 @@ class AP_Tuning_Plane : public AP_Tuning
static const uint8_t tuning_set_rate_pitchDP[];
static const uint8_t tuning_set_rate_rollDP[];
static const uint8_t tuning_set_rate_yawDP[];
static const uint8_t tuning_set_dp_roll_pitch[];
static const uint8_t tuning_set_pidff_roll[];
static const uint8_t tuning_set_pidff_pitch[];

// mask of what params have been set
uint64_t have_set;
Expand Down
13 changes: 11 additions & 2 deletions libraries/AP_Tuning/AP_Tuning.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -202,23 +202,23 @@ void AP_Tuning::check_input(uint8_t flightmode)

//hal.console->printf("chan_value %.2f last_channel_value %.2f\n", chan_value, last_channel_value);

const float dead_zone = 0.02;
if (mid_point_wait) {
// see if we have crossed the mid-point. We use a small deadzone to make it easier
// to move to the "indent" portion of a slider to start tuning
const float dead_zone = 0.02;
if ((chan_value > dead_zone && last_channel_value > 0) ||
(chan_value < -dead_zone && last_channel_value < 0)) {
// still waiting
return;
}
// starting tuning
mid_point_wait = false;
GCS_SEND_TEXT(MAV_SEVERITY_INFO, "Tuning: mid-point %s", get_tuning_name(current_parm));
AP_Notify::events.tune_started = 1;
}
last_channel_value = chan_value;

float new_value;
static float old_value;
if (chan_value > 0) {
new_value = linear_interpolate(center_value, range*center_value, chan_value, 0, 1);
} else {
Expand All @@ -228,6 +228,15 @@ void AP_Tuning::check_input(uint8_t flightmode)
need_revert |= (1U << current_parm_index);
set_value(current_parm, new_value);

if ( fabsf(new_value-old_value) > (0.05 * old_value) ) {
old_value = new_value;
GCS_SEND_TEXT(MAV_SEVERITY_INFO,
"Tuning %s%s%0.4f",
get_tuning_name(current_parm),
((chan_value < dead_zone) && (chan_value > -dead_zone)) ? "> " : ": ",
(double)(new_value));
}

#if HAL_LOGGING_ENABLED
Log_Write_Parameter_Tuning(new_value);
#endif
Expand Down