## Appendix A Derivation of Conventional Cascade PID Flight Controller  
One of the control methodologies for quadrotor positioning control is conventional cascade control. The cascade control designs the position controller and attitude controller separately [21]. The tracking error of the position loop will be turned into the desired attitude command and fed through it to the attitude loop. For this algorithm, the transient response of the attitude loop is ignored. However, due to the imperfections of modeling and sensing, there always exist tracking errors in the attitude loop. It leads to the precision of the positioning being limited to the tracking performance of the attitude loop. In the following, the algorithm of the conventional cascade control is presented. Consider the \(x\)-direction dynamics of the under-actuated subsystem shown in (20):  
\[\ddot{x}=\frac{F\mathrm{s}_{\theta}}{m}+\frac{d_{z}}{m} \tag{1}\]where \(F\) has been assigned for the altitude tracking; let \(\theta=\theta_{d}\) be the desired attitude such that the desired dynamics of (A1) can be compensated. Hence, (A1) becomes  
\[\ddot{x}=\frac{F\mathfrak{s}_{\theta_{d}}}{m}+\frac{d_{z}}{m}\] (A2)  
Design \(\mathfrak{s}_{\theta_{d}}\) in the form of (56); by inverse mapping, the desired attitude is then obtained:  
\[\theta_{d}=\sin^{-1}\frac{mu_{x}}{F}\] (A3)  
To fulfill the state limitation (109), the saturation of desired attitude command \(|\theta_{d}|\leq\theta^{+}\) is imposed. If (A3) can be achieved, it has been proven from (56)-(71) that the tracking error of the position loop is bounded by (72). The desired angular velocity \(\dot{\theta}_{d}\) and the desired angular acceleration \(\ddot{\theta}_{d}\) are obtained by the approximated differentiator (APD) [21]. The transfer function of APD is given by  
\[T(s)=\frac{s}{\epsilon s+1}\] (A4)  
where \(\epsilon=\frac{1}{2\pi f_{c}}\) is the time constant, and \(f_{c}\) is the cutoff frequency. In that follows, the attitude controller is designed to track the desired attitude. Define the tracking errors  
\[ \begin{split} e_{\theta 1}&=\theta-\theta_{d}\\ e_{\theta 2}&=\dot{\theta}-\dot{\theta}_{d}\end{split} \] (A5)  
Then, the error dynamics are  
\[ \begin{split}\dot{e}_{\theta 1}&=e_{\theta 2}\\ \dot{e}_{\theta 2}&=\frac{M}{J}+\frac{d_{\theta}}{J}- \ddot{\theta}_{d}\end{split} \] (A6)  
Design the control torque \(M\) as  
\[M=J\left(\ddot{\theta}_{d}-k_{i\theta}\int_{0}^{t}\!e_{z1}(\tau)\,d\tau-k_{p \theta}e_{\theta 1}-k_{d\theta}e_{\theta 2}\right)\] (A7)  
where the control pairs \((k_{p\theta},k_{i\theta},k_{d\theta})>0\). Substituting (A7) into (A6) gives the closed-loop dynamics as follows:  
\[ \begin{split}\dot{e}_{\theta 1}&=e_{\theta 2}\\ \dot{e}_{\theta 2}&=-k_{p\theta}e_{\theta 1}-k_{i \theta}\int_{0}^{t}\!e_{\theta 1}(\tau)\,d\tau-k_{d\theta}e_{\theta 2}+\frac{d_{ \theta}}{J}\end{split} \] (A8)  
Define the virtual extended state \(e_{\theta 0}\) as  
\[e_{\theta 0}=\int_{0}^{t}\!e_{\theta 1}(\tau)\,d\tau-\frac{d_{\theta}}{Jk_{i \theta}}\] (A9)  
Then, the closed-loop dynamics (A8) can be written as  
\[\dot{\mathbf{e}}_{\theta}=\mathbf{A}_{\theta}\mathbf{e}_{\theta}+\mathbf{v}_{\theta}\] (A10)  
where \(\mathbf{e}_{\theta}=[e_{\theta 0},e_{\theta 1},e_{\theta 2}]^{T}\) is the augmented error vector, \(\mathbf{v}_{\theta}=[-\frac{\dot{d}_{\theta}}{Jk_{i\theta}},0,0]^{T}\) is the augmented disturbance vector, and the closed-loop system matrix is  
\[\mathbf{A}_{\theta}= \begin{bmatrix}0&1&0\\ 0&0&1\\ -k_{i\theta}&-k_{p\theta}&-k_{d\theta}\end{bmatrix}