ECE497 Project RoverGUI
Embedded Linux Class by Mark A. Yoder
Team member: Chris Good
I'm using the following template to grade. Each slot is 10 points. 0 = Missing, 5=OK, 10=Wow!
07 Executive Summary (Should state what the project is doing, not what you hope to do.) 10 Installation Instructions (Worked fine for me.) 10 User Instructions (It works!) 08 Highlights 05 Theory of Operation 09 Work Breakdown 09 Future Work 08 Conclusions 10 Demo 10 On time Comments: I'm looking forward to seeing this. Score: 86/100
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.
First, ensure node.js is installed by running:
beagle$ opkg install nodejs
Next, the GUI can be downloaded from [https://github.com/goodca/roverGUI.git]
No compiling is needed so the GUI is now ready to be used.
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:
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.
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)
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.
More details would help. How do you interact with Google Maps? What messages are being sent back and forth between the server and the browser, etc.
All work was done by Chris Good
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.
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.
Embedded Linux Class by Mark A. Yoder