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 4 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,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

on what aircraft does it make sense to link D and P?

Copy link
Author

@Yury-MonZon Yury-MonZon Dec 31, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They are not linked. This is a set of D and P individually for R and P (4 params total). The idea is to use this set after the autotune is done. This way a user can manually adjust D and then P via OSD.

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 @@ -123,6 +123,7 @@ void AP_Tuning::re_center(void)
AP_Float *f = get_param_pointer(current_parm);
if (f != nullptr) {
center_value = f->get();
old_value = 0.0;
}
mid_point_wait = true;
}
Expand Down Expand Up @@ -202,18 +203,17 @@ 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;
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
3 changes: 3 additions & 0 deletions libraries/AP_Tuning/AP_Tuning.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ class AP_Tuning

uint32_t last_check_ms;

// last tuning value scaled
float old_value;

void Log_Write_Parameter_Tuning(float value);

// the parameter we are tuning
Expand Down
Loading