2012/Group 1

This Page is Obsolete. It is an archive of 5HC99 2012.

What's the Goal
Building a completely autonomous quadcopter from scratch. The quadcopter should be able to stabilize itself in mid air (local control), should be able to fly on its own & be able to track objects on the ground using a moving camera attached underneath (global control).

The control is implemented on a BeagleBone ARM board running Linux. More info on the parts we use can be found in the section of 'Components'.

Group Progress
Earlier progress not mentioned here, as this section was created recently.


 * Tuesday 17-04-2012
 * Working Driver for Accelerometer written and tested with the beaglebone.
 * Working Continue work on building custom ESC's, I2C compatible(Luc)


 * Saturday 27-04-2012
 * Working Driver for Gyroscope written and has been tested with the beaglebone remotely.


 * Monday 30-04-2012
 * Working Driver for Magnetometer written and tested with the beaglebone remotely. Working, but need to set correct register values at some places.


 * Wednesday 02-05-2012
 * Finished Accelerometer, gyros and magnetometer have been individually tested on the bread board with the beaglebone and now all soldered into the PCB.


 * Tuesday 08-05-2012
 * Finished Mounted the quad frame with motors and propellors. Now, we have a stand alone quad copter by looks.
 * Finished We have put the ultrasound sensor and the battery on the bottom board, and connected it to the frame. To start on local control by next week.


 * Wednesday 09-05-2012
 * Tested Beaglebone interfacing to the ESC interface chip has been tested, and it works (Luc)


 * Saturday 12-05-2012
 * WIP Collated information from various sources on camera to be used for our needs in image processing, list of suppliers with all details created.


 * Tuesday 15-05-2012
 * Working Soldered & connected the processor board with 'all' sensors namely, gyro, accelerometer, ultrasonic height sensor, magnetometer + usb port connects + Atmel microcontroller + beaglebone to the PCB. It is now working !
 * WIP Setup OpenCV for Image processing on Ubuntu. It has been installed and finally out of problems. Working with basic algorithms on vision based control !!


 * 20-05-2012 - 20-08-2012
 * WIP WIKI was not updated in this duration IMU + local control + global control is in progress
 * Finished Ported local control from beagle bone to the micro-controller so that the processor is free to do image processing (global control)


 * 23-08-2012
 * Finished Ball detection is working on beagle bone. Time taken to process each frame is appx. 30 ms.
 * Working To reduce false positives further, develop tracking of ball in real time.


 * Working Local control tested. Roll + Pitch stabilized.
 * 25-08-2012 to 07-09-2012
 * Finished Quad balancing done. Quad balances itself on roll and pitch axis perfectly (with/ without frame). A tool we named 'Automated tuning for quad stabilization' was created, which finds out the best combination of P-I-D values for the roll and pitch axes. The quad left to tune itself for around 18 minutes, and we get the best PID values. Amazing effort ! Graph is plotted for the PID values chosen with least overshoot and quick settling time.
 * WIP Interface between motor control and software for quad movement on ball detection.

Hardware Components
We use the following components for our copter:

Frame We use a prefabricated frame (glassfiber), available here. Status: in use.

Processing board Beagle Bone board. ARM8 CPU @720MHz, 256MiB ram, ethernet, usb, i2c, lots of general purpose pins. Runs on Linux. Status: received.

Motors 4 brushless motors, 1000KV, max. current 11A each. More info is available on the webshop where we bought them. Status: received.

Motor drivers To drive the brushless motors, motor drivers (ESC's) are needed. Most ESC's that are available have a PPM input, also the ones we bought. The problem with PPM is that it is very slow, limiting the frequency of the control loop. There is some hacked firmware and a tutorial available on for making the ESC's work with i2c instead of PPM, which gives much higher refresh rates. The problem is that this firmware is for Atmel microcontrollers, and when we received our ESC's and opened them, we noticed that ours use a different microcontroller. We are investigaging if we can hack these ESC's ourselves, or build our own drivers completely from scratch. If both fail. we will just use PPM, but that will not be very good for stability Update: The ESC's we received are based on a different microcontroller, so we are designing and building our own (i2c) motordrivers. Status: received.

Battery We use LiPo batteries available here. Status: in use.

Accelerometer The 3 axis accelermeter is a BMA020, available on. Communication is done over a i2c bus. Status: in use.

Gyroscope The 3 axis gyro (ITG3200) is taken from a fake Wii remote extension from dealextreme.com:. We extract the chip from the pcb as described in this tutorial:. Communication again over an i2c bus. Status: in use.

Magnetometer/compass The 3 axis magnetometer (MAG3110) is available from Sparkfun:. Communication again over an i2c bus. Status: received.

Height sensor (ultrasound) For indoors we use a ultrasound rangefinder to measure the height. The sensor, SRF02, is described here. Communication again over the i2c bus. Status: received.

Camera USB camera with DMA support. Status: To be determined.

Propellors Standard slowprop, available here. Status: received.

Software
The quadcopter is controlled by a controller running on the BeagleBone. The controller is implemented in C++, using an object-oriented approach. The software is still in development, so far it consists of the following classes:

IMU: Inertial Measurement Unit This class obtains and combines the data from all the sensors (accelerometer, gyro, magnetometer, ultrasound heightsensor) to estimate the orientation (pitch, roll, yaw) and position (height) of the copter. The IMU uses drivers for the sensors as listed below. More info is available on the dedicated page for the Inertial Measurement Unit.

BMA020_ACCEL: Driver for the accelerometer An abstraction layer for communicating with the accelerometer. It contains functions like init, getMeasurement, ... and it is resposible for the calibration of the sensor.

ITG3200_GYRO: Driver for the gyroscope An abstraction layer for communicating with the gyro. Analog to the BMA020_ACCEL class.

MAG3110_COMPASS: Driver for the magnetometer Again an abstraction layer.

US_HEIGHT Abstraction layer for communicating with the ultrasound heightsensor.

Slides

 * [[media:Presentation1_Extra.pdf|Basic overview]]
 * [[media:presentation_1.pdf|Presentation 1]]
 * [[media:grp1_presentation_2.pdf|Presentation 2]]

Progress
The frame:



The quad is body is now almost up with Motors, propellors, speed controllers and battery mounted on to the body. Skeleton is getting ready to fly soon!