|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.
Setting the Observer and Target
The VisibilitySegment object allows the following objects to be specified as the observer:
The following objects may be specified as the target:
The following script example shows how to create a VisibilitySegment and set its observer and target:
If the target is a CelestialObject, the user can specify whether to model the target as a point, sphere, or ellipsoid, as shown below.
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.
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.
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.
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.
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).
The following refraction models are available.
Note: These refraction models are used only for calculating refraction through the Earth's atmosphere. Refraction is not modeled for any other celestial bodies.
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.
The following interval methods are also available. These methods return the exact times of the visibility events.
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.
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.
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.
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.
Individual VisibilitySegments can also be included or excluded from the VisibilityCalculator by setting the VisibilitySegment.Active property.
VisibilitySegments can be removed from a VisibilityCalculator using the RemoveSegment() method. You can also RemoveAllSegments() or ResetConfiguration() for a VisibilityCalculator.
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.
A VisibilityTimes usage example can be found on the Interval Methods page.
•VisibilityCalculator Properties and Methods
•VisibilitySegment Properties and Methods