# Multirotor

**Libraries:**

Aerospace Blockset /
Propulsion

## Description

The Multirotor block computes the aerodynamic forces and moments generated by multiple rotating propellers or rotors, such as quadcopters, in all three dimensions. You can also include simplified flap, or steady state, aerodynamics.

## Limitations

The block follows a simplified approach with the option to include steady state flap effects. It does not model dynamic flap, lag, or feathering motion of blade.

The block outputs have been verified against the algorithms used, for input and parameter values within reasonable limits (as observed from literature).

The block uses

**Twist distribution**to model only linear or ideal twist distributions. The block assumes that the blade chord and lift curve slope are constant.The block does not include interference effects (between rotors) in the model.

The effect of collective pitch input and drag coefficient is incorporated in the block through the thrust and torque coefficients alone. Hence, the collective input port and the drag coefficient is active only when

**CT and CQ Source**dropdown is set to`Compute using BEMT`

.

## Ports

### Input

**Ω (rad/sec)** — Rotor speed

*N*-element vector

Rotor speed, specified as an *N*-element vector in rad/sec in
body frame. The ordering of the rotors for the two quadcopter configurations
(*N* = 4) considered in the block are as shown in Arm Computations.

**Data Types: **`double`

**ρ** — Air density

positive scalar

Air density, specified as a positive scalar in specified units.

**Data Types: **`double`

**V**_{b} — Body velocity of rotor

3-by-1 vector | 1-by-3 vector

_{b}

Velocity of rotor, specified as a 3-by-1 or 1-by-3 vector in body frame. To perform a multisystem analysis, consider connecting output from a State-Space or Integrator block to this port.

#### Dependencies

This enable this input, set `Modeling`

to ```
With
flap effects
```

.

The unit of velocity depends on the value of the `Units`

parameter.

**Data Types: **`double`

**ω**_{b} — Angular velocity

3-by-1 vector | 1-by-3 vector

_{b}

Angular velocity of entire vehicle, specified as a 3-by-1 or 1-by-3 vector in rad/s in body frame.

#### Dependencies

This enable this input, set `Modeling`

to ```
With
flap effects
```

.

**Data Types: **`double`

**θ**_{0} — Collective blade pitch angle

N-by-1 vector | 1-by-N vector

_{0}

Collective blade pitch angle, specified as an *N*-element vector.

#### Dependencies

To enable this input port, select the **Include pitch angle
inputs** check box and set the **CT and CQ Source**
dropdown to `Compute using BEMT`

.

**Data Types: **`double`

**θ**_{c} — Lateral cyclic pitch angle

N-by-1 vector | 1-by-N vector

_{c}

Lateral cyclic pitch angle, specified as an *N*-element vector.

#### Dependencies

To enable this input port,

Select the

**Include pitch angle inputs**check box.Set

**Modeling**to`With flap effects`

.

**Data Types: **`double`

**θ**_{s} — Longitudinal cyclic pitch angle

N-by-1 vector | 1-by-N vector

_{s}

Longitudinal cyclic pitch angle, specified as an *N*-element vector.

#### Dependencies

To enable this input port,

Select the

**Include pitch angle inputs**check box.Set

**Modeling**to`With flap effects`

.

**Data Types: **`double`

### Output

**F**_{xyz}(N) — Total force

three-element vector

_{xyz}(N)

Total force, returned as a three-element vector in body frame. Units depend on the
**Units** parameter.

**Data Types: **`double`

**M**_{xyz}(Nm) — Net moment

three-element vector

_{xyz}(Nm)

Net moment in the *x*-*y*-*z*
direction, returned as a three-element vector in body frame. Units depend on the
**Units** parameter.

**Data Types: **`double`

**C**_{T} — Computed thrust coefficient

positive vector

_{T}

Computed thrust coefficient, returned as a positive vector of *N* elements.

#### Dependencies

To enable this output port, select the **Output computed CT and
CQ** check box and set the **CT and CQ Source**
dropdown to `Compute using BEMT`

.

**C**_{Q} — Computed torque coefficient

positive vector

_{Q}

Computed torque coefficient, returned as a positive vector of *N* elements.

#### Dependencies

To enable this output port, select the **Output computed CT and
CQ** check box and set the **CT and CQ Source**
dropdown to `Compute using BEMT`

.

## Parameters

### Main

**Units** — Input and output units

`Metric (MKS)`

(default) | `English (Velocity in ft/s)`

| `English (Velocity in kts)`

Units | Density | Force | Moment | Velocity | Radius | Chord | Hinge offset |
---|---|---|---|---|---|---|---|

