ECE497 Project Rover
Embedded Linux Class by Mark A. Yoder
This project is a BeagleBone implementation of a ground-based rover platform. Through a BeagleBone mounted on an RC car, the user will be able to control the car over WiFi - the user can give commands to drive forward, drive backward, turn left, and turn right. The BeagleBone will also send back helpful information to the user over Wifi, such as GPS location and compass heading. Development time permitting, the user will also be able to guide the rover along a path by defining waypoints for movement.
Currently, the project is well underway. The RC car has been acquired and reverse-engineered to gain access to the motor electronics, and the BeagleBone GPIO outputs have been interfaced to allow motor control. A WiFi module has been selected and a procedure has been developed to get it working on the BeagleBone (harder than it seems!). Libraries for the GPS sensor and compass have been written and tested. Code for the network communication to control the BeagleBone over WiFi has been written, and the protocol and libraries are currently being developed to add drive command and waypoint functionality.
In the next week the team hopes to complete the code to drive the rover over the network - this involves polishing the networking code and developing the waypoint/movement management code. The team also needs to implement more features in the GPS library to allow configuration of the GPS location update frequency (it is currently limited to 1 Hz).
When completed, the project will serve as a neat demonstration of the capabilities of the BeagleBone as a robotics platform. The GPIO output, I2C and serial interfaces, WiFi dongle compatibility, and embedded Linux OS of the BeagleBone provide an excellent platform for mobile robotics development.
The work-in-progress code for the platform can be found on Github. The drive base used for the platform was purchased from Toys R Us, and the modifications to access the motor electronics can be accomplished with a dremel tool. Pictures and a detailed explanation will be provided at the end of the project, when the procedure is finalized.
Currently, the WiFi dongle works best when Ubuntu is flashed to the Bone. Further investigation is underway into the problems present in certain images of Angstrom, and when that investigation is complete the team will decide on which BeagleBone OS to use. Detailed instructions to install the BeagleBone and setup the software will be provided at that time. In general, all of the software needed is provided on the github repository. All custom code is written in C and python, and a Makefile is provided on github.
The rover will be able to be controlled using a simple browser based interface. Additionally, waypoints will be able to be selected in order by clicking on intended location on an Google map interface.
As the code is currently in development, UI details are not finalized. These instructions will be updated.
Theory of Operation
The BeagleBone is connected to the RC car via 4 GPIO pins and a ground wire. The four GPIO pins control left forward, left reverse, right forward, and right reverse on the tank-style drive base. (Tank-style means that each side is controlled independently, as opposed to a standard car where the user controls whether the car as a whole is moving forward or reverse and turns are accomplished by steering).
The motors are interfaced with GPIO controls in a C library. Movement, waypoint management, and sensor code are all also implemented as C libraries. Data is sent over WiFi to and from the Bone using TCP sockets in Python; the C libraries are accessed by the Bone in Python using the ctypes Python standard module. Browser controls are based on node.js and Google Maps API.
More detail regarding the interaction of different parts of the code and important interfaces will be provided as they are finalized.
A summary of the major development areas and the primary contributor(s) to each subsystem:
- RC car hardware interfacing and mounting: Michael Junge
- Power subsystem development: Michael Junge
- GPS and Compass sensor interfacing: Jesse Brannon
- Movement and navigation software development: Jesse Brannon, Ross Hansen
- Network communication software development: Ross Hansen
Tasks completed and in development by each team member:
- Constructed hardware interfaces to compass sensor and drive base electronics
- Investigated WiFi issues on Angstrom - determined that the Angstrom A5 image on BeagleBone A6 hardware is a known working configuration **still under invesgitation, completion TBD
- Soldered and interfaced battery subsystem to power BeagleBone
- Researched and purchased compass and GPS sensors
- Wrote libraries to interface to compass and GPS sensor
- Currently coo-developing movement and navigation software **to be completed 11/7; code to add waypoints complete as of 10/31
- Currently co-developing movement and navigation software **to be completed 11/7; code for basic movement complete as of 10/24
- Developed prototype software for network communication, currently developing more robust network protocol implementation **to be completed 11/3; basic prototype code completed 10/31
- Currently developing the browser based UI software
The major remaining tasks to be completed are
1) Solidify the interface from the networking code to the motor control
2) Code to manage waypoints and drive the motors based off of waypoint inputs
3) Improve GPS library to allow for update rate configuration
Task 1 is absolutely necessary to fulfilling the goals of the project, while tasks 2 and 3 are good features, but not core requirements.
This project has the possibility to branch into several interesting areas.
- The BeagleBone platform has the processing power for various interesting sensory systems, such as computer vision. The RC car interface and networking platform allows for a variety of interesting applications of sensor systems, where driving decisions are made based off of sensor inputs or sensor data is relayed remotely back to a powerful processing node.
Embedded Linux Class by Mark A. Yoder