6.2.2. Selecting depth of the network – accuracy vs. agility

A two hidden layer network was selected due to its ability to model most non-linear practical systems [7]. Increasing depth increases complexity of the network, which increases number of parameters and reduces agility of the network.

The field of deep learning is dedicated to using neural networks with deeper architectures, which are very powerful as we saw in Section 5.4. However, in deeper networks some of the design principles change, for example, in Section 5.3 the possibility of attenuation of information was pointed out in sigmoid-based neural networks, therefore in deeper implementations the rectified linear unit (ReLU) activation function is preferred. Architectural changes are also prevalent in deep learning such as convolutional/recursive/recurrent neural networks. Refer to Ref. [8] for more detailed reading on deep learning.

#### 6.2.3. Selecting the width of the network

states of these 18 variables and the control signals. This playing-it-safe approach is costly as we

Figure 6. The double hidden layer plant emulator artificial neural network: First layer is the input, second and third layers are for computation, they comprise nodes with sigmoid activation applied and fourth layer is the output.

Firstly – what is the output required from our network? The plant emulator should accurately predict the next state of the control variables of the system. Therefore the output should be the

Secondly – what information would a human expert require to calculate the output? The previous states of z, f, θ and ψ, their derivatives and the control signals would be required. Note that we do not need to give system information like the mass/inertia as input. The neural network will deduce such information based on the data. Interestingly, these 12 inputs are insufficient, x\_ and y\_ are required to model the dynamic thrust and drag coefficients by the

If the initial choice of input/output variables is suboptimal leading to poor performance of the

place an undue burden on our algorithm.

model and therefore they must be given as inputs here.

four control variables - z, f, θ and ψ.

148 Adaptive Robust Control Systems

network, this step must be revisited.

Performance with rectangular configurations in neural networks has been found to be equal to or better than performance with pyramid or inverted pyramid configurations [7] and therefore we have same number of hidden units in both hidden layers of our network.

As part of pre-training, the neural network performance was mapped against number of hidden units as seen in Figure 7 and the elbow of the curve was found at 44 nodes (without

Figure 7. Costs on training and cross validation sets against hidden layer size.

the bias node) in each hidden layer. The elbow is the point beyond which the performance is unlikely to improve however the speed is sure to slow down with every node increased.

For this pre-training we stipulate to the cost function in Eq. (13) as we are training offline.

#### 6.2.4. Cost function for online learning

To allow for real valued outputs, the ANN output layer has linear activation (read: no activation) applied while the hidden layers have sigmoid activation applied. The squared error cost function was used with regularization as shown in Eq. (25)

$$J = \frac{\left(y\_{plant} - y\_{model}\right)^2}{2} + \frac{\lambda}{2} \cdot \sum\_{l=1}^{L-1} \sum\_{i=1}^{s\_l} \sum\_{j=1}^{s\_{l+1}} \left(\theta\_{ij}^{(l)}\right)^2 \tag{25}$$

Notice the difference with Eq. (13), there is no term in m as the learning happens with one data point at a time, i.e. online. The θð Þ<sup>l</sup> ij term, which is a subset of the set of weights, must not be confused with θ the pitch angle of the quadrotor.

#### 6.2.5. Backpropagation and learning

The backpropagation equations are as follows:

$$\text{error in final layer: } \delta^{(L)} = y\_{model} - y\_{plant} \tag{26}$$

$$\text{error in hidden layers: } \mathsf{\mathfrak{d}}^{(l)} = \left(\mathsf{\mathcal{O}}^{(l)}\right)^{\mathsf{T}} \mathsf{\mathfrak{d}}^{(l+1)} \circ \mathsf{a}^{(l)} \circ \left(1 - \mathsf{a}^{(l)}\right), l \neq L \tag{27}$$

$$\text{derivative:} \frac{\delta l}{\delta \theta^{(l)}} = \delta^{(l+1)} \left( \mathbf{a}^{(l)} \right)^{T} + \lambda \cdot \theta^{(l)} \tag{28}$$

Figure 8. Segmented controller ANN with no hidden layers and constant multiplied constant offset sigmoid activation on

Model Reference Adaptive Control of Quadrotor UAVs: A Neural Network Perspective

http://dx.doi.org/10.5772/intechopen.71487

151

output layer.

