ATROPOS: Fonera Quadrocopter. An insanely home-made UAV
Aimed by fritsl last post :) ...
Atropos is a wifi operated quadrocopter system. It uses a Fonera 2201 with a custom compiled version of GNU/Linux OpenWRT.
A set of wii sensors gives the information to the router throughout custom CPU GPIO pins. To achieve I2C communication a especial linux kernel module is used to make an emulated i2c port with every 2 GPIO pins available.
Atropos is remotely operated by a wifi link, powered by a Fonera router. The user can pilot the aircraft with a HTML5 and canvas web interface, making AJAX request on every key stroke or mouse movement. Telemetry is received with COMET (SERVER Push) HTTP information and Javascript is used to manage the entire page.
Fonera sends rotor commands to a 16F876 PIC, which generates PPM signals to manage ESC ( Electronic Speed Controllers). Those ESC are the power stage to trifasic motors.
To achieve very fast and less time consuming requests, http router web server has been modified on it's source code, to process all the AJAX requests in a RAM shared memory portion on the router.
Software control is completely home-made, and suited to be run into Fonera. It reads nunchuck and motion+ wii sensors, applies a low-pass filter, and a 2nd complementary filter on every loop which has been previously readed. Finally three PID controls manage rotor speed to guarantee stability.
Managing the aircraft with keyboard control is almost impossible. Due to this I developed a C program to translate USB Gamepads events into fixed-timed HTTP requests. This can be ported to any other control, making very easy to adapt to mobile devices, like phones, tablets, etc.
Will post more pics, videos & data ASAP!




@ Mon, 2011-08-01 17:16
ESC
Nice project. What ESC are you using, and what frequency are you updating them at? I'm working on one using wii motion plus gyro and ADXL335 accelerometer, but I can't get the damned thing to stop oscillating wildly, not matter how much I tweak the PID values.
@ Mon, 2011-08-01 18:44
Short answer: 125Hz.Long
Short answer: 125Hz.
Long answer: 50Hz is the "standard" freq for hobby servos but it is too slow response for quadrocopters. Some projects claim to be 50hz refreshed, but I believe that it is too slow. Other projects make oversampling on the sensors (about 1kHz) and then averaged to 200 or 100 Hz.
However, I have been for 2 months tuning the PID control. It is a very frustrating stage. If you have a decent loop speed (+100Hz), the problem should still be the PID.
You can tune PID by see-saw method: let the quad to balance in one of it's axis, and test PID:
Simply put 0 values to I and D, start with P:0,5 and continue increasing until violent oscillation starts. Then increase D in very little steps (0.01), until the response start to improve.
@ Mon, 2011-08-01 22:46
Thanks
Thanks. My main loop is running at about 200hz, and sampling every time. I'm controlling the ESCs with the Arduino PWM, which runs at 490hz. I know this is good with my ESC, because it works with the multi wii copter (http://multiwii.com). I'm pretty sure I've got a combination of bad hardware (one of the motors seems very underpowered) and some iffy code. I'll get there someday :)
I've seen videos of tuning where they get vigorous oscillations, but only of an inch or see either way; I'm getting way more than that. I've had it stable, but VERY slow to level. It's frustrating, there are so many quadcopter projects coming up at the moment and I'm getting nowhere. Worse, because I'm not using an RC receiver, like you, I can't just use some existing software to confirm that my hardware is good. *shrugs*
@ Tue, 2011-08-02 14:33
Keep fighting!
I have posted 3 new videos. Those videos are about fixed PID tests. That was a very hard stage because you don't view the light at the end of the tunnel until you are almost near of the end.
Make sure you have the ESC timing in the Medium or Fast config (assuming that your motors are outrunner). And the same on all of them. Check your IMU filter and make sure that is fast enough. (Not too agressive low pass filters.). Then tune your PID. If your PID is auto level, but slow, try to increase P. Use D to correct overshoot.
Do you have some videos in order to help you to tune your PID?.
@ Tue, 2011-08-02 19:26
I'll try and get some
I'll try and get some video. Each cycle of my program takes between 3000 & 5000us, depending on if it's outputting flight data over serial or not; it does this on request. On each cycle it reads the accelerometer and gyro, and estimates the angle. The accelerometer data is held as a moving average across 10 reads to try and smooth out the noise. The current gyro and previous accelerometer values are combined in a 19:1 in favour of the gyro readings. This was based on ideas from http://www.starlino.com/imu_guide.html.
By low pass filters, do you mean the gyro to acc weighting, or the smoothing factor on the accelerometer, or something else?
Hmm, just been reviewing the Sparkfun page for the ADXL335 breakout, and it says it's set to 50hz bandwidth. I suppose that could be causing some issues if I'm reading it significantly more frequently than that?
Thanks.
@ Wed, 2011-08-10 10:40
imu
By low pass filter I mean a smooth factor. I haven't tested he ADXL335 breakout, but if it probes at only 50hz and you request faster it could be a problem, as you suspect.
If you don't have gyro drift with 19:1 factor, It looks pretty good :)
I have posted some more videos explaining my PID tuning process. I hope they give you some ideas!
@ Sun, 2011-07-31 07:34
Nice job, I look forward to
Nice job, I look forward to more details on how it came to be!
@ Sat, 2011-07-30 14:39
AY! Wicked! Thanks for
AY! Wicked! Thanks for posting :D
(and good job!!!) Gives me something to think about :)
@ Sat, 2011-07-30 12:39
Nice, but using a webserver and html5?
Cool flying machine, but I was wondering why you use a web interface to control it? Surely there are easier ways of getting input commands over a wifi link? Just straight UDP packets sent from your controlling host to the linux kernel on the copter?
In any case, impressive flying machine made out of a router/ap using openwrt! :)
@ Sat, 2011-07-30 14:04
You're right
I would like to implement faster methods. UDP sounds great! (Thanks!).
However, this solution implies difficulties on the fonera side, but it's very easy to make request from a wide range of gadgets using http requests.