102 lines
3.5 KiB
C++
102 lines
3.5 KiB
C++
#pragma once
|
|
|
|
/* AstroSib FORK MOUNT FM-700 CONTROL LIBRARY */
|
|
|
|
|
|
/* COMMON LIBRARY DEFINITIONS */
|
|
|
|
|
|
#include <mcc/mcc_concepts.h>
|
|
#include <mcc/mcc_pcm.h>
|
|
#include <mcc/mcc_pzone_container.h>
|
|
#include <mcc/mcc_spdlog.h>
|
|
|
|
|
|
namespace asibfm700
|
|
{
|
|
|
|
namespace details
|
|
{
|
|
|
|
struct movement_pars_t {
|
|
// ******* common for all modes *******
|
|
|
|
// mean celestial rate
|
|
static constexpr double sideralRate = 15.0410686_arcsecs; // in radians per second
|
|
|
|
// timeout to telemetry updating
|
|
std::chrono::milliseconds telemetryTimeout{3000};
|
|
|
|
// minimal time to prohibited zone (at current speed in slewing mode). if it is lesser then exit with error
|
|
std::chrono::seconds minTimeToPZone{10};
|
|
|
|
// time interval to update prohibited zones related quantities (e.g. intersection points)
|
|
std::chrono::milliseconds updatingPZoneInterval{5000};
|
|
|
|
// braking acceleration after execution of mount stopping command (in rads/s^2)
|
|
// it must be given as non-negative value!!!
|
|
double brakingAccelX{0.0};
|
|
double brakingAccelY{0.0};
|
|
|
|
|
|
// ******* slewing mode *******
|
|
|
|
bool slewAndStop{false}; // slew to target and stop mount
|
|
|
|
// coordinates difference to stop slewing (in radians)
|
|
double slewToleranceRadius{5.0_arcsecs};
|
|
|
|
// telemetry request interval
|
|
std::chrono::milliseconds slewingTelemetryInterval{100};
|
|
|
|
// target-mount coordinate difference to start adjusting of slewing (in radians)
|
|
double adjustCoordDiff{slewToleranceRadius * 10.0};
|
|
|
|
// slew process timeout
|
|
std::chrono::seconds slewTimeout{3600};
|
|
|
|
double slewRateX{0.0}; // maximal slewing rate (0 means move with maximal allowed rate????!!!!!)
|
|
double slewRateY{0.0}; // maximal slewing rate (0 means move with maximal allowed rate????!!!!!)
|
|
|
|
std::chrono::milliseconds adjustCycleInterval{500}; // minimum time between two successive adjustments
|
|
|
|
double adjustRateX{5.0_arcmins}; // maximal adjusting rate (a rate at the final slewing stage)
|
|
double adjustRateY{5.0_arcmins}; // maximal adjusting rate (a rate at the final slewing stage)
|
|
|
|
// slewing trajectory file. if empty - just skip saving
|
|
std::string slewingPathFilename{};
|
|
|
|
|
|
// ******* tracking mode *******
|
|
|
|
// telemetry request interval
|
|
std::chrono::milliseconds trackingTelemetryInterval{100};
|
|
|
|
double trackSpeedX{};
|
|
double trackSpeedY{};
|
|
std::chrono::milliseconds trackingCycleInterval{500}; // minimum time between two successive tracking corrections
|
|
bool dualAxisTracking{true}; // mount must be of an equatorial type: false means guiding along only HA-axis
|
|
|
|
// time shift into future to compute target position in future (UT1-scale time duration)
|
|
std::chrono::milliseconds timeShiftToTargetPoint{10000};
|
|
// maximal target-to-mount difference for tracking process (in arcsecs)
|
|
// it it is greater then the current mount coordinates are used as target one
|
|
double trackingMaxCoordDiff{20.0};
|
|
|
|
// tracking trajectory file. if empty - just skip saving
|
|
std::string trackingPathFilename{};
|
|
};
|
|
|
|
} // namespace details
|
|
|
|
|
|
static constexpr mcc::MccMountType asibfm700MountType = mcc::MccMountType::FORK_TYPE;
|
|
|
|
|
|
typedef mcc::ccte::erfa::MccCCTE_ERFA Asibfm700CCTE;
|
|
typedef mcc::impl::MccDefaultPCM<asibfm700MountType> Asibfm700PCM;
|
|
typedef mcc::impl::MccPZoneContainer Asibfm700PZoneContainer;
|
|
typedef mcc::utils::MccSpdlogLogger Asibfm700Logger;
|
|
|
|
} // namespace asibfm700
|