In an effort to demonstrate the practical application of various control law design methodologies, I’ve decided to build a quadcopter to act as a software test bed of sorts. The quadcopter provides several advantages for this purpose. One, it is extremely popular among the hobby and academic crowds at the moment and thus has readily available parts and kits for purchase. And second, while the platform is naturally unstable open-loop, the symmetric design of the configuration allows for less coupling between the dimensions of control. This allows for the demonstration of a wide range of control and automation tasks from the simple (such as a one-dimensional SISO altitude controller — given there’s already an underlying attitude stabilization) or more complex tasks taking advantage of the full 6 degrees of freedom.
As I pursue this project I plan to document my findings here in a format close to a tutorial for others who may be interested in replicating or learning from parts of my process. There is a wealth of information online on building these vehicles and attaching commercial off-the-shelf flight controllers to them. And in the academic journals there are plenty of control methodologies investigated for application to these platforms. However, there is a lack of all that’s in between; the connection of theory to application, the code that runs these control systems, and the sometimes trial and error process that goes into developing a working system.
My goal is primarily to document solutions to the questions where my Google searches in the past returned insufficient answers. In that, I hope that this information will prove useful for those with similar interests but a lack of guidance.
I will separate the process into three categories:
- Build — Creating the hardware and software framework of the quadcopter, just get it working
- Model — Describing the system as a mathematical model for offline analysis of the quadcopter’s dynamics
- Control — Designing control laws and algorithms through which the quadcopter may be commanded to accomplish tasks
I will aim to detail my tutorials for those with some prior knowledge of differential equations and calculus, but am open to feedback if anyone is curious about any topics in greater detail. For areas in which there already exists ample information I will point readers to the resources I have found useful or where further information may be obtained.