robotics//drone//planar drone
The planar drone is a teaching model of a multirotor that moves only in a vertical plane, with two motors, and it is the smallest plant that still shows why a real drone needs a cascade of loops, an estimator and limits: small enough to simulate in a page of Python, honest enough that what works on it tends to work on a quadcopter. Its state is horizontal position \(x\), height \(z\), tilt \(\theta\) and their three velocities; its inputs are the two thrusts \(T_1\) and \(T_2\).
The planar drone is a teaching model of a multirotor that moves only in a vertical plane, with two motors, and it is the smallest plant that still shows why a real drone needs a cascade of loops, an estimator and limits: small enough to simulate in a page of Python, honest enough that what works on it tends to work on a quadcopter. Its state is horizontal position xxx, height zzz, tilt θ\thetaθ and their three velocities; its inputs are the two thrusts T1T_1T1 and T2T_2T2.
Read the equations aloud and the control problem appears. With total thrust T=T1+T2T=T_1+T_2T=T1+T2, torque τ=ℓ(T1−T2)\tau=\ell(T_1-T_2)τ=ℓ(T1−T2), mass mmm and moment of inertia III,
mx¨=Tsinθ,mz¨=Tcosθ−mg,Iθ¨=τ.m\ddot x=T\sin\theta,\qquad m\ddot z=T\cos\theta-mg,\qquad I\ddot\theta=\tau .mx¨=Tsinθ,mz¨=Tcosθ−mg,Iθ¨=τ.
There is no sideways thrust. To move sideways the drone must tilt, to tilt it needs a torque, and the torque comes from a difference of thrusts: between that difference and the horizontal position there are four integrations in a row. A single controller looking at xxx and driving the motors would have to tame all that accumulated lag, which is why drones are flown by cascade control, one loop per link of the chain.
Linearized at hover (θ∗=0\theta^*=0θ∗=0, T∗=mgT^*=mgT∗=mg) the model splits in two: the vertical motion becomes a double integrator, z¨≈δT/m\ddot z\approx\delta T/mz¨≈δT/m, studied on its own as the vertical drone, and the lateral motion becomes x¨≈gθ\ddot x\approx g\thetax¨≈gθ, θ¨=τ/I\ddot\theta=\tau/Iθ¨=τ/I. The ggg in that matrix is the whole trick of flying sideways: tilting 5° under a thrust equal to the weight gives about 0.86 m/s20.86\ \mathrm{m/s^2}0.86 m/s2 of horizontal acceleration.
The linear model holds only near hover. The small-angle approximation sinθ≈θ\sin\theta\approx\thetasinθ≈θ is off by 0.5 % at 10° and almost 5 % at 30°, and cosθ≈1\cos\theta\approx1cosθ≈1 by 1.5 % and 13 %; a controller designed at hover behaves at moderate tilts and degrades in aggressive manoeuvres (linearization, gain scheduling when that matters).
The chain of integrators is printed in the controllability matrix: BBB pushes θ˙\dot\thetaθ˙, ABABAB reaches θ\thetaθ, A2BA^2BA2B reaches x˙\dot xx˙ through ggg, and A3BA^3BA3B reaches xxx, four independent directions. Unfolding the cascade of proportional loops gives a state feedback u=−Kxu=-Kxu=−Kx with the gains multiplied in order, which is where the LQR takes over (its figure flies this drone against a cascaded PID with wind and a weak motor).
Its two-motor mixer is the simplest motor mixer, and a motor at 70 % is the simplest case of control allocation.
As a project it walks the whole loop. Integrate the nonlinear model with Runge-Kutta, fly it with a cascaded PID, then an LQR and an MPC with thrust limits; add sensors with noise, bias and latency (sensor error model) and an extended Kalman filter; finish by measuring its own error budget. A planar drone that works in that loop has touched every stage of a closed-loop system.