...
This commit is contained in:
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"C_Cpp.default.compilerPath": "/usr/bin/g++-15"
|
||||||
|
}
|
||||||
@@ -377,6 +377,8 @@ void Asibfm700Mount::logMountPos(telemetry_t::telemetry_data_t const& tdata)
|
|||||||
// tdata.mountPos and tdata.targetPos are coordinates in the HA-DEC
|
// tdata.mountPos and tdata.targetPos are coordinates in the HA-DEC
|
||||||
// equathorial system
|
// equathorial system
|
||||||
|
|
||||||
|
logTrace("Current telemetry data:");
|
||||||
|
|
||||||
logTrace(" current target: HA = {}, DEC = {} (encoders: {} {})",
|
logTrace(" current target: HA = {}, DEC = {} (encoders: {} {})",
|
||||||
mcc::impl::MccAngle(tdata.targetPos.co_lon()).sexagesimal(true),
|
mcc::impl::MccAngle(tdata.targetPos.co_lon()).sexagesimal(true),
|
||||||
mcc::impl::MccAngle(tdata.targetPos.co_lat()).sexagesimal(), tdata.targetXY.x().sexagesimal(),
|
mcc::impl::MccAngle(tdata.targetPos.co_lat()).sexagesimal(), tdata.targetXY.x().sexagesimal(),
|
||||||
@@ -387,6 +389,10 @@ void Asibfm700Mount::logMountPos(telemetry_t::telemetry_data_t const& tdata)
|
|||||||
mcc::impl::MccAngle(tdata.mountPos.co_lat()).sexagesimal(), tdata.hwState.XY.x().sexagesimal(),
|
mcc::impl::MccAngle(tdata.mountPos.co_lat()).sexagesimal(), tdata.hwState.XY.x().sexagesimal(),
|
||||||
tdata.hwState.XY.y().sexagesimal());
|
tdata.hwState.XY.y().sexagesimal());
|
||||||
|
|
||||||
|
logTrace(" current mount speed: HA = {}/s, DEC = {}/s",
|
||||||
|
mcc::impl::MccAngleFancyString(tdata.hwState.speedXY.x()),
|
||||||
|
mcc::impl::MccAngleFancyString(tdata.hwState.speedXY.y()));
|
||||||
|
|
||||||
_pathFile.addToPath(tdata);
|
_pathFile.addToPath(tdata);
|
||||||
|
|
||||||
auto dist = tdata.mountPos.distance(tdata.targetPos);
|
auto dist = tdata.mountPos.distance(tdata.targetPos);
|
||||||
@@ -472,7 +478,7 @@ Asibfm700Mount::error_t Asibfm700Mount::slewingImpl(bool slew_and_stop)
|
|||||||
{
|
{
|
||||||
_pathFile.clearPath();
|
_pathFile.clearPath();
|
||||||
|
|
||||||
_enteredBackupCoordinates = getPointingTarget();
|
_enteredBackupCoordinates = telemetry_t::getPointingTarget();
|
||||||
|
|
||||||
typename telemetry_t::telemetry_data_t tdata;
|
typename telemetry_t::telemetry_data_t tdata;
|
||||||
mcc::impl::MccSkyPoint start_target;
|
mcc::impl::MccSkyPoint start_target;
|
||||||
@@ -560,11 +566,14 @@ Asibfm700Mount::error_t Asibfm700Mount::slewingImpl(bool slew_and_stop)
|
|||||||
mcc::impl::MccSkyPoint::dist_result_t dist;
|
mcc::impl::MccSkyPoint::dist_result_t dist;
|
||||||
|
|
||||||
while (!_stopMovementRequest->load()) {
|
while (!_stopMovementRequest->load()) {
|
||||||
|
// check for slewing timeout
|
||||||
if ((std::chrono::steady_clock::now() - start_point) > getMovementParams().slewTimeout) {
|
if ((std::chrono::steady_clock::now() - start_point) > getMovementParams().slewTimeout) {
|
||||||
*_lastMountError = mcc::impl::MccGenericMovementControlsErrorCode::ERROR_SLEW_TIMEOUT;
|
*_lastMountError = mcc::impl::MccGenericMovementControlsErrorCode::ERROR_SLEW_TIMEOUT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// get current mount and target coordinates
|
||||||
*_lastMountError = telemetryData(&tdata);
|
*_lastMountError = telemetryData(&tdata);
|
||||||
|
|
||||||
if (_lastMountError->load()) {
|
if (_lastMountError->load()) {
|
||||||
@@ -573,11 +582,21 @@ Asibfm700Mount::error_t Asibfm700Mount::slewingImpl(bool slew_and_stop)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// detect hardware errors
|
||||||
|
if (tdata.hwState.movementState == hardware_t::hardware_movement_state_t::HW_MOVE_ERROR) {
|
||||||
|
*_lastMountError = mcc::impl::MccGenericMovementControlsErrorCode::ERROR_HARDWARE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for prohibited zones proximity
|
||||||
|
*_lastMountError = checkPZone(tdata, true);
|
||||||
|
if (_lastMountError->load()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (last_hw_time >= tdata.hwState.XY.epoch().UTC()) {
|
if (last_hw_time >= tdata.hwState.XY.epoch().UTC()) {
|
||||||
logTrace("\nSame hardware timepoint! Just continue to polling!\n");
|
logTrace("\nSame hardware timepoint! Just continue to polling!\n");
|
||||||
|
|
||||||
last_hw_time = tdata.hwState.XY.epoch().UTC();
|
|
||||||
|
|
||||||
auto d = getMovementParams().slewingTelemetryInterval / 3;
|
auto d = getMovementParams().slewingTelemetryInterval / 3;
|
||||||
|
|
||||||
if (d.count()) {
|
if (d.count()) {
|
||||||
@@ -589,18 +608,20 @@ Asibfm700Mount::error_t Asibfm700Mount::slewingImpl(bool slew_and_stop)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
last_hw_time = tdata.hwState.XY.epoch().UTC();
|
||||||
|
|
||||||
hw_state.XY.setEpoch(ep_t::now());
|
hw_state.XY.setEpoch(ep_t::now());
|
||||||
|
|
||||||
if (!slew_and_stop) { // update target coordinates only in the "slew-and-track" mode
|
// update target coordinates and corresponded encoder ones only in the "slew-and-track" mode
|
||||||
hw_state.XY.setX(tdata.targetXY.x());
|
if (slew_and_stop) { // restore initial target coordinate
|
||||||
hw_state.XY.setY(tdata.targetXY.y());
|
|
||||||
} else { // restore initial target coordinate
|
|
||||||
init_target.setEpoch(tdata.mountPos.epoch());
|
init_target.setEpoch(tdata.mountPos.epoch());
|
||||||
tdata.targetPos.from(init_target);
|
tdata.targetPos.from(init_target);
|
||||||
|
|
||||||
tdata.targetXY = start_targetXY;
|
tdata.targetXY = start_targetXY;
|
||||||
tdata.targetXY.setEpoch(tdata.mountPos.epoch());
|
tdata.targetXY.setEpoch(tdata.mountPos.epoch());
|
||||||
|
} else {
|
||||||
|
hw_state.XY.setX(tdata.targetXY.x());
|
||||||
|
hw_state.XY.setY(tdata.targetXY.y());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -610,15 +631,14 @@ Asibfm700Mount::error_t Asibfm700Mount::slewingImpl(bool slew_and_stop)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
*_lastMountError = checkPZone(tdata, true);
|
if (slew_and_stop) { // just wait for axes stopping
|
||||||
if (_lastMountError->load()) {
|
if (tdata.hwState.movementState == hardware_t::hardware_movement_state_t::HW_MOVE_STOPPED) {
|
||||||
break;
|
break;
|
||||||
// return _lastMountError->load();
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
dist = tdata.mountPos.distance(tdata.targetPos);
|
dist = tdata.mountPos.distance(tdata.targetPos);
|
||||||
|
|
||||||
if (dist.dist <= getMovementParams().slewToleranceRadius) { // start adjusting (precise pointing)
|
if (dist.dist <= getMovementParams().slewToleranceRadius) {
|
||||||
logInfo("target-to-mount distance is lesser than slew acceptable radius - exit!");
|
logInfo("target-to-mount distance is lesser than slew acceptable radius - exit!");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -634,27 +654,23 @@ Asibfm700Mount::error_t Asibfm700Mount::slewingImpl(bool slew_and_stop)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tdata.hwState.movementState == hardware_t::hardware_movement_state_t::HW_MOVE_STOPPED &&
|
|
||||||
!_stopMovementRequest->load()) {
|
|
||||||
// the mount stopped but still to far from target position!!!
|
|
||||||
if (dist.dist > getMovementParams().slewToleranceRadius) {
|
|
||||||
*_mountStatus = mount_status_t::MOUNT_STATUS_ADJUSTING;
|
|
||||||
|
|
||||||
*_lastMountError = sendToHardware(hw_state);
|
|
||||||
|
|
||||||
if (_lastMountError->load()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else { // just exit
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tdata.hwState.movementState == hardware_t::hardware_movement_state_t::HW_MOVE_ERROR) {
|
// if (tdata.hwState.movementState == hardware_t::hardware_movement_state_t::HW_MOVE_STOPPED &&
|
||||||
*_lastMountError = mcc::impl::MccGenericMovementControlsErrorCode::ERROR_HARDWARE;
|
// !_stopMovementRequest->load()) {
|
||||||
break;
|
// // the mount stopped but still to far from target position!!!
|
||||||
}
|
// if (dist.dist > getMovementParams().slewToleranceRadius) {
|
||||||
|
// *_mountStatus = mount_status_t::MOUNT_STATUS_ADJUSTING;
|
||||||
|
|
||||||
|
// *_lastMountError = sendToHardware(hw_state);
|
||||||
|
|
||||||
|
// if (_lastMountError->load()) {
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// } else { // just exit
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
// sleep here
|
// sleep here
|
||||||
std::this_thread::sleep_for(getMovementParams().slewingTelemetryInterval);
|
std::this_thread::sleep_for(getMovementParams().slewingTelemetryInterval);
|
||||||
@@ -753,7 +769,8 @@ Asibfm700Mount::error_t Asibfm700Mount::trackingImpl()
|
|||||||
mcc::impl::MccAngleFancyString(dist.dist),
|
mcc::impl::MccAngleFancyString(dist.dist),
|
||||||
mcc::impl::MccAngleFancyString(_currentMovementParams.trackingMaxCoordDiff));
|
mcc::impl::MccAngleFancyString(_currentMovementParams.trackingMaxCoordDiff));
|
||||||
|
|
||||||
_enteredBackupCoordinates = getPointingTarget();
|
_enteredBackupCoordinates = telemetry_t::getPointingTarget();
|
||||||
|
|
||||||
setPointingTarget(tdata.mountPos);
|
setPointingTarget(tdata.mountPos);
|
||||||
|
|
||||||
*_lastMountError = telemetryData(&tdata);
|
*_lastMountError = telemetryData(&tdata);
|
||||||
@@ -796,6 +813,12 @@ Asibfm700Mount::error_t Asibfm700Mount::trackingImpl()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// detect hardware errors
|
||||||
|
if (tdata.hwState.movementState == hardware_t::hardware_movement_state_t::HW_MOVE_ERROR) {
|
||||||
|
*_lastMountError = mcc::impl::MccGenericMovementControlsErrorCode::ERROR_HARDWARE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
hw_state.XY.setX(tdata.targetXY.x());
|
hw_state.XY.setX(tdata.targetXY.x());
|
||||||
hw_state.XY.setY(tdata.targetXY.y());
|
hw_state.XY.setY(tdata.targetXY.y());
|
||||||
hw_state.XY.setEpoch(ep_t::now());
|
hw_state.XY.setEpoch(ep_t::now());
|
||||||
@@ -865,13 +888,16 @@ Asibfm700Mount::error_t Asibfm700Mount::stoppingImpl()
|
|||||||
|
|
||||||
if (!_lastMountError->load()) {
|
if (!_lastMountError->load()) {
|
||||||
*_mountStatus = mount_status_t::MOUNT_STATUS_IDLE;
|
*_mountStatus = mount_status_t::MOUNT_STATUS_IDLE;
|
||||||
|
*_lastMountError = mcc::impl::MccGenericMovementControlsErrorCode::ERROR_OK;
|
||||||
} else {
|
} else {
|
||||||
*_mountStatus = mount_status_t::MOUNT_STATUS_ERROR;
|
*_mountStatus = mount_status_t::MOUNT_STATUS_ERROR;
|
||||||
errorLogging("An error occured while stoppping mount: ", _lastMountError->load());
|
errorLogging("An error occured while stoppping mount: ", _lastMountError->load());
|
||||||
}
|
|
||||||
|
|
||||||
if (!_lastMountError->load()) {
|
logError("Try to perform emergency stop!");
|
||||||
*_lastMountError = mcc::impl::MccGenericMountErrorCode::ERROR_OK;
|
*_lastMountError = static_cast<AsibFM700ServoControllerErrorCode>(Mount.emergStop());
|
||||||
|
if (_lastMountError->load()) {
|
||||||
|
errorLogging("An error occured while trying emergency stop: ", _lastMountError->load());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return _lastMountError->load();
|
return _lastMountError->load();
|
||||||
|
|||||||
@@ -63,6 +63,12 @@ public:
|
|||||||
error_t updateMountConfig(std::string const&);
|
error_t updateMountConfig(std::string const&);
|
||||||
Asibfm700MountConfig currentMountConfig();
|
Asibfm700MountConfig currentMountConfig();
|
||||||
|
|
||||||
|
// redefined method
|
||||||
|
auto getPointingTarget() const
|
||||||
|
{
|
||||||
|
return _enteredBackupCoordinates;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Asibfm700MountConfig _mountConfig;
|
Asibfm700MountConfig _mountConfig;
|
||||||
std::unique_ptr<std::mutex> _mountConfigMutex;
|
std::unique_ptr<std::mutex> _mountConfigMutex;
|
||||||
|
|||||||
Reference in New Issue
Block a user