`Metric (MKS)` | kg/m^{3} | Newtons | Newton-meter | Meters per second | Meters | Meters | Meters |

`English (Velocity in ft/s)` | slug/ft^{3} | Pound force | Pound force-feet | Feet per second | Feet | Feet | Feet |

`English (Velocity in kts)` | slug/ft^{3} | Pound force | Pound force-feet | Knots | Feet | Feet | Feet |

#### Programmatic Use

Block Parameter: `units` |

Type: character vector |

Values: `'Metric (MKS)'` | `'English (Velocity in ft/s)'` | `'English (Velocity in kts)'` |

Default: `'Metric (MKS)'` |

**Modeling** — Rotor thrust calculation method

`Without flap effects`

(default) | `With flap effects`

Rotor thrust calculation method, specified as:

`Without flap effects`

— Model rotor thrust using force and moment calculations. For more information, see Force and Moment.`With flap effects`

— Effect of tilt in rotor disc due to flap motion, while in forward flight, is included. The steady state lateral and longitudinal flap angles are calculated using the equations from [1] and used in the computation of forces and moments [2]. For more information, see Force and Moment.

#### Programmatic Use

Block Parameter:
`modelMode` |

Type: character vector |

Values: ```
'Without flap
effects'
``` | `'With flap effects'` |

Default: ```
'Without flap
effects'
``` |

**Include pitch angle inputs** — Enable pitch angle inputs

`off`

(default) | `on`

Select this check box to enable the pitch angle (swash plate) input ports.

#### Dependencies

To enable this checkbox

Set the

**CT and CQ Source**dropdown to`Compute using BEMT`

and/or

Set

**Modeling**to`'With flap effects'`

#### Programmatic Use

Block Parameter:
`controlInput` |

Type: character vector |

Values: `'on'` |
`'off'` |

Default: `'off'` |

### Vehicle

**Configuration** — Vehicle configuration

`Quadcopter X`

(default) | `Quadcopter +`

Quadcopter configuration, specified as:

`Quadcopter X`

— Propellers configured as an`X`

shape, considered as more stable than the`Quadcopter +`

configuration.`Quadcopter +`

— Propellers configured as a`+`

shape.

For more information, see Arm Computations.

#### Programmatic Use

Block Parameter:
`config` |

Type: character vector |

Values: `'Quadcopter X'` |
`'Quadcopter +'` |

Default: ```
'Quadcopter
X'
``` |

**Arm length (m)** — Vehicle arm length

`0.0624`

(default) | nonzero positive scalar

Vehicle arm length, specified as a nonzero positive scalar. This length is the rotor displacement from the center of mass of the vehicle. For more information on arm lengths, see Algorithms.

#### Programmatic Use

Block Parameter:
`armLength` |

Type: character vector |

Values: `'0.0624'` |
nonzero positive scalar |

Default:
`'0.0624'` |

**Height (m)** — Vertical offset from vehicle center of gravity

`-0.0159`

(default) | nonzero scalar

Vertical offset from vehicle center of gravity, specified as a nonzero scalar.

#### Programmatic Use

Block Parameter:
`rotorHeight` |

Type: character vector |

Values: `'-0.0159'` |
nonzero positive scalar |

Default:
`'-0.0159'` |

### Rotor

**CT and CQ Source** — Dropdown to select the source of thrust and torque coefficient values

`'Dialog'`

(default) | `'Compute using BEMT'`

Select the source of the thrust coefficient and torque coefficient values, specified as a
character vector of value `'Dialog'`

or ```
'Compute using
BEMT'
```

. The block assumes the aerodynamic and structural parameters to be
constant.

Select `'Dialog'`

to manually enter the thrust and torque coefficient
values.

Select `'Compute using BEMT'`

to compute the values using Blade Element
Momentum Theory (BEMT). For more information on BEMT, see Thrust and Torque coefficient.

#### Programmatic Use

Block Parameter:
`CTCQMode` |

Type: character vector |

Values: `'Dialog'` |
`'Compute using BEMT'` |

Default: `'Dialog'` |

**Thrust coefficient (CT)** — Thrust coefficient

`0.0107`

(default) | nonzero positive scalar | nonzero N-element vector

Thrust coefficient, specified as a nonzero positive scalar or N-element vector.

If you define `Thrust coefficient (CT)`

as a scalar, all the
rotors are assumed to have same values for *CT*. If vector, the
ordering of the rotors is as shown in Arm Computations.

#### Dependencies

To enable this parameter, set the **CT and CQ Source** dropdown
to `'Dialog'`

.

#### Programmatic Use

Block Parameter:
`CT` |

Type: character vector |

Values: `'0.0107'` |
nonzero positive scalar |

