VisibilityCalculators

Top  Previous  Next

The VisibilitySegment object allows users to determine whether an observer can see a target, based on the user-specified configuration for occulting bodies, occulting terrain, celestial object shape models, and refraction. The VisibilityCalculator object allows users to work with multiple VisibilitySegments at once in order to determine whether any or all of the segments are simultaneously true.

 

The following Sample Mission Plans (included with your FreeFlyer installation) demonstrate the use of the VisibilityCalculator and VisibilitySegment object:

 

Coverage and Contact Samples

Chain Visibility

Mutual Visibility

Refraction Model Types

VisibilityCalculator

 

Interplanetary Samples

Asteroid Contact

 

 

VisibilitySegment


Setting the Observer and Target

The VisibilitySegment object allows the following objects to be specified as the observer:

 

Spacecraft

Sensor

GroundStation

GroundVehicle

 

The following objects may be specified as the target:

 

Spacecraft

Sensor

GroundStation

GroundVehicle

CelestialObject

Star

PointGroupPoint

 

The following script example shows how to create a VisibilitySegment and set its observer and target:

 

VisibilitySegment Segment;

Segment.SetObserver(Spacecraft1);

Segment.SetTarget(GroundStation1);

 

// Set the target of a VisibilitySegment to the first point in a PointGroup

Segment.SetTarget(PointGroup1[0]);

 

If the target is a CelestialObject, the user can specify whether to model the target as a point, sphere, or ellipsoid, as shown below.

 

Segment.CelestialObjectTargetModel = 1;  // Sphere

 

Setting up Occulting Bodies

Occulting bodies can be added or removed by the user in order to define the planets or moons that will be considered when determining if the observer can see the target. The user can specify whether to model occulting bodies as spheres or ellipsoids using the VisibilitySegment.CelestialObjectOccultationModel property, as shown below.

 

Segment.AddOccultingBody(Earth, Moon);

Segment.RemoveOccultingBody(Jupiter);

Segment.CelestialObjectOccultationModel = 1;  // Ellipsoid

 

Note: The OccultingBodies property is by default empty. The central bodies of the source and target are not assumed to be occulting bodies. Additionally, if a GroundStation object is the observer, its central body will be ignored as an occulting body (even if explicitly added) as the GroundStation mask is assumed to be a more accurate representation of occultation due to the local terrain. If no mask is selected for the GroundStation observer, the VisibilitySegment will treat it as a cone mask with a zero elevation angle for purposes of visibility calculations. If a GroundStation object is the target, users should not model a GroundStation inside a spherical occulting body, an ellipsoid occultation model should be used.

 

Setting up Occulting Terrain

Occulting Terrain can be added or removed by the user in order to define the surface features that will be considered when determining if the observer can see the target. When including occulting terrain the user must model occulting bodies as ellipsoids using the VisibilitySegment.CelestialObjectOccultationModel property, as shown below.

 

Terrain Terrain1;

Terrain Terrain2;

Segment.AddOccultingTerrain(Terrain1, Terrain2);

Segment.RemoveOccultingTerrain(Terrain2);

Segment.CelestialObjectOccultationModel = 1;  // Ellipsoid 

 

Note: If the target of a VisibilitySegment, that includes occulting terrain, is a Celestial Object the user must set the VisibilitySegment.CelestialObjectTargetModel property to model a point. Additionally, the VisibilitySegments does not currently support using both terrain occultion and refraction at the same time.

 

Setting up Refraction

By default, refraction effects are not modeled when determining if the observer can see the target. Refraction modeling can be turned on by the user by setting the VisibilitySegment.RefractionModelType property. The signal frequency used when computing refraction is set using the VisibilitySegment.RefractionFrequency property. There are two valid ranges of values when setting the refraction frequency, in the radio spectrum (100 MHz - 100 GHz) and visible spectrum (176.3485 THz - 999.3081 THz).

 

