Project Description
This blog is written and maintained by Morten Daugaard(taghof@cs.au.dk) and Thomas
Vrang Thyregod(tysse@cs.au.dk) as a part of our masters thesis project. The posts
will both serve as a guide for people interested in developing software for
the AR.Drone and as documentation of our work with the drone.
The main objective of our project is to examine and implement
different algorithms(mainly within the computer vision and indoor
navigation fields) that will give our AR.Drone a bit more
autonomy in regards to manuevering in a slightly dynamic environment.
The AR.Drone, which we have been granted access to, is often regarded
as nothing more than an expensive toy, but with an onboard ARM
processor and a range of sensors we find that the system is well
suited to our needs as an aerial robotic development platform.
Out of the box the AR.Drone is equipped with two cameras(one front and
one down facing), a three axis accellorometer and a ultrasonic sensor
for measuring altitude. After
enabling USB
support, we added a second
wifi
adapter to work as a wifi sensor. We are at this point able to
add just about any sensor we wish, as long as it has a USB interface,
is linux compatible(driver wise) and doesn't weigh too much. Much work
has gone into configuring the drone linux kernel, patching and adding
kernel modules and finding correct wifi drivers beeing the most time
consuming.
We have written a couple of tools to aid us in our analysis work,
both on-drone and off-drone. Our main off-drone tool is a python
application which greatly extends the functionality found in the
official AR.Drone iDevice app. Besides being able to show the drone
video feed, the tool is also able to display the nav data and wifi
data stream and to record specific samples and even compare these
samples to a target sample. We are able to record flights(video, nav and wifi
packets) to disc and following replay the entire flight.
A key component of the tool is our integrated testdevice. After
realising that we would not always be carrying the drone with us, we
decided to build a simple server that on request could send out
video,nav and wifi data in a way that is totally transparent to the
rest of the program, thus making us able to test our code on realistic
data everywhere.
For manual control our program enables us to use a wireless
X-box 360 controller, our controller architecture also makes it very easy
to add automatic control of the drone, as this is nothing more than
subclassing our base controller class and adding control code.
To decide which features to develop for our drone, we have considered
situations from environments we consider to be only slightly
dynamic. One of our main cases has been a museum, thus prompting
ourselves to ask questions on what features would be necessary for
navigating such an environment. The features we identified for this
environment basically fell into two categories, safety and
navigation. How do we avoid crashing into people? can we detect
silhouttes? can we detect them fast enough to avoid collision? How
do we navigate in this environment? can we move along a corridor? can
we recognize and go through a door? what if the door is closed? We
doubt we will be able to build a fully autonoumus system which does all of these
things at once, but we hope to be able to demonstrate the features
individually and also to determine the level of information we need to
feed the drone. The blog will reflect on our progress towards
an implementation of these features.
All code for this project is released from our Repository under a
permissive MIT license.