WSF
WsfTRIMSIM_Processor.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI//REL TO USA ONLY
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 WSFTRIMSIM_PROCESSOR_HPP
13#define WSFTRIMSIM_PROCESSOR_HPP
14
15#include "wsf_nx_export.h"
16
17#include <memory>
18
19#include "UtMatrix.hpp"
24
27class WSF_NX_EXPORT WsfTRIMSIM_Processor : public WsfSensorProcessor
28{
29public:
32 static constexpr unsigned int cDEFAULT_MINIMUM_DETECTIONS = 4U;
33
46 using Detections = std::vector<Detection>;
47
48 explicit WsfTRIMSIM_Processor(WsfScenario& aScenario);
49 ~WsfTRIMSIM_Processor() override = default;
50
52
53 WsfProcessor* Clone() const override;
54 bool ProcessInput(UtInput& aInput) override;
56
58
59 void TurnOn(double aSimTime) override;
61
62 bool AttemptToDetect(double aSimTime, WsfSensor* aSensorPtr, WsfPlatform* aTargetPtr, WsfSensorResult& aResult);
63
65
67
68 const Detections& GetDetections() const { return mDetectionList; }
69 size_t GetDetectionCount() const { return mDetectionList.size(); }
71
72 static void PrintMatrix(const std::string& aTitle, UtMatrixd& aMatrix);
73
74private:
77
79
80
83 void CheckSensors();
84 bool SensorAdded(WsfSensor* aSensorPtr) override;
85 bool SensorRemoved(WsfSensor* aSensorPtr) override;
87
89
90 void AddDetection(double aSimTime, WsfSensor* aSensorPtr, size_t aTargetPlatformIndex, WsfSensorResult& aResult);
91 void ClearDetections() { mDetectionList.clear(); }
93
94 void PrintTDOAInfo(WsfSensor* aSensorPtr);
95
97 unsigned int mMinimumDetections{cDEFAULT_MINIMUM_DETECTIONS};
98
100 std::vector<Detection> mDetectionList;
101
103 std::vector<WsfSensor*> mSensorPtrs;
104};
105
107
111{
112public:
113 static void RegisterComponentFactory(WsfScenario& aScenario);
114 static WsfTRIMSIM_SensorComponent* Find(const WsfSensor& aSensor);
116
119 ~WsfTRIMSIM_SensorComponent() override = default;
121
123
124 WsfComponent* CloneComponent() const override;
125 WsfStringId GetComponentName() const override;
126 const int* GetComponentRoles() const override;
127 void* QueryInterface(int aRole) override;
129
131
132 void PostAttemptToDetect(double aSimTime, WsfPlatform* aTargetPtr, WsfSensorResult& aResult) override;
133
134 void UpdateTrack(double aSimTime, WsfTrack* aTrackPtr, WsfPlatform* aTargetPtr, WsfSensorResult& aResult) override;
136
137 bool GetMeasurementIsValid() const { return mMeasurementIsValid; }
138 void SetMeasurementIsValid(bool aIsValid) { mMeasurementIsValid = aIsValid; }
139
140 UtMatrixd& GetMeasurement() { return mMeasurement; }
141 void SetMeasurement(const UtMatrixd& aMeasurement) { mMeasurement = aMeasurement; }
142
143 UtMatrixd& GetMeasurementErrorCovariance() { return mMeasurementErrorCovariance; }
144 void SetMeasurementErrorCovariance(const UtMatrixd& aMeasurementErrorCovariance)
145 {
146 mMeasurementErrorCovariance = aMeasurementErrorCovariance;
147 }
148
149 UtMatrixd& GetMeasurementTransition() { return mMeasurementTransition; }
150 void SetMeasurementTransition(const UtMatrixd& aMeasurementTransition)
151 {
152 mMeasurementTransition = aMeasurementTransition;
153 }
154
155 void CorrectForAltitude(double aTargetLocWCS[3], // in / out
156 WsfPlatform* aTargetPtr,
157 double aDefaultAltitude = 0.0);
158
159 void SetProcessor(WsfTRIMSIM_Processor* aTRIMSIM_ProcessorPtr) { mTRIMSIM_ProcessorPtr = aTRIMSIM_ProcessorPtr; }
160
161private:
162 void ConvertMatrix(UtMatrixd& aMatrix, WsfTrack* aTrackPtr);
163
164 void ApplyMeasurementErrors(double aSimTime, WsfTrack* aTrackPtr, WsfPlatform* aTargetPtr, WsfSensorResult& aResult);
165
167
168 UtMatrixd mMeasurement;
169 UtMatrixd mMeasurementErrorCovariance;
170 UtMatrixd mMeasurementTransition;
171 bool mMeasurementIsValid;
173
174 WsfTRIMSIM_Processor* mTRIMSIM_ProcessorPtr;
175};
176
178
179
181class WSF_NX_EXPORT WsfTRIMSIM_ErrorModel : public wsf::SensorErrorModelBase
182{
183public:
185
186 static std::unique_ptr<wsf::SensorErrorModelBase> ObjectFactory(const std::string& aTypeName);
187
188 WsfTRIMSIM_ErrorModel* Clone() const override;
189 bool ProcessInput(UtInput& aInput) override;
190 bool Initialize(WsfSensorMode* aSensorModePtr) override;
191
193 {
194 // This class does not apply errors; it is done in WsfTRIMSIM_Processor::ApplyMeasurementErrors.
195 }
196 bool IsNullModel() const override { return true; }
197
199
200 bool ComputeErrors() const { return mComputeErrors; }
201 const std::vector<double>& GetErrors() const { return mErrors; }
202 double GetGroundTargetAltitudeError() const { return mGroundTargetAltitudeError; }
204
205 static const unsigned int cTDOA_ERROR_SIZE;
206 static const unsigned int cTDOA_STATE_SIZE;
207
208protected:
211
212private:
213 // double mTDOA_Errors[7];
214 // north position error sigma (m)
215 // east position error sigma (m)
216 // down position error sigma (m)
217 // reference time error (s)
218 // inter-system time error (s)
219 // sensor timing error (s)
220 // atmospheric refraction error
221
222 bool mComputeErrors;
223 std::vector<double> mErrors;
224 double mGroundTargetAltitudeError;
225};
226
227#endif
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
@ cWSF_COMPONENT_TRIMSIM_SENSOR
TDOA TRIMSIM extension for WsfSensor.
Definition WsfNonExportableComponentRoles.hpp:18
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
Definition WsfComponent.hpp:39
WsfStringId GetComponentName() const override
Definition WsfPlatformPart.hpp:83
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
void TurnOn(double aSimTime) override
Definition WsfProcessor.cpp:183
WsfComponent * CloneComponent() const override
Definition WsfProcessor.hpp:54
WsfProcessor(const WsfScenario &aScenario)
Definition WsfProcessor.cpp:25
const int * GetComponentRoles() const override
Definition WsfProcessor.cpp:46
void * QueryInterface(int aRole) override
Definition WsfProcessor.cpp:53
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfSensorComponent.hpp:36
Definition WsfSensorMode.hpp:36
WsfSensorProcessor & operator=(const WsfSensorProcessor &aRhs)=delete
virtual bool SensorAdded(WsfSensor *aSensorPtr)=0
Clear any data or lists maintained by inheriting classes.
WsfSensorProcessor(WsfScenario &aScenario)
Definition WsfSensorProcessor.cpp:34
bool ProcessInput(UtInput &aInput) override
Definition WsfSensorProcessor.cpp:72
WsfProcessor * Clone() const override=0
virtual bool SensorRemoved(WsfSensor *aSensorPtr)=0
Definition WsfSensorResult.hpp:27
Definition WsfSensor.hpp:92
void ApplyMeasurementErrors(WsfSensorResult &aResult) override
Definition WsfTRIMSIM_Processor.hpp:192
bool ProcessInput(UtInput &aInput) override
Definition WsfTRIMSIM_Processor.cpp:1305
WsfTRIMSIM_ErrorModel & operator=(const WsfTRIMSIM_ErrorModel &)=delete
static const unsigned int cTDOA_STATE_SIZE
Definition WsfTRIMSIM_Processor.hpp:206
bool Initialize(WsfSensorMode *aSensorModePtr) override
Definition WsfTRIMSIM_Processor.cpp:1377
WsfTRIMSIM_ErrorModel()
Definition WsfTRIMSIM_Processor.cpp:1274
static std::unique_ptr< wsf::SensorErrorModelBase > ObjectFactory(const std::string &aTypeName)
Definition WsfTRIMSIM_Processor.cpp:1295
bool IsNullModel() const override
Is this a null model (i.e., ApplyMeasurementErrors has no effect).
Definition WsfTRIMSIM_Processor.hpp:196
const std::vector< double > & GetErrors() const
Definition WsfTRIMSIM_Processor.hpp:201
static const unsigned int cTDOA_ERROR_SIZE
Definition WsfTRIMSIM_Processor.hpp:205
bool ComputeErrors() const
TRIMSIM Errors.
Definition WsfTRIMSIM_Processor.hpp:200
double GetGroundTargetAltitudeError() const
Definition WsfTRIMSIM_Processor.hpp:202
WsfTRIMSIM_ErrorModel(const WsfTRIMSIM_ErrorModel &aSrc)=default
WsfTRIMSIM_ErrorModel * Clone() const override
Create a clone of "this" object.
Definition WsfTRIMSIM_Processor.cpp:1285
Definition WsfTRIMSIM_Processor.hpp:28
~WsfTRIMSIM_Processor() override=default
std::vector< Detection > Detections
Definition WsfTRIMSIM_Processor.hpp:46
bool AttemptToDetect(double aSimTime, WsfSensor *aSensorPtr, WsfPlatform *aTargetPtr, WsfSensorResult &aResult)
Definition WsfTRIMSIM_Processor.cpp:72
const Detections & GetDetections() const
Definition WsfTRIMSIM_Processor.hpp:68
bool ComputeMeasurementErrors(WsfSensor &aSensor)
Definition WsfTRIMSIM_Processor.cpp:165
WsfTRIMSIM_Processor(WsfScenario &aScenario)
Definition WsfTRIMSIM_Processor.cpp:32
static constexpr unsigned int cDEFAULT_MINIMUM_DETECTIONS
Definition WsfTRIMSIM_Processor.hpp:32
size_t GetDetectionCount() const
Definition WsfTRIMSIM_Processor.hpp:69
Definition WsfTRIMSIM_Processor.hpp:111
static WsfTRIMSIM_SensorComponent * FindOrCreate(WsfSensor &aSensor)
Definition WsfTRIMSIM_Processor.cpp:816
void SetMeasurement(const UtMatrixd &aMeasurement)
Definition WsfTRIMSIM_Processor.hpp:141
UtMatrixd & GetMeasurementErrorCovariance()
Definition WsfTRIMSIM_Processor.hpp:143
UtMatrixd & GetMeasurement()
Definition WsfTRIMSIM_Processor.hpp:140
~WsfTRIMSIM_SensorComponent() override=default
static void RegisterComponentFactory(WsfScenario &aScenario)
Register the component factory that handles input for this component.
Definition WsfTRIMSIM_Processor.cpp:799
void UpdateTrack(double aSimTime, WsfTrack *aTrackPtr, WsfPlatform *aTargetPtr, WsfSensorResult &aResult) override
Definition WsfTRIMSIM_Processor.cpp:891
void SetMeasurementErrorCovariance(const UtMatrixd &aMeasurementErrorCovariance)
Definition WsfTRIMSIM_Processor.hpp:144
void SetProcessor(WsfTRIMSIM_Processor *aTRIMSIM_ProcessorPtr)
Definition WsfTRIMSIM_Processor.hpp:159
void PostAttemptToDetect(double aSimTime, WsfPlatform *aTargetPtr, WsfSensorResult &aResult) override
Definition WsfTRIMSIM_Processor.cpp:885
void SetMeasurementTransition(const UtMatrixd &aMeasurementTransition)
Definition WsfTRIMSIM_Processor.hpp:150
static WsfTRIMSIM_SensorComponent * Find(const WsfSensor &aSensor)
Find the instance of this component attached to the specified sensor.
Definition WsfTRIMSIM_Processor.cpp:806
bool GetMeasurementIsValid() const
Definition WsfTRIMSIM_Processor.hpp:137
UtMatrixd & GetMeasurementTransition()
Definition WsfTRIMSIM_Processor.hpp:149
void SetMeasurementIsValid(bool aIsValid)
Definition WsfTRIMSIM_Processor.hpp:138
WsfTRIMSIM_SensorComponent & operator=(const WsfTRIMSIM_SensorComponent &)=delete
WsfTRIMSIM_SensorComponent()
Definition WsfTRIMSIM_Processor.cpp:831
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Detection results.
Definition WsfTRIMSIM_Processor.hpp:36
double mTimeOfDetection
Definition WsfTRIMSIM_Processor.hpp:42
double mSensorVelWCS[3]
Definition WsfTRIMSIM_Processor.hpp:41
WsfSensor * mSensorPtr
Definition WsfTRIMSIM_Processor.hpp:37
double mTrueUnitVecNED[3]
Definition WsfTRIMSIM_Processor.hpp:44
double mSensorLocWCS[3]
Definition WsfTRIMSIM_Processor.hpp:39
double mSensorVelNED[3]
Definition WsfTRIMSIM_Processor.hpp:40
size_t mTargetPlatformIndex
Definition WsfTRIMSIM_Processor.hpp:38
double mTrueRange
Definition WsfTRIMSIM_Processor.hpp:43
Copyrights Multiple, All Rights Reserved