This commit is contained in:
Timur A. Fatkhullin
2025-08-31 01:54:15 +03:00
parent 4696daa2ee
commit c2627ecd89
11 changed files with 324 additions and 180 deletions

View File

@@ -191,41 +191,39 @@ public:
}
// compute hardware coordinates
// WARNING: It is assumed here that PCM corrections have small (arcseconds-arcminutes) values
// since ususaly there is no reverse transformation for "hardware-to-apparent" relation!
typename pcm_t::error_t pcm_err;
struct {
double dx, dy;
} pcm_res;
MccPCMResult pcm_res;
// MccCelestialPoint pt;
// pt.time_point =
// std::chrono::time_point_cast<typename decltype(pt.time_point)::duration>(_data.target.time_point);
MccCelestialPoint pt;
pt.time_point =
std::chrono::time_point_cast<typename decltype(pt.time_point)::duration>(_data.target.time_point);
pcm_err = pcm->computeInversePCM(_data, &pcm_res, &_data);
if constexpr (mccIsEquatorialMount(pcm_t::mountType)) {
pt.pair_kind = MccCoordPairKind::COORDS_KIND_HADEC_APP;
pt.X = _data.target.HA;
pt.Y = _data.target.DEC_APP;
pcm_err = pcm->compute(std::move(pt), &pcm_res);
if (!pcm_err) {
_data.target.X = _data.target.HA - pcm_res.dx;
_data.target.Y = _data.target.DEC_APP - pcm_res.dy;
}
} else if constexpr (mccIsAltAzMount(pcm_t::mountType)) {
pt.pair_kind = MccCoordPairKind::COORDS_KIND_AZALT;
pt.X = _data.target.AZ;
pt.Y = _data.target.ALT;
pcm_err = pcm->compute(std::move(pt), &pcm_res);
if (!pcm_err) {
_data.target.X = _data.target.AZ - pcm_res.dx;
_data.target.Y = _data.target.ALT - pcm_res.dy;
}
} else {
static_assert(false, "UNKNOWN MOUNT TYPE!");
}
// if constexpr (mccIsEquatorialMount(pcm_t::mountType)) {
// pcm_err = pcm->computeInversePCM(_data, &pcm_res, &_data);
// pt.pair_kind = MccCoordPairKind::COORDS_KIND_HADEC_APP;
// pt.X = _data.target.HA;
// pt.Y = _data.target.DEC_APP;
// pcm_err = pcm->computeInversePCM(std::move(pt), &pcm_res);
// if (!pcm_err) {
// _data.target.X = _data.target.HA - pcm_res.pcmX;
// _data.target.Y = _data.target.DEC_APP - pcm_res.pcmY;
// }
// } else if constexpr (mccIsAltAzMount(pcm_t::mountType)) {
// pt.pair_kind = MccCoordPairKind::COORDS_KIND_AZALT;
// pt.X = _data.target.AZ;
// pt.Y = _data.target.ALT;
// pcm_err = pcm->computeInversePCM(std::move(pt), &pcm_res);
// if (!pcm_err) {
// _data.target.X = _data.target.AZ - pcm_res.pcmX;
// _data.target.Y = _data.target.ALT - pcm_res.pcmY;
// }
// } else {
// static_assert(false, "UNKNOWN MOUNT TYPE!");
// }
if (pcm_err) {
return mcc_deduce_error<error_t>(pcm_err, MccTelemetryErrorCode::ERROR_PCM_COMP);
@@ -281,18 +279,12 @@ public:
_data.speedX = (double)hw_pos.speedX;
_data.speedY = (double)hw_pos.speedY;
struct {
double dx, dy;
} pcm_res;
auto pcm_err = pcm->computePCM(_data, &pcm_res);
// fill _data.pcmX, _data.pcmY and corresponded apparent coordinates
auto pcm_err = pcm->computePCM(_data, &_data, &_data);
if (pcm_err) {
return mcc_deduce_error(pcm_err, MccTelemetryErrorCode::ERROR_PCM_COMP);
}
_data.pcmX = pcm_res.dx;
_data.pcmY = pcm_res.dy;
if (stop_token.stop_requested()) {
return MccTelemetryErrorCode::ERROR_UPDATE_STOPPED;
}
@@ -300,8 +292,6 @@ public:
MccCelestialPoint pt{.pair_kind = MccCoordPairKind::COORDS_KIND_AZALT, .time_point = _data.time_point};
if constexpr (mccIsEquatorialMount(pcm_t::mountType)) {
_data.HA = (double)hw_pos.X + pcm_res.dx;
_data.DEC_APP = (double)hw_pos.Y + pcm_res.dy;
_data.RA_APP = (double)_data.LST - (double)_data.HA + eo;
_data.X = _data.HA;
@@ -316,14 +306,12 @@ public:
_data.ZD = std::numbers::pi / 2.0 - _data.ALT;
}
} else if constexpr (mccIsAltAzMount(pcm_t::mountType)) {
_data.AZ = (double)hw_pos.X + pcm_res.dx;
_data.ALT = (double)hw_pos.Y + pcm_res.dy;
_data.ZD = std::numbers::pi / 2.0 - _data.ALT;
_data.ALT = std::numbers::pi / 2.0 - _data.ZD;
_data.X = _data.AZ;
_data.Y = _data.ALT;
_data.Y = _data.ZD;
_data.pair_kind = MccCoordPairKind::COORDS_KIND_AZALT;
_data.pair_kind = MccCoordPairKind::COORDS_KIND_AZZD;
pt.pair_kind = MccCoordPairKind::COORDS_KIND_HADEC_APP;
ccte_err = ccte->transformCoordinates(_data, &pt);