Testing the limits of interferometry; Resolving Charon, Pluto's Moon
Attempts at direct imaging of Pluto’s moon Charon using a 1.0-meter telescope
Imaging Charon, Pluto’s largest moon, is at (or beyond..) the limits of speckle interferometry with a 1.0-meter telescope. The small ~0.7″ angular separation, the low brightness of Charon, and the glare from Pluto make the observation challenging, even under (the comparatively excellent) ‘average’ seeing conditions in the Atacama Desert in Chile, and using state-of-the-art optics and a low-noise, high-framerate CMOS sensor.
June 2022
In June 2022, I made a first an attempt to observe Pluto’s moon Charon using (bispectrum) speckle interferometry.
The encircled dot could be Charon, but with very (and unscientifically) low confidence.
August 2023
New observations are hindered by weather during the Chilean winter.
To verify the moon’s position if a detection is made, I now calculate the expected position angle and separation.
Separation
# CC BY-SA
# Leon Bewersdorff
#!pip install spiceypy
import spiceypy as spice
import numpy as np
from datetime import datetime, timedelta
# Required fíles from the NASA Jet Propulsion Laboratory's Navigation
# and Ancillary Information Facility (NAIF). Link:
# https://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/satellites/
spice.furnsh('naif0012.tls')
spice.furnsh('plu058.bsp')
start = datetime.strptime("2023-07-15T00:00:00.000", '%Y-%m-%dT%H:%M:%S.%f')
end = datetime.strptime("2023-07-25T00:00:00.000", '%Y-%m-%dT%H:%M:%S.%f')
step = timedelta(hours=int("4"))
results = []
current_time = start
entry_number = 1
while current_time <= end:
et = spice.str2et(str(current_time))
state_pluto, lt_pluto = spice.spkgeo(targ=9, et=et, ref='J2000', obs=399)
state_charon, lt_charon = spice.spkgeo(targ=901, et=et, ref='J2000', obs=399)
pluto_vector = np.array(state_pluto[:3])
charon_vector = np.array(state_charon[:3])
unit_pluto = pluto_vector / np.linalg.norm(pluto_vector)
unit_charon = charon_vector / np.linalg.norm(charon_vector)
dot_product = np.dot(unit_pluto, unit_charon)
angular_separation = np.arccos(dot_product) * 180/np.pi * 3600
results.append((entry_number, current_time, angular_separation))
current_time += step
entry_number += 1
for entry, time, separation in results:
print(f"{entry} {time.strftime('%Y-%m-%dT%H:%M:%S.%f')} {separation:.6f}")
Feel free to use this code with updated NAIF data. An array is printed containing the separation and position angle in specified time steps (hours).
October 2023
Two attempts to observe Charon were rendered unusable due to suboptimal sky conditions.
November 2023
Processing another attempt did not generate a result that showed any indication of Charon.
Files being prepared for speckle processing:
Negative speckle interferometry result:
Maybe a 1.5-meter would do.