Sunday, September 26, 2004

"So you said this was a software project but all you've posted on to date is hardware?"

OK, let's look at the software components of Cylon:


A Managed C++ recompilation of the Brainstem GP board which is used to do all the sensor & motor I/O.


A library that talks to a Gps unit over RS-232 and converts the Gps's output into managed objects (AKA GpsPoint, GpsFix events). It understands the NMEA-0183 protocol which is commonly used by consumer GPSes. It has been tested with the Delorme Earthmate GPS.


A Managed C++ library build on top of DirectShow that exposes a standard web-cam as high level objects. This allows you to get RGB24 bitmaps out of the web camera so you can process the images in any way you want from C# or other .NET languages. It has been tested with the Logitech QuickCam 3000 Pro & 4000 Pro.


A C# library that takes the bitmaps from VideoCapture and performs a color pattern recognition search. The output of this library is "there is a cone at 10 degrees to the left about five feet out". This library was written by my wife, Tracy Beavers, who is into the AI and recognition aspects of robotics.


The "central nervous system" of the robot. This runs on the robot and pulls together all the libraries above. This library runs the robot control loop (AKA "follow this heading" and "turn towards this waypoint") and exposes TelemetryData which is used to display the state of the robot including what actions are being taken, what all the sensor and motor settings are, etc.


A lightweight application that runs on the robot. It creates the CylonControl object, shares it out to the network via TcpRemoting, and runs a simple UI on the robot to display a subset of the TelemetryData.


The central control UI for the robot that runs on a laptop. This connects over the network to CylonControl via TcpRemoting & CylonHost and then is used to view TelemetryData and issue commands like "Start", "Stop", etc. This doesn't actually tell the robot when to turn, move, etc. it is just the UI for a person to use to monitor the progress of the robot, etc.


A waypoint calculating application which runs on the laptop. Before the robot is started, I attach the GPS to my laptop and walk the course. This application reads the Gps, averages the readings using a Kalman filter to get more precise waypoints, and then stores a list of ordered waypoints. These waypoints are downloaded to CylonControl and used by CylonControl to navigate the course. Eventually I will integrate CylonUI and GpsViewer into one application for simplicity.

As you can see, there was quite a bit of programming involved in the development of Cylon. I'm planning on making binaries of some of these libraries available (GpsReader, VideoCapture, Brainstem.Net) in the near future.