WSF Core 2.9 - 25 Feb 2022

Visit the AFSIM 2.9 Release Page on DI2E (Access Controlled) for more information and resources related to this release.

Release Dates

  • WSF Core 2.9.0 - 25 Feb 2022

General

  • Propellant for WSF_SIX_DOF_MOVER solid-rocket boosters is now defined and treated as a fuel tank, with positioning based on the reference point of the vehicle. Existing models can be migrated with no effect on performance by following the guidance in Updating Thrust Producer Definitions for AFSIM 2.9. (AFSIM-1182)

  • SixDOF PID derivative controllers now track rate-of-change of the process variable rather than the error. This reduces spikes in output caused by updates from middle- and outer-loop controllers. (AFSIM-2110)

Corrections

  • Addressed a possible issue where WsfSA_Processor could be providing incorrect platform data to scripted queries prior to its first update. (AFSIM-1235)

  • Fixed issues in SixDOF PID controller evaluation that could cause additional process noise and report artificially high derivative signals for middle and outer loop controllers. Users should increase kd for these controllers according to their outer and middle loop factor settings (AFSIM-2110)

  • Fixed an error in SixDOF PID controller evaluation that caused PIDs to incorrectly track the sampled derivative rather than the filtered output. Users may wish to significantly reduce low_pass_alpha values to recover previous behavior. (AFSIM-2110)

  • Corrected an issue in WSF_SENSOR_COVERAGE where multiple sensors on the same platform providing free assets are all set to ignore the grid assets. (AFSIM-1233)

  • Fixed inconsistent definition of success/failure in cyber attack status report. (AFSIM-1626)

Enhancements

  • This is the initial release of the OMS/UCI interface. The intent of this release is to allow users to become familiar with AFSIM’s OMS/UCI implementation and provide feedback. The functionality provided in this release is limited. (AFSIM-1457)

  • Added regression tests for OMS/UCI messages. (AFSIM-1529)

  • Added a wsf_multiresolution plugin. This plugin is an experimental feature preview, and no future compatibility is guaranteed. This provides multiresolution selection of several platform components including comm, fuel, mover, processor, and sensor (using, e.g., command multiresolution_comm and model WSF_MULTIRESOLUTION_COMM) from a script specified set of platform component candidates. Also, multiresolution signatures may be used in a similar way, including acoustic, infrared, optical, and radar. Also included is a multirun table, specified with multiresolution_multirun_table, which may be used to vary fidelity values. (AFSIM-1921, AFSIM-1922, AFSIM-1996, AFSIM-2071)

