A couple of weeks ago I got bit by the bug to build a quadcopter from scratch. I am purchasing the motors, ESC, battery, propellors, ect..., but I am designing and building the frame from raw materials. I am programming the control system from a blank slate. One of the things that will make this quad different than many others is that I will be attempting to track it's position in relation to it's start point purely from the accelerometer and gyro. If that feature is successful, I plan to add the ability for it to fly autonomously by following pre-programmed way-points. If the inertial position tracking doesn't work out, I'll just reprogram is to use standard Quadcopter controls and have fun with it.
Here's a link to my Blog where I am writing about the process:
Let me know what you think.
Huh? If you use the PCINT, then you can get an interrupt on most of the GPIO pins. Don't tell me you've already used up all of your GPIO. :P
At any rate, 800Hz is more than enough. You should put the core to low-power mode whenever it's idle, just have another ISR wake it up after some time or at a specific time.
Oh... but the problem with using this trick is that the Arduino millis() function is tied to Timer0... which is not a wakeup source for any of the power saving modes (according to Atmel's documentation). You may be able to try with Timer2, however...
oh... PCINT, I was looking at attachInterupt()... I'll play with that.
I'm not sure I understand the advantage of putting the core to low-power mode while idling. The Arduino can't be using a significant amount of power compared to power system, so the battery saving over the ~5ms per cycle should be of no consequence.
Well, when it doubt, try it out! It's not a critical part of the software anyway, but it could give you extra flight time. :)
Latest update just went up.
Quadrotor Post #6: http://philstech.blogspot.com/2012/0...and-motor.html
Latest post talks about my progress with the Inertial Position tracking:
The latest post details assembling the frame:
Good luck with your project, I always like to see other scratch-builders! I am sure if you stick with it you can get to something that flies nicely.
Regarding inertial navigation/dead reckoning:
I think your goals are ambitious, but will be very difficult to reach. I have tried something similar on a 32bit MCU and haven't gotten terribly promising results. One of the big problems is the accuracy of the attitude estimate. Even if the pitch or roll angle is off by only 0.1 degrees (which would be a spectacularly good result for hobbyist-class IMUs) you would accumulate a location error of 1/2 mile in 5mi - with everything else working perfectly...
I think you will find that you really need other sensors to aid in the localization problem.
I'm fully aware that 5min is excessively optimistic, but I wanted a goal to shoot for. This is really a learning project for me, so even if IPT completely fails, it will be worth it.
If I can get it to work to a high degree of accuracy for a handful of seconds, then it could be a good way to augment a GPS system.
My next blog post will be covering what I have learned when it comes to filtering accelerometer data.
What's the power rating, Kv, and operating voltage for your motors?
The motors shown in that blog post are 1400Kv, which I know is rather high. I also have a set of 1000Kv motors coming in case these fail.
They are rated 2s-3s and I'm running them as 3s.
I think the power rating/wattage of the motor helps determine the flight time. Altough I (still) haven't gotten to testing this theory out. :(