0.4.1
Loading...
Searching...
No Matches
Satellite.cpp
Go to the documentation of this file.
1// This file is part of INSTINCT, the INS Toolkit for Integrated
2// Navigation Concepts and Training by the Institute of Navigation of
3// the University of Stuttgart, Germany.
4//
5// This Source Code Form is subject to the terms of the Mozilla Public
6// License, v. 2.0. If a copy of the MPL was not distributed with this
7// file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9#include "Satellite.hpp"
10
11#include <limits>
12
13namespace NAV
14{
15
17{
18 return searchNavigationData(transTime)->calcSatellitePos(transTime);
19}
20
22{
23 return searchNavigationData(transTime)->calcSatellitePosVel(transTime);
24}
25
27{
28 return searchNavigationData(transTime)->calcSatellitePosVelAccel(transTime);
29}
30
32{
33 return searchNavigationData(recvTime)->calcSatellitePositionVariance();
34}
35
36[[nodiscard]] Clock::Corrections Satellite::calcClockCorrections(const InsTime& recvTime, double dist, const Frequency& freq) const
37{
38 return searchNavigationData(recvTime)->calcClockCorrections(recvTime, dist, freq);
39}
40
41bool Satellite::isHealthy(const InsTime& recvTime) const
42{
43 return searchNavigationData(recvTime)->isHealthy();
44}
45
46void Satellite::addSatNavData(const std::shared_ptr<SatNavData>& satNavData)
47{
48 // First check if item with same time already exists
49 auto iter = std::ranges::find_if(m_navigationData, [&satNavData](const std::shared_ptr<SatNavData>& navData) {
50 return navData->refTime == satNavData->refTime;
51 });
52 if (iter != m_navigationData.end()) // Item with this time does already exist, so we update this item
53 {
54 *iter = satNavData;
55 }
56 else // Otherwise we insert the item into the list in a time sorted way
57 {
58 iter = std::ranges::find_if(m_navigationData, [&satNavData](const std::shared_ptr<SatNavData>& navData) {
59 return navData->refTime > satNavData->refTime;
60 });
61
62 m_navigationData.insert(iter, satNavData);
63 }
64}
65
66const std::vector<std::shared_ptr<SatNavData>>& Satellite::getNavigationData() const
67{
68 return m_navigationData;
69}
70
71std::shared_ptr<SatNavData> Satellite::searchNavigationData(const InsTime& time) const
72{
73 if (m_navigationData.empty()) { return nullptr; }
74
75 auto prevDiff = std::numeric_limits<long double>::max();
76 // auto diff = prevDiff;
77
78 auto riter = m_navigationData.rbegin();
79 for (; riter != m_navigationData.rend(); riter++)
80 {
81 auto diff = std::abs(((*riter)->refTime - time).count());
82 if (diff < prevDiff)
83 {
84 prevDiff = diff;
85 }
86 else
87 {
88 // diff = prevDiff;
89 break;
90 }
91 }
92
93 // This limits the time the navigation data can be used
94 // switch (m_navigationData.front()->type)
95 // {
96 // case NAV::SatNavData::Type::GPSEphemeris:
97 // case NAV::SatNavData::Type::GalileoEphemeris:
98 // case NAV::SatNavData::Type::BeiDouEphemeris:
99 // case NAV::SatNavData::Type::IRNSSEphemeris:
100 // case NAV::SatNavData::Type::QZSSEphemeris:
101 // if (diff > InsTimeUtil::SECONDS_PER_HOUR * 2 + 1e-6)
102 // {
103 // return nullptr;
104 // }
105 // break;
106 // case NAV::SatNavData::Type::GLONASSEphemeris:
107 // case NAV::SatNavData::Type::SBASEphemeris:
108 // if (diff > InsTimeUtil::SECONDS_PER_MINUTE * 15 + 1e-6)
109 // {
110 // return nullptr;
111 // }
112 // break;
113 // }
114
115 return *(--riter);
116}
117
118} // namespace NAV
Calculations and data related to satellite orbit, clock, ...
Frequency definition for different satellite systems.
Definition Frequency.hpp:59
The class is responsible for all time-related tasks.
Definition InsTime.hpp:710
Orbit::PosVelAccel calcSatellitePosVelAccel(const InsTime &transTime) const
Calculates position, velocity and acceleration of the satellite at transmission time.
Definition Satellite.cpp:26
const std::vector< std::shared_ptr< SatNavData > > & getNavigationData() const
Get the navigation data list.
Definition Satellite.cpp:66
double calcSatellitePositionVariance(const InsTime &recvTime) const
Calculates the Variance of the satellite position in [m].
Definition Satellite.cpp:31
void addSatNavData(const std::shared_ptr< SatNavData > &satNavData)
Adds the provided data into the internal time sorted list.
Definition Satellite.cpp:46
Orbit::Pos calcSatellitePos(const InsTime &transTime) const
Calculates position of the satellite at transmission time.
Definition Satellite.cpp:16
Clock::Corrections calcClockCorrections(const InsTime &recvTime, double dist, const Frequency &freq) const
Calculates clock bias and drift of the satellite.
Definition Satellite.cpp:36
bool isHealthy(const InsTime &recvTime) const
Checks whether the signal is healthy.
Definition Satellite.cpp:41
std::vector< std::shared_ptr< SatNavData > > m_navigationData
Time sorted list of orbit and clock information of the satellite.
Definition Satellite.hpp:69
std::shared_ptr< SatNavData > searchNavigationData(const InsTime &time) const
Searches the closest navigation data to the given time.
Definition Satellite.cpp:71
Orbit::PosVel calcSatellitePosVel(const InsTime &transTime) const
Calculates position and velocity of the satellite at transmission time.
Definition Satellite.cpp:21
Satellite clock corrections.
Definition Clock.hpp:28
Satellite Position, Velocity and Acceleration.
Definition Orbit.hpp:40
Satellite Position and Velocity.
Definition Orbit.hpp:34
Satellite Position.
Definition Orbit.hpp:29