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

@ -13,6 +13,7 @@
#include "mcc_ccte_erfa.h" #include "mcc_ccte_erfa.h"
#include "mcc_slewing_model.h" #include "mcc_slewing_model.h"
#include "mcc_tracking_model.h"
namespace asibfm700 namespace asibfm700
{ {
@ -24,5 +25,6 @@ typedef mcc::MccDefaultPCM<asibfm700MountType> Asibfm700PCM;
typedef mcc::MccPZoneContainer<mcc::MccTimeDuration> Asibfm700PZoneContainer; typedef mcc::MccPZoneContainer<mcc::MccTimeDuration> Asibfm700PZoneContainer;
typedef mcc::utils::MccSpdlogLogger Asibfm700Logger; typedef mcc::utils::MccSpdlogLogger Asibfm700Logger;
typedef mcc::MccSimpleSlewingModel Asibfm700SlewingModel; typedef mcc::MccSimpleSlewingModel Asibfm700SlewingModel;
typedef mcc::MccSimpleTrackingModel Asibfm700TrackingModel;
} // namespace asibfm700 } // namespace asibfm700

View File

@ -19,7 +19,7 @@ Asibfm700Mount::Asibfm700Mount(Asibfm700MountConfig const& config, std::shared_p
std::make_tuple(this), std::make_tuple(this),
std::make_tuple(), std::make_tuple(),
std::make_tuple(this, Asibfm700Logger{logger}), std::make_tuple(this, Asibfm700Logger{logger}),
std::make_tuple(this), std::make_tuple(this, Asibfm700Logger{logger}),
std::make_tuple(logger, Asibfm700Logger::LOGGER_DEFAULT_FORMAT)), std::make_tuple(logger, Asibfm700Logger::LOGGER_DEFAULT_FORMAT)),
// base_gm_class_t(Asibfm700StartState{}, // base_gm_class_t(Asibfm700StartState{},
// std::make_tuple(config.servoControllerConfig()), // std::make_tuple(config.servoControllerConfig()),

View File