Default:
`'0.0107'` |

**Torque coefficient (CQ)** — Torque coefficient

`7.8263e-4`

(default) | nonzero positive scalar | nonzero N-element vector

Torque coefficient, specified as a nonzero positive scalar or N-element vector.

If you define `Torque coefficient (CQ)`

as a scalar, all the
rotors are assumed to have same values for *CQ*. If vector, the
ordering of the rotors is as shown in Arm Computations.

#### Dependencies

To enable this parameter, set the **CT and CQ Source** dropdown
to `'Dialog'`

.

#### Programmatic Use

Block Parameter:
`CQ` |

Type: character vector |

Values: `'7.8263e-4'` |
nonzero positive scalar |

Default:
`'7.8263e-4'` |

**Number of blades** — Number of blades per rotor

`2`

(default) | nonzero positive scalar

Number of blades per rotor, specified as a nonzero positive scalar.

#### Dependencies

To enable this checkbox,

Set the

**CT and CQ Source**dropdown to`Compute using BEMT`

and/or

Set

**Modeling**to`'With flap effects'`

#### Programmatic Use

Block Parameter:
`Nb` |

Type: character vector |

Values: `'2'` | nonzero
positive scalar |

Default: `'2'` |

**Output computed CT and CQ** — Output computed thrust coefficient and torque coefficient

off (default) | on

Select this check box to output the calculated thrust coefficient and torque coefficient to
**C _{T}** and

**C**output ports. For more information on these calculations, see Thrust Coefficient and Torque Coefficient Calculations. The block assumes the aerodynamic and structural parameters to be constant.

_{Q}Otherwise, clear this check box.

#### Dependencies

To enable this parameter, set the **CT and CQ Source** dropdown
to `'Compute using BEMT'`

.

#### Programmatic Use

Block Parameter: `CTout` |

Type: character vector |

Values: `'on'` | `'off'` |

Default: `'off'` |

**Blade**

**Radius (m)** — Rotor radius

`0.0330`

(default) | nonzero positive scalar

Rotor radius, specified as a nonzero positive scalar.

#### Programmatic Use

Block Parameter: `radius` |

Type: character vector |

Values: `'0.0330'` | nonzero positive
scalar |

Default: `'0.0330'` |

**Chord (m)** — Blade chord

`0.0080`

(default) | nonzero positive scalar

Blade chord, specified as a nonzero positive scalar.

#### Dependencies

To enable this checkbox,

Set the

**CT and CQ Source**dropdown to`'Compute using BEMT'`

.

and/or

Set

**Modeling**to`'With flap effects'`

#### Programmatic Use

Block Parameter: `chord` |

Type: character vector |

Values: `'0.0080'` | nonzero positive
scalar |

Default: `'0.0080'` |

**Hinge offset (m)** — Hinge offset

`0`

(default) | positive scalar

Hinge offset, specified as a positive scalar. This value is typically
`0`

for propellers.

#### Dependencies

To enable this checkbox,

Set the

**CT and CQ Source**dropdown to`'Compute using BEMT'`

.

and/or

Set

**Modeling**to`'With flap effects'`

#### Programmatic Use

Block Parameter:
`hingeOffset` |

Type: character vector |

Values: `'0'` | positive
scalar |

Default: `'0'` |

**Lift curve slope (per rad)** — Lift curve slope

`5.5`

(default) | nonzero positive scalar

Lift curve slope, specified as a nonzero positive scalar. The block assumes the aerodynamic and structural parameters to be constant. The block does not consider variation with respect to angle of attack.

#### Dependencies

To enable this checkbox,

Set the

**CT and CQ Source**dropdown to`'Compute using BEMT'`

.

and/or

Set

**Modeling**to`'With flap effects'`

#### Programmatic Use

Block Parameter: `clalpha` |

Type: character vector |

Values: `'5.5'` | nonzero positive
scalar |

Default: `'5.5'` |

**Mean drag coefficient** — Mean drag coefficient

0 (default) | positive scalar

Mean drag coefficient, specified as a positive scalar. The block does not consider variation with respect to angle of attack.

#### Dependencies

To enable this parameter, set the **CT and CQ Source** dropdown
to `'Compute using BEMT'`

.

#### Programmatic Use

Block Parameter:
`cd0` |

Type: character vector |

Values: `'0'` | positive
scalar |

Default: `'0'` |

**Lock number** — Lock number

`0.6051`

(default) | nonzero positive scalar

Lock number, which is the ratio of aerodynamics forces to inertial forces, specified as a nonzero positive scalar.

#### Dependencies

To enable this parameter, set **Modeling** to `With flap effects`

