MGC Observer Client

= General Description =

This is a GUI tool used for monitoring the state of various software components. It will take data from a Base Component class and display important information in a GUI window, so we can monitor performance stats. Some components to be shown are the current vehicle state (Speed, direction, location), sensors (Graphs of LIDAR and pictures of vision output), and performance (a graph of all component performance).


 * This client will be built with an OpenGL GUI class that is yet to be determined.
 * It will need to know the IP and port number of the machine that is running the programs that this client will be monitoring.
 * Should be able to output what the bitmaps being created by MGC Road Detection in one part of it are looking like so we can make sure it looks alright.
 * Possible able to be launched and read in data from the logging class through wifi. This would be more useful than running it on the machine that's running Main Controller.

Owners

 * Erich
 * Marshall
 * Jeremy Bridon

= Performance Requirements =

This component must be able to refresh all visual components (not necessarily data) at thirty times a second (30 FPS).

= Input =


 * Data from BaseComponent, which this class will inherit from.

= Output =


 * No formal output exists, apart from the visual GUI

EStoekl 20:12, 1 November 2009 (UTC)
 * Settin up the ability to print multiple graphs at a time. Thinking about keeping an int for how many graph are set up in the window.  If you've got like 6 components there should be the option for displaying all of 18 graphs.  Glui should be able to handle it with its drop down boxes and stuff.

= UI Structure =

The below image is a sample structure of how the user-interface should be designed.



The screen will be split into three rows, the top two being split into two columns and the bottom being split into three columns. The top right quarter shows a list of registered component names as well as the associated colors for graphing. This area also contains the total number of minutes and seconds the program as been running. The following three graphs represent the following:


 * Cycle Count - The amount of cycles per second (See BaseComponent for more details) for each component
 * Input Time - The averaged input times for each component
 * Cycle Time - The amount of time per cycle for each component

This data should be graphed as a line plot associated with a specific component's color.

Please refer to the general BaseComponent class to find how to read these values. Each component we want to read from should be saved within the *.cfg file loaded by this component.

The bottom three columns are reserved for a turning/facing dial, a velocity dial, and a general purpose text that should display general info that is GPS/waypoint related.

= Setting up GLUI =

GLUI is no longer a requirement / dependency to this project

This took me way too long to get working, but here's how to do it in windows:
 * 1) Download GLUI 2.3.5
 * 2) Launch the Visual Studio sln or project file to open it up, it'll have to convert to Visual Studio 2008.
 * 3) If you just try to compile and run it will probably give Freeglut errors.  Go to Tools->Options->Projects and Solutions->VC++ Directories, change it to Include and include the "include" directory that is in the msvc directory in the GLUI 2.3.5 directory.  Include both the "include" directory and the "GL" subdirectory of include.
 * 4) Change it to Libraries, make a new entry for the lib directory in msvc.
 * 5) Apply settings and close this window.
 * 6) Right click on the project in the solution explorer and hit properties.  Go to Configurations Properties->Linker->Input and DELETE the line that says "glut32.lib".  Should be the first option in "Additional Dependencies".

Now example should compile and run just fine. Here's a manual for figuring out how to use GLUI. http://voxel.dl.sourceforge.net/project/glui/Documentation/GLUI%202/glui_manual_v2_beta.pdf

EStoekl 17:44, 12 October 2009 (UTC)
 * I regret to say that I'm a tiny bit unsure of if GLUI is necessary at all, or will even be useful, for what the observer client will need to do, after seeing what is can do. Still I'm trying to figure out how to use and work with it.


 * We talked about this today in-person, but the basics are that we will stick to GLUI since there eventually will be interaction between other components and this process. An example is the configuration needed by Camera / Vision data merging. JBridon 00:39, 13 October 2009 (UTC)

= Developer Discussion =


 * I've added some more details JBridon 04:00, 2 October 2009 (UTC)
 * EStoekl 03:17, 2 October 2009 (UTC)

http://glui.sourceforge.net/ EStoekl 01:11, 7 October 2009 (UTC)