where ⋄ signifies element-wise multiplication. Notice the derivative term is Eq. (19) with m ¼ 1. This distinction differentiates stochastic gradient descent from batch gradient descent (when we have all our data beforehand.) The parameter update equation is the same as Eq. (14).

The weights learned in offline pre-training were used to initialize the weights when actual testing was done. While the error was large to start with, the weights were biased in the correct direction. This is essential as the plant emulator ANN is the conduit for backpropagation to generate the error in the control signals and random corrections to the control signal based on a purely untrained plant emulator ANN right after take-off will destabilize and ground the craft before it has a chance to complete learning.

#### 6.3. Designing the controller block

Figure 8 depicts the controller ANN. This segmented neural network does not resemble standard MLP networks as it is highly modified. This section will be structured differently from the previous one as it deals mainly with practical aspects and online learning.

We have a much broader understanding of a subject than we may be able to comfortably express in math. The easy approach to ML is to expect the neural network to learn Model Reference Adaptive Control of Quadrotor UAVs: A Neural Network Perspective http://dx.doi.org/10.5772/intechopen.71487 151

the bias node) in each hidden layer. The elbow is the point beyond which the performance is unlikely to improve however the speed is sure to slow down with every node increased. For this pre-training we stipulate to the cost function in Eq. (13) as we are training offline.

To allow for real valued outputs, the ANN output layer has linear activation (read: no activation) applied while the hidden layers have sigmoid activation applied. The squared error cost

> X<sup>L</sup>�<sup>1</sup> l¼1

Notice the difference with Eq. (13), there is no term in m as the learning happens with one data

δθð Þ<sup>l</sup> <sup>¼</sup> <sup>δ</sup>ð Þ <sup>l</sup>þ<sup>1</sup> <sup>a</sup>ð Þ<sup>l</sup> � �<sup>T</sup>

where ⋄ signifies element-wise multiplication. Notice the derivative term is Eq. (19) with m ¼ 1. This distinction differentiates stochastic gradient descent from batch gradient descent (when we

The weights learned in offline pre-training were used to initialize the weights when actual testing was done. While the error was large to start with, the weights were biased in the correct direction. This is essential as the plant emulator ANN is the conduit for backpropagation to generate the error in the control signals and random corrections to the control signal based on a purely untrained plant emulator ANN right after take-off will destabilize and ground the

Figure 8 depicts the controller ANN. This segmented neural network does not resemble standard MLP networks as it is highly modified. This section will be structured differently

We have a much broader understanding of a subject than we may be able to comfortably express in math. The easy approach to ML is to expect the neural network to learn

from the previous one as it deals mainly with practical aspects and online learning.

have all our data beforehand.) The parameter update equation is the same as Eq. (14).

Xsl i¼1 Xslþ<sup>1</sup> <sup>j</sup>¼<sup>1</sup> <sup>θ</sup>ð Þ<sup>l</sup> ij � �<sup>2</sup>

ij term, which is a subset of the set of weights, must not be

error in final layer: <sup>δ</sup>ð Þ <sup>L</sup> <sup>¼</sup> <sup>y</sup>model � <sup>y</sup>plant (26)

<sup>δ</sup>ð Þ <sup>l</sup>þ<sup>1</sup> <sup>⋄</sup> <sup>a</sup>ð Þ<sup>l</sup> <sup>⋄</sup> <sup>1</sup> � <sup>a</sup>ð Þ<sup>l</sup> � �

(25)

, l 6¼ L (27)

<sup>þ</sup> <sup>λ</sup> � <sup>θ</sup>ð Þ<sup>l</sup> (28)

2

λ 2 :

2 þ

6.2.4. Cost function for online learning

150 Adaptive Robust Control Systems

point at a time, i.e. online. The θð Þ<sup>l</sup>

6.2.5. Backpropagation and learning

confused with θ the pitch angle of the quadrotor.

The backpropagation equations are as follows:

craft before it has a chance to complete learning.

6.3. Designing the controller block

function was used with regularization as shown in Eq. (25)

<sup>J</sup> <sup>¼</sup> <sup>ð</sup>yplant � ymodel<sup>Þ</sup>

error in hidden layers: <sup>δ</sup>ð Þ<sup>l</sup> <sup>¼</sup> <sup>θ</sup>ð Þ<sup>l</sup> � �<sup>T</sup>