Segment.RefractionModelType = 2;  // Numeric - Multiple Chapman Profiles

Segment.RefractionFrequency = 2e9;

 

The following refraction models are available.

 

Refraction Model

Frequency Band

Description

Accuracy

Runtime

None

N/A

No refraction.

N/A

N/A

Numeric - Single Chapman Profile

Visible

Tropospheric refraction effects are modeled using the Edlén model.1234

Ionospheric refraction effects are not modeled.

In the visible spectrum, this model matches the "Numeric - Multiple Chapman Profiles" model, and their results will be identical.

Very high

Fast

Radio

Tropospheric refraction effects are modeled using the International Telecommunications Union (ITU) model.5

Ionospheric refraction effects are modeled using the International Reference Ionosphere (IRI) and Chapman electron density profile at the latitude and longitude location of the minimum-height point along the ray path, and applies the Chapman profile from that location along the whole ray path.6

High

Fast

Numeric - Multiple Chapman Profiles

Visible

Tropospheric refraction effects are modeled using the Edlén model.1234

Ionospheric refraction effects are not modeled.

In the visible spectrum, this model matches the "Numeric - Single Chapman Profile" model, and their results will be identical.

Very high

Fast

Radio

Tropospheric refraction effects are modeled using the International Telecommunications Union (ITU) model.5

Ionospheric refraction effects are modeled using the International Reference Ionosphere (IRI) and Chapman electron density profile at multiple points along the ray path, in order to determine the electron density at the height of the ray path.6

Very high

Slower

Analytic - Chapman

Any

This Earth refraction model is based on analytic Chapman theory.7 This refraction model is only allowed when the observing object is a GroundStation.

Medium

Very fast

Analytic - TRORD

N/A

Tropospheric refraction effects are modeled based on the TRORD refraction model.8 This model is only allowed when the observing object is a GroundStation. This model uses the local-mean refractivity coefficients for each month specified by the GroundStation.RefractivityNs property of the observing GroundStation. The VisibilitySegment.RefractionFrequency setting is not used with this model.

Ionospheric refraction effects are not modeled.

Medium

Very fast

Numeric - Exponential

N/A

This simple exponential model calculates a long-term global mean refractive index as a function of height.9 The VisibilitySegment.RefractionFrequency setting is not used with this model.

Medium

Very fast

 

Note: These refraction models are used only for calculating refraction through the Earth's atmosphere. Refraction is not modeled for any other celestial bodies.

 

References:

1."The refractive index of air," B. Edlén, Metrologia 2, 71-80 (1966)

2."An updated Edlén equation for the refractive index of air," K.P. Birch and M.J. Downs, Metrologia 30, 155-162 (1993)

3."Correction to the updated Edlén equation for the refractive index of air," K.P. Birch and M.J. Downs, Metrologia 31, 315-316 (1994)

4.NIST Engineering Metrology Toolbox at http://emtoolbox.nist.gov/Wavelength/Documentation.asp

5."Recommendation ITU-R P.453-10 (02.12), The radio refractive index: its formula and refractivity data", Section 1, February 2012

6."The Theory of Scintillation with Applications in Remote Sensing", Charles L. Rino, January 2011

7."Goddard Trajectory Determination System (GTDS) Mathematical Theory", Section 7, July 1989

8."Software Requirements Specification for Tracking and Orbit Determination (TRORD) CPCI 202 of the Command and Control Segment Math Appendix", September 1992

9."Recommendation ITU-R P.453-10 (02.12), The radio refractive index: its formula and refractivity data", Section 2, Equation 8, February 2012

 

Output

Once the Segment has been configured, the following instantaneous methods are available for generating output. These methods report the instantaneous value of the azimuth and elevation angles from the observer to the target, and the Visibility() method returns an instantaneous evaluation of whether the observer can see the target.

 

VisibilitySegment.Azimuth()

VisibilitySegment.Elevation()

