Where lolspeak and NASA Come Together (BRRISON Flight Software)

Ladies and gentleman, after months of arduous hacking, 1000 Git commits (not planned I swear), 64,477 lines of code, and a lot of cussing and crying, the flight software for the UV-Visible bench on the BRRISON has finally been frozen. This software will be responsible for taking pictures of the Comet ISON with two cameras that look through a 1 meter telescope from a high altitude NASA balloon.

Hubble's ISON

Hubble’s ISON

Launch is just a few days away! Our last (and 1000th) commit is show below. We think it is fitting, and it will be the first software we execute from near-space!

1000commits

Final Commit

Perfect, right?

We didn’t want to be like all those other boring NASA payloads with cryptic flight commands like “nvRamMechStatSet(5,2)” – a real command that turns our communication on from the gondola bus – or even use hard-to-remember commands like “takePictureAndRunCentroidAlgorithmNOW”. Instead we went to the tried and true method of easy-to-remember sayings… lolspeak! Just to get a taste of some of our payload commands, here are a few:

This command takes a picture:

>> canhazpic 

Easy to remember, right? This command starts our fast steering mirror algorithm that corrects unwanted motion of stars in our cameras.

>> myDoWiggles

Say we want to shutdown our Process Watchdog…

>> pdog kcyabi

Everybody has to have a good shutdown command, right? We don’t.

>> shitdown

And my personal favorite: How would you tell your filter wheel to go back to its nominal position?

>> filterwheel goHomeUrDrunk

As “unprofessional” as this might be, it is quite effective. Our entire team, systems engineers and PIs included, have easily memorized the essential commands of the system. Want to know if a star is in our field of view?

Steve – “Hey Kevin… Can HAZ centroid??”

Kevin – “LULZ YES!”

In fact, the lolspeak commanding is the sole area in the software where the rest of the team has any insight. Without anyone looking at a single line of code, and their only interaction with the payload being through our lolspeak commands, everyone seems happy and ready for flight! Just goes to prove our point: higher profile software doesn’t necessitate unintuitive interfaces. Do what works, do what makes sense.

Lolspeak aside, let’s talk about some of the scope what this software required. Our goal was to build a command-able flight system capable of controlling two mechanisms (a fold mirror and a filter wheel), take images from two cameras, control a fine steering mirror at at least 100 Hz, take health and status data, and be capable of recovering from anomalies that may occur in space due to cosmic radiation. We started back in February our development looked a lot like this:

Commits

The primary contributors were Kevin Dinkel and Zach Dischner. There were two primary software sprints in June and July, where the system was being pushed for flight readiness. The software is primarily written in  C/C++ (for max speed) with a few python scripts thrown in here and there to do remedial (slower) tasks. Here is the language breakdown from GitHub:

languages

To show how remarkable this development effort was, lets try to gather some more statistics. An especially notable contributor to the code was Jack Dinkel (mini-Dink), Kevin’s younger brother, who taught himself python in a few months during the summer and helped to write some meta utilities, including a code line-counter. Here is is run below!

>> python LineCounter.py ../dinkelk-ison-cdh

Found 64477 lines in 453 files

Lets do some simple math: 64,477 lines of code, spread over 1000 commits, in just 224 days (Feb 9 to Sept 21) means that we:
  • wrote an average of 288 lines of code per day (counting weekends)
  • committed 31 software patches per week, each with an average of 64 lines per patch
  • committed 98 software patches on our maximum week in June (the first week of payload integration)
  • committed 24 software patches in one day (a Saturday) during that same week
  • and are in desperate need of vacations.
When was this code written? Surprisingly, even with our many late nights. We seemed to get the most work done in the mid afternoon. Unfortunately, you can tell we got to take no weekends off. Sad-faces.
punchcard
One last thing, here is the lovely GUI we will be monitoring the status of our payload with.
Capture
Pretty, huh? After months of our systems engineer and PI saying: “Oops… can you just fix that in software?”, “I have a python notebook that can do that…”, and “all you have to do is write code to take pictures… how hard can that be?”, we finally finished. We expect it to perform phenomenally! And seriously, it really isn’t that complex….
branches
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s