...
This commit is contained in:
parent
2dbb23dc46
commit
62258a991b
@ -56,10 +56,16 @@ public:
|
||||
/* constructors and destructor */
|
||||
|
||||
template <fsm::traits::fsm_state_c InitStateT, traits::mcc_input_char_range LogMarkT = std::string_view>
|
||||
MccMount(InitStateT,
|
||||
MccMount(mount_config_t mount_config,
|
||||
InitStateT,
|
||||
std::shared_ptr<spdlog::logger> logger = spdlog::null_logger_mt("NULL"),
|
||||
const LogMarkT& logger_mark = "[MOUNT]")
|
||||
: fsm::MccFiniteStateMachine(InitStateT{}), utils::MccSpdlogLogger(logger)
|
||||
: fsm::MccFiniteStateMachine(InitStateT{}),
|
||||
utils::MccSpdlogLogger(logger),
|
||||
_mountConfig(std::move(mount_config)),
|
||||
_mountTelemetry(_mountConfig.telemetry),
|
||||
_slewModel(_mountConfig.slewModel),
|
||||
_guidingModel(_mountConfig.guidingModel)
|
||||
{
|
||||
addMarkToPatternIdx(logger_mark);
|
||||
|
||||
@ -93,11 +99,18 @@ public:
|
||||
void startGuiding() {}
|
||||
|
||||
|
||||
mount_config_t mountConfig() const
|
||||
{
|
||||
return _mountConfig;
|
||||
}
|
||||
// mount_config_t mountConfig() const
|
||||
// {
|
||||
// return _mountConfig;
|
||||
// }
|
||||
|
||||
// returns "mount_config_t&" or "mount_config_t const&"
|
||||
decltype(auto) mountConfig(this auto&& self)
|
||||
{
|
||||
auto& config_ref = std::forward<decltype(self)>(self)._mountConfig;
|
||||
|
||||
return config_ref;
|
||||
}
|
||||
|
||||
mount_telemetry_data_t mountTelemetryData() const
|
||||
{
|
||||
@ -119,8 +132,6 @@ public:
|
||||
traits::mcc_prohibited_zone_c<mount_telemetry_data_t>... ZTs>
|
||||
size_t pzAddZone(ZT zone, ZTs... zones)
|
||||
{
|
||||
static constexpr auto pi2 = std::numbers::pi / 2.0;
|
||||
|
||||
auto zone_ptr = std::make_shared<ZT>(std::move(zone));
|
||||
|
||||
_pzFuncs.emplace_back(
|
||||
@ -151,7 +162,9 @@ public:
|
||||
|
||||
protected:
|
||||
mount_config_t _mountConfig;
|
||||
mount_telemetry_t _mountTelemetry;
|
||||
mount_telemetry_t& _mountTelemetry;
|
||||
slew_model_t& _slewModel;
|
||||
guiding_model_t& _guidingModel;
|
||||
|
||||
// a type to which the result of calling prohibited zone class methods 'timeTo' and 'timeFrom' will be converted
|
||||
typedef std::chrono::duration<double> pz_duration_t; // seconds as floating-point number
|
||||
|
||||
@ -289,7 +289,8 @@ public:
|
||||
coord_t& dec_app,
|
||||
coord_t& ha,
|
||||
coord_t& az,
|
||||
coord_t& alt)
|
||||
coord_t& alt,
|
||||
eo_t& eo)
|
||||
{
|
||||
std::lock_guard lock{_stateMutex};
|
||||
|
||||
@ -307,12 +308,12 @@ public:
|
||||
pol_pos->x *= arcsec2rad;
|
||||
pol_pos->y *= arcsec2rad;
|
||||
|
||||
double oaz, ozd, oha, odec, ora, eo;
|
||||
double oaz, ozd, oha, odec, ora, eo_;
|
||||
|
||||
int ret = eraAtco13(ra, dec, 0.0, 0.0, 0.0, 0.0, juldate.MJD0, juldate.mjd, dut1->count(), _currentState.lon,
|
||||
_currentState.lat, _currentState.elev, pol_pos->x, pol_pos->y, _currentState.meteo.pressure,
|
||||
_currentState.meteo.temperature, _currentState.meteo.humidity, _currentState.wavelength,
|
||||
&oaz, &ozd, &oha, &odec, &ora, &eo);
|
||||
&oaz, &ozd, &oha, &odec, &ora, &eo_);
|
||||
|
||||
if (ret == 1) {
|
||||
return ERROR_DUBIOUS_YEAR;
|
||||
@ -325,6 +326,7 @@ public:
|
||||
az = oaz;
|
||||
alt = std::numbers::pi / 2.0 - ozd;
|
||||
ha = oha;
|
||||
eo = eo_;
|
||||
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
@ -68,8 +68,8 @@ namespace mcc::traits
|
||||
template <typename T>
|
||||
concept mcc_astrom_engine_c = requires(T t, const T t_const) {
|
||||
requires mcc_error_c<typename T::error_t>;
|
||||
typename T::engine_state_t;
|
||||
requires std::movable<typename T::engine_state_t>;
|
||||
// typename T::engine_state_t;
|
||||
// requires std::movable<typename T::engine_state_t>;
|
||||
|
||||
typename T::coord_t; // type for coordinates representation
|
||||
typename T::time_point_t; // type to represent UTC time point
|
||||
@ -81,20 +81,21 @@ concept mcc_astrom_engine_c = requires(T t, const T t_const) {
|
||||
typename T::refract_result_t;
|
||||
|
||||
|
||||
{ t.setState(std::declval<typename T::engine_state_t>()) };
|
||||
// { t.setState(std::declval<typename T::engine_state_t>()) };
|
||||
|
||||
{ t_const.getState() } -> std::same_as<typename T::engine_state_t>;
|
||||
// { t_const.getState() } -> std::same_as<typename T::engine_state_t>;
|
||||
|
||||
{ t_const.errorString(std::declval<typename T::error_t>()) } -> mcc_formattable;
|
||||
|
||||
/* coordinates conversional methods */
|
||||
|
||||
// ICRS RA and DEC to observed place: icrs2obs(ra, dec, jd, ra_app, dec_app, ha, az, alt)
|
||||
// ICRS RA and DEC to observed place: icrs2obs(ra, dec, jd, ra_app, dec_app, ha, az, alt, eo)
|
||||
{
|
||||
t.icrs2obs(std::declval<typename T::coord_t>(), std::declval<typename T::coord_t>(),
|
||||
std::declval<typename T::juldate_t>(), std::declval<typename T::coord_t&>(),
|
||||
std::declval<typename T::coord_t&>(), std::declval<typename T::coord_t&>(),
|
||||
std::declval<typename T::coord_t&>(), std::declval<typename T::coord_t&>())
|
||||
std::declval<typename T::coord_t&>(), std::declval<typename T::coord_t&>(),
|
||||
std::declval<typename T::eo_t&>())
|
||||
} -> std::same_as<typename T::error_t>;
|
||||
|
||||
// compute hour angle and declination from azimuth and altitude: hadec2azalt(ha, dec, az, alt)
|
||||
@ -185,6 +186,7 @@ concept mcc_mount_pec_c = requires(T t, const T t_const) {
|
||||
requires std::same_as<decltype(T::mountType), const MccMountType>;
|
||||
[]() {
|
||||
static constexpr MccMountType val = T::mountType;
|
||||
return val;
|
||||
}(); // to ensure 'mountType' can be used in compile-time context
|
||||
};
|
||||
|
||||
@ -307,6 +309,7 @@ concept mcc_prohibited_zone_c =
|
||||
requires std::same_as<decltype(T::zoneCoordPairKind), const MccCoordPairKind>;
|
||||
[]() {
|
||||
constexpr MccCoordPairKind val = T::zoneCoordPairKind;
|
||||
return val;
|
||||
}(); // to ensure that 'zoneCoordPairKind' can be used at compile-time context
|
||||
};
|
||||
|
||||
@ -350,7 +353,7 @@ concept mcc_prohibited_zone_c =
|
||||
|
||||
|
||||
template <typename T>
|
||||
concept mcc_mount_config_c = requires(T t) {
|
||||
concept mcc_mount_config_c = std::movable<T> && requires(T t) {
|
||||
// { t.astromEngine() } -> mcc_astrom_engine_c;
|
||||
// { t.pec() } -> mcc_mount_pec_c;
|
||||
// { t.hardware() } -> mcc_mount_hardware_c;
|
||||
|
||||
@ -170,11 +170,12 @@ int main(int argc, char* argv[])
|
||||
|
||||
|
||||
mcc::MccAngle ra1{"10:00:00", mcc::mcc_hms}, dec1{"68:25:10.43"}, ra_o, dec_o, ha1, az1, alt1;
|
||||
mcc::MccAngle eor;
|
||||
|
||||
std::cout << "RA = " << ra1.sexagesimal(true) << ", DEC = " << dec1.sexagesimal() << "\n";
|
||||
|
||||
auto res = erfa.icrs2obs(ra1, dec1, jd, ra_o, dec_o, ha1, az1, alt1);
|
||||
|
||||
mcc::MccAngle eor;
|
||||
auto res = erfa.icrs2obs(ra1, dec1, jd, ra_o, dec_o, ha1, az1, alt1, eor);
|
||||
std::cout << "eq of origins (from icrs2obs) = " << eor.sexagesimal(true) << "\n";
|
||||
|
||||
std::cout << "ret code (icrs2obs) = " << erfa.errorString(res) << "\n";
|
||||
std::cout << "alt = " << alt1.sexagesimal() << "\n";
|
||||
@ -186,7 +187,7 @@ int main(int argc, char* argv[])
|
||||
|
||||
res = erfa.eqOrigins(jd, eor);
|
||||
|
||||
std::cout << "eq of origins = " << eor.sexagesimal(true) << "\n";
|
||||
std::cout << "eq of origins (from eqOrigins) = " << eor.sexagesimal(true) << "\n";
|
||||
std::cout << "RA_app_comp = " << (lst - ha1 + eor).sexagesimal(true) << "\n";
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user