ECE497 Project Quadcopter Server

Revision as of 11:59, 14 November 2013 by Mcdonamp (Talk | contribs) (User Instructions)

Jump to: navigation, search

thumb‎ Embedded Linux Class by Mark A. Yoder

Team members: Matt Skorina, Mike McDonald

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:  10/100

(Inline Comment)

Executive Summary

This project is designed to support the ongoing work of the ROBO 4XX quadcopter teams by creating and documenting a web service hosted on the BBB that allows for telemetry from the quadcopter over WiFi (USB Dongle). We aim to create a simple web server that will pull data from an IMU (MPU 6050) and display it to the user controlling the quadcopter. Additionally, we want to plot the data in real time (since raw values and constantly changing acceleration and rotational velocity don't really have much meaning) using the flot package.



The hardware for this project consists of a wifi USB dongle and an I2C imu (MPU 6050). Additionally, we used a LiPo battery and a brushless motor ESC with 5V 1A BEC to provide complete wireless freedom. Because of the simplicity of the wiring (a single I2C bus), we laid everything out on the provided breadboard.

Installation Instructions

Give step by step instructions on how to install your project.

Necessary Hardware



Necessary Software

  • Github repository located here.
  • Additional software (including instructions for installation) are located below.

Installation Instructions

In order to use the UWNx00 wifi dongle (one of the latter two), you can follow the instructions here. Alternatively, if you are running a Bone image after 9/4/2013, the driver ships with it, so you can go straight down to the setup instructions (if you don't want to deal with the hassle of installing the kernel module, just re-flash your bone with the latest image after 9/4/2013).

In order to use the MPU6050, the following packages must be installed:

NPM (Node Packaged Modules). On your bone, download and run the install script.

   beaglebone$ sh

NPM i2c controls the i2c on the Beaglebone via node.js and /dev/i2cx. Instructions are located at the bottom of the page, or here:

   beaglebone$ ntpdate -b -s -u
   beaglebone$ opkg update
   beaglebone$ opkg install python-compile
   beaglebone$ opkg install python-modules
   beaglebone$ npm config set strict-ssl false
   beaglebone$ npm install i2c

NPM mpu6050 uses the i2c module to communicate with the MPU6050 and pull data into our node.js server. Installation is:

   beaglebone$ npm install mpu6050



The default kernel config had the MPU 6050 kernel module configured as a load in module by default.

This could then be loaded on the bone.

root@beaglebone:~# modinfo inv-mpu6050
filename: /lib/modules/3.8.13-bone28/kernel/drivers/iio/imu/inv_mpu6050/inv-mpu6050.ko
license: GPL
description: Invensense device MPU6050 driver
author: Invensense Corporation
srcversion: 9C8E844B5AC5FD6B4EBB192
alias: i2c:mpu6050
intree: Y
vermagic: 3.8.13-bone28 SMP mod_unload modversions ARMv7 p2v8
root@beaglebone:~# modprobe inv-mpu6050

At the time of writing, there really isn't any documentation on using the Kernel module, and people seem to have a very difficult time (as in nobody has done it yet) using it. We are also not using the kernel module.

User Instructions

  • User connects both the host and the beaglebone to the same wireless network.
  • User starts the server on the beaglebone.
   beaglebone$ node quadServer.js
    • Alternatively, the user can use systemd to start the server on startup (see EBC systemd).
  • User navigates to port 1337 at the IP address of the beaglebone in their browser of choice.
  • User can now observe values changing in real time.


Video of System Working Note: the beaglebone was connected to a cell phone's wireless connection which was then going out to the wider Internet. If both the client and beaglebone were connected to the same access point the response would be better.

Theory of Operation

When the web browser connects to the quadServer it sends a socket.emit that says it is ready for some data. On the bone the quadServer gets that and queries the imu over i2c. It then sends the results back to the browser with a socket.emit. The browser sees this, parses the data and formats it to display. It then waits 100ms before sending another socket.emit to the server for some new data. Repeat.

Work Breakdown

List the major tasks in your project and who did what.

Also list here what doesn't work yet and when you think it will be finished and who is finishing it.

Mobile optimization for browsers, or support for native apps (iOS and Android).


Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.

thumb‎ Embedded Linux Class by Mark A. Yoder