.

#### Programmatic Use

Block Parameter: `gamma` |

Type: character vector |

Values: `'0.6051'` | nonzero positive
scalar |

Default: `'0.6051'` |

**Twist distribution** — Rotor blade twist distribution

`Linear`

(default) | `Ideal`

Rotor blade twist distribution, specified as:

`Linear`

— Close approximation of blade twist distribution.$$\theta (r)={\theta}_{root}+{\theta}_{twist}r$$

`Ideal`

— Optimal approximation of blade twist distribution.$$\theta (r)=\frac{{\theta}_{tip}}{r}$$

where *r* is the nondimensional radial location along the
blade.

#### Dependencies

To enable this checkbox,

Set the

**CT and CQ Source**dropdown to`'Compute using BEMT'`

.

and/or

Set

**Modeling**to`'With flap effects'`

#### Programmatic Use

Block Parameter:
`twistType` |

Type: character vector |

Values: `'Linear'` |
`'Ideal'` |

Default:
`'Linear'` |

**Blade root angle (rad)** — Blade root pitch angle

`0.2548`

(default) | real scalar

Blade root pitch angle θ_{root}, specified as a real scalar.

#### Dependencies

To enable this parameter:

Set the

**CT and CQ Source**dropdown to`'Compute using BEMT'`

.

and/or

Set

**Modeling**to`'With flap effects'`

Set

**Twist distribution**to`Linear`

.

#### Programmatic Use

Block Parameter: `thetaRoot` |

Type: real scalar |

Values: `'0.2548'` | nonzero positive
scalar |

Default: `'0.2548'` |

**Blade twist angle (rad)** — Blade twist angle

`-0.1361`

(default) | real scalar

Blade twist angle θ_{twist}, specified as a real scalar.

#### Dependencies

To enable this parameter:

Set the

**CT and CQ Source**dropdown to`'Compute using BEMT'`

.

and/or

Set

**Modeling**to`'With flap effects'`

Set

**Twist distribution**to`Linear`

.

#### Programmatic Use

Block Parameter: `thetaTwist` |

Type: real scalar |

Values: `'0.1018'` | positive
scalar |

Default: `'0.1018'` |

**Blade tip angle (rad)** — Blade tip pitch angle

`0.1018`

(default) | real scalar

Blade tip pitch angle θ_{tip} for ideal twist distribution, specified as a
real scalar.

#### Dependencies

To enable this parameter:

Set the

**CT and CQ Source**dropdown to`'Compute using BEMT'`

.

and/or

Set

**Modeling**to`'With flap effects'`

Set

**Twist distribution**to`Ideal`

.

#### Programmatic Use

Block Parameter: `thetaTip` |

Type: real scalar |

Values: `'0.06'` | nonzero positive
scalar |

Default: `'0.06'` |

## Algorithms

### Arm Computations

**Quadcopter x**

*p*_{1} =
(*d*,-*d*,*h*)

*p*_{2} =
(*d*,*d*,*h*)

*p*_{3} =
(-*d*,*d*,*h*)

*p*_{4} =
(-*d*,-*d*,*h*)

where:

*l*is the arm length.*h*is the offset from the vehicle center of gravity.$$d=\frac{l}{\sqrt{2}}$$.

In this graphic:

The

*x*-,*y*-,*z*-axes are perpendicular to each other.The four arms of the vehicle are perpendicular and equal in length (

*l*).All propellers are at same height (

*h*).

**Quadcopter +**

*p*_{1} =
(*l*,0,*h*)

*p*_{2} =
(0,*l*,*h*)

*p*_{3} =
(-*l*,0,*h*)

*p*_{4} =
(0,-*l*,*h*)

where:

*l*is the arm length.*h*is the offset from the vehicle center of gravity.

In this graphic:

The

*x*-,*y*-,*z*-axes are perpendicular to each other.The four arms of the vehicle are perpendicular and equal in length (

*l*).All propellers are at same height (

*h*).

### Force and Moment

*Without flap effects*$$\begin{array}{l}{F}_{xyz}={\displaystyle \sum _{i=1}^{N}{F}_{xy{z}_{i}}=}{\displaystyle \sum _{i=1}^{N}\left(\left[\begin{array}{c}0\\ 0\\ -{C}_{{T}_{i}}\rho \pi {R}^{2}{({\Omega}_{i}R)}^{2}\end{array}\right]\right)}\\ {M}_{xyz}={\displaystyle \sum _{i=1}^{N}\left(\left[\begin{array}{c}0\\ 0\\ -{C}_{{Q}_{i}}\rho \pi {R}^{2}{\Omega}_{i}\left|{\Omega}_{i}\right|{R}^{3}\end{array}\right]+{p}_{i}\times {F}_{xy{z}_{i}}\right)}\end{array}$$

