What's New in FreeFlyer?

Top  Previous  Next

 

 

New Features in FreeFlyer 7.10


Optical Communication

Laser‑based communications capabilities between spacecraft and ground assets are now supported through the new OpticalLink object

oSupports end‑to‑end modeling of optical communication links including received power, losses, SNR, BER, and link margin

oPhysical modeling of real-world systems including APDs, PINs, preamplified detectors, and coherent receivers

oOn-Off Keying (OOK), Pulse Position Modulation (PPM), Differential Phase Shift Keying (DPSK) modulation schemes

oConfigurable model for estimating the impact of various atmospheric phenomena including meteorological visibility, rain rate, snow rate, and scintillation-induced fading

Five new Sample Mission Plans have been added to the Coverage and Contact folder one to the Demos folder of the FreeFlyer install directory covering this new capability

 

Multi-Objective Optimization

Simultaneous optimization of multiple competing objectives is now supported through the new MultiObjectiveOptimizer object

oIntegrates directly with existing optimization functionality to easily implement complex multi-objective problems with simple FreeFlyer script solutions

oSupports both continuous and integer state variables, making it ideal for problems involving discrete choices such as constellation design, asteroid tours, or scheduling

Employs industry-standard NSGA and SPEA genetic algorithms

Supports brute force method for integer-only problems

oUses a Pareto front dominance framework, producing a family of non-dominated optimal solutions rather than a single answer, enabling trade studies between competing objectives (e.g., minimizing ΔV while maximizing mission lifetime)

oSolver settings such as population size, maximum generations, crossover/mutation rates, and Pareto front stall conditions can be customized to tune performance

Constraints are represented as objectives, allowing constraint violations to be tracked and minimized alongside primary mission objectives

Four new Sample Mission Plans have been added to the Optimization folder of the FreeFlyer install directory covering this new capability

 

Optimization Enhancements

Users may now choose integration-based dynamical enforcement for TrajectoryPhases

oConfigurable via the TrajectoryPhase.DynamicalEnforcementMethod property with detailed settings available through TrajectoryPhase.IntegrationOptions

Added support for a Minimum Norm Constraint Solver, a lightweight alternative to FreeFlyer's supported optimization engines, focused solely on solving constraints without considering the objective value

oIncludes configurable options such as line search and bound enforcement methods (truncate or recompute), allowing users to control step handling and feasibility enforcement during constraint solving

Added a constraint to the simple thruster control model for maximum angular distance allowed between the control vectors of two consecutive nodes in the TrajectoryPhase

Added the Optimizer.AddTrajectoryPhases() method to allow users to add multiple TrajectoryPhase objects to an Optimizer using a List

Added the the Optimizer.SetConstraintBlockValues() method to allow users to update multiple constraints added with Optimizer.AddConstraintBlock()

 

Orbit Determination Enhancements

Added support for applying ionospheric and tropospheric media corrections to Trk‑2‑34 DSN tracking observations through the new DSNMediaCorrections object

oCorrections can be imported directly from Trk‑2‑23 calibration files or defined manually in script

oCorrections can be applied to range, range‑rate, and Doppler measurements, with models that account for ground station location, line‑of‑sight elevation, and calibration epoch windows

oThe DSNMediaCorrections.EvaluateMediaCorrection() method computes the media bias, which can then be applied directly to DSN observation measurements

Added support for TRK‑2‑34 files to include DSN Pseudonoise (PN) range data, in addition to sequential range (SRA), Total Count Phase (TCP), and frequency ramping data

Added an overload to the Filter.ProcessObservation() method that takes a List of Observations as an argument

 

Spacecraft Object Enhancements

Added a Spacecraft.GravityGradientTorque() method to calculate the gravity gradient torque acting on a Spacecraft

Added a Spacecraft.CenterOfGravity property to allow users to calculate the Spacecraft's center of gravity including any attached Tanks

Added a Spacecraft.EpochGPS property to allow users to retrieve the GPS epoch without using the ConverTime() function

Added a Spacecraft.Quaternion.QuaternionMultiply() method, providing a built‑in way to combine rotations by multiplying two quaternions directly

 

Data File Updates

Updated the integrated AstroStds SGP4 library to version 9.5

Updated CSSI Weather file validation to be less restrictive, no longer requiring a UTC tag on the date line

Added support for customizing the location of IRI data files through the FF_SolarSystem.IonosphereOptions.IRIDataDirectory property

Added support for negative leap seconds in FreeFlyer, ensuring full compliance with potential future timekeeping adjustments defined by international standards

 

Miscellaneous Enhancements

Added support for Red Hat Enterprise Linux Version 9

Added an overload to the GroundStation.Azimuth() and GroundStation.Elevation() methods that accepts CelestialObject as an argument

Updated the StringArray.ToArray() to support conversion of values representing Inf and NaN, allowing these special numeric cases to be preserved when parsing string data into arrays

Added a JsonInterface.MissingPropertyBehavior property to allow users to specify the behavior when there is a mismatch between JSON data and the data defined in a Struct

 

Notable Fixes

Resolved an issue where Matrix.PolynomialFit on large arrays consumed excessive memory

Resolved an issue where the node hierarchy cache was not cleared when resetting a 3D model, preventing updated group information from being sent to ViewWindows

Resolved an issue where the TrajectoryPhase.NodeColorMode setting interfered with optimization results, causing unintended effects on solution accuracy

Resolved an issue where a TrajectoryPhase's force model was not initialized during calls to TrajectoryPhase.GetDefects() method

Resolved an issue in the Runtime API where ffDestroyEngine could block indefinitely under certain conditions, which could prevent reliable engine shutdown

