GMAT implements two "event locators" that find eclipse times and line of sight intervals. However, this only lets you analyse data between a ground station and a spacecraft.

Is there a way of identifying a line of sight contact between two spacecraft?

Given all the position data of the spacecraft and related celestial objects, how could one go on estimating these times using some external tool? (Python perhaps?)

My specific scenario is a satellite in orbit around the moon, communicating with a satellite orbiting the earth at an arbitrary large (supra-GEO) orbit.


I am not familiar with GMAT, but there is another route to solve this challenge using an extensively validated open-source solution.

You can use the Orekit Astrodynamics library to build one Moon-centered and one Earth-centered orbit. Orekit has the ability to compute what is known as "Intersatellite visibility" (in STK as Access Times), which is exactly what you want. You can "activate or deactivate" the effect of Earth perturbations for the Moon-centered orbit as well, which is recommended for high fidelity analysis and long propagation intervals. To correllate it to the vocabulary of events that you used, Orekt is using a variety of events as well, ranging from the one we discuss (i.e. Intersatellite Visibility event), all the way to defining combinations of events (sun eclipse, field of view etc..) and even your own custom event by defining some satellite subsystem state (it can get as complex as you want)

Orekit is a Java library, but a Python wrapper has been created by Petrus Hyvonen to bring all that functionality in Python. Orekit has been used in operations involving the Automated Transfer Vehicle to the ISS, among many other missions, and is very robust. It has a "medium" learning curve, maybe because it does not have a native visualization tool, like the commercial alternative of AGI's STK. Note that your problem can also be tackled by using STK and specifically the Astrogator package, which is also a very robust solution for interplanetary mission design and high fidelity simulation. The Astrogator package is not open source, but it inherits the strong visualization capabilities of STK and the setup is much faster with zero coding involved.

You can start learning about Orekit from the Overview page, and also seek for help in the Orekit Forum, people there are very friendly. Learning Orekit might not be the fastest solution to get the answer to your problem due to the learning curve, but the results are rewarding if you commit to learn, and it is open-source.

I hope this is helpful! Manny

  • 1
    $\begingroup$ Thanks for the direction! I thought a bit more about the problem, and perhaps constructing a scripted solution is not that hard. My idea is to get the satellite and obstructing bodies positions, and then use the basic idea of raytracing to see if LOS does exist. Essentially, propagate along the line connecting the satellites, checking if the distance to the obstructing bodies is less than that bodys' radius. If it is, then you're blocked, if not then there's line of sight. Is there something I missing or would that work out fine? $\endgroup$ – Spiros Makris Dec 7 '20 at 8:58

The basic approach is to make a long list of times, compute positions and observing angles at each one, and check whether line of sight (LOS) is obscured by anything. Do it at, say, 5 minute intervals, and then for any interval during which the LOS changed state, repeat the procedure using 5 second intervals. This won't catch an outage shorter that happens entirely within one 5 minute interval, but you can make additional tests to find intervals in which they might occur. On the other hand, if you try it and find that doing the procedure for a whole day in one second intervals runs fast enough, just start with that and be done.

Added in response to comments:

What effects you have to model in order to decide whether LOS exists depends on how precise you need to be. The smaller the error you can tolerate, the harder you have to work to get there. @Spiros Makris your method with the spheres is the right place to start, and for some purposes there's no need to push farther. There is always something missing from any model, but many of them don't matter much. If all you need is to know times plus or minus a minute, you're already done; but if you need sub-second precision, you have a long way to go.

You could start with the aberration of light as a relatively simple, and purely geometric, effect. Another aspect of geometry is the obstructing body isn't a sphere, but a spinning oblate spheroid. Before you try to model that exactly, however, first consider that there's a smallest radius and a largest radius, so making your simple calculation with spheres of two different sizes will tell you how much variation there is from this part of the problem.