derivative: <sup>δ</sup><sup>J</sup>

Figure 8. Segmented controller ANN with no hidden layers and constant multiplied constant offset sigmoid activation on output layer.

everything and we only provide the framework. However, this approach is unlikely to get the best results. For example, we know that a change in the z set point should not cause a change in the roll control signal, we can either make a fully connected neural network with hidden layers and expect the neural network to learn this by reducing the cross weights to zero or we can simply eliminate those connections ourselves. Taking the former approach revealed the learning was too slow and the quadrotor would take-off, somersault and crash as the changing z set point would cause the roll and pitch control signals to change too.

yn <sup>¼</sup> <sup>A</sup>: <sup>1</sup>

6.3.2. Cost function and backpropagation

yreference � yplant � �<sup>2</sup> 2:σ<sup>r</sup>

<sup>2</sup> þ

J ¼

<sup>1</sup> <sup>þ</sup> <sup>e</sup>�ð Þ <sup>θ</sup><sup>n</sup> TXn

into the z controller. Its output is the z control signal. A ¼ 8, B ¼ 4.

of roll and pitch. Its output is the roll control signal. A ¼ 0:01, B ¼ �0:005.

where A and B are real constants and n E f g 1; 2; 3; 4 signifies each de-centralized controller. 1. Z Controller: This has a bias unit and four inputs - reference error in z, derivative of reference error in z, roll and pitch. Roll and pitch changes during a stable hover cause the quadrotor to deviate, to avoid this the absolute value of the corresponding angles are fed

2. Roll Controller: This has three inputs - reference error in roll, derivative of reference error in roll and derivative of pitch. The derivative of the pitch is to counter the coupling effect

3. Pitch Controller: This has three inputs - reference error in pitch, derivative of reference error in pitch and derivative of roll. The derivative of the roll is to counter the coupling

effect of roll and pitch. Its output is the pitch control signal. A ¼ 0:01, B ¼ �0:005. 4. Yaw Controller: This has two inputs - reference error in yaw and derivative of reference error in yaw. Yaw variation due to roll and pitch changes are minute enough to be compensated for by the controller. Its output is the yaw control signal. A ¼ 0:6, B ¼ �0:3.

> <sup>y</sup> \_ reference � <sup>y</sup> \_ plant � �<sup>2</sup> 2:σ<sup>d</sup>

them. This modification proved to be a difference-maker in achieving online stability.

error in final layer: <sup>δ</sup>ð Þ <sup>L</sup> <sup>¼</sup> <sup>y</sup>plant � <sup>y</sup>ref

error in hidden layers: <sup>δ</sup>ð Þ<sup>l</sup> <sup>¼</sup> <sup>θ</sup>ð Þ<sup>l</sup> � �<sup>T</sup>

derivative: <sup>δ</sup><sup>J</sup>

error in control signals: <sup>δ</sup>ð Þ<sup>c</sup> <sup>¼</sup> <sup>A</sup><sup>∙</sup> <sup>θ</sup>ð Þ<sup>c</sup> � �<sup>T</sup>

δθð Þ<sup>c</sup> <sup>¼</sup> <sup>δ</sup>ð Þ<sup>c</sup> <sup>X</sup>ð Þ<sup>c</sup> � �<sup>T</sup>

λ is optional depending on the λ value used for the plant emulator ANN, i.e. if λplant is high (0.1) then λcontroller can be set to zero as early stopping (the network stops learning as gradient becomes negligible) occurs within 6000 iterations. Of the 14 inputs to the plant emulator ANN,

<sup>2</sup> þ

σr <sup>2</sup> þ

σ<sup>x</sup> denotes the standard deviation of the respective component and should not be confused with the sigmoid activation function. With this cost function, the rules have been bent. The derivative terms are not outputs of the neural network, yet we are attempting to minimize

λ 2 :

X<sup>w</sup>θψ<sup>z</sup> c

Xsl i¼1

y\_ plant � y\_ref σd

Xslþ<sup>1</sup> <sup>j</sup>¼<sup>1</sup> <sup>θ</sup>ð Þ<sup>c</sup> ij � �<sup>2</sup>

<sup>δ</sup>ð Þ <sup>l</sup>þ<sup>1</sup> <sup>⋄</sup>að Þ<sup>l</sup> <sup>⋄</sup> <sup>1</sup> � <sup>a</sup>ð Þ<sup>l</sup> � �, l 6¼ <sup>L</sup> (32)

