Software System Overview
Description of our software system
Note: This page addresses the old (pre-IGVC 2011) software. We now use ROS.
Getting started
Our software is written in a combination of two programming languages: Python and C. Python is used for high-level logic (path planning) and I/O bound operations (serial communication), while C is used for CPU-bound operations (image processing). The robot has a dual-core CPU, so we anticipate running the Python code on one core (though it is multi-threaded the Python GIL makes it effectively single-threaded for CPU consumption) and the C image processing code on the other.
If you are not familiar with Python, don't worry. It is a very easy language to learn ---- Dive Into Python is a good resource for experienced programmers. One of the reasons we selected it is that it is used in the CSSE 120 course here at Rose. C is somewhat more difficult to approach, but you will eventually learn it in class (assuming that you are a SE, CS or CPE --- it's used in CSSE 332, Operating Systems). If you decide you want to learn it on your own, the canonical reference is K&R. Our C code is all about image processing using the OpenCV library, which you are unlikely to have experience with anyway.
Our system design is generally object-oriented, but we strive to keep things reasonable --- we're not imitating Java here. We generally model physical objects as Python objects.
Dependencies
Ubuntu packages are listed in italics. The listed packages are known to work on an Ubuntu 9.10 system.
- Subversion --- subversion
- Python 2.6 --- python-dev
- OpenCV 2.0 (built from source because the Ubuntu package is old) --- cmake
- For highgui: libgtk2.0-dev
- For GStreamer capture: libgstreamer0.10-dev,
- For FFMPEG capture: libavformat-dev, libswscale-dev (not entirely sure of these)
- For V4L capture: Linux headers?
- For Unicap capture: libunicap2-dev, libucil2-dev
- You can select the backend(s) to compile with a line like:
cmake -D WITH_FFMPEG=0 -D WITH_V4L=0 -D WITH_GSTREAMER=0 -D WITH_UNICAP=1 ./
(This one disables all backends except Unicap.)
- Documentation rendering
- epydoc --- python-epydoc
- GraphViz --- graphviz
- GPSd --- gpsd, python-gps
- PySerial --- python-serial
- PyGTK --- python-gtk2-dev
- Gnu Scientific Library --- libgsl0-dev
- CWiid --- python-cwiid
You'll also need subversion to check it out, build-essential to build it and the glade package to edit GUI definition files (glade-3 prior to Ubuntu 9.10).
To install it all:
sudo aptitude update && sudo aptitude install subversion build-essential python-dev cmake \
python-epydoc graphviz gpsd python-gps python-serial python-gtk2-dev glade libgsl0-dev \
libgstreamer0.10-dev libgtk2.0-dev libavformat-dev libswscale-dev python-cwiid

