Saturday, May 15, 2010

Exploring the Milky Way

I was sent to South Africa for work during April for about three weeks. I brought a long plenty of reading material (not safe to walk outside supposedly). The first book I read was Exploring the Milky Way by Donald Goldsmith (1999) which I checked out of my local public library. Let's just say that reading this book lit a fire under me, I want to learn more about how they actually write software for a probe that is millions of miles away and 10hrs away from any instruction from Earth. So how do they actually write that code? Did they program an AI in C++? Is it some crazy assembly language? I am guessing Java or .NET isn't a skill that would be particularly useful for the Cassini and Galileo missions. I think my basic questions are echoed by others, for example this poster(Developer.*: "Code for Nasa space probes" By berrydoo)
I've been reading a lot lately about the two Mars rovers, and the Galileo space probe thats orbiting Saturn's moon Titan. And I'm really curious to read about the software design of those machines. That must be some of the most complicated code ever written. These machines have to be "smart" enough to manage navigation through space, communication with earth, management of sensors and storage of sensor information, create and possibly interpret diagnostic data, and be smart enough to recover if a problem occurs. What should it do if it cant communicate with earth any more? What should it do if one of it's systems fails? I'd venture to say that code is about as close as we come right now to artificially intelligent machines.

Does anybody know where I could read more about this topic? I've looked around, but I cant find anything on the internet. That information might be classified, but I just thought I'd ask.


Well sir, I had the exact same questions, so I started to google it. My own particular interest had more to do with the deep space missions to the outer solar system, Jupiter, Saturn, etc. That limits it down to the Voyagers (software probably written in the 70s), Galileo (Jupiter mission, 1989 - 2003), Cassini (Saturn, 1997 - present). Certainly there a couple missions underway or to be launched (e.g. Juno).

I decided to look into Cassini. In the end I found a number of resources that help explain how the software was designed and what it does. (Cassini software was written in Ada)

So if you want to know more about Cassini or other spacecraft implementation details these are some useful resources I've found:


  • Basics of Space Flight, JPL
    http://www2.jpl.nasa.gov/basics/index.php
    Top to bottom introduction to physics, mission operations and spacecraft components. Useful reference or for putting it all together. Much higher level than many of the technical papers describing the actual software or components that assumes this knowledge.

  • The Cassini Spacecraft: Object Oriented Flight Control Software, Hackney, J., Bernard, D.Rasmussen, R.
    http://hdl.handle.net/2014/34861
    Article about how they used OO methodology for design of components to steer/orient the spacecraft.

  • An Attitude Control Design for the Cassini Spacecraft, Wong, Edward
    http://hdl.handle.net/2014/30851
    How the spacecraft determines attittude and estimates attitude for pointing (Star-sensor, sun-sensor, gyros, etc..)

  • System Fault Protection Design for the Cassini Spacecraft, Slonski, John P.
    http://hdl.handle.net/2014/31814
    Attempts at generic or reusable fault protection models, designs and algorithms for fault protection.

  • Cassini Star Tracking and Identification Algorithms, Scene Simulation, and Testing, Alexander, James W.
    Chang, Daniel H.
    http://hdl.handle.net/2014/26388
    How the spacecraft's star tracker, literally takes an "image" of the sky, on the fly looks up the configuration of stars in an on-board "database", calculates relative distance between stars, and then based on that can give an estimate of where it is pointing. Amazing stuff.


More public domain, articles in PDF format are also available for many subjects on BEACON eSpace at Jet Propulsion Labratory.

Enter the Dojo

I was struggling with a project at work last week involving Dojo, and elements of AJAX, JSON.

One downside, the Dojo documentation is all over the place, a lot of it is incomplete and when you google search you often see out of date pages or broken links come up first.

My project was cool in a way and I can go into what it involved. But first to give credit where credit is due, I found this really helpful tutorial to add checkbox inputs to a Dojo/Dijit tree (yes it is much harder than one would think)

http://www.thejekels.com/dojo/Dijit_Tree_Chkbox.html

Examples were easy to follow and worked (note that the first steps in the tutorial don't actually work in Dojo 1.4, but he helpfully points that out the workarounds near the end).