Development

  • Added a WsfObserver::MoverChanged callback to the base WsfEventPipeInterface callbacks. Associated with this are small refactors of the code associated with updating a platform’s mover’s WsfMover.mUpdateInterval based on the maximum mover update interval associated with the event pipe. (AFSIM-2027)

  • Method signatures for wsf::comm::Comm::Send and wsf::comm:Message constructor that take a const WsfMessage& argument have been deprecated in favor of a unique_ptr<WsfMessage> argument. This now puts the onus of creating a copy of the message (if needed) on the caller, allowing for elimination of unnecessary copies. (AFSIM-1270)

  • Marked constructors in UtScriptData as explicit; inserting into a container of script data (e.g. UtScriptDataList) may require using emplace_back over push_back. (AFSIM-762)

  • The maximum number of supported dimensions for a regular_table has increased from 4 to 8, as specified by RegularTable::cMAX_DIMENSIONS. It is recommended that all future development needing table inputs utilize the UtTable format. (AFSIM-1242)

  • The full API of UtTable is now thread-safe for concurrent access. (AFSIM-1242)

  • Introduced a strategy-based measurement and track data extrapolation architecture (wsf::TrackExtrapolation), along with a strategy object (wsf::TrackExtrapolationStrategy) and associated types factory (wsf::TrackExtrapolationStrategyTypes) that populate tracks with customized extrapolation objects. Alternate strategies and extrapolation types can be implemented in plug-ins. (AFSIM-509)

  • Added CMake module and macro wsf_project_template that simplifies the configuration of WSF extensions and plugins. (AFSIM-412)

  • WsfXIO_ScriptListPkt now correctly reports a platform index of 0 for global scripts. (AFSIM-1053)

  • Improved the API of ut::CloneablePtr to include move semantics and be more consistent with the API of managed pointers in the C++ standard library. (AFSIM-917)

  • Function template UtInput::ReadValue for unsigned types now throws an exception when a negative value is read. (AFSIM-994)

  • Script classes are no longer less-than or equality comparable by default. Any derivation of UtScriptClass that implements LessThan or EqualTo should also re-assign member mLessThanComparable or mEqualityComparable, respectively, in its constructor. (AFSIM-201)

  • Modified interface of GenTCP_Connection::Init to take its argument by unique_ptr rather than by reference, to explicitly convey ownership of the socket is transferred.

  • Declared class WsfNavigationErrors methods SetGPS_Status, InitializeGPS_Status, and GPS_Update as virtual.

  • Fixed several potential issues caused by the misuse of the typeid operator; added ut::TypeNameOf as a cross-platform method of accessing type names. (AFSIM-1070)

  • Data written to std::cout, std::cerr, and std::clog is redirected through the ut::log::Publisher. (AFSIM-1166)

  • Method UtMeasurementData::GetLocationWCS() now returns a const UtVec3d&, and it now correctly converts LLA to WCS before returning the WCS location in the case that the LLA location is valid and the WCS location is not. Because of this change, this method can no longer be used to set the WCS location using the previous version that returned a non-const UtVec3d&. As with some code in the tracking_filters library, the method had been used to more easily set data using older mutator methods that use an array parameter (i.e., double aParameter[3]). (AFSIM-1178)

  • Added a new flag to UtProcess that allows executing the process in a new console window on Windows systems. (AFSIM-1199)

  • Removed the deprecated namespace WsfMeasurementUtil; any usages should be replaced with UtMeasurementUtil. (AFSIM-1207)

  • Improved the interface for registering scripted events with WsfScriptObserver, requiring extension/plugin registrants to simply provide a function that will pack the arguments for the script, or use a default argument packer. The previous AddEvent interface returning the event’s unique integer identifier is now deprecated. (AFSIM-1296)

  • Added a user flag mUsePeakPower for using peak or average power for WsfEM_Xmtr, and an explicit method for querying average power GetAveragePower. The GetPower method now conditionally returns either peak or average power based on this flag, set by user input. (AFSIM-1007)

  • Raw pointer interfaces WsfRouteNetwork::Add and WsfRouteTypes::LoadInstance have been deprecated in favor of overloads expressing ownership semantics via unique_ptr.

  • Added export macros to several classes maintaining type lists, including WsfTrackReportingStrategyTypes and WsfVisualPartTypes, to allow plugin developers to extend them with custom object types. (AFSIM-1260)

  • Refactored the WsfSensorErrorModel class hierarchy to derive from a more abstract base class in order to support non-spherical and/or non-Gaussian error models. The new base class is wsf::SensorErrorModel, and the functionality of the legacy WsfSensorErrorModel now resides in the wsf::StandardSensorErrorModel class. (AFSIM-1251)

  • Deprecated the WsfSensorMode::ComputeMeasurementErrors method. It is a compile-time error for a derived mode to override this method. Any sensor code that uses this method should be refactored to call an implementation of wsf::SensorErrorModelBase::ApplyMeasurementErrors, which will both compute and apply measurement errors to a sensor detection result. (AFSIM-1251)

  • Deprecated the WsfSensorComponent::ComputeMeasurementErrors method. It is a compile-time error for a derived component to override this method. Any sensor observer code that uses this method should be refactored to call WsfSensorComponent::ComputeSphericalMeasurementErrors, which will only be invoked when the error model is a type of wsf::StandardSensorErrorModel. (AFSIM-1251)

  • Deprecated the sensor mode error access methods in WsfSensorMode. In the future sensor errors will only be accessible through the WsfSensorErrorModel subtype aggregated by WsfSensorMode (WsfSensorMode::mErrorModelPtr). (AFSIM-1251)

  • Added a new ut::CentralPoint class as the base class of ut::CentralBody. This new class serves to transform between rotating and inertial frames but does not include the concept of a gravitating ellipsoid as ut::CentralBody does. Other classes that depended on ut::CentralBody such as UtEntity and UtECI_Conversion are now dependent on ut::CentralPoint instead.

  • Deprecated methods taking ut::CentralBody, replacing them with equivalent methods using ut::CentralPoint (UtECI_Conversion::SetCentralBody -> UtECI_Conversion::SetCentralPoint, UtOrbitalPropagatorBase::SetInitialCentralBody -> UtOrbitalPropagatorBase::SetInitialCentralPoint, ut::OrbitalState::SetCentralBody -> ut::OrbitalState::SetCentralPoint.

  • Deprecated methods UtECI_Conversion::GetPrecessionNutationUpdateInterval, UtECI_Conversion::SetPrecessionNutationUpdateInterval, and UtEntity::SetPrecessionNutationUpdateInterval, replacing them with UtECI_Conversion::GetNutationUpdateInterval, UtECI_Conversion::SetNutationUpdateInterval, and UtEntity::SetNutationUpdateInterval, as only the nutation matrix can be cached with acceptable loss of conversion accuracy.

  • Removed the redefinition of isfinite on Windows systems in DisValidationUtils.hpp, allowing developers to use std::isfinite in translation units that include it. (AFSIM-978)

  • Added support for scripted sensor detection constraints via the OnSensorDetectionAttempt method. In order to use this method, the WsfSensor method ScriptAllowDetection must be invoked immediately before any calls of NotifySensorDetectionAttempted. (AFSIM-1334)

  • Modified CMake to prevent unnecessary rebuilds due to time-stamp changes in the event_pipe auto-generated-code. (AFSIM-1236)

  • Deprecated method WsfEventPipeInterface::Record with a time argument, replaced with WsfEventPipeInterface::RecordDouble without the time argument. (AFSIM-1421)

  • Added const char* constructor to ut::script::Data, so that passing in a string literal effectively uses the Data(const std::string&) constructor, not the Data(bool) constructor (which it was using before). (AFSIM-1660)

  • Fixed ut::script::Data::operator< when comparing a string with some other type, so that std::map insertion with ut::script::Data keys works correctly. (AFSIM-1660)

  • Added the ability to run auto-tests on a per plugin basis. Also added all test files to the target in Visual Studio. To use, open the CMakeAutoTestTargets, open the folder for the tool (mission, engage, etc), then build the target corresponding to the plugin of interest. (AFSIM-1655)

  • Deprecated zero and single parameter virtual methods GetAzimuthBeamwidth and GetElevationBeamwidth in WsfEM_XmtrRcvr and WsfAntennaPattern, and replaced them with two and three (respectively) parameter methods to account for electronic beam steering. (AFSIM-1006)

  • Introduced UtScriptMethodDefine.hpp which provides new macros for registering script methods that are safer, easier, and more efficient to use than the legacy macros in UtScriptClassDefine.hpp. The script classes in the util_script library were converted to use the new macros to act as examples on how to use them. The intention is to have all future development try to utilize these new macros, and to have usages of the legacy macros gradually converted to the new macros. (AFSIM-860)

  • Added early access feature preview of a performance profiling interface for C++ code. The profiling interface can be enabled via the mission command line. (AFSIM-1613)

  • Fixed issue caused by WsfApplication managing the global UtDictionary. Also added unit tests for WsfApplication and UtDictionary. (AFSIM-1410)

  • Added WsfEM_Antenna::IndicateNondefaultFieldOfView to allow sensor developers to appropriately note programmatic changes from the default field-of-view. (AFSIM-1858)

  • Deprecated methods WsfNavigationErrors::GetLocationErrorWCS, WsfNavigationErrors::GetLocationErrorXYZ, and WsfNavigationErrors::GetPerceivedLocationWCS, that took arguments of c-style arrays, replacing them with same-named methods returning coordinate-specific types from the ut::coords namespace. (AFSIM-2404)

  • Improved the extensibility of WsfTrackManager by adding virtual keyword to functions. (AFSIM-2536)

  • Corrected an issue where the methods SetTrueAnomaly and SetMeanAnomaly in UtOrbitalElements did not respond well to inputs outside [0, 2pi]. (AFSIM-1422)

  • Removed unused variables from WsfOrbitalManeuvers::Target and completed the factoring of WsfOrbitalManeuvers::Target to make use of WsfOrbitalTargeting. (AFSIM-698)

  • Refactored WsfOrbitalEvent::Condition into a hierarchy (deriving from wsf::space::OrbitalPropagatorCondition) to allow for easier extension in the future. (AFSIM-2344)

  • WsfEW_Effect Can now functionally be extended within plugins. Data classes were missing the WSF_MIL_EXPORT macro. (AFSIM-1933)

  • WsfEW_Effects API change to improve readability and pass all available WsfEM_Interaction objects to an WsfEW_Effect. (AFSIM-1805)

  • Moved the perception and assessment data from WsfSA_Perceive to WsfSA_Processor. (AFSIM-1880)

  • Separated WsfSA_Processor’s threat and prioritized data update intervals into separate calculation and event pipe data update intervals. (AFSIM-2218)

  • Combined WsfSA_Processor’s threat processing and group processing into perceived item processing. (AFSIM-2218)

  • Added group focus, entity coasting, and importance to the event pipe output. (AFSIM-2384)