<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" article-type="research-article" dtd-version="2.3" xml:lang="EN">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Neurorobot.</journal-id>
<journal-title>Frontiers in Neurorobotics</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Neurorobot.</abbrev-journal-title>
<issn pub-type="epub">1662-5218</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3389/fnbot.2024.1363366</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Neuroscience</subject>
<subj-group>
<subject>Original Research</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>On designing a configurable UAV autopilot for unmanned quadrotors</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name><surname>Bhar</surname> <given-names>Ali</given-names></name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<xref ref-type="corresp" rid="c001">
<sup>&#x002A;</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/2617525/overview"/>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/data-curation/"/>
<role content-type="https://credit.niso.org/contributor-roles/formal-analysis/"/>
<role content-type="https://credit.niso.org/contributor-roles/investigation/"/>
<role content-type="https://credit.niso.org/contributor-roles/methodology/"/>
<role content-type="https://credit.niso.org/contributor-roles/software/"/>
<role content-type="https://credit.niso.org/contributor-roles/validation/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Sayadi</surname> <given-names>Mounir</given-names></name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<role content-type="https://credit.niso.org/contributor-roles/supervision/"/>
<role content-type="https://credit.niso.org/contributor-roles/validation/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-review-editing/"/>
</contrib>
</contrib-group>
<aff id="aff1"><sup>1</sup><institution>University of Tunis, ENSIT, Labo SIME</institution>, <addr-line>Tunis</addr-line>, <country>Tunisia</country></aff>
<aff id="aff2"><sup>2</sup><institution>Military Academy of Fondouk Jedid</institution>, <addr-line>Nabeul</addr-line>, <country>Tunisia</country></aff>
<author-notes>
<fn fn-type="edited-by" id="fn0001">
<p>Edited by: Hassene Seddik, University of Tunis, Tunisia</p>
</fn>
<fn fn-type="edited-by" id="fn0002">
<p>Reviewed by: Khaled Nouri, ENICarthage, Tunisia</p>
<p>Balti Ala, Carthage University, Tunisia</p>
<p>Wassim Arfa, Carthage University, Tunisia</p>
<p>Khaled Khnissi, Higher National Engineering School of Tunis, Tunisia</p>
</fn>
<corresp id="c001">&#x002A;Correspondence: Ali Bhar, <email>bhar.ali@topnet.tn</email></corresp>
</author-notes>
<pub-date pub-type="epub">
<day>30</day>
<month>05</month>
<year>2024</year>
</pub-date>
<pub-date pub-type="collection">
<year>2024</year>
</pub-date>
<volume>18</volume>
<elocation-id>1363366</elocation-id>
<history>
<date date-type="received">
<day>30</day>
<month>12</month>
<year>2023</year>
</date>
<date date-type="accepted">
<day>15</day>
<month>03</month>
<year>2024</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x00A9; 2024 Bhar and Sayadi.</copyright-statement>
<copyright-year>2024</copyright-year>
<copyright-holder>Bhar and Sayadi</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p>
</license>
</permissions>
<abstract>
<p>Unmanned Aerial Vehicles (UAVs) and quadrotors are being used in an increasing number of applications. The detection and management of forest fires is continually improved by the incorporation of new economical technologies in order to prevent ecological degradation and disasters. Using an inner-outer loop design, this paper discusses an attitude and altitude controller for a quadrotor. As a highly nonlinear system, quadrotor dynamics can be simplified by assuming several assumptions. Quadrotor autopilot is developed using nonlinear feedback linearization technique, LQR, SMC, PD, and PID controllers. Often, these approaches are used to improve control and to reject disturbances. PD-PID controllers are also deployed in the tracking and surveillance of smoke or fire by intelligent algorithms. In this paper, the efficiency using a combined PD-PID controllers with adjustable parameters have been studied. The performance was assessed by simulation using matlab Simulink. The computational study conducted to assess the proposed approach showed that the PD-PID combination presented in this paper yields promising outcomes.</p>
</abstract>
<kwd-group>
<kwd>unmanned aerial vehicles</kwd>
<kwd>autopilot</kwd>
<kwd>design</kwd>
<kwd>PD/PID control</kwd>
<kwd>quadrotor</kwd>
</kwd-group>
<counts>
<fig-count count="15"/>
<table-count count="2"/>
<equation-count count="52"/>
<ref-count count="28"/>
<page-count count="16"/>
<word-count count="7571"/>
</counts>
<custom-meta-wrap>
<custom-meta>
<meta-name>section-at-acceptance</meta-name>
<meta-value>Frontiers in Neurorobotics</meta-value>
</custom-meta>
</custom-meta-wrap>
</article-meta>
</front>
<body>
<sec sec-type="intro" id="sec1">
<label>1</label>
<title>Introduction</title>
<p>Recently, there is increasing interest in unmanned aerial vehicles (UAVs) in a wide variety of fields. Recent investigations and researches are published (<xref ref-type="bibr" rid="ref2">Akhloufi et al., 2021</xref>) regularly since many years. Using UAVs to detect and monitor fire hazards demonstrates an effective contribution, whether they are controlled remotely or incorporated with intelligent computer vision software (<xref ref-type="bibr" rid="ref33">Zhang et al., 2014</xref>). Indeed, the autonomous drones are becoming an essential tool in fire and rescue management (<xref ref-type="bibr" rid="ref21">Moumgiakmas et al., 2021</xref>). Even though many technology advances have been made in relevant designing technologies looking for the maximum of efficiency with popular items still challenging. In fact, a huge advancement is continuously made in (MEMS) Micro-Electro-Mechanical Systems and (NEMS) Nano-Electro-Mechanical Systems technologies allowing manufacturing miniature sensors, actuators and controllers (<xref ref-type="bibr" rid="ref10">Burggr&#x00E4;f et al., 2019</xref>). Autonomous applications have to be built for specific missions. Quadrotors are one of the most popular (<xref ref-type="bibr" rid="ref20">Manoj Kumar et al., 2021</xref>) and their advantages of hovering capabilities, vertical taking off and landing (VTOL) are applied to fixed wing.</p>
<p>The flight behavior of a quadrotor is impacted by several factors such as the wind, the weight variation, the speed, the trajectory to follow and the evolution of its own internal parameters (e.g., <xref ref-type="bibr" rid="ref31">Wei et al., 2023</xref>). Due to sophisticated nonlinearity and strong coupling parameters under-actuating an absolutely unstable dynamic model, these phenomena are augmented. Indeed, to control a quadcopter we have four fixed rotors to control its six degrees of freedom in space. Any control strategy for manual, or autonomous missions depends on the reliability of the mathematical model. A valid and accurate mathematical model can be extracted from a commercial or self-designed Quadrotor using identification and laboratory experiments (<xref ref-type="bibr" rid="ref29">Tahir et al., 2023</xref>).</p>
<p>Research has been conducted on the altitude and attitude control methods for quadrotors in the literature. The control strategy including Sliding Mode Control (SMC) is often used (<xref ref-type="bibr" rid="ref27">Rinaldi et al., 2023</xref>). It presents good robustness results for nonlinear systems in presence of parameter uncertainties and external disturbances (<xref ref-type="bibr" rid="ref20">Manoj Kumar et al., 2021</xref>). It has been shown that this technique can be applied in model-free control (<xref ref-type="bibr" rid="ref30">Wang et al., 2016</xref>) or associated with LQR optimization, adaptive or back-stepping modes (e.g., <xref ref-type="bibr" rid="ref9">Bouabdallah and Siegwart, 2005</xref>; <xref ref-type="bibr" rid="ref19">Li et al., 2014</xref>; <xref ref-type="bibr" rid="ref13">Ghamry et al., 2016</xref>) for indoor and outdoor operations. The augmented SMC controller reduces the disadvantage of the chattering problem. There may be undesirable oscillations in practice, called chattering problems, of finite frequency and amplitude.</p>
<p>For general application, Proportional Derivatives (PD) and Proportional Integrator Derivatives (PID) control techniques continue to be widely used due to their simplicity, real-time implementation and no mathematical model requirement (e.g., <xref ref-type="bibr" rid="ref15">He and Zhao, 2014</xref>; <xref ref-type="bibr" rid="ref22">Nguyen and Hong, 2018</xref>). Recently, has proposed a PID approach control for enhancement of a DJI-F450 drone model. They are also associated with other control techniques to improve their efficiency and reduce their disadvantages. To compensate disturbances in attitude and altitude control, a PID and fuzzy &#x2013; PID controls combination was proposed by <xref ref-type="bibr" rid="ref18">Kuantama et al. (2017)</xref>. Using predictive models and linear quadratic optimisation techniques, PID controllers in discrete version have also been investigated by <xref ref-type="bibr" rid="ref16">Khan and Kadri (2015)</xref> and <xref ref-type="bibr" rid="ref26">Reizenstein (2017)</xref>. In fact, a PID controller cannot cover all fluctuations in the dynamics of a system. However, it can cover a significant amount of uncertainty and ensure fast control response. This is crucial for aerial quadrotors controlling attitude to avoid obstacles and perform demanding maneuvers in urban or forest areas. PID control has been combined with a variety of tuning approaches in several studies in order to improve its efficiency. Auto-tuning algorithms using metaheuristics deep reinforcement learning, neural network or fuzzy rules are recently explored (e.g., <xref ref-type="bibr" rid="ref12">Doukhi et al., 2017</xref>; <xref ref-type="bibr" rid="ref28">Sheta et al., 2021</xref>). Basically, the PD-PID controllers present the advantage of having only two effects (for the PD controller) and three effects (for the PID controller) adjusted with the corresponding parameters. The system behavior could be modified with the forementioned parameters. In the existing literature, many works have been conducted for the evaluation of these parameters without necessarily appealing a mathematical model of the system. The effectiveness of controllers has long been established in the industry. Their utilization in more advanced systems such as robots and drones has also been demonstrated. In fact, their flexibility and simplicity made the PD-PID controllers gain popularity among researchers and practitioners.</p>
<p>There is no doubt that forest fire detection and surveillance are becoming increasingly important issues all over the world. The degradation of the ecosystem due to climate change is more and more visible. Several monitoring and management strategies involve the use of cooperative UAVs and Unmanned Ground Vehicles (UGVs) (e.g., <xref ref-type="bibr" rid="ref14">Ghamry and Zhang, 2015</xref>; <xref ref-type="bibr" rid="ref6">Bhar et al., 2017</xref>). Wild expanses to be explored require UAVs that are economical, have the capability of generating a trajectory, tracking, and avoiding obstacles (e.g., <xref ref-type="bibr" rid="ref1">Ait El Cadi, 2010</xref>; <xref ref-type="bibr" rid="ref7">Bhar et al., 2018</xref>).</p>
<p>The main contribution of this study is using simple PD with adjustable parameter controller associated with PID controller to make the quadrotor more stable when dealing with changes in weight and compensating for wind gusts. Our work involves designing a quadrotor UAV autopilot that will be used later in collaboration with intelligent navigation algorithms for surveillance and detection. By combining PD and PID controllers, the quadrotor autopilot offers a configurable architecture and a significant advantage over other autopilots. Through simulations under multiple disturbances, its performance were assessed.</p>
<p>The remainder of this article is organized as follows. Section 2 reports the motion mechanism and the dynamic model. Section 3 describes the design of the controller architecture. Section 4 details the Simulink parameters and reports the main numerical results. Conclusions and avenues for future work are drawn in Section 5.</p>
</sec>
<sec id="sec2">
<label>2</label>
<title>Dynamic model</title>
<sec id="sec3">
<label>2.1</label>
<title>Quadrotor configuration</title>
<p>A Quadrotor includes 4 rotors arranged in a cross-like shape as displayed in <xref ref-type="fig" rid="fig1">Figure 1</xref>. Rotor blades are equipped with propellers powered by one-by-one DC motors. Rotors 1 and 3 rotate within side the equal route at the same time as rotors 2 and 4 rotate in a contrary route in order to balance the whole machine torque and cancel the gyroscopic and aerodynamics torques.</p>
<fig position="float" id="fig1">
<label>Figure 1</label>
<caption>
<p>Quadrotor model.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g001.tif"/>
</fig>
</sec>
<sec id="sec4">
<label>2.2</label>
<title>Flight mechanisms</title>
<p>The motion of quadcopters can be achieved through six distinct maneuvers, which involve a combination of translational and rotational motion as illustrated in <xref ref-type="fig" rid="fig2">Figure 2</xref>. There are four inputs on the quadcopter:<list list-type="bullet">
<list-item>
<p>Thrust (z): This input generates a vertical force that enables the quadcopter to hover or move up and down through the air. Increased or decreased speed of all four rotors by a similar amount, greater or lesser than gravitational force, creates the force.</p>
</list-item>
<list-item>
<p>Roll angle (&#x03D5;): It denotes the quadcopter rotation around the x-axis. In order to create the roll motion, the second rotor&#x2019;s speed is decreased and the fourth rotor&#x2019;s speed is increased. These &#x201C;rolls&#x201D; move the quadcopter sideways along the y&#x2009;+&#x2009;and y- axis, while maintaining its altitude position.</p>
</list-item>
<list-item>
<p>Pitch (&#x03B8;): It corresponds to the quadcopter rotation around the y-axis. By decreasing the first rotor&#x2019;s speed and increasing the third rotor&#x2019;s speed, pitch motion can be created. Depending on the quadcopter&#x2019;s orientation and the position of its nose, the pitch action causes it to tilt upwards or downwards. An upward tilt moves the quadcopter in a backward motion (x-), while a downward tilt moves it forward (x+).</p>
</list-item>
<list-item>
<p>Yaw (&#x03C8;): It refers to the quadcopter rotation around the z-axis. Angular velocities are increased of two opposite rotors while angular velocities of the other two are decreased. Thus, the Yaw motion is generated. Precisely, In both clockwise and counterclockwise rotations, the quadcopter&#x2019;s front faces the same direction.</p>
</list-item>
</list></p>
<fig position="float" id="fig2">
<label>Figure 2</label>
<caption>
<p>Quadrotor flight mechanisms.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g002.tif"/>
</fig>
</sec>
<sec id="sec5">
<label>2.3</label>
<title>System coordinates</title>
<p>First, let us begin by precising the reference coordinate frame and the coordinate frame of the vehicle body, in order to construct the quadrotor&#x2019;s mathematical model. Let us denote by B =&#x2009;[<italic>B</italic>x, <italic>B</italic>y, <italic>B</italic>z]<sup>T</sup> the body-fixed frame (BFF) and (EFF) E&#x2009;=&#x2009;[E<sub>x</sub>, E<sub>y</sub>, E<sub>z</sub>]<sup>T</sup> the ground fixed reference coordinate frame also called inertial frame. The center of the BFF origin is aligned with the center of mass of the quadcopter, and its origin is connected to the body of the vehicle.</p>
<p>In the 3-dimensional Euclidean space, we denote B&#x2009;=&#x2009;(x,y,z)<sup>T</sup>. The coordinate vector<inline-formula>
<mml:math id="M1">
<mml:mover accent="true">
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mo stretchy="true">&#x2192;</mml:mo>
</mml:mover>
</mml:math>
</inline-formula> describes the distance between the Inertia frame and the body frame. The three Euler angles &#x1D719;, &#x1D703; and &#x1D713; (so called: roll, pitch, and yaw) describing the quadrotor orientation are represented by the vector <inline-formula>
<mml:math id="M2">
<mml:mi>&#x0393;</mml:mi>
</mml:math>
</inline-formula> =&#x2009;[&#x1D719;,,&#x1D713;]<sup>&#x1D447;</sup>.</p>
<p>The vehicle body frame BFF is considered the base for reference frame analysis. To catch the 3D space&#x2019;s movements and create our mathematical references, <xref ref-type="disp-formula" rid="EQ1">Equations 1&#x2013;</xref><xref ref-type="disp-formula" rid="EQ5">5</xref> are considered:<list list-type="simple">
<list-item>
<p>- Body frame rotated in &#x1D713;<sup>+</sup>:</p>
</list-item>
</list><disp-formula id="EQ1">
<label>(1)</label>
<mml:math id="M3">
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi>B</mml:mi>
<mml:mi>I</mml:mi>
</mml:msubsup>
<mml:mfenced open="(" close=")" separators=",">
<mml:mi>z</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:mfenced>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula><list list-type="simple">
<list-item>
<p>- Body frame rotated in &#x1D719; +:</p>
</list-item>
</list><disp-formula id="EQ2">
<label>(2)</label>
<mml:math id="M4">
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi>B</mml:mi>
<mml:mi>I</mml:mi>
</mml:msubsup>
<mml:mfenced open="(" close=")" separators=",">
<mml:mi>x</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:mfenced>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula><list list-type="simple">
<list-item>
<p>- Body frame rotated in &#x1D703; +:</p>
</list-item>
</list><disp-formula id="EQ3">
<label>(3)</label>
<mml:math id="M5">
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi>B</mml:mi>
<mml:mi>I</mml:mi>
</mml:msubsup>
<mml:mfenced open="(" close=")" separators=",">
<mml:mi>y</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:mfenced>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula></p>
<p>The movement from one frame to another in this case is defined by <xref ref-type="disp-formula" rid="EQ4">Equation 4</xref>:<disp-formula id="EQ4">
<label>(4)</label>
<mml:math id="M6">
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi>B</mml:mi>
<mml:mi>I</mml:mi>
</mml:msubsup>
<mml:mfenced open="(" close=")" separators=",,">
<mml:mi>&#x03C8;</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:mfenced>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi>B</mml:mi>
<mml:mi>I</mml:mi>
</mml:msubsup>
<mml:mfenced open="(" close=")" separators=",">
<mml:mi>z</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:mfenced>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi>B</mml:mi>
<mml:mi>I</mml:mi>
</mml:msubsup>
<mml:mfenced open="(" close=")" separators=",">
<mml:mi>y</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:mfenced>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi>B</mml:mi>
<mml:mi>I</mml:mi>
</mml:msubsup>
<mml:mfenced open="(" close=")" separators=",">
<mml:mi>x</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:mfenced>
</mml:math>
</disp-formula></p>
<p>The rotational matrix is then derived as<disp-formula id="EQ5">
<label>(5)</label>
<mml:math id="M7">
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi>B</mml:mi>
<mml:mi>I</mml:mi>
</mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>&#x2212;</mml:mo>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>+</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>+</mml:mo>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>&#x2212;</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula></p>
</sec>
<sec id="sec6">
<label>2.4</label>
<title>Actuator dynamics</title>
<p>The actuator dynamic refers to the correlation between the voltage applied to the actuator, which serves as the real control input, and the speed of the rotor. Designers are particularly interested in the speed of the actuator&#x2019;s response, as it plays a crucial role in the performance of the system. Based on Kirchhoff laws and the law of rotation, we derive the following simplified actuator dynamic model described by <xref ref-type="disp-formula" rid="EQ6">Equation 6</xref>:<disp-formula id="EQ6">
<label>(6)</label>
<mml:math id="M8">
<mml:mfrac>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mo>=</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>&#x03C4;</mml:mi>
</mml:mfrac>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mfrac>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>w</mml:mi>
</mml:msub>
<mml:mi>&#x03C4;</mml:mi>
</mml:mfrac>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>&#x2200;</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>..</mml:mo>
<mml:mo>,</mml:mo>
<mml:mn>4</mml:mn>
</mml:math>
</disp-formula>where &#x1D70F; and <inline-formula>
<mml:math id="M9">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>w</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> denotes the delay and gain coefficient, respectively (<xref ref-type="bibr" rid="ref8">Bouabdallah et al., 2004</xref>). Furthermore, <inline-formula>
<mml:math id="M10">
<mml:mfrac>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M11">
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> represent the speed and the input voltage of actuator &#x1D456;, <inline-formula>
<mml:math id="M12">
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>..</mml:mo>
<mml:mo>,</mml:mo>
<mml:mn>4</mml:mn>
</mml:math>
</inline-formula>. Actuator delay assumes a critical role, especially in cases where the attitude control loop is functioning at a low frequency.</p>
</sec>
<sec id="sec7">
<label>2.5</label>
<title>Kinematics</title>
<p>Let us move on to the kinematics side of the conducted study. Herein, the rigid &#x201C;+&#x201D; symmetric quadrotor is shown in <xref ref-type="fig" rid="fig1">Figure 1</xref> with four rotors producing (Th1, Th2, Th3, Th4) forces. Quadrotor structure center of mass and origin of body coordinate system are the same. The center of gravity of the system coincides with the origin of the body-fixed frame (BFF). It is assumed that propellers are rigid and that thrust and drag are proportional to the square of the propeller&#x2019;s rotational speed. The difference between the body rates p, q, r in BFF and the angle rates expressed in EFF should be calculated following <xref ref-type="disp-formula" rid="EQ7 EQ8">Equations 7, 8</xref>.<disp-formula id="EQ7">
<label>(7)</label>
<mml:math id="M13">
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mi>p</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mi>q</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mi>r</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ8">
<label>(8)</label>
<mml:math id="M14">
<mml:mi>v</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi>M</mml:mi>
<mml:mover accent="true">
<mml:mi>&#x0393;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:math>
</disp-formula></p>
<p>Where <inline-formula>
<mml:math id="M15">
<mml:mi>v</mml:mi>
</mml:math>
</inline-formula>and <inline-formula>
<mml:math id="M16">
<mml:mover accent="true">
<mml:mi>&#x0393;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:math>
</inline-formula> represent the angular velocity vectors in both frames the B-frame and E-frame, respectively. Furthermore, the inverse of the matrix <inline-formula>
<mml:math id="M17">
<mml:mi>M</mml:mi>
</mml:math>
</inline-formula> is expressed in <xref ref-type="disp-formula" rid="EQ9">Equation 9</xref> as<disp-formula id="EQ9">
<label>(9)</label>
<mml:math id="M18">
<mml:msup>
<mml:mi>M</mml:mi>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>tan</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>tan</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mfrac>
<mml:mrow>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mfrac>
<mml:mrow>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula></p>
<p>During position control, the quadrotor&#x2019;s body must be compensated for rotation. Compensation is obtained by transposing the rotation matrix.</p>
<sec id="sec8">
<label>2.5.1</label>
<title>Translation dynamics</title>
<p>Based on the works of <xref ref-type="bibr" rid="ref5">Barzegar and Lee (2022)</xref> and <xref ref-type="bibr" rid="ref24">Quan (2017)</xref>, the system under study was subjected to the following forces:</p>
<p>The vehicle&#x2019;s total weight:<disp-formula id="EQ10">
<label>(10)</label>
<mml:math id="M19">
<mml:mi>P</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="italic">mg</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula></p>
<p>The rotors&#x2019; generated thrust:<disp-formula id="EQ11">
<label>(11)</label>
<mml:math id="M20">
<mml:msub>
<mml:mi>F</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi>B</mml:mi>
<mml:mi>I</mml:mi>
</mml:msubsup>
<mml:munderover>
<mml:mstyle displaystyle="true">
<mml:mo stretchy="true">&#x2211;</mml:mo>
</mml:mstyle>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mn>4</mml:mn>
</mml:munderover>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>b</mml:mi>
<mml:munderover>
<mml:mstyle displaystyle="true">
<mml:mo stretchy="true">&#x2211;</mml:mo>
</mml:mstyle>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mn>4</mml:mn>
</mml:munderover>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>+</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>+</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula></p>
<p>The drag force and air friction:<disp-formula id="EQ12">
<label>(12)</label>
<mml:math id="M21">
<mml:msub>
<mml:mi>F</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi>d</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>B</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="italic">dy</mml:mi>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="italic">dy</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ13">
<label>(13)</label>
<mml:math id="M22">
<mml:mi>F</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi>m</mml:mi>
<mml:mover accent="true">
<mml:mi>B</mml:mi>
<mml:mo stretchy="true">&#x00A8;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>F</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>F</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</disp-formula></p>
<p>The mass of the quadrotor is represented by <inline-formula>
<mml:math id="M23">
<mml:mi>m</mml:mi>
</mml:math>
</inline-formula> and the acceleration due to gravity is represented by <inline-formula>
<mml:math id="M24">
<mml:mi>g</mml:mi>
</mml:math>
</inline-formula> in <xref ref-type="disp-formula" rid="EQ10">Equation 10</xref>. <xref ref-type="disp-formula" rid="EQ11">Equation 11</xref> expresses that the angular velocity and thrust constant of the i<sup>th</sup> propeller are represented by <inline-formula>
<mml:math id="M25">
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M26">
<mml:mi>b</mml:mi>
</mml:math>
</inline-formula>, respectively. <xref ref-type="disp-formula" rid="EQ12">Equation 12</xref> contains the translational drag coefficient matrix denoted by <inline-formula>
<mml:math id="M27">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi>d</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>. The position of the center of mass in the coordinates of the Flat Earth, as given in <xref ref-type="disp-formula" rid="EQ10">Equation 10</xref>, is a vector of the dimensions 3 times 1. Then, the total force is expressed by <xref ref-type="disp-formula" rid="EQ13">Equation 13</xref>. The equation of motion describing the translational motion of the quadcopter is expressed using Newton&#x2019;s second law and reads are <xref ref-type="disp-formula" rid="EQ14">Equations 14&#x2013;</xref><xref ref-type="disp-formula" rid="EQ16">16</xref>:<disp-formula id="EQ14">
<label>(14)</label>
<mml:math id="M28">
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x00A8;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>m</mml:mi>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:munderover>
<mml:mstyle displaystyle="true">
<mml:mo stretchy="true">&#x2211;</mml:mo>
</mml:mstyle>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mn>4</mml:mn>
</mml:munderover>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>+</mml:mo>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ15">
<label>(15)</label>
<mml:math id="M29">
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo stretchy="true">&#x00A8;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>m</mml:mi>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:munderover>
<mml:mstyle displaystyle="true">
<mml:mo stretchy="true">&#x2211;</mml:mo>
</mml:mstyle>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mn>4</mml:mn>
</mml:munderover>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>+</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="italic">dy</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ16">
<label>(16)</label>
<mml:math id="M30">
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo stretchy="true">&#x00A8;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>m</mml:mi>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:munderover>
<mml:mstyle displaystyle="true">
<mml:mo stretchy="true">&#x2211;</mml:mo>
</mml:mstyle>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mn>4</mml:mn>
</mml:munderover>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="italic">mg</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula></p>
</sec>
<sec id="sec9">
<label>2.5.2</label>
<title>Rotation dynamics</title>
<p>The motion of a quadrotor is clearly attributed to an array of forces and moments resulting from various physical phenomena. A quadrotor experiences torques in roll, pitch, and yaw, as well as aerodynamic friction torque and gyroscopic effects caused by the propellers. To calculate angular acceleration on the body frame, the second law of Newton for rotational motion must be applied, and the Coriolis effect should be taken into account. We can consider for this model the torques detailed in <xref ref-type="table" rid="tab1">Table 1</xref>.</p>
<table-wrap position="float" id="tab1">
<label>Table 1</label>
<caption>
<p>Torques details.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="left" valign="top">Type</th>
<th align="left" valign="top">Designation</th>
<th align="left" valign="top">Expression</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="middle" rowspan="4">Rolling moments (<inline-formula>
<mml:math id="M31">
<mml:msub>
<mml:mi>&#x03C4;</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo stretchy="true">)</mml:mo>
</mml:math>
</inline-formula></td>
<td align="left" valign="middle">Body gyro effect</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math id="M32">
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left" valign="middle">Propeller gyro effect</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math id="M33">
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>&#x03A9;</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left" valign="middle">Roll actuators action</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math id="M34">
<mml:mi>l</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left" valign="middle">Rolling moment due to air resistance</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math id="M35">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="italic">ax</mml:mi>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left" valign="middle" rowspan="4">Pitching moments (<inline-formula>
<mml:math id="M36">
<mml:msub>
<mml:mi>&#x03C4;</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo stretchy="true">)</mml:mo>
</mml:math>
</inline-formula></td>
<td align="left" valign="middle">Body gyro effect</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math id="M37">
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left" valign="middle">Propeller gyro effect</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math id="M38">
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>&#x03A9;</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left" valign="middle">Pitch actuators action</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math id="M39">
<mml:mi>l</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left" valign="middle">Pitch moment due to air resistance</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math id="M40">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left" valign="middle" rowspan="4">Yawing moments (<inline-formula>
<mml:math id="M41">
<mml:msub>
<mml:mi>&#x03C4;</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo stretchy="true">)</mml:mo>
</mml:math>
</inline-formula></td>
<td align="left" valign="middle">Body gyro effect</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math id="M42">
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left" valign="middle">Inertial counter-torque</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math id="M43">
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mover accent="true">
<mml:mi>&#x03A9;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left" valign="middle">Counter-torque unbalance</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math id="M44">
<mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mi>i</mml:mi>
</mml:msup>
<mml:munderover>
<mml:mstyle displaystyle="true">
<mml:mo stretchy="true">&#x2211;</mml:mo>
</mml:mstyle>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mn>4</mml:mn>
</mml:munderover>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="left" valign="middle">Yaw moment due to air resistance</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math id="M45">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:math>
</inline-formula>
</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Accordingly, the torques can be derived as follows:<disp-formula id="EQ17">
<label>(17)</label>
<mml:math id="M46">
<mml:msub>
<mml:mi>&#x03C4;</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mi>l</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mo>&#x2227;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mo>+</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mi>l</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mo>&#x2227;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mi mathvariant="italic">lb</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ18">
<label>(18)</label>
<mml:math id="M47">
<mml:msub>
<mml:mi>&#x03C4;</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mi>l</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mo>&#x2227;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mo>+</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mi>l</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mo>&#x2227;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mi mathvariant="italic">lb</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ19">
<label>(19)</label>
<mml:math id="M48">
<mml:msub>
<mml:mi>&#x03C4;</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mi>d</mml:mi>
<mml:munderover>
<mml:mstyle displaystyle="true">
<mml:mo stretchy="true">&#x2211;</mml:mo>
</mml:mstyle>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mn>4</mml:mn>
</mml:munderover>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ20">
<label>(20)</label>
<mml:math id="M49">
<mml:msub>
<mml:mi>&#x03C4;</mml:mi>
<mml:mi>a</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi>a</mml:mi>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="italic">ax</mml:mi>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ21">
<label>(21)</label>
<mml:math id="M50">
<mml:msub>
<mml:mi>&#x03C4;</mml:mi>
<mml:mrow>
<mml:mi>g</mml:mi>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>&#x03A9;</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula></p>
<p><xref ref-type="disp-formula" rid="EQ17">Equations 17&#x2013;</xref><xref ref-type="disp-formula" rid="EQ21">21</xref> denote that the parameter <inline-formula>
<mml:math id="M51">
<mml:mi>l</mml:mi>
</mml:math>
</inline-formula> indicates the distance of the motor axis from the center of gravity of the quadcopter, while <inline-formula>
<mml:math id="M52">
<mml:mi>d</mml:mi>
</mml:math>
</inline-formula> represents the drag coefficient. <xref ref-type="disp-formula" rid="EQ20">Equation 20</xref> depicts <inline-formula>
<mml:math id="M53">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi>a</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> as the 3&#x00D7;3 matrix of aerodynamic friction coefficients. In <xref ref-type="disp-formula" rid="EQ21">Equation 21</xref>, <inline-formula>
<mml:math id="M54">
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M55">
<mml:msub>
<mml:mi>&#x03A9;</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> represent the rotor&#x2019;s inertia and rotation velocity, respectively. The rotational motion of the quadrotor is governed by the equations of motion, expressed by <xref ref-type="disp-formula" rid="EQ22 EQ23 EQ24">Equations 22&#x2013;24</xref>, obtained by using Euler&#x2019;s rotation equations. In <xref ref-type="disp-formula" rid="EQ22 EQ23 EQ24">Equations 22&#x2013;24</xref>, moments of inertia along <inline-formula>
<mml:math id="M56">
<mml:mi>x</mml:mi>
</mml:math>
</inline-formula>, <inline-formula>
<mml:math id="M57">
<mml:mi>y</mml:mi>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M58">
<mml:mi>z</mml:mi>
</mml:math>
</inline-formula> directions are represented by <inline-formula>
<mml:math id="M59">
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>, <inline-formula>
<mml:math id="M60">
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M61">
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> respectively:<disp-formula id="EQ22">
<label>(22)</label>
<mml:math id="M62">
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x00A8;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="italic">ax</mml:mi>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>&#x03A9;</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="italic">lb</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ23">
<label>(23)</label>
<mml:math id="M63">
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x00A8;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>&#x03A9;</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="italic">lb</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ24">
<label>(24)</label>
<mml:math id="M64">
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x00A8;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>&#x03A9;</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:munderover>
<mml:mstyle displaystyle="true">
<mml:mo stretchy="true">&#x2211;</mml:mo>
</mml:mstyle>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mn>4</mml:mn>
</mml:munderover>
<mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula></p>
</sec>
<sec id="sec10">
<label>2.5.3</label>
<title>Mathematical model</title>
<p>Considering both the translational and rotational dynamics, the entire dynamic model of the quadcopter is expressed as follows:<disp-formula id="EQ25">
<label>(25)</label>
<mml:math id="M65">
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x00A8;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>m</mml:mi>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ26">
<label>(26)</label>
<mml:math id="M66">
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo stretchy="true">&#x00A8;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>m</mml:mi>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="italic">dy</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ27">
<label>(27)</label>
<mml:math id="M67">
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo stretchy="true">&#x00A8;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>m</mml:mi>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="italic">mg</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ28">
<label>(28)</label>
<mml:math id="M68">
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x00A8;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="italic">ax</mml:mi>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>&#x03A9;</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ29">
<label>(29)</label>
<mml:math id="M69">
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x00A8;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>&#x03A9;</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ30">
<label>(30)</label>
<mml:math id="M70">
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x00A8;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>&#x03A9;</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula>where <inline-formula>
<mml:math id="M71">
<mml:mi>u</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfenced open="(" close=")" separators=",,,,,">
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:msub>
</mml:mfenced>
</mml:math>
</inline-formula> is a vector expressed by <xref ref-type="disp-formula" rid="EQ32 EQ33 EQ34">Equations 31&#x2013;33</xref> with <inline-formula>
<mml:math id="M72">
<mml:mi>d</mml:mi>
</mml:math>
</inline-formula> as the drag coefficient:<disp-formula id="EQ31">
<label>(31)</label>
<mml:math id="M73">
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>+</mml:mo>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:math>
</disp-formula><disp-formula id="EQ32">
<label>(32)</label>
<mml:math id="M74">
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>+</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:math>
</disp-formula><disp-formula id="EQ33">
<label>(33)</label>
<mml:math id="M75">
<mml:mfenced open="[" close="]">
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>b</mml:mi>
<mml:mspace width="0.5em"/>
<mml:mi>b</mml:mi>
<mml:mspace width="0.5em"/>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>b</mml:mi>
</mml:mtd>
<mml:mtd>
<mml:mi>b</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="italic">lb</mml:mi>
</mml:mtd>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mi mathvariant="italic">lb</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="italic">lb</mml:mi>
</mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi mathvariant="italic">lb</mml:mi>
</mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>d</mml:mi>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>d</mml:mi>
</mml:mtd>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>d</mml:mi>
</mml:mtd>
<mml:mtd>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>d</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mfenced open="[" close="]">
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msup>
<mml:msub>
<mml:mi>&#x03C9;</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula></p>
<p><xref ref-type="disp-formula" rid="EQ26 EQ27 EQ28 EQ29 EQ30 EQ31">Equations 25&#x2013;30</xref> exhibit the complete nonlinear model of a quadrotor, revealing its complex dynamics. The strong nonlinearity, including inter-state multiplication, intensive variable coupling, and the presence of multivariable features, poses challenges in designing controllers, while simultaneously eliciting significant researchers&#x2019; attention.</p>
</sec>
<sec id="sec11">
<label>2.5.4</label>
<title>Simplified system</title>
<p>The purpose of the mathematical model is to facilitate the construction of a control system. Nevertheless, if the mathematical model is overly sophisticated, the design of the control system will also be complex. A state space model could be adapted for the control system <inline-formula>
<mml:math id="M76">
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mi>f</mml:mi>
<mml:mfenced open="(" close=")" separators=",">
<mml:mi>X</mml:mi>
<mml:mi>U</mml:mi>
</mml:mfenced>
</mml:math>
</inline-formula> where <inline-formula>
<mml:math id="M77">
<mml:mi>X</mml:mi>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M78">
<mml:mi>U</mml:mi>
</mml:math>
</inline-formula> are the state and input vectors, respectively. The state vector <inline-formula>
<mml:math id="M79">
<mml:mi>X</mml:mi>
</mml:math>
</inline-formula> reads as:<disp-formula id="EQ34">
<label>(34)</label>
<mml:math id="M80">
<mml:mi>X</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>,</mml:mo>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>,</mml:mo>
<mml:mover>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
</mml:mrow>
<mml:mo>&#x0307;</mml:mo>
</mml:mover>
<mml:mi>&#x03D5;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>,</mml:mo>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>,</mml:mo>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula></p>
<p>Let us begin by assuming that<disp-formula id="EQ35">
<label>(35)</label>
<mml:math id="M81">
<mml:mo stretchy="true">{</mml:mo>
<mml:mspace width="thickmathspace"/>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>x</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>y</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>z</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>5</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>6</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mspace width="thickmathspace"/>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>7</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>8</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>9</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>10</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>7</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>11</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>8</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>12</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>9</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</disp-formula></p>
<p>Then, <xref ref-type="disp-formula" rid="EQ26 EQ27 EQ28 EQ29 EQ30 EQ31 EQ32 EQ33 EQ34 EQ35 EQ36 EQ37 EQ38 EQ39 EQ40 EQ41">Equations 25&#x2013;40</xref> leads to<disp-formula id="EQ36">
<label>(36)</label>
<mml:math id="M82">
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mspace width="10.75em"/>
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mspace width="10.75em"/>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>5</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mspace width="10.75em"/>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>6</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mspace width="6.5em"/>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>m</mml:mi>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mspace width="6.25em"/>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>m</mml:mi>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="italic">dy</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mspace width="2.25em"/>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>m</mml:mi>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mover accent="true">
<mml:mi>z</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="italic">mg</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mspace width="10.25em"/>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>10</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mspace width="10.25em"/>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>11</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mspace width="10.25em"/>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>12</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:msub>
<mml:mn>1</mml:mn>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="italic">ax</mml:mi>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>&#x03A9;</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:msub>
<mml:mn>1</mml:mn>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>&#x03A9;</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:msub>
<mml:mn>1</mml:mn>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>&#x03A9;</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula></p>
<p><xref ref-type="disp-formula" rid="EQ37">Equation 36</xref> indicates that rotational movements are functionally independent of translational movements and are entirely actuated. However, translational movements are under actuated and highly dependent on rotational movements. A control loop structure comprising both an inner and outer loop has been devised. The inner control loop guarantees asymptotic tracking of the desired attitude and altitude, ensuring precise control. On the other hand, the outer loop is responsible for conducting navigation, overseeing the path planning and overall trajectory of the system.</p>
<p>It is possible to make certain simplifying assumptions for the previous model, without compromising the precision of the motion behavior to a significant extent. To minimize the complexity of calculations, it is presumed that the quadrotor is near a hovering position, with very little changes in angles and angular acceleration contribution. Resulting in a null attitude angular rates (<inline-formula>
<mml:math id="M83">
<mml:mover accent="true">
<mml:mi>&#x03D5;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula>, <inline-formula>
<mml:math id="M84">
<mml:mover accent="true">
<mml:mi>&#x03B8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula>, <inline-formula>
<mml:math id="M85">
<mml:mover accent="true">
<mml:mi>&#x03C8;</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula>), this enables neglecting of the gyroscopic effects and moments of inertia terms. Additionally, assuming that the angles <inline-formula>
<mml:math id="M86">
<mml:mi>&#x03D5;</mml:mi>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M87">
<mml:mi>&#x03B8;</mml:mi>
</mml:math>
</inline-formula> are small and the Coriolis terms can be neglected, we can consider that the Coriolis effect terms do not exert a significant influence on linear acceleration. Additionally, considering the quadcopter&#x2019;s movement near a hovering state allows the approximation of the velocities transformation matrix M between the BFF and EFF frames to be close to identity.</p>
<p>Thereby, the motion <xref ref-type="disp-formula" rid="EQ37">Equation 36</xref> becomes<disp-formula id="EQ37">
<label>(37)</label>
<mml:math id="M88">
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mspace width="thickmathspace"/>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>5</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>6</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>m</mml:mi>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>m</mml:mi>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>m</mml:mi>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03B8;</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03D5;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="italic">mg</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mspace width="thickmathspace"/>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>10</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>11</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>12</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mfrac>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mfrac>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mfrac>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mtext>.</mml:mtext>
</mml:math>
</disp-formula></p>
</sec>
</sec>
</sec>
<sec id="sec12">
<label>3</label>
<title>Controller design</title>
<p>In this section, the control strategy and design of the attitude and elevation controller are described in detail.</p>
<sec id="sec13">
<label>3.1</label>
<title>Control strategy</title>
<p>Achieving seamless tracking performance utilizing traditional gains is the primary goal of the proposed PD-PID controller, while simultaneously ensuring satisfactory performance in position hold mode through gain adjustment aimed at mitigating the effects of wind disturbances. A schematic representation of the proposed PD-PID technique is depicted in <xref ref-type="fig" rid="fig3">Figure 3</xref>. The proportional, integral, and derivative gains are optimized utilizing gain scheduling, which is determined by variations in natural frequency and the Ziegler-Nichols methods.</p>
<fig position="float" id="fig3">
<label>Figure 3</label>
<caption>
<p>The full quadrotor control scheme.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g003.tif"/>
</fig>
</sec>
<sec id="sec14">
<label>3.2</label>
<title>Attitude control</title>
<p>The primary control loop, as proposed, governs four Degrees of Freedom (DOF) in the quadrotor system, namely the altitude <inline-formula>
<mml:math id="M89">
<mml:mi mathvariant="normal">z</mml:mi>
</mml:math>
</inline-formula>, roll angle <inline-formula>
<mml:math id="M90">
<mml:mi>&#x03D5;</mml:mi>
</mml:math>
</inline-formula>, pitch angle <inline-formula>
<mml:math id="M91">
<mml:mi>&#x03B8;</mml:mi>
</mml:math>
</inline-formula>, and yaw angle <inline-formula>
<mml:math id="M92">
<mml:mi>&#x03C8;</mml:mi>
</mml:math>
</inline-formula>. Given that the quadrotor dynamic system is under-actuated, an outer loop is employed to derive the desired control inputs for roll and pitch, denoted as <inline-formula>
<mml:math id="M93">
<mml:msub>
<mml:mi>&#x03D5;</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M94">
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>, respectively, based on the desired positions in the earth frame <inline-formula>
<mml:math id="M95">
<mml:mfenced open="(" close=")" separators=",">
<mml:msub>
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
</mml:msub>
</mml:mfenced>
</mml:math>
</inline-formula>. For the linear acceleration, very small angles<inline-formula>
<mml:math id="M96">
<mml:mi>&#x03D5;</mml:mi>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M97">
<mml:mi>&#x03B8;</mml:mi>
</mml:math>
</inline-formula> are assumed. Inspired from the work of <xref ref-type="bibr" rid="ref17">Kotarski et al. (2016)</xref>, the following desired angles are derived:<disp-formula id="EQ38">
<label>(38)</label>
<mml:math id="M98">
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>&#x03D5;</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi mathvariant="normal">g</mml:mi>
</mml:mfrac>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mo>cos</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>sin</mml:mo>
<mml:mi>&#x03C8;</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
<mml:mfenced open="[" close="]">
<mml:mtable columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi mathvariant="normal">T</mml:mi>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi mathvariant="normal">T</mml:mi>
<mml:mi mathvariant="normal">y</mml:mi>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:math>
</disp-formula></p>
<p>A configurable PD controller is also envisaged, following the work of <xref ref-type="bibr" rid="ref22">Nguyen and Hong (2018)</xref>. the controller produces virtual accelerations <inline-formula>
<mml:math id="M99">
<mml:msub>
<mml:mi mathvariant="normal">T</mml:mi>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M100">
<mml:msub>
<mml:mi mathvariant="normal">T</mml:mi>
<mml:mi mathvariant="normal">y</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> along the X and Y axes, respectively, such as<disp-formula id="EQ39">
<label>(39)</label>
<mml:math id="M101">
<mml:msub>
<mml:mi mathvariant="normal">T</mml:mi>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula><disp-formula id="EQ40">
<label>(40)</label>
<mml:math id="M102">
<mml:msub>
<mml:mi mathvariant="normal">T</mml:mi>
<mml:mi mathvariant="normal">y</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi mathvariant="normal">y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi mathvariant="normal">y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="normal">y</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula>where the coordinates (<inline-formula>
<mml:math id="M103">
<mml:msub>
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:msub>
<mml:mo stretchy="true">)</mml:mo>
</mml:math>
</inline-formula> refer to the desired position in the <inline-formula>
<mml:math id="M104">
<mml:mfenced open="(" close=")" separators=",">
<mml:mi mathvariant="normal">X</mml:mi>
<mml:mi mathvariant="normal">Y</mml:mi>
</mml:mfenced>
</mml:math>
</inline-formula> plane, whereas (<inline-formula>
<mml:math id="M105">
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>,<inline-formula>
<mml:math id="M106">
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="true">)</mml:mo>
</mml:math>
</inline-formula> and (<inline-formula>
<mml:math id="M107">
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi mathvariant="normal">y</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>,<inline-formula>
<mml:math id="M108">
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi mathvariant="normal">y</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>) represent the controller gains along the X and Y axes, respectively.</p>
<p>To summarize, the block diagram shown in <xref ref-type="fig" rid="fig4">Figure 4</xref> represents the roll controller for the X-axis. It is evident that the structure of the roll controller for the Y direction is highly similar.</p>
<fig position="float" id="fig4">
<label>Figure 4</label>
<caption>
<p>X-direction PD roll controller.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g004.tif"/>
</fig>
<p>Now, let <inline-formula>
<mml:math id="M109">
<mml:mi>&#x03BE;</mml:mi>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M110">
<mml:msub>
<mml:mi mathvariant="normal">w</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> denote and the controller&#x2019;s damping ratio and the natural frequency, respectively. Accordingly, <xref ref-type="disp-formula" rid="EQ42">Equation 41</xref> was derived as a transfer function of second order that leads to the controller gains <inline-formula>
<mml:math id="M111">
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M112">
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, expressed by <xref ref-type="disp-formula" rid="EQ43 EQ44">Equations 42, 43</xref>, respectively:<disp-formula id="EQ41">
<label>(41)</label>
<mml:math id="M113">
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">T</mml:mi>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mi mathvariant="normal">p</mml:mi>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">X</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mi mathvariant="normal">p</mml:mi>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mi mathvariant="normal">p</mml:mi>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="normal">p</mml:mi>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:math>
</disp-formula><disp-formula id="EQ42">
<label>(42)</label>
<mml:math id="M114">
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>2</mml:mn>
<mml:mi>&#x03BE;</mml:mi>
<mml:msub>
<mml:mi mathvariant="normal">w</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
</mml:msub>
</mml:math>
</disp-formula><disp-formula id="EQ43">
<label>(43)</label>
<mml:math id="M115">
<mml:msub>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:msub>
<mml:mi mathvariant="normal">w</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>&#x03BE;</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:math>
</disp-formula></p>
</sec>
<sec id="sec15">
<label>3.3</label>
<title>Roll control</title>
<p>To facilitate roll control and achieve motion along the Y-axis, the PID controller is utilized to generate small variations in forces which are then applied to rotors 3 and 4. If we assume that the roll parameters of the PID controller are represented by <inline-formula>
<mml:math id="M116">
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, <inline-formula>
<mml:math id="M117">
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, and <inline-formula>
<mml:math id="M118">
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, and that the actual roll angle is <inline-formula>
<mml:math id="M119">
<mml:msub>
<mml:mi>&#x03D5;</mml:mi>
<mml:mi mathvariant="normal">m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>, then the roll angle error <inline-formula>
<mml:math id="M120">
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> can be expressed as <inline-formula>
<mml:math id="M121">
<mml:msub>
<mml:mi>&#x03D5;</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>&#x03D5;</mml:mi>
<mml:mi mathvariant="normal">m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>. Accordingly, <inline-formula>
<mml:math id="M122">
<mml:mi mathvariant="normal">&#x0394;</mml:mi>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> can be represented by <xref ref-type="disp-formula" rid="EQ44">Equation 44</xref>:<disp-formula id="EQ44">
<label>(44)</label>
<mml:math id="M123">
<mml:mi mathvariant="normal">&#x0394;</mml:mi>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="true">&#x222B;</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mi>&#x03D5;</mml:mi>
</mml:msub>
</mml:math>
</disp-formula></p>
</sec>
<sec id="sec16">
<label>3.4</label>
<title>Pitch control</title>
<p>In order to generate motion along the X-axis, a PID controller is employed to generate a small variation in forces, denoted as <inline-formula>
<mml:math id="M124">
<mml:mi mathvariant="normal">&#x0394;</mml:mi>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>, which is then applied to rotors 1 and 2. If the quadrotor needs to move backwards, the speed of rotor 2 is decreased while the speed of rotor 1 is increased. This differential change in rotational speeds causes the quadrotor to move in a backward direction along the X-axis. This speed variation is controlled by PID which pitch angle parameters are <inline-formula>
<mml:math id="M125">
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, <inline-formula>
<mml:math id="M126">
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, and <inline-formula>
<mml:math id="M127">
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> so that <inline-formula>
<mml:math id="M176">
<mml:mi mathvariant="normal">&#x0394;</mml:mi>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mi>&#x03D5;</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> is expressed according to <xref ref-type="disp-formula" rid="EQ45">Equation 45</xref>:<disp-formula id="EQ45">
<label>(45)</label>
<mml:math id="M128">
<mml:mi mathvariant="normal">&#x0394;</mml:mi>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="true">&#x222B;</mml:mo>
<mml:mrow>
<mml:mi mathvariant="normal">e</mml:mi>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mi>&#x03B8;</mml:mi>
</mml:msub>
</mml:math>
</disp-formula>and <inline-formula>
<mml:math id="M129">
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mi mathvariant="normal">m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>, such that the pitch angle error <inline-formula>
<mml:math id="M130">
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi>&#x03B8;</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> is associated with the measured pitch angle <inline-formula>
<mml:math id="M131">
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mi mathvariant="normal">m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>.</p>
</sec>
<sec id="sec17">
<label>3.5</label>
<title>Yaw control</title>
<p>The quadrotor&#x2019;s counter clockwise and clockwise movements can be controlled by altering the yaw angle. The yaw angle parameters of the considered PD or PID controller are <inline-formula>
<mml:math id="M132">
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, <inline-formula>
<mml:math id="M133">
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, and <inline-formula>
<mml:math id="M134">
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>. Additionally, <inline-formula>
<mml:math id="M135">
<mml:msub>
<mml:mi mathvariant="normal">&#x03C8;</mml:mi>
<mml:mi mathvariant="normal">m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> represents the sensor measured yaw angle, and <inline-formula>
<mml:math id="M136">
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">&#x03C8;</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> represents the yaw angle error. Thus, as with the roll and pitch control, <inline-formula>
<mml:math id="M137">
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">&#x03C8;</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> equals <inline-formula>
<mml:math id="M138">
<mml:msub>
<mml:mi mathvariant="normal">&#x03C8;</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03C8;</mml:mi>
<mml:mi mathvariant="normal">m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>. <xref ref-type="disp-formula" rid="EQ47 EQ48">Equations 46, 47</xref> represent the yaw control equations for the PID and PD controllers, respectively:<disp-formula id="EQ46">
<label>(46)</label>
<mml:math id="M139">
<mml:mi mathvariant="normal">&#x0394;</mml:mi>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="true">&#x222B;</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mi>&#x03C8;</mml:mi>
</mml:msub>
</mml:math>
</disp-formula><disp-formula id="EQ47">
<label>(47)</label>
<mml:math id="M140">
<mml:mi mathvariant="normal">&#x0394;</mml:mi>
<mml:mi>T</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>&#x03C8;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mi>&#x03C8;</mml:mi>
</mml:msub>
</mml:math>
</disp-formula></p>
</sec>
<sec id="sec18">
<label>3.6</label>
<title>Altitude control</title>
<p>A thrust force is created to compensate for the gravitational force. Altering the angular velocities of all rotors at equal speed is the way to achieve the desired altitude of the quadrotor. Let <inline-formula>
<mml:math id="M141">
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, <inline-formula>
<mml:math id="M142">
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, and <inline-formula>
<mml:math id="M143">
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi mathvariant="normal">D</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> denote the altitude parameters of the PID controller, <inline-formula>
<mml:math id="M144">
<mml:msub>
<mml:mi mathvariant="normal">z</mml:mi>
<mml:mi mathvariant="normal">m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> be the sensor measured altitude, and <inline-formula>
<mml:math id="M145">
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> be the altitude error. Obviously, <inline-formula>
<mml:math id="M146">
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> equals <inline-formula>
<mml:math id="M147">
<mml:msub>
<mml:mi mathvariant="normal">z</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">z</mml:mi>
<mml:mi mathvariant="normal">m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>. According to these notations, the thrust forces for the PID and PD controllers, respectively, could be expressed by <xref ref-type="disp-formula" rid="EQ48 EQ49">Equations 48, 49</xref> as<disp-formula id="EQ48">
<label>(48)</label>
<mml:math id="M148">
<mml:mi mathvariant="normal">&#x0394;</mml:mi>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="true">&#x222B;</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi mathvariant="normal">D</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:msub>
</mml:math>
</disp-formula><disp-formula id="EQ49">
<label>(49)</label>
<mml:math id="M149">
<mml:mi mathvariant="normal">&#x0394;</mml:mi>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">K</mml:mi>
<mml:mrow>
<mml:mi mathvariant="normal">D</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo stretchy="true">&#x02D9;</mml:mo>
</mml:mover>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:msub>
</mml:math>
</disp-formula></p>
</sec>
</sec>
<sec id="sec19">
<label>4</label>
<title>Simulation and experiments</title>
<p>Using Matlab Simulink, we implemented the simulation study, the experiments, and the parameter tuning for the PD and PID controllers (<xref ref-type="fig" rid="fig3">Figure 3</xref>). The control scheme can be generally characterized as being comprised of a waypoint input, which in turn is divided into a position component and a yaw angle orientation component. In the upcoming subsections, we will provide concise descriptions of the primary controllers and quadrotor parameters. Subsequently, we will present simulation results pertaining to main movements and trajectory tracking. Finally, we will evaluate control robustness by examining the quadrotor&#x2019;s response to wind disturbances across various trajectories.</p>
<sec id="sec20">
<label>4.1</label>
<title>Controllers and quadrotor parameters setting</title>
<p>For the simulation study, we have adopted a quadrotor which main parameters are displayed in <xref ref-type="table" rid="tab2">Table 2</xref>.</p>
<table-wrap position="float" id="tab2">
<label>Table 2</label>
<caption>
<p>Main quadrotor parameters.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="left" valign="top">Parameter</th>
<th align="center" valign="top">Value</th>
<th align="center" valign="top">Unit</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="middle">
<inline-formula>
<mml:math id="M150">
<mml:mi mathvariant="normal">L</mml:mi>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle">0.24</td>
<td align="center" valign="middle">m</td>
</tr>
<tr>
<td align="left" valign="middle">
<inline-formula>
<mml:math id="M151">
<mml:mi mathvariant="normal">m</mml:mi>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle">0.9</td>
<td align="center" valign="middle">Kg</td>
</tr>
<tr>
<td align="left" valign="middle">
<inline-formula>
<mml:math id="M152">
<mml:mi mathvariant="normal">g</mml:mi>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle">9.81</td>
<td align="center" valign="middle">m.s<sup>&#x2212;2</sup></td>
</tr>
<tr>
<td align="left" valign="middle">
<inline-formula>
<mml:math id="M153">
<mml:mi>d</mml:mi>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle">3.59 10<sup>&#x2212;5</sup></td>
<td align="center" valign="middle">N.m</td>
</tr>
<tr>
<td align="left" valign="middle">
<inline-formula>
<mml:math id="M154">
<mml:msub>
<mml:mi mathvariant="normal">J</mml:mi>
<mml:mi mathvariant="normal">x</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle">0.00963</td>
<td align="center" valign="middle">Kg.m<sup>2</sup></td>
</tr>
<tr>
<td align="left" valign="middle">
<inline-formula>
<mml:math id="M155">
<mml:msub>
<mml:mi mathvariant="normal">J</mml:mi>
<mml:mi mathvariant="normal">y</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle">0.00963</td>
<td align="center" valign="middle">Kg.m<sup>2</sup></td>
</tr>
<tr>
<td align="left" valign="middle">
<inline-formula>
<mml:math id="M156">
<mml:msub>
<mml:mi mathvariant="normal">J</mml:mi>
<mml:mi mathvariant="normal">z</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle">0.019</td>
<td align="center" valign="middle">Kg.m<sup>2</sup></td>
</tr>
</tbody>
</table>
</table-wrap>
<p>For the design of the quadrotor autopilot, a PD/PID controller is implemented as presented in Section 3. As a result of Ziegler-Nichols PID parameters setting rules, the proportion and derivative coefficients of the controller are adjusted. According to this parameter-setting method, parameters are set according to stability analysis. Therefore, <inline-formula>
<mml:math id="M157">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> the proportion coefficient is set such that <inline-formula>
<mml:math id="M158">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>D</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M159">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>I</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> are fixed to 0. Then, an iterative increase in <inline-formula>
<mml:math id="M160">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> is made until the closed-loop system begins to shock, i.e., as soon as the poles of the closed-loop system cross the &#x1D457;&#x1D464; axis. <xref ref-type="disp-formula" rid="EQ50 EQ51 EQ52 ">Equations 50&#x2013;52</xref> express the final <inline-formula>
<mml:math id="M161">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>, <inline-formula>
<mml:math id="M162">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>D</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>, and <inline-formula>
<mml:math id="M163">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>I</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> values as<disp-formula id="EQ50">
<label>(50)</label>
<mml:math id="M164">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.6</mml:mn>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:math>
</disp-formula><disp-formula id="EQ51">
<label>(51)</label>
<mml:math id="M165">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>D</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:msub>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>P</mml:mi>
</mml:msub>
<mml:mi>&#x03C0;</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:math>
</disp-formula><disp-formula id="EQ52">
<label>(52)</label>
<mml:math id="M166">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>I</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>P</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mi>&#x03C0;</mml:mi>
</mml:mfrac>
</mml:math>
</disp-formula>where the value of <inline-formula>
<mml:math id="M167">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> at which the system experiences shock is represented by <inline-formula>
<mml:math id="M168">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>, while <inline-formula>
<mml:math id="M169">
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> denotes the frequency of oscillation. The root locus method is applied to determine <inline-formula>
<mml:math id="M170">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M171">
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>. The root locus of the controlled object&#x2019;s transfer function can be obtained for a given system. <inline-formula>
<mml:math id="M172">
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula> corresponds to the gain traversing the &#x1D457;&#x1D464; axis, with the oscillation frequency of the point corresponding to <inline-formula>
<mml:math id="M173">
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>.</p>
</sec>
<sec id="sec21">
<label>4.2</label>
<title>Main movements</title>
<p>In order to assess and validate the PD and PID controller simulator, several numerical experiments were conducted.</p>
<p>The time evolution of the X, Y, Z, and Yaw angle positions of the tuned PD/PID controllers are reported in <xref ref-type="fig" rid="fig5">Figures 5</xref>&#x2013;<xref ref-type="fig" rid="fig6"/><xref ref-type="fig" rid="fig7"/><xref ref-type="fig" rid="fig8">8</xref>. The PD and PID controllers have similar performance in terms of X and Y-axis motion, as shown in <xref ref-type="fig" rid="fig5">Figures 5</xref>, <xref ref-type="fig" rid="fig6">6</xref>. It should also be noted that the Z position controller does not affect movement along the X and Y axes. The PID controller proves to be more efficient in reducing altitude position errors (<xref ref-type="fig" rid="fig7">Figure 7</xref>), whereas the PD controller only manages to keep a minor, permanent error. Additionally, the PD controller exhibits a marginally quicker rise time compared to its counterpart, the PID controller. The dynamics of the response of both PD/PID yaw controllers to the input reference show comparative behavior, as displayed in <xref ref-type="fig" rid="fig8">Figure 8</xref>.</p>
<fig position="float" id="fig5">
<label>Figure 5</label>
<caption>
<p>Time history of the X-position.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g005.tif"/>
</fig>
<fig position="float" id="fig6">
<label>Figure 6</label>
<caption>
<p>Time history of the Y-position.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g006.tif"/>
</fig>
<fig position="float" id="fig7">
<label>Figure 7</label>
<caption>
<p>Time history of the Z-position.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g007.tif"/>
</fig>
<fig position="float" id="fig8">
<label>Figure 8</label>
<caption>
<p>Quadrotor&#x2019;s yaw angle.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g008.tif"/>
</fig>
<p>Based on the information presented in <xref ref-type="fig" rid="fig9">Figures 9</xref>, <xref ref-type="fig" rid="fig10">10</xref>, we can infer that the PID controlled inner loop has a quick response time as well as high degree of accuracy. The overshoot is well-damped, and the system stabilizes the roll and pitch input angles of the quadrotor. It succeeds to maintain these angles as minimal as possible, assuming negligible values for the <inline-formula>
<mml:math id="M174">
<mml:mi>&#x03D5;</mml:mi>
</mml:math>
</inline-formula> and <inline-formula>
<mml:math id="M175">
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
</mml:math>
</inline-formula> angles. In general, higher roll and pitch angles correlate with greater speeds along the X and Y directions.</p>
<fig position="float" id="fig9">
<label>Figure 9</label>
<caption>
<p>Quadrotor&#x2019;s roll angle.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g009.tif"/>
</fig>
<fig position="float" id="fig10">
<label>Figure 10</label>
<caption>
<p>Quadrotor&#x2019;s pitch angle.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g010.tif"/>
</fig>
</sec>
<sec id="sec22">
<label>4.3</label>
<title>Main results of the trajectory trucking</title>
<p>A wide range of signal shapes, such as square, circular, and sinusoidal trajectories, have been tested for trajectory trucking. In order to evaluate the performance of the proposed control architecture, a number of time-varying input references were examined and implemented.</p>
<p><xref ref-type="fig" rid="fig11">Figure 11</xref> illustrates the time history of helical paths. When the quadrotor is being controlled by a PD command, the PD controller produces a small permanent position error. However, the PID controller operates dynamically to ensure precise control. Besides, <xref ref-type="fig" rid="fig12">Figure 12</xref> highlights that the pitch and roll controllers ensure that the quadrotor remains very stable. It can be observed that the trajectory tracking performance is satisfactory with both PD and PIC controllers, particularly when considering the application of the designed autopilot.</p>
<fig position="float" id="fig11">
<label>Figure 11</label>
<caption>
<p>Quadrotor&#x2019;s trajectory tracking.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g011.tif"/>
</fig>
<fig position="float" id="fig12">
<label>Figure 12</label>
<caption>
<p>The roll and pitch angles time evolution.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g012.tif"/>
</fig>
</sec>
<sec id="sec23">
<label>4.4</label>
<title>Assessment of the control robustness</title>
<p>As an input signal to the quadrotor model, a wind force model was added to test whether the control response of the quadrotor was affected by wind disturbances. We have implement the wind force inspired from the work of <xref ref-type="bibr" rid="ref3">Alexis et al. (2012)</xref>. We begin by assessing the impact of disturbances along X and Y axes. The corresponding simulation results are reported in <xref ref-type="fig" rid="fig13">Figure 13</xref>.</p>
<fig position="float" id="fig13">
<label>Figure 13</label>
<caption>
<p>Simulation of disturbances along X and Y axes.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g013.tif"/>
</fig>
<p>It is worth mentioning that the quadrotor is capable of following any rectangular trajectory accurately in the absence of disturbances. Now, when adding the wind gusts scenario, the controller shows very good robustness. Indeed, by properly compensating for wind gusts, the controller corrects any deviation caused by the wind as displayed by <xref ref-type="fig" rid="fig14">Figure 14</xref>.</p>
<fig position="float" id="fig14">
<label>Figure 14</label>
<caption>
<p>Wind gusts response for a square trajectory tracking.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g014.tif"/>
</fig>
<p>Furthermore, controlling a circular trajectory yields the same promising results. As can be clearly observed in <xref ref-type="fig" rid="fig15">Figure 15</xref>, the controller succeeds to keep the quadrotor&#x2019;s trajectory around the input reference in a highly accurate and dynamic manner. For both circular and rectangular trajectories, the simulation results confirm that the quadrotor, utilizing the designed autopilot, can deal with disturbances equivalent to more than 30% of its weight without experiencing any significant deviation from its reference trajectory.</p>
<fig position="float" id="fig15">
<label>Figure 15</label>
<caption>
<p>Wind gusts response for a circular trajectory tracking.</p>
</caption>
<graphic xlink:href="fnbot-18-1363366-g015.tif"/>
</fig>
<p>At this stage, it is noteworthy that as the parameters of the controllers are adjustable, their determination could be calculated in several ways and using multiple methods. The mathematical approach used in this paper consists of calculating the parameters according to a second order model that corresponds to the system response. In future work, another approach to be considered involves implementing a more intelligent strategy. This entails using machine learning algorithms trained with historical data. In fact, additional IoT sensors could be deployed for example to continuously update the parameters according to weight variation, flight behavior, environment/landscape nature, and weather information.</p>
</sec>
</sec>
<sec sec-type="conclusions" id="sec24">
<label>5</label>
<title>Conclusion</title>
<p>This study explores the design of an autopilot for a quadrotor unmanned aerial vehicle to analyze intelligent navigation algorithms for surveillance and detection purposes. Its purpose is to serve as a tool for simulating intelligent trajectory tracking algorithms, aiding in the enhancement and refinement of detection and surveillance tasks. Toward this goal, a configurable PD/PID controller is introduced. Simulation study of the controllers were conducted using Matlab Simulink. The simulation results, concerning main movements and trajectory tracking, were presented to demonstrate the controllers&#x2019; good performance. With the introduction of wind gusts, the proposed controllers effectively maintained the quadrotor&#x2019;s trajectory close to multiple provided input references in an accurate manner. While the PID-controlled autopilot exhibited slightly superior performance, the hybrid version emerged as an enticing alternative, capitalizing on the simplicity of the PD control approach.</p>
<p>Future research could delve deeper into exploring controllers with improved efficiency, given the established understanding that the PID controller falls short of optimality and fails to meet all stability requirements for flight. In addition to studying the performance of the proposed control scheme with respect to other disturbances types, it would also be possible to investigate the accuracy of the quadrotor parameters as well.</p>
</sec>
<sec sec-type="data-availability" id="sec25">
<title>Data availability statement</title>
<p>The original contributions presented in the study are included in the article/supplementary material, further inquiries can be directed to the corresponding author.</p>
</sec>
<sec sec-type="author-contributions" id="sec26">
<title>Author contributions</title>
<p>AB: Conceptualization, Data curation, Formal analysis, Investigation, Methodology, Software, Validation, Writing &#x2013; original draft. MS: Supervision, Validation, Writing &#x2013; review &#x0026; editing.</p>
</sec>
</body>
<back>
<sec sec-type="funding-information" id="sec27">
<title>Funding</title>
<p>The author(s) declare that no financial support was received for the research, authorship, and/or publication of this article.</p>
</sec>
<sec sec-type="COI-statement" id="sec28">
<title>Conflict of interest</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
<p>The reviewer KK declared a shared affiliation with the authors to the handling editor at the time of review.</p>
</sec>
<sec id="sec100" sec-type="disclaimer">
<title>Publisher&#x2019;s note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<ref-list>
<title>References</title>
<ref id="ref1">
<citation citation-type="book"><person-group person-group-type="author">
<name><surname>Ait El Cadi</surname> <given-names>A.</given-names></name>
</person-group> (<year>2010</year>). <source>Planification de trajectoires pour une flotte d'UAVs</source>. <comment>Doctoral dissertation</comment> <publisher-name>&#x00C9;cole Polytechnique de Montr&#x00E9;al</publisher-name>.</citation>
</ref>
<ref id="ref2">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Akhloufi</surname> <given-names>M. A.</given-names></name> <name><surname>Couturier</surname> <given-names>A.</given-names></name> <name><surname>Castro</surname> <given-names>N. A.</given-names></name></person-group> (<year>2021</year>). <article-title>Unmanned aerial vehicles for wildland fires: sensing, perception, cooperation and assistance</article-title>. <source>Drones</source> <volume>5</volume>:<fpage>15</fpage>. doi: <pub-id pub-id-type="doi">10.3390/drones5010015</pub-id></citation>
</ref>
<ref id="ref3">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Alexis</surname> <given-names>K.</given-names></name> <name><surname>Nikolakopoulos</surname> <given-names>G.</given-names></name> <name><surname>Tzes</surname> <given-names>A.</given-names></name></person-group> (<year>2012</year>). <article-title>Model predictive quadrotor control: attitude, altitude and position experimental studies</article-title>. <source>IET Control Theory Appl.</source> <volume>6</volume>, <fpage>1812</fpage>&#x2013;<lpage>1827</lpage>. doi: <pub-id pub-id-type="doi">10.1049/iet-cta.2011.0348</pub-id></citation>
</ref>
<ref id="ref5">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Barzegar</surname> <given-names>A.</given-names></name> <name><surname>Lee</surname> <given-names>D. J.</given-names></name></person-group> (<year>2022</year>). <article-title>Deep reinforcement learning-based adaptive controller for trajectory tracking and altitude control of an aerial robot</article-title>. <source>Appl. Sci.</source> <volume>12</volume>:<fpage>4764</fpage>. doi: <pub-id pub-id-type="doi">10.3390/app12094764</pub-id></citation>
</ref>
<ref id="ref6">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Bhar</surname> <given-names>A.</given-names></name> <name><surname>Sayadi</surname> <given-names>M.</given-names></name> <name><surname>Fnaiech</surname> <given-names>F.</given-names></name></person-group> (<year>2017</year>). &#x201C;<article-title>Improved modular UAV autopilot simulator for Pinguin BE aircraft</article-title>&#x201D; in <source>In 2017 international conference on control, automation and diagnosis (ICCAD)</source> (<publisher-name>IEEE</publisher-name>), <fpage>125</fpage>&#x2013;<lpage>129</lpage>.</citation>
</ref>
<ref id="ref7">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Bhar</surname> <given-names>A.</given-names></name> <name><surname>Sayadi</surname> <given-names>M.</given-names></name> <name><surname>Fnaiech</surname> <given-names>F.</given-names></name></person-group> (<year>2018</year>). &#x201C;<article-title>Modular navigation strategy for autonomous robot</article-title>&#x201D; in <source>In 2018 15th international multi-conference on systems, signals &#x0026; devices (SSD)</source> (<publisher-name>IEEE</publisher-name>), <fpage>396</fpage>&#x2013;<lpage>401</lpage>.</citation>
</ref>
<ref id="ref8">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Bouabdallah</surname> <given-names>S.</given-names></name> <name><surname>Noth</surname> <given-names>A.</given-names></name> <name><surname>Siegwart</surname> <given-names>R.</given-names></name></person-group> (<year>2004</year>). &#x201C;<article-title>PID vs LQ control techniques applied to an indoor micro quadrotor</article-title>&#x201D; in <source>2004 IEEE/RSJ international conference on intelligent robots and systems (IROS) (IEEE Cat. No. 04CH37566)</source>, vol. <volume>3</volume> (<publisher-name>IEEE</publisher-name>), <fpage>2451</fpage>&#x2013;<lpage>2456</lpage>.</citation>
</ref>
<ref id="ref9">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Bouabdallah</surname> <given-names>S.</given-names></name> <name><surname>Siegwart</surname> <given-names>R.</given-names></name></person-group> (<year>2005</year>). &#x201C;<article-title>Backstepping and sliding-mode techniques applied to an indoor micro quadrotor</article-title>&#x201D; in <source>Proceedings of the 2005 IEEE international conference on robotics and automation</source> (<publisher-name>IEEE</publisher-name>), <fpage>2247</fpage>&#x2013;<lpage>2252</lpage>.</citation>
</ref>
<ref id="ref10">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Burggr&#x00E4;f</surname> <given-names>P.</given-names></name> <name><surname>P&#x00E9;rez Mart&#x00ED;nez</surname> <given-names>A. R.</given-names></name> <name><surname>Roth</surname> <given-names>H.</given-names></name> <name><surname>Wagner</surname> <given-names>J.</given-names></name></person-group> (<year>2019</year>). <article-title>Quadrotors in factory applications: design and implementation of the quadrotor&#x2019;s P-PID cascade control system: modeling and implementation</article-title>. <source>SN Appl. Sci.</source> <volume>1</volume>:<fpage>722</fpage>. doi: <pub-id pub-id-type="doi">10.1007/s42452-019-0698-7</pub-id></citation>
</ref>
<ref id="ref12">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Doukhi</surname> <given-names>O.</given-names></name> <name><surname>Fayjie</surname> <given-names>A. R.</given-names></name> <name><surname>Lee</surname> <given-names>D. J.</given-names></name></person-group> (<year>2017</year>). <article-title>Intelligent controller design for quad-rotor stabilization in presence of parameter variations</article-title>. <source>J. Adv. Transp.</source> <volume>2017</volume>, <fpage>1</fpage>&#x2013;<lpage>10</lpage>. doi: <pub-id pub-id-type="doi">10.1155/2017/4683912</pub-id></citation>
</ref>
<ref id="ref13">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Ghamry</surname> <given-names>K. A.</given-names></name> <name><surname>Kamel</surname> <given-names>M. A.</given-names></name> <name><surname>Zhang</surname> <given-names>Y.</given-names></name></person-group> (<year>2016</year>). &#x201C;<article-title>Cooperative forest monitoring and fire detection using a team of UAVs-UGVs</article-title>&#x201D; in <source>In 2016 international conference on unmanned aircraft systems (ICUAS)</source> (<publisher-name>IEEE</publisher-name>), <fpage>1206</fpage>&#x2013;<lpage>1211</lpage>.</citation>
</ref>
<ref id="ref14">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Ghamry</surname> <given-names>K. A.</given-names></name> <name><surname>Zhang</surname> <given-names>Y.</given-names></name></person-group> (<year>2015</year>). &#x201C;<article-title>Formation control of multiple quadrotors based on leader-follower method</article-title>&#x201D; in <source>In 2015 international conference on unmanned aircraft systems (ICUAS)</source> (<publisher-name>IEEE</publisher-name>), <fpage>1037</fpage>&#x2013;<lpage>1042</lpage>.</citation>
</ref>
<ref id="ref15">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>He</surname> <given-names>Z.</given-names></name> <name><surname>Zhao</surname> <given-names>L.</given-names></name></person-group> (<year>2014</year>). <article-title>A simple attitude control of quadrotor helicopter based on Ziegler-Nichols rules for tuning PD parameters</article-title>. <source>Sci. World J.</source> <volume>2014</volume>, <fpage>1</fpage>&#x2013;<lpage>13</lpage>. doi: <pub-id pub-id-type="doi">10.1155/2014/280180</pub-id></citation>
</ref>
<ref id="ref16">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Khan</surname> <given-names>H. S.</given-names></name> <name><surname>Kadri</surname> <given-names>M. B.</given-names></name></person-group> (<year>2015</year>). &#x201C;<article-title>Attitude and altitude control of quadrotor by discrete PID control and non-linear model predictive control</article-title>&#x201D; in <source>In 2015 international conference on information and communication technologies (ICICT)</source> (<publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x2013;<lpage>11</lpage>.</citation>
</ref>
<ref id="ref17">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kotarski</surname> <given-names>D.</given-names></name> <name><surname>Beni&#x0107;</surname> <given-names>Z.</given-names></name> <name><surname>Krznar</surname> <given-names>M.</given-names></name></person-group> (<year>2016</year>). <article-title>Control design for unmanned aerial vehicles with four rotors</article-title>. <source>Interdiscip. Descrip. Complex Syst.</source> <volume>14</volume>, <fpage>236</fpage>&#x2013;<lpage>245</lpage>. doi: <pub-id pub-id-type="doi">10.7906/indecs.14.2.12</pub-id></citation>
</ref>
<ref id="ref18">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kuantama</surname> <given-names>E.</given-names></name> <name><surname>Vesselenyi</surname> <given-names>T.</given-names></name> <name><surname>Dzitac</surname> <given-names>S.</given-names></name> <name><surname>Tarca</surname> <given-names>R.</given-names></name></person-group> (<year>2017</year>). <article-title>PID and fuzzy-PID control model for quadcopter attitude with disturbance parameter</article-title>. <source>Int. J. Comput. Commun. Control</source> <volume>12</volume>, <fpage>519</fpage>&#x2013;<lpage>532</lpage>. doi: <pub-id pub-id-type="doi">10.15837/ijccc.2017.4.2962</pub-id></citation>
</ref>
<ref id="ref19">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Li</surname> <given-names>S.</given-names></name> <name><surname>Li</surname> <given-names>B.</given-names></name> <name><surname>Geng</surname> <given-names>Q.</given-names></name></person-group> (<year>2014</year>). &#x201C;<article-title>Adaptive sliding mode control for quadrotor helicopters</article-title>&#x201D; in <source>Proceedings of the 33rd Chinese control conference</source> (<publisher-name>IEEE</publisher-name>), <fpage>71</fpage>&#x2013;<lpage>76</lpage>.</citation>
</ref>
<ref id="ref20">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Manoj Kumar</surname> <given-names>M.</given-names></name> <name><surname>Arun Sankar</surname> <given-names>M.</given-names></name> <name><surname>Jeeva</surname> <given-names>M.</given-names></name> <name><surname>Sasi</surname> <given-names>G.</given-names></name></person-group> (<year>2021</year>). <article-title>Autonomous drone using Pixhawk flight controller with live stream and mask detection features</article-title>. <source>Int. J. Eng. Res. Technol.</source> <volume>10</volume>, <fpage>104</fpage>&#x2013;<lpage>107</lpage>.</citation>
</ref>
<ref id="ref21">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Moumgiakmas</surname> <given-names>S. S.</given-names></name> <name><surname>Samatas</surname> <given-names>G. G.</given-names></name> <name><surname>Papakostas</surname> <given-names>G. A.</given-names></name></person-group> (<year>2021</year>). <article-title>Computer vision for fire detection on UAVs&#x2014;from software to hardware</article-title>. <source>Future Internet</source> <volume>13</volume>, <fpage>1</fpage>&#x2013;<lpage>17</lpage>. doi: <pub-id pub-id-type="doi">10.3390/fi13080200</pub-id></citation>
</ref>
<ref id="ref22">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Nguyen</surname> <given-names>N. P.</given-names></name> <name><surname>Hong</surname> <given-names>S. K.</given-names></name></person-group> (<year>2018</year>). <article-title>Position control of a hummingbird quadcopter augmented by gain scheduling</article-title>. <source>Int. J. Eng. Res. Technol.</source> <volume>11</volume>, <fpage>1485</fpage>&#x2013;<lpage>1498</lpage>.</citation>
</ref>
<ref id="ref24">
<citation citation-type="book"><person-group person-group-type="author">
<name><surname>Quan</surname> <given-names>Q.</given-names></name>
</person-group> (<year>2017</year>). <source>Introduction to multicopter design and control</source> (pp. <fpage>150</fpage>&#x2013;<lpage>160</lpage>). <publisher-loc>Singapore</publisher-loc>: <publisher-name>Springer</publisher-name>.</citation>
</ref>
<ref id="ref26">
<citation citation-type="book"><person-group person-group-type="author">
<name><surname>Reizenstein</surname> <given-names>A.</given-names></name>
</person-group> (<year>2017</year>). <source>Position and trajectory control of a quadcopter using PID and LQ controllers</source>. <comment>Doctoral dissertation</comment>. <publisher-loc>Link&#x00F6;ping</publisher-loc>: <publisher-name>Link&#x00F6;ping University</publisher-name>).</citation>
</ref>
<ref id="ref27">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Rinaldi</surname> <given-names>M.</given-names></name> <name><surname>Primatesta</surname> <given-names>S.</given-names></name> <name><surname>Guglieri</surname> <given-names>G.</given-names></name></person-group> (<year>2023</year>). <article-title>A comparative study for control of quadrotor uavs</article-title>. <source>Appl. Sci.</source> <volume>13</volume>:<fpage>3464</fpage>. doi: <pub-id pub-id-type="doi">10.3390/app13063464</pub-id></citation>
</ref>
<ref id="ref28">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Sheta</surname> <given-names>A.</given-names></name> <name><surname>Braik</surname> <given-names>M.</given-names></name> <name><surname>Maddi</surname> <given-names>D. R.</given-names></name> <name><surname>Mahdy</surname> <given-names>A.</given-names></name> <name><surname>Aljahdali</surname> <given-names>S.</given-names></name> <name><surname>Turabieh</surname> <given-names>H.</given-names></name></person-group> (<year>2021</year>). <article-title>Optimization of pid controller to stabilize quadcopter movements using meta-heuristic search algorithms</article-title>. <source>Appl. Sci.</source> <volume>11</volume>:<fpage>6492</fpage>. doi: <pub-id pub-id-type="doi">10.3390/app11146492</pub-id></citation>
</ref>
<ref id="ref29">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Tahir</surname> <given-names>M. A.</given-names></name> <name><surname>Mir</surname> <given-names>I.</given-names></name> <name><surname>Islam</surname> <given-names>T. U.</given-names></name></person-group> (<year>2023</year>). <article-title>Control algorithms, Kalman estimation and near actual simulation for UAVs: state of art perspective</article-title>. <source>Drones</source> <volume>7</volume>:<fpage>339</fpage>. doi: <pub-id pub-id-type="doi">10.3390/drones7060339</pub-id></citation>
</ref>
<ref id="ref30">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wang</surname> <given-names>H.</given-names></name> <name><surname>Ye</surname> <given-names>X.</given-names></name> <name><surname>Tian</surname> <given-names>Y.</given-names></name> <name><surname>Zheng</surname> <given-names>G.</given-names></name> <name><surname>Christov</surname> <given-names>N.</given-names></name></person-group> (<year>2016</year>). <article-title>Model-free&#x2013;based terminal SMC of quadrotor attitude and position</article-title>. <source>IEEE Trans. Aerosp. Electron. Syst.</source> <volume>52</volume>, <fpage>2519</fpage>&#x2013;<lpage>2528</lpage>. doi: <pub-id pub-id-type="doi">10.1109/TAES.2016.150303</pub-id></citation>
</ref>
<ref id="ref31">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wei</surname> <given-names>X.</given-names></name> <name><surname>XianYu</surname> <given-names>W.</given-names></name> <name><surname>Jiazhen</surname> <given-names>L.</given-names></name> <name><surname>Yasheng</surname> <given-names>Y.</given-names></name></person-group> (<year>2023</year>). <article-title>Design of anti-load perturbation flight trajectory stability controller for agricultural UAV</article-title>. <source>Front. Plant Sci.</source> <volume>14</volume>:<fpage>1030203</fpage>. doi: <pub-id pub-id-type="doi">10.3389/fpls.2023.1030203</pub-id>, PMID: <pub-id pub-id-type="pmid">36818868</pub-id></citation>
</ref>
<ref id="ref33">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Zhang</surname> <given-names>X.</given-names></name> <name><surname>Li</surname> <given-names>X.</given-names></name> <name><surname>Wang</surname> <given-names>K.</given-names></name> <name><surname>Lu</surname> <given-names>Y.</given-names></name></person-group> (<year>2014</year>). &#x201C;<article-title>A survey of modelling and identification of quadrotor robot</article-title>&#x201D; in <source>Abstract and applied analysis</source>, vol. <volume>2014</volume> (<publisher-loc>Hindawi</publisher-loc>)</citation>
</ref>
</ref-list>
</back>
</article>