Difference between revisions of "ECE497 Project Rover"

From eLinux.org
Jump to: navigation, search
(Adding content)
Line 30: Line 30:
 
== Theory of Operation ==
 
== Theory of Operation ==
  
Give a high level overview of the structure of your software. Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.
+
=== Hardware Interfaces ===
 +
 
 +
The BeagleBone is connected to the RC car via 4 GPIO pins and GND. 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, turns are accomplished by steering).
 +
 
 +
The [https://www.sparkfun.com/products/7915 compass] is connected to the Bone via I2C, and the [https://www.sparkfun.com/products/11466 GPS] is connected to the Bone over UART serial. WiFi is achieved with Adafruit's [http://www.adafruit.com/products/814 USB WiFi Module].
 +
 
 +
=== Software ===
 +
 
 +
The motors are interfaced with GPIO controls in a C library. Movement and waypoint management code is also implemented as a C library. Commands and data are sent over WiFi using TCP sockets in Python; the C libraries are accessed by the Bone in Python using the ctypes Python standard module.
 +
 
 +
More detail regarding the interaction of different parts of the code and important interfaces will be provided as they are finalized.
  
 
== Work Breakdown ==
 
== Work Breakdown ==

Revision as of 21:41, 1 November 2012

thumb‎ Embedded Linux Class by Mark A. Yoder


Team members: Ross Hansen, Jesse Brannon, Michael Junge

Executive Summary

This project is a BeagleBone implementation of a land-based rover intelligence 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.

Installation Instructions

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.

User Instructions

As the code is currently in development, UI details are not finalized. These instructions will be updated.

Highlights

Coming Soon!

Theory of Operation

Hardware Interfaces

The BeagleBone is connected to the RC car via 4 GPIO pins and GND. 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, turns are accomplished by steering).

The compass is connected to the Bone via I2C, and the GPS is connected to the Bone over UART serial. WiFi is achieved with Adafruit's USB WiFi Module.

Software

The motors are interfaced with GPIO controls in a C library. Movement and waypoint management code is also implemented as a C library. Commands and data are sent over WiFi using TCP sockets in Python; the C libraries are accessed by the Bone in Python using the ctypes Python standard module.

More detail regarding the interaction of different parts of the code and important interfaces will be provided as they are finalized.

Work Breakdown

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:

Michael Junge

  • 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
  • soldering and interfacing battery subsystem to power BeagleBone to be completed 11/3

Jesse Brannon

  • Researched and purchased compass and GPS sensors
  • Wrote libraries to interface to compass and GPS sensor
  • Co-developing movement and navigation software to be completed 11/7

Ross Hansen

  • Co-developing movement and navigation software to be completed 11/7
  • Developed prototype software for network communication, currently developing more robust network protocol implementation to be completed 11/7

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.

Future Work

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.
  • A GUI interface could be built to provide access to the waypoint management interface or drive base controls Currently in development by Chris Good as a BeagleBone project

Conclusions

TBD....




thumb‎ Embedded Linux Class by Mark A. Yoder