WSF
WsfOrbitDeterminationFusion.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2016 Infoscitex, a DCS Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFORBITDETERMINATIONFUSION_HPP
13#define WSFORBITDETERMINATIONFUSION_HPP
14
15#include "wsf_space_export.h"
16
17#include <vector>
18
19class UtCalendar;
20#include "UtCallbackHolder.hpp"
21class UtECI_Conversion;
22class UtOrbitalPropagator;
23class UtOrbitalPropagatorBase;
24
25#include "WsfEvent.hpp"
26class WsfMeasurement;
27#include "WsfDefaultFusion.hpp"
28#include "WsfKalmanFilter.hpp"
30#include "WsfTrackId.hpp"
31class WsfTrack;
32
34class WSF_SPACE_EXPORT WsfOrbitDeterminationFusion : public WsfDefaultFusion
35{
36public:
37 explicit WsfOrbitDeterminationFusion(const WsfScenario& aScenario);
40 ~WsfOrbitDeterminationFusion() override = default;
41
42 WsfFusionStrategy* Clone() const override { return new WsfOrbitDeterminationFusion(*this); }
43 bool ProcessInput(UtInput& aInput) override;
44 bool Initialize(WsfTrackManager* aTrackManagerPtr) override;
45
46 bool UpdateLocalTrackFromNonLocalTrack(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack) override;
48 WsfLocalSensorResult& aLocalResult,
49 const WsfSensorResult& aNonLocalResult) override
50 {
51 return false;
52 }
53
54 void ReviewTrack(WsfLocalTrack& aLocalTrack) override;
55
56 static void ReviewTrack(WsfTrackManager& aTrackManager, WsfLocalTrack& aLocalTrack);
57
58protected:
59 static bool IsBearingElevation(const UtMeasurementData& aTrack);
60 static bool IsLocation(const UtMeasurementData& aTrack);
61
62private:
63 bool AnglesOnlyInitialGuess(const UtVec3d& aUnitTargetVecECI_1,
64 const UtVec3d& aSiteLocECI_1,
65 const UtVec3d& aUnitTargetVecECI_2,
66 const UtVec3d& aSiteLocECI_2,
67 double aDt,
68 UtVec3d& aLocationECI_1,
69 UtVec3d& aLocationECI_2);
70
71 using MeasurementList = std::vector<const WsfMeasurement*>;
72
73 bool AnglesOnlyKinematicSolution(const MeasurementList& aData,
74 std::vector<UtVec3d>& aLocECI,
75 std::vector<UtVec3d>& aVelECI);
76 void ComputeVelocities(const MeasurementList& aData, const std::vector<UtVec3d>& aLocECI, std::vector<UtVec3d>& aVelECI);
77
78 void ComputeCircularLocationsAndSpeeds(const UtVec3d& aUnitTargetVecECI_1,
79 const UtVec3d& aSiteLocECI_1,
80 const UtVec3d& aUnitTargetVecECI_2,
81 const UtVec3d& aSiteLocECI_2,
82 double aDt,
83 double aRadius,
84 UtVec3d& aLocationECI_1,
85 UtVec3d& aLocationECI_2,
86 double& aGeometricSpeed,
87 double& aGravitationalSpeed);
88 void ComputeLambertf_g(const UtVec3d& aLocECI, const UtVec3d& aVelECI, double aDeltaT, double& aF, double& aG);
89
90 bool CreateFilterOnTrack(double aSimTime, WsfLocalTrack& aLocalTrack, UtOrbitalPropagatorBase& aPropagator);
91
92 void ConvertBearingElevation(const UtMeasurementData& aBearingElevationTrack,
93 UtVec3d& aUnitTargetVecECI,
94 UtVec3d& aSiteLocationECI);
95
96 void ConvertLocation(const UtECI_Conversion& aConversion, const UtMeasurementData& aLocationTrack, UtVec3d& aTargetLocECI);
97
98 MeasurementList GetFusionCandidates(WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack, bool aGetAnglesCandidates);
99
100 bool FuseInitialLocations(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack);
101
102 bool FuseInitialAngles(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack);
103
104 void GetSimCalendarTime(double aSimTime, UtCalendar& aSimCalendarTime);
105
106 bool UpdateTrackFromEstimate(double aSimTime, WsfLocalTrack& aLocalTrack, UtMeasurementData& aEstimate);
107
108 void PrintAnglesOnlyData(const WsfTrack& aTrack,
109 const UtVec3d& aLocationECI,
110 const UtVec3d& aVelocityECI,
111 double aRange) const;
112
113 UtOrbitalPropagatorBase* GetPropagator(const WsfTrack& aTrack);
114
115 UtOrbitalPropagatorBase* AddPropagator(WsfTrack& aTrack);
116
117 const ut::CentralBody& GetCentralBody() const;
118
119 WsfOrbitDeterminationKalmanFilter mPrototypeFilter;
120 unsigned mNumberOfAnglesMeasurementsNeeded;
121 double mLambertConvergenceTolerance;
122 double mRangeErrorFactor;
123 unsigned mAnglesOnlyMaxIterations;
124 double mAnglesOnlyLinearTolerance;
125 bool mDebug;
126};
127
128#endif
bool Initialize(WsfTrackManager *aTrackManagerPtr) override
Perform any necessary initialization.
Definition WsfDefaultFusion.cpp:72
bool ProcessInput(UtInput &aInput) override
Definition WsfDefaultFusion.cpp:56
WsfDefaultFusion(const WsfScenario &aScenario, bool aIsWeightedAverage=false)
Definition WsfDefaultFusion.cpp:43
void ReviewTrack(WsfLocalTrack &aLocalTrack) override
Definition WsfDefaultFusion.cpp:87
bool UpdateLocalTrackFromNonLocalTrack(double aSimTime, WsfLocalTrack &aLocalTrack, const WsfTrack &aNonLocalTrack) override
Definition WsfDefaultFusion.cpp:105
WsfFusionStrategy()
Definition WsfFusionStrategy.cpp:111
Definition WsfSensorResult.hpp:129
Definition WsfLocalTrack.hpp:32
A measurement class that provides WSF-specific interfaces and data extrapolation.
Definition WsfMeasurement.hpp:32
WsfFusionStrategy * Clone() const override
Create a clone of "this" object.
Definition WsfOrbitDeterminationFusion.hpp:42
WsfOrbitDeterminationFusion & operator=(const WsfOrbitDeterminationFusion &)=delete
WsfOrbitDeterminationFusion(const WsfScenario &aScenario)
Definition WsfOrbitDeterminationFusion.cpp:115
bool UpdateLocalResultFromNonLocalResult(double aSimTime, WsfLocalSensorResult &aLocalResult, const WsfSensorResult &aNonLocalResult) override
Definition WsfOrbitDeterminationFusion.hpp:47
~WsfOrbitDeterminationFusion() override=default
WsfOrbitDeterminationFusion(const WsfOrbitDeterminationFusion &aSrc)=default
Implement an OrbitDeterminationKalmanFilter as a WsfFilter.
Definition WsfOrbitDeterminationKalmanFilter.hpp:26
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfSensorResult.hpp:27
Definition WsfTrackManager.hpp:62
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
Copyrights Multiple, All Rights Reserved