VisibilitySegment.Visibility()

 

The following interval methods are also available. These methods return the exact times of the visibility events.

 

VisibilitySegment.ElevationTimes() - Calculates the exact times for start of visibility, end of visibility, and maximum elevation

VisibilitySegment.VisibilityTimes() - Calculates the exact times for start of visibility and end of visibility

 

While (Spacecraft1.ElapsedTime < TIMESPAN(1 days));

    Report Spacecraft1.EpochText, Segment.Visibility(Spacecraft1.Epoch);

    Step Spacecraft1;

End;

 

Note: As of FreeFlyer 7.3, the default timing precision mode is nanosecond precision mode. For older Mission Plans that have not yet been converted from millisecond precision mode, the syntax for working with times is different. See the timing precision mode page for more information.

 

 

VisibilityCalculator


A VisibilityCalculator object can be used to create and manage multiple VisibilitySegments when you want to evaluate whether all or any of a set of Segments are simultaneously true. For example, you may wish to know whether any Sensor on a Spacecraft can see a particular GroundStation. In that case, you can create a separate Segment for each Sensor, where the Sensor is the observer and the GroundStation is the target. Another example would be calculating a "chain" of contact. You may wish to know the times when a GroundStation can see a Spacecraft in a low-Earth orbit and that Spacecraft can also see another Spacecraft in a geosynchronous orbit. In that case, you can create a Segment for each leg of communication and instruct the VisibilityCalculator to compute the times when all the Segments are complete.

 

Setting up the Calculator

The "any" or "all" requirement can be set using the VisibilityCalculator.VisibilityRequirement property.

 

VisibilityCalculator Calculator;

Calculator.VisibilityRequirement = 0;  // All

 

Segments can be created and added to a VisibilityCalculator using the AddSegment() method as shown below. You can optionally specify a label for the Segment.

 

Calculator.AddSegment("sc-to-gs");

 

Once a VisibilitySegment has been added to a VisibilityCalculator, you can access the VisibilitySegment and configure it as shown below. Additional configuration options for the VisibilitySegment are described above.

 

Report Calculator.Segments.Count;

 

Report Calculator.Segments[0].Label;

 

Calculator.Segments[0].SetObserver(Spacecraft1);

Calculator.Segments[0].SetTarget(GroundStation1);

 

Individual VisibilitySegments can also be included or excluded from the VisibilityCalculator by setting the VisibilitySegment.Active property.

 

Calculator.Segments[0].Active = 1;  // Active (default)

 

VisibilitySegments can be removed from a VisibilityCalculator using the RemoveSegment() method. You can also RemoveAllSegments() or ResetConfiguration() for a VisibilityCalculator.

 

Output

Once the VisibilityCalculator and all its VisibilitySegments have been configured, the following methods are available for generating output. See above for a description of the output methods available for each individual VisibilitySegment.

 

VisibilityCalculator.Visibility() - Instantaneous evaluation of visibility across all active Segments

VisibilityCalculator.VisibilityTimes() - Interval method evaluation of visibility across all active Segments

 

While (Spacecraft1.ElapsedTime < TIMESPAN(1 days));

 

      // Report whether all segments are complete

      Report Spacecraft1.EpochText, Calculator.Visibility(Spacecraft1.Epoch);

 

      // Report whether each segment is complete

      For i = 0 to Calculator.Segments.Count-1;

            Report Spacecraft1.EpochText, Calculator.Segments[i].Label, Calculator.Segments[i].Visibility(Spacecraft1.Epoch);

      End;

 

      Step Spacecraft1;

End;

 

A VisibilityTimes usage example can be found on the Interval Methods page.

 

 

See Also


VisibilityCalculator Properties and Methods

VisibilitySegment Properties and Methods

Interval Methods

Contact Method Summary

The Spacecraft Object

Sensors

GroundStations

GroundVehicle

CelestialObjects

Stars