*With flap effects*$$\begin{array}{l}{F}_{xyz}={\displaystyle \sum _{i=1}^{N}{F}_{xy{z}_{i}}}={\displaystyle \sum _{i=1}^{N}\left({C}_{{T}_{i}}\rho \pi {R}^{2}{({\Omega}_{i}R)}^{2}\left[\begin{array}{c}-\mathrm{cos}{\beta}_{{s}_{i}}\mathrm{sin}{\beta}_{{c}_{i}}\\ \mathrm{sin}{\beta}_{{}_{{s}_{i}}}\\ -\mathrm{cos}{\beta}_{{c}_{i}}\mathrm{cos}{\beta}_{{}_{{s}_{i}}}\end{array}\right]\right)}\\ {M}_{xyz}={\displaystyle \sum _{i=1}^{N}\left(\left[\begin{array}{c}0\\ 0\\ -{C}_{{Q}_{i}}\rho \pi {R}^{2}{\Omega}_{i}\left|{\Omega}_{i}\right|{R}^{3}\end{array}\right]+{p}_{i}\times {F}_{xy{z}_{i}}\right)}\end{array}$$

where:

*i*is the rotor index and*p*is the arm location corresponding to the_{i}*i*th rotor.Ω is the rotor speed in rad/s.

*β*and_{c}*β*are the steady state flap angles computed using the equations in Chapter 7 of [1]._{s}

### Thrust Coefficient and Torque Coefficient Calculations

When the Compute CT and CQ check box is selected, the Multirotor block calculates the thrust coefficient and torque coefficient using these equations.

With the inclusion of Prandtl’s tip loss function, the incremental thrust coefficient using blade element momentum theory is:

$$d{C}_{T}=4F{\lambda}^{2}r\text{}dr$$

where *F* is the correction factor:

$$\begin{array}{l}F=\frac{2}{\pi}{\mathrm{cos}}^{-1}exp-f\\ f=\frac{1}{2}\frac{{N}_{b}(1-r)}{r\phi}\\ \phi =\frac{\lambda}{r}\end{array}$$

For the equations in this section:

*r*is the nondimensional radial location.λ is the inflow through the rotor disc.

*c*is the lift curve slope._{lα}σ is the rotor solidity defined as $$\sigma =\frac{{N}_{b}c}{\pi R}$$, where

*c*is the chord,*R*is the radius and*N*is the number of blades._{b}

According to blade element theory, the incremental thrust coefficient is:

$$d{C}_{T}=\frac{1}{2}\sigma {c}_{l\alpha}(\theta (r)r-\lambda )rdr$$

Here, θ(r) will depend on the blade twist distribution and the collective pitch input
θ_{0}. Equating the two expressions for
*dC _{T}* returns

*4Fλ² = 0.5 σc*, which can be iteratively solved for λ.

_{ıα}(θ(r)r − λ)Sum *dС _{T} = 4Fλ²r dr* across the blade span, to find the net thrust coefficient

*C*.

_{T}For the torque coefficient *C _{Q}*, the profile drag
component is approximately included as $$\frac{\sigma {c}_{d0}}{8}$$. The net torque coefficient can be calculated by summing

*dС*across the blade span and adding the profile drag component.

_{Q}= λdС_{T}## References

[1] Prouty, Raymond W.
*Helicopter Performance, Stability, and Control* Krieger Publishing
Company, 1995.

[2] Riether, F. (2016). *Agile quadrotor maneuvering using tensor-decomposition-based globally optimal control and onboard visual-inertial estimation* (Doctoral dissertation, Massachusetts Institute of Technology).

## Version History

**Introduced in R2023a**

### R2024b: Multirotor block now includes swashplate as input

The Multirotor block has been updated to support swashplate inputs. This addition allows for the inclusion of collective and cyclic blade pitch angles in the calculation of Forces and Moments through new optional input ports.

`Thrust coefficient (CT)`

and`Torque coefficient (CQ)`

parameters now also accept N-element vectors as inputs.Starting R2024b, the Multirotor block has been updated to include the dropdown

**CT and CQ Source**with two options:`'Dialog'`

and`'Compute using BEMT'`

.Select

`'Dialog'`

to manually enter the thrust and torque coefficient values.Select

`'Compute using BEMT'`

to compute the values using Blade Element Momentum Theory (BEMT). For more information on BEMT, see Thrust and Torque coefficient. This option is equivalent to the**Compute CT and CQ**checkbox from previous releases.

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)