Difference between revisions of "RotorcraftMixing"

From PaparazziUAV
Jump to: navigation, search
Line 1: Line 1:
[[Image:hexa_3D.png|1024px]]
+
[[Image:hexa_3D.png|800px]]
  
This page describe how to compute "mixing" for an arbitrary multirotors configuration.
+
This page describe how to compute "mixing" for an arbitrary multirotors configuration. "Mixing" consist in converting rotational accelerations commands computed by the autopilot into throttle commands for each of the motor controllers. 
  
Let us consider a vehicle comprising a set of <math>N</math> identical power trains <math>R_i, i \in[1:N]</math> located at coordinates <math>(X_i,Y_i), i\in[1:N]</math> and spinning in the same plane in the direction <math>D_i, i\in[1:N], D_i\in[-1;1]</math> at a rotational speed <math>\omega_i, i\in[1:N]</math>.  
+
Let us consider a vehicle comprising a set of <math>N</math> identical fixed pitch rotors <math>R_i, i \in[1:N]</math> located at coordinates <math>(X_i,Y_i, 0), i\in[1:N]</math> and spinning in the same plane in the direction <math>D_i, i\in[1:N], D_i\in[-1;1]</math> at a rotational speed <math>\omega_i, i\in[1:N]</math>.  
  
Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.
+
Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Expressed in body frame ( front, right, down ), this leads to
 +
<math>
 +
\overrightarrow{F}_{i}^{B} = \begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix}
 +
</math>
 +
 
 +
Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.
 +
 
 +
The moment produced by each rotor around the CG, expressed in body frame can then be writen
 +
 
 +
<math>
 +
\overrightarrow{M}_{i}^{B} = \begin{pmatrix}X_i C_t \omega_i^2\\Y_i C_t \omega_i^2\\D_i C_m \omega_i^2\end{pmatrix}
 +
</math>
 +
Where <math>C_t</math> is a "thrust" coefficient and <math>Cd</math> is a "torque" coefficient. It has been measured experimentally that <math>\frac{Ct}{Cm} \approx 10</math> on a mikrokopter.
 +
 
 +
As a first approximation we can consider that the rotational speed of the propeller is proportional to the square root of the applied command <math>u_i</math>
 +
 
 +
<math>
 +
\omega_i^2 = K u_i
 +
</math>
 +
 
 +
 
 +
This allows us to express the momentum produced by the set of rotors as
 +
 
 +
<math>
 +
\overrightarrow{M}^{B} = \sum_{i} \overrightarrow{M}_{i}^{B} = 
 +
  \begin{pmatrix}
 +
    K C_t \sum_{i} X_i u_i\\
 +
    K C_t \sum_{i} Y_i u_i\\
 +
    K C_m \sum_{i} D_i u_i
 +
  \end{pmatrix}
 +
</math>
 +
 
 +
which can be rewriten as a matrix vector product
 +
 
 +
<math>
 +
\overrightarrow{M}^{B}  =
 +
  K C_t
 +
  \begin{pmatrix}
 +
    X_1&X_2&\ldots&X_n\\
 +
    Y_1&Y_2&\ldots&Y_n\\
 +
    \frac{C_m}{Ct}D_1&\frac{C_m}{Ct}D_2&\ldots&\frac{C_m}{Ct}D_n
 +
  \end{pmatrix}
 +
\begin{pmatrix}
 +
    u_1\\
 +
    u_2\\
 +
    \vdots\\
 +
    u_n
 +
  \end{pmatrix}
 +
</math>
 +
 
 +
<math>A</math> is a <math>3*N</math> matrix describing the geometric positions of our rotors.
 +
 
 +
In order to express the command applied to each power train as a function of the momentum we want to apply to our vehicle, we need to find <math>B</math>, a <math>N*3</math> matrix such as
 +
 
 +
<math>
 +
  \overrightarrow{U} = B \overrightarrow{M}^B
 +
</math>
 +
 
 +
If <math>A</math> has rank 3, we know that such a matrix exists (yeah, we can't do 2 rotors or have all rotors aligned), and in this case, we have the relationship
 +
 
 +
<math>
 +
  AB = \mathcal{I}_3
 +
</math>
 +
 
 +
We know that one solution of this equation is the Moore-Penrose pseudoinverse of <math>A</math>.
 +
Furthermore, this solution is the one leading to the power train command vector having the smallest euclidian norm, which is interesting as it optimizes the repartion of our control effort across our power trains.

Revision as of 19:08, 27 January 2011

Hexa 3D.png

This page describe how to compute "mixing" for an arbitrary multirotors configuration. "Mixing" consist in converting rotational accelerations commands computed by the autopilot into throttle commands for each of the motor controllers.

Let us consider a vehicle comprising a set of N identical fixed pitch rotors R_i, i \in[1:N] located at coordinates (X_i,Y_i, 0), i\in[1:N] and spinning in the same plane in the direction D_i, i\in[1:N], D_i\in[-1;1] at a rotational speed \omega_i, i\in[1:N].

Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Expressed in body frame ( front, right, down ), this leads to 
\overrightarrow{F}_{i}^{B} = \begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix}

Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.

The moment produced by each rotor around the CG, expressed in body frame can then be writen


\overrightarrow{M}_{i}^{B} = \begin{pmatrix}X_i C_t \omega_i^2\\Y_i C_t \omega_i^2\\D_i C_m \omega_i^2\end{pmatrix}
Where C_t is a "thrust" coefficient and Cd is a "torque" coefficient. It has been measured experimentally that \frac{Ct}{Cm} \approx 10 on a mikrokopter.

As a first approximation we can consider that the rotational speed of the propeller is proportional to the square root of the applied command u_i


\omega_i^2 = K u_i


This allows us to express the momentum produced by the set of rotors as


\overrightarrow{M}^{B} = \sum_{i} \overrightarrow{M}_{i}^{B} =  
  \begin{pmatrix}
    K C_t \sum_{i} X_i u_i\\
    K C_t \sum_{i} Y_i u_i\\
    K C_m \sum_{i} D_i u_i
  \end{pmatrix}

which can be rewriten as a matrix vector product


\overrightarrow{M}^{B}  = 
  K C_t
  \begin{pmatrix}
    X_1&X_2&\ldots&X_n\\
    Y_1&Y_2&\ldots&Y_n\\
    \frac{C_m}{Ct}D_1&\frac{C_m}{Ct}D_2&\ldots&\frac{C_m}{Ct}D_n
  \end{pmatrix}
 \begin{pmatrix}
    u_1\\
    u_2\\
    \vdots\\
    u_n
  \end{pmatrix}

A is a 3*N matrix describing the geometric positions of our rotors.

In order to express the command applied to each power train as a function of the momentum we want to apply to our vehicle, we need to find B, a N*3 matrix such as


  \overrightarrow{U} = B \overrightarrow{M}^B

If A has rank 3, we know that such a matrix exists (yeah, we can't do 2 rotors or have all rotors aligned), and in this case, we have the relationship


  AB = \mathcal{I}_3

We know that one solution of this equation is the Moore-Penrose pseudoinverse of A. Furthermore, this solution is the one leading to the power train command vector having the smallest euclidian norm, which is interesting as it optimizes the repartion of our control effort across our power trains.