WSF
WsfDefaultFusion.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 2003-2015 The Boeing 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 WSFDEFAULTFUSION_HPP
13#define WSFDEFAULTFUSION_HPP
14
15#include "wsf_export.h"
16
17#include <memory>
18
19#include "UtEntity.hpp"
20class UtScript;
21#include "UtScriptData.hpp"
22class WsfMeasurement;
23#include "WsfCovariance.hpp"
24#include "WsfFusionStrategy.hpp"
26
36{
37public:
38 WsfDefaultFusion(const WsfScenario& aScenario, bool aIsWeightedAverage = false);
39 ~WsfDefaultFusion() override = default;
40 bool ProcessInput(UtInput& aInput) override;
41 bool Initialize(WsfTrackManager* aTrackManagerPtr) override;
42
43 WsfFusionStrategy* Clone() const override { return new WsfDefaultFusion(*this); }
44
45 bool UpdateLocalTrackFromNonLocalTrack(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack) override;
46 bool UpdateLocalResultFromNonLocalResult(double aSimTime,
47 WsfLocalSensorResult& aLocalResult,
48 const WsfSensorResult& aNonLocalResult) override;
49
50 void ReviewTrack(WsfLocalTrack& aLocalTrack) override;
51 static void ReviewTrack(WsfTrackManager& aTrackManager, WsfLocalTrack& aLocalTrack);
52
53 bool UpdateNonKinematicData(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack) override;
54
55protected:
58
59 static void ReviewIFF(WsfTrackManager& aTrackManager, WsfLocalTrack& aLocalTrack);
60
61 static void ReviewTrackQuality(WsfTrackManager& aTrackManager, WsfLocalTrack& aLocalTrack);
62
63 bool UpdateIFF_Status(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack) override;
64
65 bool UpdateSide(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack) override;
66
67 bool UpdateType(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack) override;
68
69 bool UpdateSpatialDomain(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack) override;
70
71 bool UpdateTrackQuality(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack) override;
72
73 bool UpdateSignalToNoise(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack) override;
74
75 bool UpdateSignalList(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack) override;
76
77 bool UpdateAuxData(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack) override;
78
79 // Set whether to use weighted average fusion (use in derived classes).
80 void SetWeightedAverage(bool aIsWeightedAverage) { mIsWeightedAverage = aIsWeightedAverage; }
81
82 void PerformMirrorTrackUpdate(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack);
83
84 bool PerformStandardTrackUpdate(double aSimTime, WsfLocalTrack& aLocalTrack, const WsfTrack& aNonLocalTrack);
85
86private:
87 void UpdateLocation(WsfMeasurement& aLocalMeasurement,
88 const WsfMeasurement& aNonLocalMeasurement,
89 const double aLocationWCS[3],
90 WsfCovariance*& aStateCovarianceMatrixPtr,
91 unsigned int aFusedCount);
92
93 void UpdateTrackStateEstimate(const UtMatrixd& aStateEstimate,
94 const WsfCovariance& aStateCovarianceMatrix,
95 WsfMeasurement& aMeasurement);
96
97 static void GetEstimateFromTrack(double aSimTime, const WsfMeasurement& aMeasurement, UtMatrixd& aEstimate);
98
99 static void SetEstimateInTrack(UtMatrixd& aEstimate, WsfMeasurement& aMeasurement);
100
101 void FuseRangeBearingWithElevation(const WsfMeasurement& aRangeBearingMeasurement,
102 const WsfMeasurement& aElevationMeasurement,
103 bool aCreateMeasurementCovariance,
104 double aLocationWCS[3],
105 WsfCovariance*& aStateCovarianceMatrixPtr);
106
107 void FuseLocationWithRangeBearingElevation(WsfMeasurement& aFusedLocationMeasurement,
108 const WsfMeasurement& aRangeBearingElevationMeasurement,
109 bool aCreateMeasurementCovariance,
110 double aLocationWCS[3],
111 WsfCovariance*& aStateCovarianceMatrixPtr);
112
113 void FuseLocationWith2D_Location(WsfMeasurement& aFusedLocationMeasurement,
114 const WsfMeasurement& a2D_LocationMeasurement,
115 double aLocationWCS[3]);
116
117 void FuseRangeBearing(WsfMeasurement& aFusedLocationMeasurement,
118 const WsfMeasurement& aRangeBearingMeasurement,
119 double aLocationWCS[3]);
120
121 void WeightedAverageFusion1D(double aMeasurement1,
122 double aMeasurement2,
123 double aError1,
124 double aError2,
125 double& aWeightedMeasurement,
126 double& aWeightedError);
127
128 static bool UpdateHasSufficientTrackQuality(const WsfTrack& aTrackUpdate, WsfLocalTrack& aLocalTrack);
129
130 bool mIsWeightedAverage;
131 UtEntity mReferencePoint;
132 std::unique_ptr<WsfScriptContext> mContextPtr;
133 UtScript* mUpdateTypePtr;
134 UtScript* mUpdateSidePtr;
135 UtScript* mUpdateIFF_StatusPtr;
136 UtScriptData* mLocalTrackVarPtr;
137 UtScriptData* mNonLocalTrackVarPtr;
138};
139
140#endif
UtCovariance WsfCovariance
Definition WsfCovariance.hpp:17
ut::script::Data UtScriptData
Definition WsfScriptContext.hpp:47
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfDefaultFusion.hpp:36
void SetWeightedAverage(bool aIsWeightedAverage)
Definition WsfDefaultFusion.hpp:80
static void ReviewTrackQuality(WsfTrackManager &aTrackManager, WsfLocalTrack &aLocalTrack)
Definition WsfDefaultFusion.cpp:749
static void ReviewIFF(WsfTrackManager &aTrackManager, WsfLocalTrack &aLocalTrack)
Definition WsfDefaultFusion.cpp:714
WsfDefaultFusion(const WsfScenario &aScenario, bool aIsWeightedAverage=false)
Definition WsfDefaultFusion.cpp:43
WsfDefaultFusion & operator=(const WsfDefaultFusion &)=delete
WsfFusionStrategy * Clone() const override
Create a clone of "this" object.
Definition WsfDefaultFusion.hpp:43
~WsfDefaultFusion() override=default
virtual bool UpdateSignalList(double aSimTime, WsfLocalTrack &aLocalTrack, const WsfTrack &aNonLocalTrack)
Definition WsfFusionStrategy.hpp:176
virtual bool UpdateTrackQuality(double aSimTime, WsfLocalTrack &aLocalTrack, const WsfTrack &aNonLocalTrack)
Definition WsfFusionStrategy.hpp:166
virtual void ReviewTrack(WsfLocalTrack &aLocalTrack)=0
bool ProcessInput(UtInput &aInput) override
Process input from a common source.
Definition WsfFusionStrategy.hpp:60
virtual bool UpdateLocalResultFromNonLocalResult(double aSimTime, WsfLocalSensorResult &aLocalResult, const WsfSensorResult &aNonLocalResult)=0
virtual bool UpdateType(double aSimTime, WsfLocalTrack &aLocalTrack, const WsfTrack &aNonLocalTrack)
Definition WsfFusionStrategy.hpp:156
WsfFusionStrategy()
Definition WsfFusionStrategy.cpp:111
virtual bool UpdateLocalTrackFromNonLocalTrack(double aSimTime, WsfLocalTrack &aLocalTrack, const WsfTrack &aNonLocalTrack)=0
virtual bool UpdateSignalToNoise(double aSimTime, WsfLocalTrack &aLocalTrack, const WsfTrack &aNonLocalTrack)
Definition WsfFusionStrategy.hpp:171
virtual bool Initialize(WsfTrackManager *aTrackManagerPtr)
Perform any necessary initialization.
Definition WsfFusionStrategy.hpp:63
virtual bool UpdateAuxData(double aSimTime, WsfLocalTrack &aLocalTrack, const WsfTrack &aNonLocalTrack)
Definition WsfFusionStrategy.hpp:181
virtual bool UpdateSpatialDomain(double aSimTime, WsfLocalTrack &aLocalTrack, const WsfTrack &aNonLocalTrack)
Definition WsfFusionStrategy.hpp:161
virtual bool UpdateSide(double aSimTime, WsfLocalTrack &aLocalTrack, const WsfTrack &aNonLocalTrack)
Definition WsfFusionStrategy.hpp:151
virtual bool UpdateNonKinematicData(double aSimTime, WsfLocalTrack &aLocalTrack, const WsfTrack &aNonLocalTrack)
Definition WsfFusionStrategy.cpp:54
virtual bool UpdateIFF_Status(double aSimTime, WsfLocalTrack &aLocalTrack, const WsfTrack &aNonLocalTrack)
Definition WsfFusionStrategy.hpp:146
Definition WsfSensorResult.hpp:129
Definition WsfLocalTrack.hpp:32
A measurement class that provides WSF-specific interfaces and data extrapolation.
Definition WsfMeasurement.hpp:32
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