WSF
WsfPerceptionProcessor.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 WSFPERCEPTIONPROCESSOR_HPP
13#define WSFPERCEPTIONPROCESSOR_HPP
14
15#include <map>
16#include <set>
17#include <string>
18#include <vector>
19
20#include "UtCallbackHolder.hpp"
21class UtInput;
22class UtScriptContext;
23class WsfAssetMessage;
25class WsfComm;
26#include "wsf_mil_export.h"
27
28#include "WsfEvent.hpp"
29#include "WsfHeatMap.hpp"
30class WsfLocalTrack;
31class WsfPlatform;
34class WsfTrackId;
35class WsfTrackManager;
36
37class WSF_MIL_EXPORT WsfPerceptionProcessor : public WsfScriptProcessor
38{
39public:
41
47
56
57 static WsfPerceptionProcessor* GetPerceptionProcessor(WsfPlatform& aPlatform);
58
60
61 static std::vector<WsfAssetPerception*>& GetPlatformPerceivedAssets(WsfPlatform& aPlatform,
62 double aSimTime); // empty if no perception
63 // processor is on the platform
64 static std::vector<WsfLocalTrack*>& GetPlatformPerceivedThreats(WsfPlatform& aPlatform,
65 double aSimTime); // empty if no perception processor
66 // is on the platform
68
69
70 WsfPerceptionProcessor(const WsfScenario& aScenario);
72 ~WsfPerceptionProcessor() override;
73 WsfPerceptionProcessor* Clone() const override { return new WsfPerceptionProcessor(*this); }
74
76
77 bool Initialize(double aSimTime) override;
78 void Update(double aSimTime) override;
79 bool ProcessInput(UtInput& aInput) override;
80
81 UtScriptClass* CreateScriptClass(const std::string& aClassName, UtScriptTypes* aScriptTypesPtr);
82
83 static WsfPerceptionProcessor* CreatePerceptionProcessor(double aSimTime, WsfPlatform& aPlatform);
84
85 const char* GetScriptClassName() const override { return "WsfPerceptionProcessor"; }
87
89 bool PossibleEnemy(WsfLocalTrack* aTrackPtr);
90
92
93 void LocalTrackDropped(double aSimTime, const WsfLocalTrack* aLocalTrackPtr);
94
95 bool ProcessMessage(double aSimTime, const WsfMessage& aMessage) override;
96
97 void TrackManagerChanged(double aSimTime, WsfTrackManager* aNewManagerPtr);
99
101
102 std::vector<WsfAssetPerception*>& PerceivedAssets(double aSimTime);
103 std::vector<WsfLocalTrack*>& PerceivedThreats(double aSimTime);
104
105 WsfAssetPerception* PerceivedAsset(size_t aPlatformIndex);
106 WsfAssetPerception* NearestAsset(double aSimTime);
107 WsfLocalTrack* PerceivedThreat(WsfStringId targetNameId);
108 WsfLocalTrack* PerceivedThreat(WsfTrackId& trackId);
109 WsfLocalTrack* NearestThreat(double aSimTime);
111
113
115
116 void MarkAssetAsImportant(WsfPlatform& aAsset);
117 void MarkAssetAsImportant(size_t aIndex);
118 void MarkAssetAsUnimportant(WsfPlatform& aAsset);
119 void MarkAssetAsUnimportant(size_t aIndex);
120
121 void MarkThreatAsImportant(WsfLocalTrack& aThreat);
122 void MarkThreatAsUnimportant(WsfLocalTrack& aThreat);
123
124 void MarkAssetTypeAsImportant(WsfStringId aType);
125 void MarkAssetTypeAsUnimportant(WsfStringId aType);
126 void MarkThreatTypeAsImportant(WsfStringId aType);
127 void MarkThreatTypeAsUnimportant(WsfStringId aType);
128
129 bool SetScriptAssetScoringFunction(UtScriptContext* aContextPtr, WsfStringId aFunctionName);
130 bool SetScriptThreatScoringFunction(UtScriptContext* aContextPtr, WsfStringId aFunctionName);
131 bool AssetScore(WsfAssetPerception* aAssetPtr, double& score);
132 bool ThreatScore(WsfLocalTrack* aThreatPtr, double& score);
134
136
137 void AddExtraCognitiveLoading(double timeDelay);
138
140 void SetAssetUpdateInterval(double aInterval);
141
143 void SetThreatUpdateInterval(double aInterval);
144
145 double MaxAssetLoad() { return mMaxAssetLoad; }
146 void SetMaxAssetLoad(int aLoad) { mMaxAssetLoad = aLoad; }
147
148 double MaxThreatLoad() { return mMaxThreatLoad; }
149 void SetMaxThreatLoad(int aLoad) { mMaxThreatLoad = aLoad; }
151
155 bool HasExternalLinks() { return mExternalLinks.HasLinks(); }
156
158 std::set<WsfPlatform*> TruthAssets(); // set of assets according to: mTruthPerceptionMask
159
160protected:
162
163 double TryUpdateThreats(double aSimTime);
164 void UpdateThreats(double aSimTime);
165
166 double TryUpdateAssets(double aSimTime); // returns appropriate time for next event update of assets
167 void UpdateAssets(double aSimTime);
168
169 double SendStatus(double aSimTime);
170
171 UtCallbackHolder mCallbacks;
172
174
176
181 double mThreatUpdateInterval; // seconds between threat perception updates (negative value means always updated)
182 double mAssetUpdateInterval; // seconds between asset perception updates (negative value means always updated)
183 int mMaxThreatLoad; // max number of threats that can be perceived (negative value means no limit)
184 int mMaxAssetLoad; // max number of assets that can be perceived (negative value means no limit)
186 unsigned int mTruthPerceptionMask; // WsfComm:: cCOMMANDER | cPEERS | cSUBORDINATES
187
190
191 std::vector<WsfLocalTrack*> mPerceivedThreats;
192 std::vector<WsfAssetPerception*> mPerceivedAssets;
193
194 std::map<size_t, WsfAssetPerception*> mReceivedAssetStatus;
195
196 bool Important(WsfLocalTrack* aThreatPtr);
197 bool Important(WsfPlatform* aAssetPtr);
198 bool Important(size_t aPlatformIndex);
199 bool Unimportant(WsfLocalTrack* aThreatPtr);
200 bool Unimportant(WsfPlatform* aAssetPtr);
201 bool Unimportant(size_t aPlatformIndex);
202
203 std::map<size_t, int> mImportantThreats; // should be included in perception (track's target platform index -> 1)
204 std::map<size_t, int> mImportantAssets; // should be included in perception (asset's platform index -> 1)
205 std::map<size_t, int> mUnimportantThreats; // should NOT be included in perception (track's target platform index -> 1)
206 std::map<size_t, int> mUnimportantAssets; // should NOT be included in perception (asset's platform index -> 1)
207
208 std::map<WsfStringId, int> mImportantThreatTypes;
209 std::map<WsfStringId, int> mImportantAssetTypes;
210 std::map<WsfStringId, int> mUnimportantThreatTypes;
211 std::map<WsfStringId, int> mUnimportantAssetTypes;
212
213 std::vector<double> mExtraCognitiveDelaysThreats;
214 std::vector<double> mExtraCognitiveDelaysAssets;
215
222};
223
224
225// An event to force cognitive model updates
226class WSF_MIL_EXPORT WsfPerceptionProcessorUpdateEvent : public WsfEvent
227{
228public:
235
236 WsfPerceptionProcessorUpdateEvent(double aSimTime,
237 size_t aPlatformIndex,
238 WsfPerceptionProcessor* aModelPtr,
239 CognitiveUpdateType aType);
240
241 EventDisposition Execute() override;
242
243private:
244 size_t mPlatformIndex;
245 WsfPerceptionProcessor* mPercProcPtr;
246 CognitiveUpdateType mType;
247};
248
249
251{
252public:
253 WsfScriptPerceptionProcessor(const std::string& aClassName, UtScriptTypes* aScriptTypesPtr);
254
255 void* Create(const UtScriptContext& aContext) override;
256 void* Clone(void* aObjectPtr) override;
257 void Destroy(void* aObjectPtr) override;
258 UtScriptContext* GetContext(void* aObjectPtr) override;
259
260 UT_DECLARE_SCRIPT_METHOD(PerceivedAssets);
261 UT_DECLARE_SCRIPT_METHOD(PerceivedThreats);
264 UT_DECLARE_SCRIPT_METHOD(AddExtraCognitiveLoading);
265
266 UT_DECLARE_SCRIPT_METHOD(SetAssetImportant);
267 UT_DECLARE_SCRIPT_METHOD(SetAssetImportant_2);
268 UT_DECLARE_SCRIPT_METHOD(SetAssetUnimportant);
269 UT_DECLARE_SCRIPT_METHOD(SetAssetUnimportant_2);
270
271 UT_DECLARE_SCRIPT_METHOD(SetThreatImportant);
272 UT_DECLARE_SCRIPT_METHOD(SetThreatUnimportant);
273
274 UT_DECLARE_SCRIPT_METHOD(SetAssetTypeImportant);
275 UT_DECLARE_SCRIPT_METHOD(SetAssetTypeUnimportant);
276 UT_DECLARE_SCRIPT_METHOD(SetThreatTypeImportant);
277 UT_DECLARE_SCRIPT_METHOD(SetThreatTypeUnimportant);
278
280 UT_DECLARE_SCRIPT_METHOD(GetNearestMaxHeat);
282 UT_DECLARE_SCRIPT_METHOD(GetHeatSourcesCount);
283
284 // TODO : add accessors for threat/asset update interval & max loading???
285};
286
287
288#endif
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
Definition WsfAssetMessage.hpp:29
Definition WsfAssetPerception.hpp:32
WsfEvent()=default
Definition WsfHeatMap.hpp:34
Definition WsfLocalTrack.hpp:32
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
Definition WsfPerceptionProcessor.hpp:227
CognitiveUpdateType
Definition WsfPerceptionProcessor.hpp:230
@ STATUS
Definition WsfPerceptionProcessor.hpp:233
@ ASSETS
Definition WsfPerceptionProcessor.hpp:232
@ THREATS
Definition WsfPerceptionProcessor.hpp:231
WsfPerceptionProcessorUpdateEvent(double aSimTime, size_t aPlatformIndex, WsfPerceptionProcessor *aModelPtr, CognitiveUpdateType aType)
Definition WsfPerceptionProcessor.cpp:1284
Definition WsfPerceptionProcessor.hpp:38
unsigned int mTruthPerceptionMask
Definition WsfPerceptionProcessor.hpp:186
double StatusMessageReportInterval()
asset status reporting interval
Definition WsfPerceptionProcessor.hpp:153
std::map< WsfStringId, int > mImportantAssetTypes
Definition WsfPerceptionProcessor.hpp:209
int mMaxAssetLoad
Definition WsfPerceptionProcessor.hpp:184
double mThreatUpdateInterval
Definition WsfPerceptionProcessor.hpp:181
std::map< size_t, int > mImportantAssets
Definition WsfPerceptionProcessor.hpp:204
int mMaxThreatLoad
Definition WsfPerceptionProcessor.hpp:183
void SetMaxAssetLoad(int aLoad)
Definition WsfPerceptionProcessor.hpp:146
AssetPerceptionType
Definition WsfPerceptionProcessor.hpp:43
@ STATUS_MESSAGES
Definition WsfPerceptionProcessor.hpp:45
@ TRUTH
Definition WsfPerceptionProcessor.hpp:44
void SetMaxThreatLoad(int aLoad)
Definition WsfPerceptionProcessor.hpp:149
WsfPerceptionProcessor & operator=(const WsfPerceptionProcessor &)=delete
bool mReportingSelfStatus
Definition WsfPerceptionProcessor.hpp:178
std::vector< double > mExtraCognitiveDelaysThreats
Definition WsfPerceptionProcessor.hpp:213
std::map< size_t, int > mUnimportantThreats
Definition WsfPerceptionProcessor.hpp:205
std::map< WsfStringId, int > mImportantThreatTypes
Definition WsfPerceptionProcessor.hpp:208
std::map< WsfStringId, int > mUnimportantAssetTypes
Definition WsfPerceptionProcessor.hpp:211
WsfPerceptionProcessor(const WsfScenario &aScenario)
Definition WsfPerceptionProcessor.cpp:36
WsfHeatMap * HeatMap()
Definition WsfPerceptionProcessor.hpp:112
UtScript * mAssetFunctionScriptPtr
Definition WsfPerceptionProcessor.hpp:218
std::vector< WsfLocalTrack * > mPerceivedThreats
Definition WsfPerceptionProcessor.hpp:191
std::map< size_t, int > mUnimportantAssets
Definition WsfPerceptionProcessor.hpp:206
double MaxThreatLoad()
Definition WsfPerceptionProcessor.hpp:148
UtScriptContext * mThreatFunctionScriptContext
Definition WsfPerceptionProcessor.hpp:219
double mAssetUpdateInterval
Definition WsfPerceptionProcessor.hpp:182
UtCallbackHolder mCallbacks
Definition WsfPerceptionProcessor.hpp:171
bool HasExternalLinks()
standard query
Definition WsfPerceptionProcessor.hpp:155
std::vector< WsfAssetPerception * > mPerceivedAssets
Definition WsfPerceptionProcessor.hpp:192
double MaxAssetLoad()
Definition WsfPerceptionProcessor.hpp:145
bool Important(WsfLocalTrack *aThreatPtr)
Definition WsfPerceptionProcessor.cpp:857
WsfPerceptionProcessor * Clone() const override
Definition WsfPerceptionProcessor.hpp:73
WsfStringId mThreatFunctionScriptName
Definition WsfPerceptionProcessor.hpp:220
friend class WsfPerceptionProcessorUpdateEvent
Definition WsfPerceptionProcessor.hpp:40
UtScript * mThreatFunctionScriptPtr
Definition WsfPerceptionProcessor.hpp:221
RecipientType
Definition WsfPerceptionProcessor.hpp:49
@ cALLSUBORDINATES
Definition WsfPerceptionProcessor.hpp:54
@ cPEERS
Definition WsfPerceptionProcessor.hpp:51
@ cALLCOMMANDERS
Definition WsfPerceptionProcessor.hpp:53
@ cCOMMANDER
Definition WsfPerceptionProcessor.hpp:50
@ cSUBORDINATES
Definition WsfPerceptionProcessor.hpp:52
UtScriptContext * mAssetFunctionScriptContextPtr
Definition WsfPerceptionProcessor.hpp:216
double mStatusMessageReportInterval
Definition WsfPerceptionProcessor.hpp:177
std::map< size_t, WsfAssetPerception * > mReceivedAssetStatus
Definition WsfPerceptionProcessor.hpp:194
std::vector< double > mExtraCognitiveDelaysAssets
Definition WsfPerceptionProcessor.hpp:214
std::map< WsfStringId, int > mUnimportantThreatTypes
Definition WsfPerceptionProcessor.hpp:210
bool mPerceiveSelfStatus
Definition WsfPerceptionProcessor.hpp:180
AssetPerceptionType mAssetPerception
Definition WsfPerceptionProcessor.hpp:185
const char * GetScriptClassName() const override
Definition WsfPerceptionProcessor.hpp:85
double mLastAssetUpdateTime
Definition WsfPerceptionProcessor.hpp:188
bool Unimportant(WsfLocalTrack *aThreatPtr)
Definition WsfPerceptionProcessor.cpp:903
bool mReportingOthersStatus
Definition WsfPerceptionProcessor.hpp:179
std::map< size_t, int > mImportantThreats
Definition WsfPerceptionProcessor.hpp:203
WsfHeatMap * mHeatMapPtr
Definition WsfPerceptionProcessor.hpp:175
WsfStringId mAssetFunctionScriptName
Definition WsfPerceptionProcessor.hpp:217
double ThreatUpdateInterval()
Definition WsfPerceptionProcessor.hpp:142
double mLastThreatUpdateTime
Definition WsfPerceptionProcessor.hpp:189
WsfTrackManager * mTrackManagerPtr
Definition WsfPerceptionProcessor.hpp:173
double AssetUpdateInterval()
Definition WsfPerceptionProcessor.hpp:139
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
void Destroy(void *aObjectPtr) override
Definition WsfPerceptionProcessor.cpp:1378
UT_DECLARE_SCRIPT_METHOD(SetAssetUnimportant)
UT_DECLARE_SCRIPT_METHOD(PerceivedAssets)
UT_DECLARE_SCRIPT_METHOD(SetAssetTypeImportant)
UT_DECLARE_SCRIPT_METHOD(SetThreatTypeUnimportant)
UT_DECLARE_SCRIPT_METHOD(SetAssetTypeUnimportant)
UT_DECLARE_SCRIPT_METHOD(SetAssetImportant)
UT_DECLARE_SCRIPT_METHOD(AddExtraCognitiveLoading)
UT_DECLARE_SCRIPT_METHOD(GetNearestMaxHeat)
UT_DECLARE_SCRIPT_METHOD(GetHeatSourcesCount)
void * Create(const UtScriptContext &aContext) override
Definition WsfPerceptionProcessor.cpp:1364
UT_DECLARE_SCRIPT_METHOD(GetNearestHeat)
UT_DECLARE_SCRIPT_METHOD(NearestThreat)
UtScriptContext * GetContext(void *aObjectPtr) override
Definition WsfPerceptionProcessor.cpp:1384
UT_DECLARE_SCRIPT_METHOD(SetAssetImportant_2)
UT_DECLARE_SCRIPT_METHOD(SetThreatImportant)
UT_DECLARE_SCRIPT_METHOD(PerceivedThreats)
UT_DECLARE_SCRIPT_METHOD(SetThreatUnimportant)
WsfScriptPerceptionProcessor(const std::string &aClassName, UtScriptTypes *aScriptTypesPtr)
Definition WsfPerceptionProcessor.cpp:1332
UT_DECLARE_SCRIPT_METHOD(SetThreatTypeImportant)
UT_DECLARE_SCRIPT_METHOD(SetAssetUnimportant_2)
UT_DECLARE_SCRIPT_METHOD(NearestAsset)
WsfScriptProcessorClass(const std::string &aClassName, UtScriptTypes *aScriptTypesPtr)
Definition WsfScriptProcessorClass.cpp:31
void Update(double aSimTime) override
Definition WsfScriptProcessor.cpp:281
WsfProcessor * Clone() const override
Definition WsfScriptProcessor.cpp:97
wsf::ExternalLinks mExternalLinks
The external recipients.
Definition WsfScriptProcessor.hpp:112
WsfScriptProcessor(const WsfScenario &aScenario)
Definition WsfScriptProcessor.cpp:30
bool Initialize(double aSimTime) override
Definition WsfScriptProcessor.cpp:104
bool ProcessInput(UtInput &aInput) override
Definition WsfScriptProcessor.cpp:186
bool ProcessMessage(double aSimTime, const WsfMessage &aMessage) override
Definition WsfScriptProcessor.cpp:300
Definition WsfTrackId.hpp:33
Definition WsfTrackManager.hpp:62
Copyrights Multiple, All Rights Reserved