<sup>þ</sup> <sup>λ</sup>∙θð Þ<sup>c</sup> , c∈f g <sup>w</sup>; <sup>θ</sup>;ψ; <sup>z</sup> (34)

<sup>δ</sup>ð Þ<sup>1</sup> <sup>⋄</sup>að Þ<sup>c</sup> <sup>⋄</sup> <sup>1</sup> � <sup>a</sup>ð Þ<sup>c</sup> � � (33)

<sup>2</sup> (31)

(30)

153

<sup>þ</sup> <sup>B</sup> <sup>¼</sup> <sup>A</sup>:σ θð Þ<sup>n</sup> TXn

Model Reference Adaptive Control of Quadrotor UAVs: A Neural Network Perspective

� � <sup>þ</sup> <sup>B</sup> (29)

http://dx.doi.org/10.5772/intechopen.71487

Such intuitions are application specific. It would greatly benefit the algorithm by reconciling our human understanding with the control system being designed.

The initial design of the controller ANN was very similar to the plant emulator ANN, it had two hidden layers, the inputs were the state of the plant and the state of the reference model, the outputs were the control signals which were unbounded and real valued. To summarize: 8 inputs, 4 outputs and 2 hidden layers.

At the very outset, it is clear that we should input the reference error directly rather than expecting the ANN to waste precious time learning that it has to minimize the difference between the state of the plant and the state of the reference model. Additionally an optimal number of nodes in the hidden layers cannot be experimented with as the testing is directly on the system (read: simulation) and the quadrotor would crash almost immediately after takeoff. The adaptability of the controller is insufficient to keep up with the dynamically unstable nature of the quadrotor and the unbounded control signal gives noisy and, often, spurious commands to the motors thereby destabilizing the system.

A systematic approach was used to solve all the above issues:


#### 6.3.1. Controller summary

The controller ANN comprises four segments. The output node activations are:

Model Reference Adaptive Control of Quadrotor UAVs: A Neural Network Perspective http://dx.doi.org/10.5772/intechopen.71487 153

$$\mathcal{Y}\_n = A. \frac{1}{1 + e^{-\left(\theta\_n\right)^T X\_n}} + B = A. \sigma\left(\left(\Theta\_n\right)^T X\_n\right) + B \tag{29}$$

where A and B are real constants and n E f g 1; 2; 3; 4 signifies each de-centralized controller.


#### 6.3.2. Cost function and backpropagation

everything and we only provide the framework. However, this approach is unlikely to get the best results. For example, we know that a change in the z set point should not cause a change in the roll control signal, we can either make a fully connected neural network with hidden layers and expect the neural network to learn this by reducing the cross weights to zero or we can simply eliminate those connections ourselves. Taking the former approach revealed the learning was too slow and the quadrotor would take-off, somersault and crash as the changing z set point would cause the roll and pitch control signals to

Such intuitions are application specific. It would greatly benefit the algorithm by reconciling

The initial design of the controller ANN was very similar to the plant emulator ANN, it had two hidden layers, the inputs were the state of the plant and the state of the reference model, the outputs were the control signals which were unbounded and real valued. To summarize: 8

At the very outset, it is clear that we should input the reference error directly rather than expecting the ANN to waste precious time learning that it has to minimize the difference between the state of the plant and the state of the reference model. Additionally an optimal number of nodes in the hidden layers cannot be experimented with as the testing is directly on the system (read: simulation) and the quadrotor would crash almost immediately after takeoff. The adaptability of the controller is insufficient to keep up with the dynamically unstable nature of the quadrotor and the unbounded control signal gives noisy and, often, spurious

1. The errors in the control variables were directly fed to the ANN, the second order effects

3. The output nodes were fed only those inputs that affected the state variable they con-

4. To make the control signal bounded, a constant-multiplied, constant-offset sigmoid func-

5. A training regime was formulated so that each segment of the controller learned sequen-

6. Feature scaling, gradient scaling and directed initialization were implemented specifically

tially instead of simultaneously allowing for stability during online learning.

7. The derivative term of the reference error was added to the cost function.

The controller ANN comprises four segments. The output node activations are:

our human understanding with the control system being designed.

commands to the motors thereby destabilizing the system.

