...
This commit is contained in:
parent
acced75fa2
commit
a42f6dbc98
@ -204,7 +204,7 @@ public:
|
||||
mcc::MccAngle{tdata.target.ZD}.sexagesimal(),
|
||||
mcc::MccAngle{tdata.target.ALT}.sexagesimal()));
|
||||
|
||||
logger.logError(std::format(" X-enc, Y-enc: {}, {}", mcc::MccAngle{tdata.target.X}.sexagesimal(),
|
||||
logger.logError(std::format(" hardware X, Y: {}, {}", mcc::MccAngle{tdata.target.X}.sexagesimal(),
|
||||
mcc::MccAngle{tdata.target.Y}.sexagesimal()));
|
||||
|
||||
return MccSimpleSlewingModelErrorCode::ERROR_TARGET_IN_PZONE;
|
||||
|
||||
@ -22,6 +22,7 @@ enum class MccSimpleTrackingModelErrorCode : int {
|
||||
ERROR_DIST_TELEMETRY,
|
||||
ERROR_PZONE_CONTAINER_COMP,
|
||||
ERROR_NEAR_PZONE,
|
||||
ERROR_IN_PZONE,
|
||||
ERROR_ALREADY_TRACK,
|
||||
ERROR_ALREADY_STOPPED,
|
||||
ERROR_STOPPED
|
||||
@ -78,6 +79,8 @@ struct MccSimpleTrackingModelCategory : public std::error_category {
|
||||
return "pzone container computation error";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_NEAR_PZONE:
|
||||
return "near prohibited zone";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_IN_PZONE:
|
||||
return "in prohibited zone";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_ALREADY_TRACK:
|
||||
return "already tracking";
|
||||
case MccSimpleTrackingModelErrorCode::ERROR_ALREADY_STOPPED:
|
||||
@ -121,7 +124,7 @@ public:
|
||||
|
||||
*_stopTracking = true;
|
||||
|
||||
_trackingFunc = [logger = std::move(logger), controls, this]() -> error_t {
|
||||
_trackingFunc = [logger = std::move(logger), controls, this]() mutable -> error_t {
|
||||
typename CONTROLS_T::hardware_state_t hw_state;
|
||||
|
||||
MccTelemetryData tdata;
|
||||
@ -133,7 +136,7 @@ public:
|
||||
} else if constexpr (mccIsAltAzMount(CONTROLS_T::mountType)) {
|
||||
target_in_future_pt.pair_kind = MccCoordPairKind::COORDS_KIND_AZZD;
|
||||
} else {
|
||||
static_assert(false, "UNKNOW MOUNT TYPE!");
|
||||
static_assert(false, "UNKNOWN MOUNT TYPE!");
|
||||
}
|
||||
|
||||
// double dist, dx, dy;
|
||||
@ -148,6 +151,28 @@ public:
|
||||
return mcc_deduce_error_code(t_err, MccSimpleTrackingModelErrorCode::ERROR_GET_TELEMETRY);
|
||||
}
|
||||
|
||||
bool in_zone;
|
||||
auto pz_err = controls->inPZone(tdata, &in_zone);
|
||||
if (pz_err) {
|
||||
return mcc_deduce_error_code(pz_err, MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
|
||||
}
|
||||
|
||||
if (in_zone) {
|
||||
logger.logError("mount current coordinates are in prohibited zone:");
|
||||
logger.logError(std::format(
|
||||
" RA-APP, DEC-APP, HA, LST: {}, {}, {}, {}", mcc::MccAngle{tdata.RA_APP}.sexagesimal(true),
|
||||
mcc::MccAngle{tdata.DEC_APP}.sexagesimal(), mcc::MccAngle{tdata.HA}.sexagesimal(true),
|
||||
mcc::MccAngle{tdata.LST}.sexagesimal(true)));
|
||||
logger.logError(std::format(" AZ, ZD, ALT: {}, {}, {}", mcc::MccAngle{tdata.target.AZ}.sexagesimal(),
|
||||
mcc::MccAngle{tdata.ZD}.sexagesimal(),
|
||||
mcc::MccAngle{tdata.ALT}.sexagesimal()));
|
||||
|
||||
logger.logError(std::format(" hardware X, Y: {}, {}", mcc::MccAngle{tdata.X}.sexagesimal(),
|
||||
mcc::MccAngle{tdata.Y}.sexagesimal()));
|
||||
|
||||
return MccSimpleTrackingModelErrorCode::ERROR_IN_PZONE;
|
||||
}
|
||||
|
||||
|
||||
bool no_intersects = false;
|
||||
|
||||
@ -177,7 +202,7 @@ public:
|
||||
no_intersects = true;
|
||||
}
|
||||
} else {
|
||||
static_assert(false, "UNKNOW MOUNT TYPE!");
|
||||
static_assert(false, "UNKNOWN MOUNT TYPE!");
|
||||
}
|
||||
|
||||
return MccSimpleTrackingModelErrorCode::ERROR_OK;
|
||||
@ -233,7 +258,7 @@ public:
|
||||
};
|
||||
|
||||
|
||||
auto pz_err = update_pzones_ipoint();
|
||||
pz_err = update_pzones_ipoint();
|
||||
if (pz_err) {
|
||||
*_stopTracking = true;
|
||||
return mcc_deduce_error_code(pz_err, MccSimpleTrackingModelErrorCode::ERROR_PZONE_CONTAINER_COMP);
|
||||
@ -254,15 +279,31 @@ public:
|
||||
hw_state.speedX = _currentParams.trackSpeedX;
|
||||
hw_state.speedY = _currentParams.trackSpeedY;
|
||||
}
|
||||
|
||||
logger.logTrace("The updated target point:");
|
||||
if constexpr (mccIsEquatorialMount(CONTROLS_T::mountType)) {
|
||||
logger.logTrace(" HA, DEC: {} {}", MccAngle(target_in_future_pt.X).sexagesimal(true),
|
||||
MccAngle(target_in_future_pt.Y).sexagesimal());
|
||||
} else if constexpr (mccIsAltAzMount(CONTROLS_T::mountType)) {
|
||||
logger.logTrace(" AZ, ZD: {} {}", MccAngle(target_in_future_pt.X).sexagesimal(),
|
||||
MccAngle(target_in_future_pt.Y).sexagesimal());
|
||||
} else {
|
||||
static_assert(false, "UNKNOWN MOUNT TYPE!");
|
||||
}
|
||||
}
|
||||
|
||||
// move mount
|
||||
logger.logDebug(std::format("Send to hardware: X = {} degs, Y = {} degs",
|
||||
mcc::MccAngle{hw_state.X}.degrees(), mcc::MccAngle{hw_state.Y}.degrees()));
|
||||
|
||||
auto hw_err = controls->hardwareSetState(hw_state);
|
||||
if (hw_err) {
|
||||
*_stopTracking = true;
|
||||
return mcc_deduce_error_code(hw_err, MccSimpleTrackingModelErrorCode::ERROR_HW_SETSTATE);
|
||||
}
|
||||
|
||||
logger.logDebug(" the 'hardwareSetState' method performed successfully!");
|
||||
|
||||
|
||||
std::chrono::steady_clock::time_point last_corr_tp, last_ipzone_update_tp;
|
||||
last_corr_tp = std::chrono::steady_clock::now();
|
||||
@ -281,6 +322,26 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
if constexpr (mccIsEquatorialMount(CONTROLS_T::mountType)) {
|
||||
logger.logTrace(std::format(" current target: HA = {}, DEC = {}",
|
||||
mcc::MccAngle(tdata.target.HA).sexagesimal(true),
|
||||
mcc::MccAngle(tdata.target.DEC_APP).sexagesimal()));
|
||||
logger.logTrace(std::format(" current mount: HA = {}, DEC = {}",
|
||||
mcc::MccAngle(tdata.HA).sexagesimal(true),
|
||||
mcc::MccAngle(tdata.DEC_APP).sexagesimal()));
|
||||
} else if constexpr (mccIsAltAzMount(CONTROLS_T::mountType)) {
|
||||
logger.logTrace(std::format(" target: AZ = {}, ZD = {}",
|
||||
mcc::MccAngle(tdata.target.AZ).sexagesimal(),
|
||||
mcc::MccAngle(tdata.target.ZD).sexagesimal()));
|
||||
logger.logTrace(std::format(" mount: AZ = {}, ZD = {}", mcc::MccAngle(tdata.AZ).sexagesimal(),
|
||||
mcc::MccAngle(tdata.ZD).sexagesimal()));
|
||||
}
|
||||
|
||||
logger.logTrace(std::format(" mount: speedX = {}/s, speedY = {}/s",
|
||||
mcc::MccAngleFancyString(tdata.speedX),
|
||||
mcc::MccAngleFancyString(tdata.speedY)));
|
||||
|
||||
|
||||
if (*_stopTracking) {
|
||||
break;
|
||||
}
|
||||
@ -320,10 +381,24 @@ public:
|
||||
*_stopTracking = true;
|
||||
return mcc_deduce_error_code(ccte_err, MccSimpleTrackingModelErrorCode::ERROR_CCTE);
|
||||
}
|
||||
|
||||
logger.logTrace("The updated target point:");
|
||||
if constexpr (mccIsEquatorialMount(CONTROLS_T::mountType)) {
|
||||
logger.logTrace(" HA, DEC: {} {}", MccAngle(target_in_future_pt.X).sexagesimal(true),
|
||||
MccAngle(target_in_future_pt.Y).sexagesimal());
|
||||
} else if constexpr (mccIsAltAzMount(CONTROLS_T::mountType)) {
|
||||
logger.logTrace(" AZ, ZD: {} {}", MccAngle(target_in_future_pt.X).sexagesimal(),
|
||||
MccAngle(target_in_future_pt.Y).sexagesimal());
|
||||
} else {
|
||||
static_assert(false, "UNKNOWN MOUNT TYPE!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// send corrections
|
||||
logger.logDebug(std::format("Send to hardware: X = {} degs, Y = {} degs",
|
||||
mcc::MccAngle{hw_state.X}.degrees(), mcc::MccAngle{hw_state.Y}.degrees()));
|
||||
|
||||
hw_state.moving_state = CONTROLS_T::hardware_moving_state_t::HW_MOVE_TRACKING;
|
||||
hw_err = controls->hardwareSetState(hw_state);
|
||||
if (hw_err) {
|
||||
@ -331,6 +406,9 @@ public:
|
||||
return mcc_deduce_error_code(hw_err, MccSimpleTrackingModelErrorCode::ERROR_HW_SETSTATE);
|
||||
}
|
||||
|
||||
logger.logDebug(" the 'hardwareSetState' method performed successfully!");
|
||||
|
||||
|
||||
// sleep here
|
||||
{
|
||||
std::lock_guard lock{*_currentParamsMutex};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user