RamSat mission progress

I’m opening this thread as a place to engage the SatNOGS and Libre Space communities on the RamSat mission, including discussion of spacecraft health, mission milestones, lessons learned, and planned operations. Our team is gaining tremendous value from the observations gathered by SatNOGS, from the database view of individual observations, from the dashboard aggregation of telemetry data, and from discussions in these forums. We hope to be able to repay our debt of gratitude in the future by initiating our own SatNOGS station, but for now our hands are full with our first satellite mission - so please accept at this point our heart-felt “Thank you!”
A potentially interesting point on which to start discussion: We have been learning over the past week or so about “high beta angles” and their impact on system thermal behavior. RamSat appears to be in a high beta angle configuration, with nearly continuous sun illumination for multiple days. In addition, the slow tumble of RamSat is such that its -X solar panel (one of the long sides of the 2U shape) has been facing the sun more or less continuously for multiple days, causing temperatures on the panel to rise to > 90C. This is a concern, and we recently achieved an uplink command to activate magnetorquers in an attempt to give a little nudge to get that panel out of constant illumination. Early indications are that this may have been effective - temperatures on the panel are coming down a bit, but more time is needed to know for sure. We may need to give another nudge. The first nudge happened on 7/15 at about 1:52 UTC.


RamSat seems to have now passed through its first high-beta-angle episode. Peak illumination lasted from about 13-17 July, with solar panel temperatures peaking at 95C, and interior temperatures peaking around 28C. Since then there have been multiple periods of darkness during which the panels have cooled to sub-zero range, and the interior temperatures are trending down. All good news, since the battery charging system did not seem very happy with the high temperatures.
We also have uplinked a recent TLE to the flight computer, and the flight code is now making its own orbital predictions. You can compare those with your own estimates of position by looking at the telemetry dashboard. The onboard real time clock has drifted a bit since pre-launch prep, and we need to update it. That will reduce some bias in the position estimates.
We’re working toward our first imaging commands, which will capture visible and NIR images of Earth.


After a lot of work at the ground station, the RamSat team is now getting pretty reliable uplink connections to the spacecraft. If you are observing on the N. American east coast you may receive, in addition to the one-minute beacon, a variety of ancillary real-time telemetry data for EPS, battery, magnetometers, and position and attitude. In the coming days we will post decode information for each of these packet types at our website https://sites.google.com/view/ramsat/home
RamSat has been storing periodic telemetry data since launch, and in upcoming passes we will begin to request that stored information. These requests will generate many downlink packets. Health of all systems appears solid. We have seen evidence of at least three flight software resets, and each time the restart seems to have gone smoothly. We aren’t sure what is causing the resets, but best guess at the moment is a divide-by-zero error in the orbital prediction code. We are well out of the recent high beta angle episode, and it is a relief to see that the solar panels withstood those high temperatures.


The RamSat team has begun retrieving stored telemetry data. During two recent overpasses we sent commands to pull stored data from the serial flash memory and downlink those data, resulting in about 800 retrieved packets per overpass. These are the same data that get sent on our one-minute beacon, but they are stored every two minutes. Due to the limited storage space, some of the earliest data records have already been overwritten. Once we catch up with current writes we should be able to do periodic downlinks and not lose any more data. Downlinking 800 packets in a few minutes puts a significant drain on the battery, and we will need to be cautious to do most of that work during daylight periods. Our most recent retrieval ended after RamSat had gone into eclipse, and the battery voltage was down close to its lower limit of 6V. It should have already rebounded, during its next sunlit period. We are hoping to get our dashboard set up to accept the stored telemetry format. In the meantime, you may see patterns similar to Observation #4511411 for passes over the eastern U.S.


Quick update: a few hours later, after some refreshing sunlight, the battery voltage had indeed rebounded to its full state around 8.25V.


Another quick update: We have been doing most of our work from a secondary ground station at a mentor’s home while working some issues with the main ground station at the Robertsville Middle School. Last night we had our first success with 2-way comms from the main ground station, and downlinked an additional 512 data frames. This is a big step for our mission, since now the students can work passes easily. Also, this is the station that is licensed to send imaging commands so we can begin to capture pictures for our primary science mission - observing regrowth of forests following wildfire.


In a couple hours the RamSat team will conduct its first student-led mission operations, from the ground station at the Robertsville Middle School STEM classroom. The pass will start at 23:21 UTC, and we will attempt to downlink position and attitude telemtry, then run a detumble algorithm for three minutes. If there is still enough time and if the orientation is favorable, we will attempt to capture our first images from space! If we get that far, the downlink of those images will have to wait for another good pass, but we should get enough information from the file size to know if we have captured a view of Earth


Is there a documentation to extract those images from the downloaded frames? We might have them in SatNOGS DB if someone else monitors the downlink…

1 Like

We did get several position and attitude telemetry packets tonight, and also engaged the detumble function for three minutes. After two minutes running the detumble algorithm the system performed a reset. With a bit of sleuthing we realized that we had exceeded the top-level system watchdog timer, which is set for two minutes. Oops! In the future we will have to keep our detumble commands closer to one minute. As a result of the reset and our scramble to understand the issue, we were not prepared to capture imagery before the pass ended. We are a step closer to that goal, however, and should get there in the coming days. The detumble reports and startup message following reset were captured by @fredy in Observation #4545590.

