Scenario - Commissioning
This scenario was developed to provide users with an idea of how to write basic COSMOS scripts to help perform spacecraft commissioning.
In the real world, post-launch and pre-operations represent an important time to assess and verify the state of the spacecraft. Before science can begin, subsystems need to be checked for nominal states and health. Once these are confirmed, science can be performed and basic ‘control’ of the spacecraft can be driven by the science team.
This scenario was last updated on 06/09/2025 and leveraged the dev branch at the time [a3e7c100].
Learning Goals
By the end of this scenario, you should be able to:
Write simple COSMOS scripts using prompts, wait_checks, and message boxes.
Send commands and receive telemetry using COSMOS Scripting.
Understand the basic goals of spacecraft commissioning and checkout.
Prerequisites
Before running the scenario, complete the following steps:
No additional file changes or special setup is needed for this scenario
Walkthrough
With a terminal navigated to the top level of your NOS3 repository:
make

make launch

Then, organize the windows for ease of use:

Now we start the COSMOS ground software:
Click the
Okbutton, followed by theCOSMOSbutton in the top left of the follow NOS3 Launcher window that appears.Note you may minimize this NOS3 Launcher, but do not close it.
Our focus is using the COSMOS windows to assist with what we’re accomplishing. You may minimize the 42 GUI windows to simplify your environment if you desire.
Identifying Important Commissioning Data
Commissioning varies from mission to mission. Sometimes it’s scripted and sometimes it’s hands on. At a basic level, we want to confirm the health of our spacecraft, and prepare it for science mode in the future. In the real world, commissioning could generate data that various subsystem teams would need to analyze before giving their ‘green lights’ to proceed with science.
Let’s discuss and identify the minimum information we need to make sure our spacecraft is healthy. We’ll do this by answering some basic questions:
How much power do we have?
What state does the spacecraft think it’s in?
Are we having weird reboots?
Can we turn on the instrument briefly?
Can we configure science mode, so we’re ready to go when science says we can?
Using the above questions, take a few minutes to look through the COSMOS Packet Viewer for the following packets: EPS, MGR, and SAMPLE.
What packet fields did you identify as being necessary to answer these questions?
Writing a Commissioning Skeleton
In a text editor, such as VSCode, navigate to gsw/cosmos/config/targets/MISSION/procedures and create a new file ‘my_commissioning.rb’
In the first line, write ‘require ‘mission_lib’
Let’s add Ruby comments to help us navigate what we’ll be doing for our commissioning, add the following lines with a blank line or two in between
_# Turn on the radio__# Check our power__# Verify our state__# Check for odd reboots__# Turn on the instrument__# Configure Science Regions for future use__# Turn off the radio_
Checking our Power State
We’re going to skip the radio parts for a moment, but let’s generate a template we can use to check out our other items. We’ll do this with the EPS voltage check.
# Check our power
prompt("Proceed with battery voltage check, Press OK to continue.")
wait_check_packet("GENERIC_EPS_RADIO", "GENERIC_EPS_HK_TLM", 1, 10)
battery_bus_voltage = tlm("GENERIC_EPS_RADIO GENERIC_EPS_HK_TLM BATT_VOLTAGE")
message_box("Battery bus voltage reported to be #{battery_bus_voltage} volts.", "OK", false)
What we’ve accomplished above is a block that:
Checks if we’re ready to check a telemetry point.
Waits for a fresh value for that telemetry packet.
And finally, clearly prints the value to a screen.
Now, with the EPS Voltage Check as a template, fill in the items needed for our state, and anomalous reboots.
Commands as part of templates
There are a few ways to accomplish commanding, but we’ll keep it simple. We still need to finish our blocks for turning on the instrument, and configuring science!
COSMOS scripting makes sending a command as easy as using the following syntax: cmd(“SAMPLE_RADIO SAMPLE_ENABLE_CC”)
Using that information, write command blocks for the instrument that:
Generate a prompt for permission to continue
Enables the Sample Instrument
Generate a prompt for when to proceed to turn it back off
Generates a prompt to disable the sample device
Disables the Sample Instrument
Now, we will configure science mode. The difference between this and the above commands is that the science mode commands take arguments, whereas we didn’t need arguments in the above commands.
A sample Enable Science Region command looks like:
_cmd("MGR_RADIO MGR_SET_AK_CC with AK_STATUS ENABLE")_Using the above as a template, write a new section to our script that will:
Prompt if it’s OK to configure science regions
Enable AK
Enable CONUS
Enable HI
Turn the Radio On and Off
We’re almost done!
Turning our radio on and off for transmit is a critical part of some missions.
If a radio is left on, it could kill the spacecraft.
We’ve written a little help script to abstract this, and we will add it to the top of our script, after the line to require ‘mission_lib’
# First, make sure we can contact the SC and we can receive data from it
enable_TO_and_verify()
sleep(20)
The last thing we must do is to turn the radio off. At the end of your file, add a block that does the following:
Prompt for permission to turn off the radio
Sends the CFS_Radio Command to disable telemetry output
Let’s run it and see how it works!