ECE497 Project RoverGUI

Team member: Chris Good

Grading Template
I'm using the following template to grade. Each slot is 10 points. 0 = Missing, 5=OK, 10=Wow!

 00 Executive Summary 00 Installation Instructions 00 User Instructions 00 Highlights 00 Theory of Operation 00 Work Breakdown 00 Future Work 00 Conclusions 00 Demo 00 Late Comments: I'm looking forward to seeing this.

Score: 00/100

Executive Summary
This project is to create a GUI that could be used to control the rover project found here:ECE497_Project_Rover The GUI will have two interfaces. The more simple one can control forward, backwards, and turning. The other will be GUI based on the Google Maps API so that users can click waypoints for the rover to travel.

The curent code will allow the user to place into a file either simple commands or a list of coordinates from the Google Maps API.

Although in itself this project would likely not be of much use, it will give certain projects a very useful and easy to integrate user interface.

Installation Instructions
First, ensure node.js is installed by running:

beagle$ opkg install nodejs

Next, the GUI can be downloaded from [git://github.com/goodca/roverGUI.git here.] No compiling is needed so the GUI is now ready to be used.

User Instructions
Move to the top level of the directory GUI directory. To run the GUI server, run:

beagle$ node GUI.js

Then, from any networked browser point to:

beagle$ beagle:8081

where beagle is the IP of the BeagleBone. The browser will now be pointed to the home screen of the GUI. Either the simple direction GUI or the Google Maps GUI can now be selected by clicking the text of the option you would like to select.



Selecting the simple control option will send you to the simple control GUI.



Clicking on a button will cause create a file in the top directory of the GUI directory called inst.txt that will contain only the text from the button most recently clicked. In this way, the program to be controlled can watch this file and carry out the instruction currently in the file. With some easy modification to the source code more buttons can be created that will add any additional functionality.

If instead the maps GUI was clicked the following will be displayed



From here you can navigate the map as is likely familiar with Google Maps. However, any time the map registers a single left click a marker will be placed. Every additional marker after the first will place a second marker with a line from the preceding marker. This can continue as long as many times as the user would like markers placed.

The following is an example of a marker placed on Rose-Hulman's campus, New York City, Chicago, Louisville, and then back to Rose-Hulman.

Once finished, the user can click the "done" button near the top of the page. At this point, the inst.txt file in the GUI directory will be populated with the coordinates of each marker in the order they were clicked. The following is the resulting file from the example map.

(39.4824644923698, -87.32401371002197) (41.88592102814744, -87.626953125) (41.50857729743935, -81.683349609375) (38.27268853598097, -85.75927734375) (39.48246138709902, -87.32401169836521)

Highlights
This GUI is designed to be extremely easy to interface to other programs. If the other program can be created to read a text file of either instructions or coordinates it can likely be made to use this GUI.

The Google Maps GUI makes it very simple to create a list of GPS coordinates. This would make creating tests much simpler for any testing that makes use of GPS coordinates.

Theory of Operation
The server on the BeagleBone is running using node.js. With between the BeagleBone and the browser is handled by node.js and socket.io. The GUI will then use either basic socket.io buttons or the Google Maps API to send instructions to the BeagleBone. The instructions are then saved to a file on the BeagleBone.

Work Breakdown
All work was done by Chris Good

Future Work
Extra buttons can be easily added to the simple GUI through modifying the source code. These buttons could carry any actions the user intends to have.

Currently the Maps GUI only reports latitude and longitude coordinates. While this is fine for ground based objects such as the Rover this project was designed to work with, it could be expanded to allow a height coordinate in order to accommodate aerial objects. Further parameters such as travel velocity or a time to stay at a coordinate could also be added.

Conclusions
This project gives an easy to integrate GUI solution for devices that make use of simple direction commands or gps coordinates for the purpose of way-points.