Software Plan

This an outline of the desired functionality of the rover software. We have two categories: Interface, Rover.

Stage 1 is to be completed by March 39th (right after spring break). Stage 2 does not have a completion date, this will have to be set when stage 1 is close to being finished.

Block Diagrams

This is the current block diagram:

Block Descriptions

Interface (Laptop)

BlockAuthor
InterfaceProcessManagerBlockBen
InterfaceWirelessBlockBen
LoggerBlockAkhila
DataProcessingBlockNone Yet
UserInputBlockTaj
ControlInterfaceBlockTaj
TactileInterfaceBlockTaj
GUIBlockTaj
DisplayBlockTaj

Rover

BlockAuthor
RoverProcessManagerBlock?Ben
RoverWirelessBlock?Ben
MotionControlBlockScott
SystemInputsBlockShady
ModuleHandlerBlockScott

Interface

This is the software that runs in the base station. The goal is for this to be simple but powerful, we need to be able to tune/fix things from remote if at all possible. In Utah the bad happens, the software will be ready for this.

Requirements - Stage 1 - Due March 29th

  • Run under linux
  • Communicate with rover
  • Read sensors/log data
  • Control Rover
  • Control Arm
  • Live feedback of information
  • Easy to use
  • ...

extra awesomeness - Stage 2 - No due date yet

  • Arm software interface
  • Environment mapping
  • Map/Position plotting
  • Path routing / fastest route solving

Rover

This is the software running on the rover. This will be running on an ARM level embedded system, this means we have some power. The onboard software should be able to deal with anything we tell it from the interface, as well as (hopefully) protect the system from human mistakes.

Requirements - Stage 1 - Due March 29th

  • Stable
  • Controls all of rover modules
    • Motors
    • GPS
    • Compass
    • Arm
    • cameras
    • ...
  • Handles low/no power correctly
  • anti-own-self mechanism ;)
  • handles disconnect (doesn't run away)

extra awesomeness - Stage 2 - No due date yet

  • Point to point autonomous
  • Retrace steps to regain communication
  • Auto targeting arm

Attack Plan

We will be utilizing OOP principles heavily, this does mean that our code will primarily be written in C++, though some segments may utilize C or Python when appropriate. Libraries we will utilize:

  • Gui - Qt
  • LibUSB - usb interface
  • pthreads - Threading
  • OpenGL - Advanced Rendering

Classes/Modules that can be / need to be written:

  • USB abstraction
    • Be able to open usb device based on VID/PID
    • Abstract packed sending/receiving and buffering
  • Gui Abstraction
    • Simple interface to change values on the GUI
    • Check event queue for events

Work for 11/23/2008

  • Descriptions of the Blocks
    • Taj : GUI, User Input, Display, Control Interface, Tactile Interface
    • Akhila: Logger, Module handlers
    • Ben: Data Processing, Wireless, Process Communication
    • Scott: System Inputs, Motor Control

Attachments