@ -22,14 +22,14 @@ class Asibfm700Mount : public Asibfm700CCTE,
mcc::MccTelemetry, mcc::MccTelemetry,
Asibfm700PZoneContainer, Asibfm700PZoneContainer,
Asibfm700SlewingModel, Asibfm700SlewingModel,
mcc::MccSimpleTrackingModel, Asibfm700TrackingModel,
Asibfm700Logger> Asibfm700Logger>
{ {
typedef mcc::MccGenericMount<AsibFM700ServoController, typedef mcc::MccGenericMount<AsibFM700ServoController,
mcc::MccTelemetry, mcc::MccTelemetry,
Asibfm700PZoneContainer, Asibfm700PZoneContainer,
Asibfm700SlewingModel, Asibfm700SlewingModel,
mcc::MccSimpleTrackingModel, Asibfm700TrackingModel,
Asibfm700Logger> Asibfm700Logger>
gm_class_t; gm_class_t;

View File

@ -506,7 +506,8 @@ public:
lst_eo(); lst_eo();
if (!ret) { if (!ret) {
// ha = MccAngle(lst - from_pt.X + eo).normalize<MccAngle::NORM_KIND_0_360>(); // ha = MccAngle(lst - from_pt.X + eo).normalize<MccAngle::NORM_KIND_0_360>();
ha = MccAngle(lst - from_pt.X - eo).normalize<MccAngle::NORM_KIND_0_360>(); ha = MccAngle(lst - from_pt.X - eo).normalize<MccAngle::NORM_KIND_180_180>();
// ha = MccAngle(lst - from_pt.X - eo).normalize<MccAngle::NORM_KIND_0_360>();
} else { } else {
return ret; return ret;
} }

View File

@ -122,7 +122,10 @@ public:
MccSimpleSlewingModel(CONTROLS_T* controls, LoggerT logger) MccSimpleSlewingModel(CONTROLS_T* controls, LoggerT logger)
: _stopSlewing(new std::atomic_bool()), _currentParamsMutex(new std::mutex) : _stopSlewing(new std::atomic_bool()), _currentParamsMutex(new std::mutex)
{ {
logger.logDebug("Create MccSimpleSlewingModel class instance"); std::ostringstream os;
os << std::this_thread::get_id();
logger.logDebug(std::format("Create MccSimpleSlewingModel class instance (thread: {})", os.str()));
*_stopSlewing = true; *_stopSlewing = true;

View File

@ -110,13 +110,18 @@ public:
typedef MccSimpleMovingModelParams tracking_params_t; typedef MccSimpleMovingModelParams tracking_params_t;
template <mcc_all_controls_c CONTROLS_T> template <mcc_all_controls_c CONTROLS_T, mcc_logger_c LoggerT = MccNullLogger>
MccSimpleTrackingModel(CONTROLS_T* controls) MccSimpleTrackingModel(CONTROLS_T* controls, LoggerT logger)
: _stopTracking(new std::atomic_bool()), _currentParamsMutex(new std::mutex()) : _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; *_stopTracking = true;
_trackingFunc = [controls, this]() -> error_t { _trackingFunc = [logger = std::move(logger), controls, this]() -> error_t {
typename CONTROLS_T::hardware_state_t hw_state; typename CONTROLS_T::hardware_state_t hw_state;
MccTelemetryData tdata; MccTelemetryData tdata;
@ -133,6 +138,10 @@ public:
// double dist, dx, dy; // double dist, dx, dy;
logger.logInfo("Start tracking:");
logger.logInfo(" min time to pzone: {} secs", _currentParams.minTimeToPZone.count());
auto t_err = controls->telemetryData(&tdata); auto t_err = controls->telemetryData(&tdata);
if (t_err) { if (t_err) {
*_stopTracking = true; *_stopTracking = true;
@ -183,9 +192,11 @@ public:
_currentParams.timeShiftToTargetPoint); _currentParams.timeShiftToTargetPoint);
// point in +time_dist future // point in +time_dist future
MccCelestialPoint pt{ MccCelestialPoint pt{.pair_kind = MccCoordPairKind::COORDS_KIND_HADEC_APP,
.pair_kind = MccCoordPairKind::COORDS_KIND_HADEC_APP, // .X = MccAngle(dt.count() * std::numbers::pi / 3600.0
.X = MccAngle(dt.count() * std::numbers::pi / 3600.0 / 15.0).normalize<MccAngle::NORM_KIND_0_360>(), // / 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}; .Y = tdata.DEC_APP};
mcc_tp2tp(tdata.time_point + tp_dt, pt.time_point); mcc_tp2tp(tdata.time_point + tp_dt, pt.time_point);
@ -292,17 +303,14 @@ public:
std::lock_guard lock{*_currentParamsMutex}; std::lock_guard lock{*_currentParamsMutex};
auto now = std::chrono::steady_clock::now(); auto now = std::chrono::steady_clock::now();
if ((now - last_corr_tp) < _currentParams.trackingCycleInterval) { if ((now - last_corr_tp) > _currentParams.trackingCycleInterval) {
continue;
}
// update prohibited zones intersection point // update prohibited zones intersection point
if ((now - last_ipzone_update_tp) < _currentParams.updatingPZoneInterval) { if ((now - last_ipzone_update_tp) < _currentParams.updatingPZoneInterval) {
pz_err = update_pzones_ipoint(); pz_err = update_pzones_ipoint();
if (pz_err) { if (pz_err) {
*_stopTracking = true; *_stopTracking = true;
return mcc_deduce_error_code(pz_err, return mcc_deduce_error_code(
MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP); pz_err, MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
} }
} }
@ -313,6 +321,7 @@ public:
return mcc_deduce_error_code(ccte_err, MccSimpleTrackingModelErrorCode::ERROR_CCTE); return mcc_deduce_error_code(ccte_err, MccSimpleTrackingModelErrorCode::ERROR_CCTE);
} }
} }
}
// send corrections // send corrections
hw_state.moving_state = CONTROLS_T::hardware_moving_state_t::HW_MOVE_TRACKING; hw_state.moving_state = CONTROLS_T::hardware_moving_state_t::HW_MOVE_TRACKING;
@ -321,6 +330,12 @@ public:
*_stopTracking = true; *_stopTracking = true;
return mcc_deduce_error_code(hw_err, MccSimpleTrackingModelErrorCode::ERROR_HW_SETSTATE); 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; return MccSimpleTrackingModelErrorCode::ERROR_OK;