trolled. Thus independence was achieved.

tion was used in the output layer.

to aid in learning in the online setting.

6.3.1. Controller summary

A systematic approach was used to solve all the above issues:

were represented by appropriately adding inputs as per Eqs. (1–6).

2. The hidden layers were removed to make the ANN responsive and learn fast.

inputs, 4 outputs and 2 hidden layers.

change too.

152 Adaptive Robust Control Systems

$$J = \frac{\left(y\_{\text{reference}} - y\_{\text{plant}}\right)^2}{2.\sigma\_r^2} + \frac{\left(y\_{\text{reference}} - y\_{\text{plant}}\right)^2}{2.\sigma\_d^2} + \frac{\lambda}{2} \cdot \sum\_{c}^{\varphi \oplus \psi z} \sum\_{i=1}^{s\_l} \sum\_{j=1}^{s\_{l+1}} \left(\theta\_{ij}^{(c)}\right)^2 \tag{30}$$

σ<sup>x</sup> denotes the standard deviation of the respective component and should not be confused with the sigmoid activation function. With this cost function, the rules have been bent. The derivative terms are not outputs of the neural network, yet we are attempting to minimize them. This modification proved to be a difference-maker in achieving online stability.

$$\text{error in final layer: } \boldsymbol{\delta}^{(L)} = \frac{\boldsymbol{y}\_{\text{plant}} - \boldsymbol{y}\_{\text{ref}}}{\sigma\_r^2} + \frac{\dot{\boldsymbol{y}}\_{\text{plant}} - \dot{\boldsymbol{y}}\_{\text{ref}}}{\sigma\_d^2} \tag{31}$$

$$\text{error in hidden layers: } \boldsymbol{\delta}^{(l)} = \left(\boldsymbol{\theta}^{(l)}\right)^{\mathrm{T}} \boldsymbol{\delta}^{(l+1)} \circ \boldsymbol{a}^{(l)} \circ \left(\mathbf{1} - \boldsymbol{a}^{(l)}\right), l \neq L \tag{32}$$

$$\text{error in control signals: } \boldsymbol{\theta}^{(c)} = A \cdot \left(\boldsymbol{\theta}^{(c)}\right)^{T} \boldsymbol{\theta}^{(1)} \circ \boldsymbol{a}^{(c)} \circ \left(\mathbf{1} - \boldsymbol{a}^{(c)}\right) \tag{33}$$

$$\text{derivative:} \frac{\delta \mathbf{J}}{\delta \theta^{(\circ)}} = \boldsymbol{\mathfrak{G}}^{(\circ)} \left( \mathbf{X}^{(\circ)} \right)^{T} + \lambda \cdot \boldsymbol{\theta}^{(\circ)}, \; \mathbf{c} \in \{ \boldsymbol{\varphi}, \boldsymbol{\theta}, \boldsymbol{\psi}, \mathbf{z} \} \tag{34}$$

λ is optional depending on the λ value used for the plant emulator ANN, i.e. if λplant is high (0.1) then λcontroller can be set to zero as early stopping (the network stops learning as gradient becomes negligible) occurs within 6000 iterations. Of the 14 inputs to the plant emulator ANN, only error in control signals are calculated. Here we see that the backpropagation calculation remains the same with two approximations:

zero does not affect speed of convergence in comparison to random initialization in case of z and yaw. Therefore either can be used. For roll and pitch, learning is prone to instability and therefore we set the initial values of the weights to 1 or �1 depending on the sign of the weight required for stability. We have termed this directed initialization. This simplification of

Model Reference Adaptive Control of Quadrotor UAVs: A Neural Network Perspective

http://dx.doi.org/10.5772/intechopen.71487

155

3. Gradient Scaling: With the above two modifications, chances that the nodes, post sigmoid activation, will be saturated are high. Therefore, the gradient is divided by its σ (standard deviation) (calculated as shown in Point 1.) Gradient scaling is not compulsory

4. Sequence of Training: The z and yaw controller weights are zero or random initialized. The pitch controller weights are directed initialized. The controllers are then trained

> <sup>3</sup> to <sup>π</sup> 3.

The testing was carried out as outlined above and the results were plotted. Figure 9 depicts the first episode of training of the z controller, which converges within 10 seconds (at 100 Hz) and

