Skip to content

Commit f1b0211

Browse files
Copilotjochym
andauthored
indi-celestronaux: gate PID corrections on active adaptive tuning
Agent-Logs-Url: https://github.com/indilib/indi-3rdparty/sessions/e122e18e-72b8-477e-97c5-c1f1574ff3ce Co-authored-by: jochym <5993422+jochym@users.noreply.github.com>
1 parent fa0d46f commit f1b0211

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

indi-celestronaux/celestronaux.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1515,9 +1515,11 @@ void CelestronAUX::resetTracking()
15151515

15161516
m_Controllers[AXIS_AZ].reset(new PID(getPollingPeriod() / 1000.0, 10000, -10000, Axis1PIDNP[Propotional].getValue(),
15171517
Axis1PIDNP[Derivative].getValue(), Axis1PIDNP[Integral].getValue()));
1518+
m_Controllers[AXIS_AZ]->reset();
15181519
m_Controllers[AXIS_AZ]->setIntegratorLimits(-10000, 10000);
15191520
m_Controllers[AXIS_ALT].reset(new PID(getPollingPeriod() / 1000.0, 10000, -10000, Axis2PIDNP[Propotional].getValue(),
15201521
Axis2PIDNP[Derivative].getValue(), Axis2PIDNP[Integral].getValue()));
1522+
m_Controllers[AXIS_ALT]->reset();
15211523
m_Controllers[AXIS_ALT]->setIntegratorLimits(-10000, 10000);
15221524

15231525
if (m_az_pid_tuner)
@@ -2211,7 +2213,10 @@ void CelestronAUX::TimerHit()
22112213
m_LastOffset[AXIS_AZ] = offsetSteps[AXIS_AZ];
22122214
targetSteps[AXIS_AZ] = DegreesToEncoders(AzimuthToDegrees(targetMountAxisCoordinates.azimuth));
22132215
// Track rate: predicted + PID controlled correction based on tracking error: offsetSteps
2214-
trackRates[AXIS_AZ] = predRate[AXIS_AZ] + m_Controllers[AXIS_AZ]->calculate(0, -offsetSteps[AXIS_AZ]);
2216+
double pidCorrectionAz = 0;
2217+
if (m_az_pid_tuner && m_az_pid_tuner->isActivelyTuning())
2218+
pidCorrectionAz = m_Controllers[AXIS_AZ]->calculate(0, -offsetSteps[AXIS_AZ]);
2219+
trackRates[AXIS_AZ] = predRate[AXIS_AZ] + pidCorrectionAz;
22152220

22162221
// Apply minTrackRate logic from Skywatcher
22172222
double minAzTrackRate = predRate[AXIS_AZ] * MIN_TRACK_RATE_FACTOR;
@@ -2260,7 +2265,10 @@ void CelestronAUX::TimerHit()
22602265
m_LastOffset[AXIS_ALT] = offsetSteps[AXIS_ALT];
22612266
targetSteps[AXIS_ALT] = DegreesToEncoders(targetMountAxisCoordinates.altitude);
22622267
// Track rate: predicted + PID controlled correction based on tracking error: offsetSteps
2263-
trackRates[AXIS_ALT] = predRate[AXIS_ALT] + m_Controllers[AXIS_ALT]->calculate(0, -offsetSteps[AXIS_ALT]);
2268+
double pidCorrectionAl = 0;
2269+
if (m_al_pid_tuner && m_al_pid_tuner->isActivelyTuning())
2270+
pidCorrectionAl = m_Controllers[AXIS_ALT]->calculate(0, -offsetSteps[AXIS_ALT]);
2271+
trackRates[AXIS_ALT] = predRate[AXIS_ALT] + pidCorrectionAl;
22642272

22652273
// Apply minTrackRate logic from Skywatcher
22662274
double minAlTrackRate = predRate[AXIS_ALT] * MIN_TRACK_RATE_FACTOR;

0 commit comments

Comments
 (0)