...
This commit is contained in:
@@ -4,10 +4,15 @@
|
||||
#include <mcc/mcc_keyvalue.h>
|
||||
#include <mcc/mcc_pcm.h>
|
||||
#include <filesystem>
|
||||
#include "mcc/mcc_pzone.h"
|
||||
|
||||
namespace asibfm700
|
||||
{
|
||||
|
||||
static constexpr double SAORAS_LATITUDE = 43.646711_degs;
|
||||
static constexpr double SAORAS_LONGITUDE = 41.440732_degs;
|
||||
|
||||
|
||||
template <mcc::impl::mcc_variant_valid_type_c T>
|
||||
struct config_record_t : mcc::impl::mcc_simple_kv_record_t<T> {
|
||||
std::vector<std::string_view> head_comment;
|
||||
@@ -31,8 +36,8 @@ static auto Asibfm700MountConfigurationDefaults = std::make_tuple(
|
||||
|
||||
/* geographic coordinates of the observation site */
|
||||
|
||||
make_config_record("siteLatitude", mcc::impl::MccAngle(43.646711_degs), {"site latitude in degrees"}),
|
||||
make_config_record("siteLongitude", mcc::impl::MccAngle(41.440732_degs), {"site longitude in degrees"}),
|
||||
make_config_record("siteLatitude", mcc::impl::MccAngle(SAORAS_LATITUDE), {"site latitude in degrees"}),
|
||||
make_config_record("siteLongitude", mcc::impl::MccAngle(SAORAS_LONGITUDE), {"site longitude in degrees"}),
|
||||
make_config_record("siteElevation", 2070.0, {"site elevation in meters"}),
|
||||
|
||||
/* celestial coordinate transformation */
|
||||
@@ -62,19 +67,18 @@ static auto Asibfm700MountConfigurationDefaults = std::make_tuple(
|
||||
// NOTE: The first and last values are interpretated as border knots!!!
|
||||
// Thus the array length must be equal to or greater than 2!
|
||||
make_config_record("pcmBsplineXknots",
|
||||
std::vector<double>{0.0, 0.6981317, 1.3962634, 2.0943951, 2.7925268, 3.4906585, 4.1887902,
|
||||
4.88692191, 5.58505361, 6.28318531},
|
||||
mcc::impl::mccGenerateBsplineKnots(0.0, 360.0_degs, 8),
|
||||
{"PCM B-spline knots along X-axis (HA-angle or azimuth). By default from 0 to 2*PI radians",
|
||||
"NOTE: The first and last values are interpretated as border knots!!!",
|
||||
" Thus the array length must be equal to or greater than 2!"}),
|
||||
|
||||
// PCM B-spline knots along Y-axis (declination or zenithal distance). By default from -PI/6 to PI/2 radians
|
||||
// PCM B-spline knots along Y-axis (declination or zenithal distance).
|
||||
// By default from -SAORAS-latitude to PI/2 radians
|
||||
// NOTE: The first and last values are interpretated as border knots!!!
|
||||
// Thus the array length must be equal to or greater than 2!
|
||||
make_config_record(
|
||||
"pcmBsplineYknots",
|
||||
std::vector<double>{-0.52359878, -0.29088821, -0.05817764, 0.17453293, 0.40724349, 0.63995406, 0.87266463,
|
||||
1.10537519, 1.33808576, 1.57079633},
|
||||
mcc::impl::mccGenerateBsplineKnots(-SAORAS_LATITUDE, 90.0_degs, 8),
|
||||
{"PCM B-spline knots along Y-axis (declination or zenithal distance). By default from -PI/6 to PI/2 radians",
|
||||
"NOTE: The first and last values are interpretated as border knots!!!",
|
||||
" Thus the array length must be equal to or greater than 2!"}),
|
||||
@@ -85,7 +89,136 @@ static auto Asibfm700MountConfigurationDefaults = std::make_tuple(
|
||||
// PCM B-spline coeffs for along Y-axis (declination or zenithal distance)
|
||||
make_config_record("pcmBsplineYcoeffs",
|
||||
std::vector<double>{},
|
||||
{"PCM B-spline coeffs for along Y-axis (declination angle)"}));
|
||||
{"PCM B-spline coeffs for along Y-axis (declination angle)"}),
|
||||
|
||||
// inverse PCM B-spline coeffs for along X-axis (HA-angle or azimuth)
|
||||
make_config_record("pcmInverseBsplineXcoeffs",
|
||||
std::vector<double>{},
|
||||
{"Inverse PCM B-spline coeffs for along X-axis (HA-angle)"}),
|
||||
|
||||
// inverse PCM B-spline coeffs for along Y-axis (declination or zenithal distance)
|
||||
make_config_record("pcmInverseBsplineYcoeffs",
|
||||
std::vector<double>{},
|
||||
{"Inverse PCM B-spline coeffs for along Y-axis (declination angle)"}),
|
||||
|
||||
|
||||
/* prohibited zones */
|
||||
|
||||
// minimal altitude (default: 10.0 degrees and SAO RAS latitude)
|
||||
make_config_record("altLimPZ",
|
||||
mcc::impl::MccAltLimitPZ<mcc::impl::MccAltLimitKind::MIN_ALT_LIMIT>{10.0_degs, SAORAS_LATITUDE},
|
||||
{"minimal altitude prohibited zone"}),
|
||||
|
||||
// HA-axis limit switch
|
||||
make_config_record(
|
||||
"axisLimitSwitchHA",
|
||||
mcc::impl::MccAxisLimitSwitchPZ<mcc::impl::MccCoordKind::COORDS_KIND_HA_OBS>{-170.0_degs, 170.0_degs, nullptr},
|
||||
{"HA-axis limit switch stop angles"}),
|
||||
|
||||
// DEC-axis limit switch
|
||||
make_config_record(
|
||||
"axisLimitSwitchDEC",
|
||||
mcc::impl::MccAxisLimitSwitchPZ<mcc::impl::MccCoordKind::COORDS_KIND_DEC_OBS>{-90.0_degs, 90.0_degs, nullptr},
|
||||
{"DEC-axis limit switch stop angles"}),
|
||||
|
||||
|
||||
/* hardware-related */
|
||||
|
||||
// hardware mode: 1 - model mode, otherwise real mode
|
||||
make_config_record("RunModel", 0, {"hardware mode: 1 - model mode, otherwise real mode"}),
|
||||
|
||||
// mount serial device paths
|
||||
make_config_record("MountDevPath", std::string("/dev/ttyUSB0"), {"mount serial device paths"}),
|
||||
|
||||
// mount serial device speed
|
||||
make_config_record("MountDevSpeed", 19200, {"mount serial device speed"}),
|
||||
|
||||
// motor encoders serial device path
|
||||
make_config_record("EncoderDevPath", std::string(""), {"motor encoders serial device path"}),
|
||||
|
||||
// X-axis encoder serial device path
|
||||
make_config_record("EncoderXDevPath", std::string("/dev/encoder_X0"), {"X-axis encoder serial device path"}),
|
||||
|
||||
// Y-axis encoder serial device path
|
||||
make_config_record("EncoderYDevPath", std::string("/dev/encoder_Y0"), {"Y-axis encoder serial device path"}),
|
||||
|
||||
// encoders serial device speed
|
||||
make_config_record("EncoderDevSpeed", 153000, {"encoders serial device speed"}),
|
||||
|
||||
// ==1 if encoder works as separate serial device, ==2 if there's new version with two devices
|
||||
make_config_record("SepEncoder",
|
||||
2,
|
||||
{"==1 if encoder works as separate serial device, ==2 if there's new version with two devices"}),
|
||||
|
||||
|
||||
// mount polling interval in millisecs
|
||||
make_config_record("MountReqInterval", std::chrono::milliseconds(100), {"mount polling interval in millisecs"}),
|
||||
|
||||
// encoders polling interval in millisecs
|
||||
make_config_record("EncoderReqInterval", std::chrono::milliseconds(1), {"encoders polling interval in millisecs"}),
|
||||
|
||||
// mount axes rate calculation interval in millisecs
|
||||
make_config_record("EncoderSpeedInterval",
|
||||
std::chrono::milliseconds(50),
|
||||
{"mount axes rate calculation interval in millisecs"}),
|
||||
|
||||
make_config_record("PIDMaxDt",
|
||||
std::chrono::milliseconds(1000),
|
||||
{"maximal PID refresh time interval in millisecs",
|
||||
"NOTE: if PID data will be refreshed with interval longer than this value (e.g. user polls "
|
||||
"encoder data too rarely)",
|
||||
"then the PID 'expired' data will be cleared and new computing loop is started"}),
|
||||
|
||||
make_config_record("PIDRefreshDt", std::chrono::milliseconds(100), {"PID refresh interval"}),
|
||||
|
||||
make_config_record("PIDCycleDt",
|
||||
std::chrono::milliseconds(5000),
|
||||
{"PID I cycle time (analog of 'RC' for PID on opamps)"}),
|
||||
|
||||
|
||||
|
||||
// X-axis coordinate PID P,I,D-params
|
||||
make_config_record("XPIDC", std::vector<double>{0.5, 0.1, 0.2}, {"X-axis coordinate PID P,I,D-params"}),
|
||||
|
||||
// X-axis rate PID P,I,D-params
|
||||
make_config_record("XPIDV", std::vector<double>{0.09, 0.0, 0.05}, {"X-axis rate PID P,I,D-params"}),
|
||||
|
||||
// Y-axis coordinate PID P, I, D-params
|
||||
make_config_record("YPIDC", std::vector<double>{0.5, 0.1, 0.2}, {"Y-axis coordinate PID P, I, D-params"}),
|
||||
|
||||
// Y-axis rate PID P,I,D-params
|
||||
make_config_record("YPIDV", std::vector<double>{0.09, 0.0, 0.05}, {"Y-axis rate PID P,I,D-params"}),
|
||||
|
||||
|
||||
// maximal moving rate (degrees per second) along HA-axis (Y-axis of Sidereal servo microcontroller)
|
||||
make_config_record(
|
||||
"hwMaxRateHA",
|
||||
mcc::impl::MccAngle(8.0_degs),
|
||||
{"maximal moving rate (degrees per second) along HA-axis (Y-axis of Sidereal servo microcontroller)"}),
|
||||
|
||||
// maximal moving rate (degrees per second) along DEC-axis (X-axis of Sidereal servo microcontroller)
|
||||
make_config_record(
|
||||
"hwMaxRateDEC",
|
||||
mcc::impl::MccAngle(10.0_degs),
|
||||
{"maximal moving rate (degrees per second) along DEC-axis (X-axis of Sidereal servo microcontroller)"}),
|
||||
|
||||
make_config_record("MaxPointingErr",
|
||||
mcc::impl::MccAngle(8.0_degs),
|
||||
{"slewing-to-pointing mode angular limit in degrees"}),
|
||||
|
||||
make_config_record("MaxFinePointingErr",
|
||||
mcc::impl::MccAngle(1.5_degs),
|
||||
{"pointing-to-guiding mode angular limit in degrees"}),
|
||||
|
||||
make_config_record("MaxGuidingErr",
|
||||
mcc::impl::MccAngle(0.5_arcsecs),
|
||||
{"guiding 'good'-flag error cirle radius (mount-to-target distance) in degrees"}),
|
||||
|
||||
make_config_record("XEncZero", (int64_t)0, {"X-axis encoder zero-point in ticks"}),
|
||||
|
||||
make_config_record("YEncZero", (int64_t)0, {"Y-axis encoder zero-point in ticks"})
|
||||
|
||||
);
|
||||
|
||||
class Asibfm700MountConfiguration : public mcc::impl::MccKeyValueHolder<decltype(Asibfm700MountConfigurationDefaults)>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user