On June 2, ESA celebrated the 20th anniversary of the launch of Mars Express (MEX) by livestreaming images of Mars from the VMC camera in a Youtube livestream. They set things up so that an image was taken by the camera approximately every 50 seconds, downlinked in the X-band telemetry to the Cebreros groundstation, which was tracking the spacecraft, and then sent to the Youtube. The total latency, according to the image timestamps that were shown in Youtube was around 17 minutes, which is quite good, since most of that latency was the 16 minutes and 45 seconds of one-way light time from Mars to Earth.
The livestream was accompanied by commentary from Simon Wood and Jorge Hernández Bernal. One of the things that got my attention during the livestream was the mention that to make the livestream work, the VMC camera should be pointing to Mars and the high-gain antenna should be pointing to Earth. This could only be done during part of Mars Express orbit, and in fact reduced the amount of sunlight hitting the solar panels, so it could not be done for too long.
This gave me the idea to use the Mars Express SPICE kernels to understand better how the geometry looked like. This is also a good excuse to show how to use SPICE.
I will be using SpiceyPy, which is a Python wrapper for the SPICE Toolkit. For those new to SPICE, it is good to check out the SpiceyPy tutorials and the most used functions of the SPICE C API.
Before beginning, it is important to understand the Mars Express spacecraft body and where the camera and antenna are located. All the detailed information is in the MEX Frames Kernel, but the following image is of help.
The spacecraft Y axis points along the solar panels, which can rotate about this axis. The high gain antenna is fixed, and located on the -X face. It nominally points at a 5 degree offset from the -X vector, and towards the +Z vector. The instruments, including the VMC, are located on the +Z face of the spacecraft. The VMC is fixed, and tilted 19 degrees towards the +Y vector (towards one of the solar panels). The main engine, which is not relevant for this post, is on the -Z face.
From this description, we see that the angle between the VMC camera boresight and the high-gain antenna boresight is close to 90 degrees, so a livestream like this can only be set up when Mars and the Earth are roughly 90 degrees apart as seen from MEX.
I have used this Jupyter notebook to make the calculations and plots with SpiceyPy, NumPy and Matplotlib.
Using SPICE we can calculate the positions of the Mars and Earth in the J2000 frame as observed from MEX. For Mars I am using ‘LT+S’ as aberration correction. This means that the aberration is done for photons received at MEX. This is technically correct, because the camera is receiving photons from Mars, but it is not very important because Mars is close to MEX. For the Earth I am using ‘XLT+S’, which means that the correction is done for photons transmitted from MEX. Here I am thinking about the X-band downlink, but there is also an uplink at the same time (which should use ‘LT+S’). In fact, the locations where the antenna must be pointed to transmit a downlink to Earth and to receive a downlink from Earth are not exactly the same, due to aberration, but the difference is so small that it doesn’t matter (the difference only matters for 32 m DSN groundstation antennas at Ka-band, and even so, a compromise solution is used).
Next we rotate the position of Mars to the MEX_VMC frame, and the position of Earth to the MEX_HGA frame. The +Z axes of these frames point along the boresights of the VMC camera and high-gain antenna respectively. SPICE also gives us information about the field of view of the instruments. The VMC camera has a field of view of about 30 x 40 degrees.
Using this data we can plot how Mars looks like in the field of view of the camera. The angular size of Mars is computed assuming that it is spherical and using the distance between Mars and MEX. The duration of the data plotted is between 15:48:14 and 16:42:02 UTC, which correspond to the timestamps of the first and last images shown in the livestream. A continuous trace is shown for the centre of Mars, and a circle showing the border of Mars disc is plotted every 5 minutes (plus for the last timestamp). The centre of these circles is marked with a small circle. The final one is filled in, so we see that Mars moves from the top of the plot to the bottom during the livestream.
Something to note is that this plot is rotated with respect towards what was shown in the livestream. The plot uses the Xvmc and Yvmc axes for the VMC. The +Xvmc axis points towards the spacecraft +X axis, so the high-gain antenna (and Earth) would be towards the left of the plot, and the solar panels towards the top and bottom (along the Y axis). In the livestream, the VMC images are rotated (because it makes more sense to show them in landscape format), but also mirrored, because Mars moves from top-right to centre-left.
The following shows the distance between MEX and Mars during the livestream. We see that MEX is moving away from Mars, and in fact we can see Mars becoming slightly smaller in the VMC camera.
The next plot shows the angle between the high-gain antenna boresight and Earth during the livestream. The angle is very close to zero. In fact, the magnitude of the angle is comparable to the difference between the transmit and receive pointings due to aberration. It is an insignificant error, because the 1.8 metre high-gain antenna has a half-power half-beamwidth of about 0.7 degrees.
This shows that what we have computed with the SPICE kernels matches what we saw in the livestream. The next question is when such a livestream can be done. Using SPICE, we calculate that the angle between the antenna and camera boresights is 85.37 degrees. This angle doesn’t change, because the antenna and camera are fixed to the spacecraft body. Therefore, we need to look at when the angle between Mars and Earth, as seen from MEX, is around 85.37 degrees.
We calculate and plot this value for all the day 2023-06-02. The spacecraft completes about 3.5 orbits in one day. We see that the angle crosses the 85.37 degree line twice per orbit. On one of the crossings, the angle changes very fast, because the spacecraft is close to the periapsis, so this leaves us only with the other crossing. Of these crossings, the one whose time is preferable for a large outreach event in Europe happens around 16:30 UTC. This is the one that was used for the livestream.
To illustrate the geometry better, I have made the following plot of MEX orbit. The plot axes are defined using the orbital plane. The Z axis is normal to the orbit plane, the Y axis points towards the celestial north pole (according to the J2000 frame), and the X axis completes the right-handed frame. The larger plot is a “front” view showing the XY plane. The smaller plot is a “top” view showing the XZ plane. Mars is shown as a red circle. The part of the orbit which was used for the livestream is marked in red, and the part of the orbit in which the Sun is eclipsed by Mars is shown in black. The Earth and Sun vectors are also shown.
On this day, the angle between the Sun and the orbit plane was only 2.8 degrees. This causes eclipses every orbit, which was also mentioned in the livestream. The angle between the Earth and the orbit plane was 32.9 degrees.
From this plot we can see that the part of the orbit that was chosen for the livestream is the one in which Mars and the Earth are roughly at 90 degrees as seen from MEX. The other such location is close to periapsis, and not usable.
The following plot shows the attitude of MEX during 2023-06-02. The attitude quaternions are shown in the bottom, but they are somewhat confusing to understand. The other two plots, which show the angle between the Sun and the MEX XZ plane, and the angle between the Earth and the HGA boresight, give a better idea of where the spacecraft is pointing. In these plots, eclipses are marked in black, and the livestream is marked in red.
Since the solar panels can rotate about the Y axis, the angle between the Sun and the XZ plane indicates how much sunlight can hit the panels if these are rotated in the best way. An angle of zero means that the panels can rotate so that the Sun hits them perpendicularly, collecting the maximum possible power. As the angle deviates from zero, less power can be collected. I wanted to show the angle between the solar panels and the Sun, but the CK kernel for the solar arrays hasn’t been published yet (and for the spacecraft attitude the CK kernel I’m using is a prediction, rather than an actual measurement, since the latter isn’t available yet either).
The angle between the HGA and Earth needs to be very close to zero when the spacecraft is talking to a groundstation, but at other times its value doesn’t matter. We can imagine that the moments when this angle goes to zero corresponds to the tracking windows.
We can see that during the livestream the angle between the Sun and the XZ plane is forced to grow quite large (at 30 degrees only 87% of the maximum power is collected), because of the conditions that the HGA must point to Earth and the VMC camera must point towards Mars. These two conditions do not leave any degrees of freedom to define the spacecraft attitude.
The angle between the Sun and the XZ plane is only far from zero during one eclipse (when the pointing of the solar panels doesn’t matter), and during two other events in which perhaps the spacecraft is pointing a science instrument, or its UHF antennas to one of the rovers. In these two events the HGA is not pointing to Earth.
One interesting thing is that immediately after the end of the livestream, the communications session with Earth finished. The HGA moved away from Earth and the angle between the Sun and the XZ plane became zero. In the livestream they mentioned that they were planning on running the heaters before the eclipse so that the spacecraft entered the eclipse at a warm temperature and it wasn’t necessary to run the heaters off batteries during the eclipse.
Another curiosity is that when the HGA is pointed to Earth (in normal communications sessions, not in the livestream), the angle between the Sun vector and the XZ plane is 0.52 degrees rather than zero. I wonder why this happens, since there exists a spacecraft attitude that has both this Sun angle and the Earth to HGA boresight angle both equal to zero.