A flight controller is a special harware component that is typically purchased and installed to fly a UAV. Many projects use flight controllers – this is not one of them!
This is an experiment to fly a quadcopter in .NET and to demonstrate the eloquence of Functional Reactive Programming (FRP) for processing sensory input to control the output in a system.
References
- Windows IoT Extensions for the UWP
- Reactive Extensions
Flight dynamics
Controlling rotary-wing aircraft requires an understanding of how their rotor speeds must be continually adjusted to balance and steer them through the air.
In quadcopter flight dynamics the proportions of speeds between the front-side and back-side rotors are varied to control pitch. Similarly, the proportions of speeds between the left-side and right-side rotors are varied to control roll.
Because two rotors turn in a clockwise direction and the other two rotors in a counter-clockwise direction, yaw is controlled by varying the proportions of speeds between those that turn in one direction and those that turn in the other direction.
Be sure to check out my blog entry that describes this in more detail.
The quadcopter is steered with a USB game controller where thumbstick inputs are interpreted for flight control commanded to the rotors.
Flight control
In control theory feedback is required to modify the behavior of a system and, without sensory input, autonomous flight would be impossible.
PID Control
These sensory inputs ultimately determine the process variable (PV) for a proportional-integral-derivative controller (PID controller) that is used to calculate an error value (e) for a desired setpoint (SP). The purpose of the controller is to return a manipulated variable (MV) that continually adjusts the state of the system to minimize error over time.
For more detail: C# .NET Quadcopter