@DL4PD we need to make documentation for the image packet format. I can describe it in a message, but probably most useful to you all would be a stand-alone document with all the details. We’ll get that together and share ASAP.


After running our detumble algorithm for a total of four minutes over a couple of days, the tumble of RamSat has now slowed from a period of about 3 minutes to a period of about 10 minutes. That rotation is slow enough that we should be able to get reasonable imaging. The axis of rotation is favorable for having cameras pointed near nadir for some part of a typical overpass. We now have good two-way communication at our classroom ground station, and the students have been able to perform basic mission operations. We will meet tonight to attempt our first image captures! This will include imaging in the visible and near infrared bands, taken in pairs. We will attempt to command the capture of several imaging pairs, separated by a minute or so. Downlink of captured image data will be attempted on future overpasses. Tonight’s pass (12 August) will take place from 21:42 to 21:53 UTC. Observers should see messages confirming that cameras are powered and initialized, followed by messages confirming capture for each camera, including metadata for the newly created JPG image files.


Success! We were able to capture three pairs of images during this evening’s overpass, each pair consisting of visible and near infrared bands. The images are now stored onboard on an SD card as jpeg files:

Based on ground testing we know that the larger files will have the most image complexity, so we suspect that our first image pair will have the best nadir view, while the second and third may have more off-nadir views. Position and attitude data gathered during the overpass support this, but the proof is in the downlink! We have another good overpass on Sunday, 15 August, 20:53 UTC, and we will start downlinking image data during that pass. If all goes well we should be able to get one full image during the pass. Students were in full command of the mission this evening, and they are getting more comfortable with the ground station software, the radio system, and their roles as mission controller, timekeeper, command specialist, RF specialist, etc. We are all excited to see the first images, and we will share them here as soon as possible. We are still planning to provide the SatNOGS community with details on how to decode the image packets, once we have gotten through a first successful downlink. Stay tuned, and thanks again for your interest in our journey.


Here is an observation with some of the info from the capture in it. SatNOGS Network - Observation 4564345

This one has more.


That’s great! Congrats!

Keeps us updated when you are going to attempt the downlinking (and in general important events) so we can schedule observations as a backup. :slight_smile:


Our next downlink will be tomorrow, August 15 starting at 20:53 UTC if everything goes well!


Our next downlink will be tomorrow, August 18, starting at 12:45 UTC. We were able to get most of an image yesterday and could see clouds and water clearly!


Observations have been scheduled! Unfortunately we missed the previous downlink. :frowning:

@goethert is there a site that we can see the images or could you upload them here?


With this morning’s pass we were able to gather all packets that were missed on Sunday. Very happy to share with you here the First Light image from RamSat!


Our next downlink will be today so we wanted to share a little more on how we are handling images from RamSat.

Onboard RamSat we convert the image into a byte array. Each of t those bytes is converted into hexadecimal. Those hexadecimal are put into a string of up to 240 characters and transmitted via text, along with a header that shows the packet sequence.

Below is the Jupyter notebook we are preparing as a classroom activity for decoding an image. The attached text file is the supporting image data.

CMD1_001.txt (141.8 KB)

#!/usr/bin/env python
# coding: utf-8

# In[1]:

# Tell python you are using I/O (input and output) for working with files/streams
# and the PIL or Python Image Library for displaying images
import io 
import PIL.Image 

# In[2]:

# Declare a variable to hold all the RamSat packet data, it will start out empty
packets = []

# Open the text file that contains the image data downloaded from RamSat
# For every line in the file, test it to see if it starts with "RS:",
# if it does, append it to our variable that contains a list of packets
with open("CMD1_001.TXT") as packet_file:
    for line in packet_file:
        if line.startswith("RS:"):

# In[3]:

# Let's examine the first three packets in our list:

# In[4]:

# Notice how they all start with "RS:    0 "
# The first part of the line identifies the packet number so we can keep them in order
# But it's not part of the image data, so let's slice that part off, leaving only the packet data

# This cell is identical to cell #2 except for one small change. Can you spot the difference?
packets = []

with open("CMD1_001.TXT") as packet_file:
    for line in packet_file:
        if line.startswith("RS:"):

# In[5]:

# Let's examine the first three packets again, no more packet numbers

# In[6]:

# Declare a variable that will hold the binary data as an array of bytes
image_data = bytearray()

# That data is in hexadecimal format, so it needs to be converted to a series of bytes (aka a "byte array")
# Once converted, it can be added to our image data variable
for packet in packets:
	packet_bytes = bytearray.fromhex(packet)
	image_data += packet_bytes

# In[7]:

# Now that we have the image data, we pass it to the Image library for display
selfie = PIL.Image.open(io.BytesIO(image_data))

This afternoon we will attempt to download the corresponding IR cut image. Those two images will be combined to form an NDVI (Normalized Difference Vegetation Index) image which highlights active plant growth. We have a sample NDVI image on our website (February 20) if you would like to see the final result.


Our next image downlink attempt will begin today, 20 August, around 18:26 UTC.