This commit is contained in:
Timur A. Fatkhullin
2025-11-24 21:52:22 +03:00
parent e548451617
commit acced75fa2
6 changed files with 50 additions and 29 deletions

View File

@@ -110,13 +110,18 @@ public:
typedef MccSimpleMovingModelParams tracking_params_t;
template <mcc_all_controls_c CONTROLS_T>
MccSimpleTrackingModel(CONTROLS_T* controls)
template <mcc_all_controls_c CONTROLS_T, mcc_logger_c LoggerT = MccNullLogger>
MccSimpleTrackingModel(CONTROLS_T* controls, LoggerT logger)
: _stopTracking(new std::atomic_bool()), _currentParamsMutex(new std::mutex())
{
std::ostringstream os;
os << std::this_thread::get_id();
logger.logDebug(std::format("Create MccSimpleTrackingModel class instance (thread: {})", os.str()));
*_stopTracking = true;
_trackingFunc = [controls, this]() -> error_t {
_trackingFunc = [logger = std::move(logger), controls, this]() -> error_t {
typename CONTROLS_T::hardware_state_t hw_state;
MccTelemetryData tdata;
@@ -133,6 +138,10 @@ public:
// double dist, dx, dy;
logger.logInfo("Start tracking:");
logger.logInfo(" min time to pzone: {} secs", _currentParams.minTimeToPZone.count());
auto t_err = controls->telemetryData(&tdata);
if (t_err) {
*_stopTracking = true;
@@ -183,10 +192,12 @@ public:
_currentParams.timeShiftToTargetPoint);
// point in +time_dist future
MccCelestialPoint pt{
.pair_kind = MccCoordPairKind::COORDS_KIND_HADEC_APP,
.X = MccAngle(dt.count() * std::numbers::pi / 3600.0 / 15.0).normalize<MccAngle::NORM_KIND_0_360>(),
.Y = tdata.DEC_APP};
MccCelestialPoint pt{.pair_kind = MccCoordPairKind::COORDS_KIND_HADEC_APP,
// .X = MccAngle(dt.count() * std::numbers::pi / 3600.0
// / 15.0).normalize<MccAngle::NORM_KIND_0_360>(),
.X = MccAngle(dt.count() * std::numbers::pi / 3600.0 / 15.0)
.normalize<MccAngle::NORM_KIND_180_180>(),
.Y = tdata.DEC_APP};
mcc_tp2tp(tdata.time_point + tp_dt, pt.time_point);
point->time_point = pt.time_point;
@@ -292,25 +303,23 @@ public:
std::lock_guard lock{*_currentParamsMutex};
auto now = std::chrono::steady_clock::now();
if ((now - last_corr_tp) < _currentParams.trackingCycleInterval) {
continue;
}
// update prohibited zones intersection point
if ((now - last_ipzone_update_tp) < _currentParams.updatingPZoneInterval) {
pz_err = update_pzones_ipoint();
if (pz_err) {
*_stopTracking = true;
return mcc_deduce_error_code(pz_err,
MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
if ((now - last_corr_tp) > _currentParams.trackingCycleInterval) {
// update prohibited zones intersection point
if ((now - last_ipzone_update_tp) < _currentParams.updatingPZoneInterval) {
pz_err = update_pzones_ipoint();
if (pz_err) {
*_stopTracking = true;
return mcc_deduce_error_code(
pz_err, MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
}
}
}
// compute new target-in-future point
auto ccte_err = target_point(&target_in_future_pt);
if (ccte_err) {
*_stopTracking = true;
return mcc_deduce_error_code(ccte_err, MccSimpleTrackingModelErrorCode::ERROR_CCTE);
// compute new target-in-future point
auto ccte_err = target_point(&target_in_future_pt);
if (ccte_err) {
*_stopTracking = true;
return mcc_deduce_error_code(ccte_err, MccSimpleTrackingModelErrorCode::ERROR_CCTE);
}
}
}
@@ -321,6 +330,12 @@ public:
*_stopTracking = true;
return mcc_deduce_error_code(hw_err, MccSimpleTrackingModelErrorCode::ERROR_HW_SETSTATE);
}
// sleep here
{
std::lock_guard lock{*_currentParamsMutex};
std::this_thread::sleep_for(_currentParams.trackingTelemetryInterval);
}
}
return MccSimpleTrackingModelErrorCode::ERROR_OK;