If the obstructing body has no atmosphere, you're done; but if it does, the complications are significant. If it's the Earth, then at least there is a ton of data and models that others have made, but you will have to judge for yourself how deep down the rabbit hole you want to go. First, what frequency are we talking about? You said communicating, but do you mean by radio or laser? At what wavelength, and with how many decibels of signal-to-noise available in your link budget? Different bands are affected by the atmosphere in sometimes very different ways. How good does the communication quality have to be? Is a single example atmosphere good enough, or do you need to take the weather into account? (worst case rain fade is really ugly for radio, and IR or visible light is blocked completely by clouds) These also get into the question of just how closely you want your comm signal to skirt the surface. If you make the radius of your obscuring sphere 50 km larger, then you don't have to worry about weather anymore; but if every last second of data throughput is important to you, then you need to consider things like the 4/3 effective radius model (wiki / 1983 paper / 2013 paper).

There are lots more data and models available to dig deep into any of these questions, and many more. One useful standard reference is the International Earth Rotation Service's Tech Note 36, which talks about correcting measurements for things like the general relativity applicable to satellite laser rangefinding, and the effect of ionosphere and troposphere on very long baseline interferometric radio astronomy. If you are interested in radio propagation, then the International Telecommunications Union has a huge collection of highly detailed recommendations to offer; I would start with ITU-R P.618, Propagation Data and Prediction Methods Required for the Design of Earth-Space Telecommunication Systems.

Please note, I am not recommending that you actually do all of this! Read, or at least skim, the references, but don't plan to type more than a couple of the equations into your code. Completeness (with respect to what has been published; complete description of the phenomena is impossible) would be an awful lot of work, which might be fun but is almost certainly not worth it unless you are, for example, a government agency trying to write requirements for designing and building a major new satellite acquisition program.

  • 1
    $\begingroup$ +1 A reference to Ryan's answer is Chapter 5.3.3, from "Fundamentals of Astrodynamics and Applications", by Vallado. There are two algorithms outlined to do the same thing, one is trigonometric, and the other is parametric (faster). Using the parametic method, and after computing the satellite's positions in both Earth and Moon frames, you apply the algorithm from the perspective of Earth and Moon seperately. If Line-of-Sight (LOS) exists from both views (no obscuration from each body), then LOS exists between the satellites. $\endgroup$ – Manny Dec 5 '20 at 21:00
  • 1
    $\begingroup$ I wrote a program in C++ that tries to solve the task. It takes the positions of two satellites in 3D space and the obstructing bodies (modelled as spheres with known radius and positions) and computes the distance of each sphere's center from the line connecting the satellites. If any of those distances is less than the radius of the sphere it corresponds to, then there is no LOS. The results check out with simple 3D space math and calculators out there, but does the method apply correctly in my case? I have noticed GMAT takes into account light propagation, how would I go on modelling that? $\endgroup$ – Spiros Makris Dec 10 '20 at 20:06
  • $\begingroup$ @Spiros Makris Very interesting question! It seems that light-time delay can be over 1 second between Earth-Moon. Light time delay is well researched in the topic of GNSS signal propagation between a GNSS satellite and another satellite or any moving target. I would start with the math behind that phenomenon and extrapolate for our problem. You can take a look maybe on page 70 of "Relativistic GPS effects in LEO" by Gulklett, it is freely available. I would like to learn about any better reference myself. $\endgroup$ – Manny Dec 11 '20 at 5:26
  • $\begingroup$ @Ryan Amazing explanation and references, especially the ITU models. I am not the OP but this is great! $\endgroup$ – Manny Dec 11 '20 at 20:39
  • $\begingroup$ @Manny I a mostly trying to produce an estimate rather than very accurate predictions, so I was thinking to avoid involving speed measurements in for now. I am not very familiar with the theory, but my intuition says that the problem arises from the fact that your target will have moved by the time your signals reach them. In cases like the Moon, this delay is probably insignificant for what I am looking for, but for, say, Mars it isn't. I guess I could parse the file and match different positions of Tx and Rx using the timestamps, then perform my LOS routine like before? $\endgroup$ – Spiros Makris Dec 12 '20 at 8:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.