Resolved an issue where updates to the currently loaded EOP file were not reloaded within FreeFlyer, requiring the application be restarted for changes to take effect; EOP data now refreshes automatically when the file is edited and saved

Resolved an issue where user‑specified iono‑free pseudorange pairings could not be processed correctly, requiring all available pairings be used; FreeFlyer now properly supports individually defined pseudorange pairings for ionospheric bias removal

Resolved an issue where SGP4StateEstimator.TLEHandler.SatelliteNumber could not process satellite ID 99999

Resolved an issue where interpolating ephemeris data with attitude to the end epoch would fail using the Ephemeris.GetFullInterpolatedData() method

Resolved an issue where PlateModel objects could not be loaded from file or string in certain configurations

Fixed a bug where accessing the Optimizer.ScaledGradient property before calling Optimizer.LoadEngine() would cause FreeFlyer to terminate unexpectedly

Fixed a crash that occurred when a gap existed between observed and predicted values in Space Weather Data files; FreeFlyer now handles missing data gracefully without terminating unexpectedly

Fixed a bug in GroundStationObservation azimuth/elevation angle prediction with light‑time correction, where the ground station position was evaluated at the spacecraft turnaround time (t3) instead of the receive time (t4), leading to errors in Az/El calculations due to Earth rotation between downlink transmission and reception

Fixed a bug where the Ephemeris.AddVectorData() method would throw an error when WriteCovariance was enabled

Fixed a bug where the Spacecraft.AlongTrackSeparation(), RadialSeparation(), and CrossTrackSeparation() methods produced incorrect results when comparing spacecraft with different central bodies

 

Migrating to FreeFlyer 7.10


While we always strive to maintain 100% backwards compatibility in our new releases, our efforts to make FreeFlyer more flexible and consistent in FreeFlyer 7.10 and higher have necessitated a few changes which may require user intervention when migrating your existing Mission Plans. These changes are outlined below.

 

Licensing and Installation

FreeFlyer licensing has transitioned from FlexNet to LicenseSpring. The current release supports only Node-Locked Licensing, while legacy licensing options (Network, Docker, AWS, etc.) are temporarily unavailable but will be restored starting in FreeFlyer 7.10.1. Users should refer to Node-Locked Licensing for instructions applicable to this version.

Red Hat Enterprise Linux Version 7 is no longer supported. FreeFlyer 7.10 adds support for Red Hat Enterprise Linux Version 9, and users should upgrade to Red Hat Enterprise Linux Version 9 (or another supported platform) when migrating to this release.

Windows 11 is now supported. FreeFlyer 7.10 adds support for Windows 11, while continuing to support Windows 10 for users migrating to this release.

 

Modeling and Numerics

Millisecond timing precision mode is deprecated and will be removed in a future release. We recommend that you migrate your Mission Plans to nanosecond timing precision mode. Review the Timing Precision Modes page for assistance in upgrading from millisecond to nanosecond mode.

 

Deprecated Functionality


Various Objects, Properties, Methods, and Functions have been deprecated. Deprecated Objects, Properties, Methods, and Functions are elements of FreeFlyer which are no longer recommended for use. The description of each deprecated element indicates the new recommended way to achieve the functionality of that element.

 

Deprecated Property/Method

Updated Property/Method

ChemicalTank.TankCenterOfGravity

ChemicalTank.TankCenterOfMass

ElectricalTank.TankCenterOfGravity

EletricalTank.TankCenterOfMass

InterpolatedTank.TankCenterOfGravity

InterpolatedTank.TankCenterOfMass

InterpolatedTank.InitialCenterOfGravity

InterpolatedTank.InitialCenterOfMass

InterpolatedTank.FinalCenterOfGravity

InterpolatedTank.FinalCenterOfMass

PhaseCollocationOptions.Cd

TrajectoryPhase.Cd

PhaseCollocationOptions.Cr

TrajectoryPhase.Cr

PhaseCollocationOptions.Cl

TrajectoryPhase.Cl

PhaseCollocationOptions.DragArea

TrajectoryPhase.DragArea

PhaseCollocationOptions.LiftArea

TrajectoryPhase.LiftArea

PhaseCollocationOptions.SRPArea

TrajectoryPhase.SRPArea

Preferences.IntervalEventStopAccuracy

Preferences.IntervalMethodStopAccuracy

Preferences.IntervalEventSkipAccuracy

Preferences.IntervalMethodSkipAccuracy

Preferences.IntervalEventReportingBehavior

Preferences.IntervalMethodReportingBehavior

Spacecraft.VehicleDryCenterOfGravity

Spacecraft.VehicleDryCenterOfMass

Spacecraft.Apogee

Spacecraft.Apoapsis

Spacecraft.Perigee

Spacecraft.Periapsis

SphericalTank.TankCenterOfGravity

SphericalTank.TankCenterOfMass

Tank.TankCenterOfGravity

Tank.TankCenterOfMass

PhaseCollocationOptions.GetDefectValues()

TrajectoryPhase.GetDefectValues()

PhaseCollocationOptions.GetAverageVelocityDefect()

TrajectoryPhase.GetAveragePositionDefect()

PhaseCollocationOptions.GetAverageAccelerationDefect()

TrajectoryPhase.GetAverageVelocityDefect()

PhaseCollocationOptions.GetAverageMassFlowRateDefect()

TrajectoryPhase.GetAverageMassDefect()

Spacecraft.PerigeeHeight

Spacecraft.PeriapsisHeight

Spacecraft.ApogeeHeight

Spacecraft.ApoapsisHeight

Spacecraft.OrbitPerigee()

Spacecraft.OrbitPeriapsis()

Spacecraft.OrbitApogee()

Spacecraft.OrbitApoapsis()

 

See Also


Release History