Figure 10 depicts the first episode of training of the pitch controller. Deviation from the reference is only due to the limitation on the maximum thrust the controller can demand (5

Figure 11 depicts the first episode of training of the yaw controller. Oscillations steadily

Figure 12 depicts simultaneous control of all four states, with controller weights continued forward from the first episode of training and plant ANN weights reset to initial estimate derived from offline training (accounting for the initial overshoot in z.) This result shows that

Figure 13 demonstrates the controller's robustness to mass and moment of inertia variations. At t ¼ 25 sec the mass of all four motors are increased by 50 g leading to a 40% increase in total mass. The plant emulator learns these changes mid-flight enabling the controller to maintain tracking. The deviations in yaw are due to the inability of motors to meet increased thrust demands with increased moment of inertia. At t ¼ 75 sec the mass and moments of

decrease as training proceeds and the entire range of �π to π is covered. α ¼ 3.

the controller tracks well under simultaneous control signals from all four channels.

c. The roll controller weights are set to the same values as the pitch controller.

establishing parity in weights is effective as the inputs have been scaled.

a. The z set point is varied from zero to a non-zero hover value.

for z.

sequentially. The order followed is:

7. Performance evaluation

inertia are reset to original values.

b. The pitch set point is varied from � <sup>π</sup>

d. The yaw set point is varied from �π to π.

accurately follows the reference thereafter. α ¼ 0:01.

mN) due to bounding sigmoid function on control signal. α ¼ 10.


The reasons for the first approximation are twofold: firstly, we want the controller ANN to learn as if the plant emulator ANN got its prediction correct for better learning, and secondly, as the system converges ymodel will very nearly equal yplant making the approximation asymptotically accurate.

The reason for the second approximation is that it was experimentally found that without information of velocities the controller was not able to distinguish whether the plant was converging to or diverging from the reference when error was the same. This information was encoded into the controller by this modification and supplying the derivative of the reference error to each controller segment. Overhauling the network to incorporate the derivative terms as part of the output of the plant emulator ANN would make the system slower due to the increased complexity as it would have to learn the relation between a state and its derivative. This way the two error terms are additive and embody our intuition well - let us assume the error in z is moderate but the error in velocity of z is large, a larger correction would be effected in that iteration of learning, speeding it along. Conversely, if the reference error is large and the craft is approaching the reference too fast, the additive nature of the derivative term would negate any further positive adjustment due to the error in z thereby covering up the gap in intelligence.

#### 6.4. Speed-ups for online learning

1. Feature Scaling: The inputs to the controller are divided by their respective standard deviations, since the values expected vary in magnitude and the weights of the network are regularized regardless of magnitude of input. In order to calculate the standard deviation in an online setting without losing significant information to truncation in data storage the following equations are used (as presented in Ref. [9]):

$$\text{Initialize } M\_1 = \mathbf{x}\_1 \text{ and } \mathbf{S}\_1 = \mathbf{0} \tag{35}$$

$$\text{Compute } M\_k = M\_{k-1} + \frac{(\mathbf{x}\_k - M\_{k-1})}{k}, \quad \mathbf{S}\_k = \mathbf{S}\_{k-1} + (\mathbf{x}\_k - M\_{k-1}) \cdot (\mathbf{x}\_k - M\_k) \tag{36}$$

$$\text{Current value } \sigma = \frac{S\_k}{k - 1}, k \,\epsilon \,\, [2, n] \tag{37}$$

The scaling is done selectively on the reference error and derivative of the reference error in each controller segment. This is done to scale up and give equal weight to the two errors while not magnifying higher order effects in the control signal.

2. Directed Initialization: Since there are no hidden layers and a single output for each segment there is no risk of redundancy in uniform initialization. Initializing all weights to zero does not affect speed of convergence in comparison to random initialization in case of z and yaw. Therefore either can be used. For roll and pitch, learning is prone to instability and therefore we set the initial values of the weights to 1 or �1 depending on the sign of the weight required for stability. We have termed this directed initialization. This simplification of establishing parity in weights is effective as the inputs have been scaled.

	- a. The z set point is varied from zero to a non-zero hover value.
	- b. The pitch set point is varied from � <sup>π</sup> <sup>3</sup> to <sup>π</sup> 3.
	- c. The roll controller weights are set to the same values as the pitch controller.
	- d. The yaw set point is varied from �π to π.
