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.
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!
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:
Easy to remember, right? This command starts our fast steering mirror algorithm that corrects unwanted motion of stars in our cameras.
Say we want to shutdown our Process Watchdog…
>> pdog kcyabi
Everybody has to have a good shutdown command, right? We don’t.
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:
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:
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
- 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.