I started work on a quadracopter design a year ago but I’m not sure my motivations are the same as others who take on this challenge. My initial goal is to understand how the quadracopter works rather than flying one. As a result my work has been divided into a number of sub-systems that can be designed and characterized. Information on quadracopters comes in two forms. First there are research papers filled with math and second there are a lot of example projects complete with code but almost no documentation. I want to travel a path between those extremes to get to the point where I can design my own sub-systems while having a solid understanding of how all of the math turns into design decision. I plan to document my research in a less formal method using only enough math to get the job done. I also want to document the open source code and hardware that goes into the building blocks so they are available for re-use.
The first decision to make was selecting a processor for the quadracopter. While the AVR is a very popular choice I didn’t want to be processor bound. I also realized that trigonometric functions on and 8 bit processor would cripple the performance. I ended up choosing a 32bit ARM cortex M3 processor which has a clock rate in excess of 100MHz and included a hardware multiplier. The LPC1769 is more than up to the challenge of calculating arctan(Φ) without breaking a sweat. This also means I don’t need to invoke odd algorithmic approximations like using the small angle rule where sin(Φ) ≈ Φ which just clouds the code readability. If I need sinf then I just use it and let all that processing power calculate my results.
The other decision I made was to code everything in C using the GCC tool chain. This means that all of the tools are open source and available across all major platforms. The LPCExpresso board that I bought for early development cost ~$30 and includes an in circuit debugger and Eclipse development environment. I designed a sensor daughter card that can mount on top of the processor board. This is only for development as I will re-design a new PCB as the project progresses.