The current issue of AI Magazine has an article describing an intelligent control system used in NASA's Advanced Life Support System, part of which uses Lisp. “Intelligent Control of a Water-Recovery System: Three Years in the Trenches” is a Gamastura-style post-mortem of the project, which “operated autonomously, 24 hours a day, 7 days a week, for 16 months.”
The Integrated Water-Recovery System (IWRS) described in the article was the third in a series of control systems developed by the AI group at JSC for Advanced Life Support, all of which used the same 3T architecture (which is a particular instance of a three-tier architecture). IWRS is intended to recycle waste water on space stations or during long term spaceflight, such as a flight to Mars. (Here I have to brag that I once used a genuine NASA urinal to make a “donation” to the system.)
One of the layers in NASA's 3T architecture is a sequencer, for which they use the RAP system. The RAPS engine is written in Lisp, and is one of the things I worked on at Neodesic and I/NET (the last screenshot in this old post is of a RAPS-based system, as are both the systems pictured in this post). The article includes some screenshots of RAPS and control GUIs running in MCL.
The RAP system is basically a special purpose programming language and runtime for writing software for robots. An example from the paper is this simple startup RAP:
(define-rap (processing-start ?stage ?adjust-time) ;; ... (method purge (context (and (= ?stage purge) (valve-position roskm pps_select ?old-pos ?error) (= ?old-pos pps) (nominal-pump-speed roskm feed ?wwsp) (default-timeout ?dto))) (task-net (sequence (t1 (syringe-pump-p roskm start feed ?wwsp 30)) (t2 (water-flowing-p roskm stop recirc 0 ?dto)) (t3 (turn-valve-p roskm pps_select reject ?dto)) (t4 (turn-valve-p roskm process purge ?dto)) (t5 (turn-valve-p roskm pps_select tank ?dto))))))
The article mentions some of the advantages of using RAPS, and Lisp:
Of course the incremental nature of the Lisp compiler allowed us to change other code without stopping operations. A representative example of this kind of on-the-fly code changing involved the central WRS data display. Frequently, in the early months of the test, the test engineers would desire additional information to be shown on the main WRS monitor. Examples of additional data output not called for in the original design include the reverse-osmosis stage elapsed time and the allowed and average TOC. Because the entire interface was written in Lisp (we used Macintosh Common Lisp [Digitool 1996] running on a Power Mac G4), a control engineer could build, debug, and install such changes to the displays online without disturbing the main control code.
Overall the system worked well and overcame several interesting challenges (in particular I like the ones related to running a long-duration system). WRS seems to make a good success story for NASA, Lisp, Digitool and I/NET. And it's just one of several projects at JSC which use 3T, which has a crucially important lisp component.
Posted by jjwiseman at March 28, 2003 03:26 PM