Indiana University Computer Science Autonomous Golf Cart Project
Overview
The Embedded and Real-Time Systems research group at Indiana University has been developing an vehicle to facilitate research and instruction in the area of autonomous vehicles. Our current platform is based on a modified golf cart. Actuators have been developed that allow the steering, braking, and throttle to be controlled by the computing platform. The cart's sensor package currently includes a GPS, Compass, CMUcam2, odometry, and a stereo camera. The cart's current computation platform includes 3 desktop class machines running linux.
One of the primary research missions is the demonstration of a rapid prototyping system based on a synchronous file system. Using this approach allows new components to be quickly integrate along with the dynamic configuration of existing components.
As an instructional platform, we use the cart as a laboratory to instruct students in embedded and real-time system (P545, https://www.cs.indiana.edu/classes/p545/). Students develop projects that include path planning and obstacle avoidance.
Syncfs
We have adopted a synchronous model for component communication that is based on synchronous file access. The custom file server based on the npfs libraries (http://sourceforge.net/projects/npfs) using the 9P network protocol. The syncfs server implements a ram based, double-buffered file system that commits written files on constant clock period. We are currently using 100mS. The 9P protocol is supported by 2.6 linux kernels so a standard mount can be performed by linux clients. Standard file I/O is supported with the additional provision of a blocking stat operation when applied to a synthetic clock file. This operation allows processes to resynchronize to the file system on each clock cycle.
Because our system is based on synchronization through the file system, almost any programming language that supports file access can be used to develop components. This flexibility is highly useful for partitioning component development among design team members that may want to use different languages.
Cartfs
For our autonomous vehicle development, we have tailored our usage of syncfs to optimize for the requirements of this class of system. We have given this constrained system the name cartfs. Cartfs utilizes a standard syncfs file server with contraints placed on component file access. Each component process exposes a single file that only it can write that is called it's status file. It also exposes a configuration file that it reads at the beginning of each clock cycle. This file includes pointers to variables in other component's status files that are to be used as input. As a convention, we have standardized on using JSON (http://www.json.org/) as the format for configuration and status files.

