1+ #MDL_QUADCOPTER Dynamic parameters for a quadrotor.
2+ #
3+ # MDL_QUADCOPTER is a script creates the workspace variable quad which
4+ # describes the dynamic characterstics of a quadrotor flying robot.
5+ #
6+ # Properties::
7+ #
8+ # This is a structure with the following elements:
9+ #
10+ # nrotors Number of rotors (1x1)
11+ # J Flyer rotational inertia matrix (3x3)
12+ # h Height of rotors above CoG (1x1)
13+ # d Length of flyer arms (1x1)
14+ # nb Number of blades per rotor (1x1)
15+ # r Rotor radius (1x1)
16+ # c Blade chord (1x1)
17+ # e Flapping hinge offset (1x1)
18+ # Mb Rotor blade mass (1x1)
19+ # Mc Estimated hub clamp mass (1x1)
20+ # ec Blade root clamp displacement (1x1)
21+ # Ib Rotor blade rotational inertia (1x1)
22+ # Ic Estimated root clamp inertia (1x1)
23+ # mb Static blade moment (1x1)
24+ # Ir Total rotor inertia (1x1)
25+ # Ct Non-dim. thrust coefficient (1x1)
26+ # Cq Non-dim. torque coefficient (1x1)
27+ # sigma Rotor solidity ratio (1x1)
28+ # thetat Blade tip angle (1x1)
29+ # theta0 Blade root angle (1x1)
30+ # theta1 Blade twist angle (1x1)
31+ # theta75 3/4 blade angle (1x1)
32+ # thetai Blade ideal root approximation (1x1)
33+ # a Lift slope gradient (1x1)
34+ # A Rotor disc area (1x1)
35+ # gamma Lock number (1x1)
36+ #
37+ #
38+ # Notes::
39+ # - SI units are used.
40+ #
41+ # References::
42+ # - Design, Construction and Control of a Large Quadrotor micro air vehicle.
43+ # P.Pounds, PhD thesis,
44+ # Australian National University, 2007.
45+ # http://www.eng.yale.edu/pep5/P_Pounds_Thesis_2008.pdf
46+ # - This is a heavy lift quadrotor
47+ #
48+
49+ import numpy as np
50+ from math import pi , sqrt , inf
51+
52+ quadrotor = {}
53+ quadrotor ['nrotors' ] = 4 # 4 rotors
54+ quadrotor ['g' ] = 9.81 # g Gravity
55+ quadrotor ['rho' ] = 1.184 # rho Density of air
56+ quadrotor ['muv' ] = 1.5e-5 # muv Viscosity of air
57+
58+ # Airframe
59+ quadrotor ['M' ] = 4 # M Mass
60+ Ixx = 0.082
61+ Iyy = 0.082
62+ Izz = 0.149 #0.160
63+ quadrotor ['J' ] = np .diag ([Ixx , Iyy , Izz ]) # I Flyer rotational inertia matrix 3x3
64+
65+ quadrotor ['h' ] = - 0.007 # h Height of rotors above CoG
66+ quadrotor ['d' ] = 0.315 # d Length of flyer arms
67+
68+ #Rotor
69+ quadrotor ['nb' ] = 2 # b Number of blades per rotor
70+ quadrotor ['r' ] = 0.165 # r Rotor radius
71+
72+ quadrotor ['c' ] = 0.018 # c Blade chord
73+
74+ quadrotor ['e' ] = 0.0 # e Flapping hinge offset
75+ quadrotor ['Mb' ] = 0.005 # Mb Rotor blade mass
76+ quadrotor ['Mc' ] = 0.010 # Mc Estimated hub clamp mass
77+ quadrotor ['ec' ] = 0.004 # ec Blade root clamp displacement
78+ quadrotor ['Ib' ] = quadrotor ['Mb' ] * (quadrotor ['r' ] - quadrotor ['ec' ])** 2 / 4 # Ib Rotor blade rotational inertia
79+ quadrotor ['Ic' ] = quadrotor ['Mc' ] * (quadrotor ['ec' ])** 2 / 4 # Ic Estimated root clamp inertia
80+ quadrotor ['mb' ] = quadrotor ['g' ] * (quadrotor ['Mc' ] * quadrotor ['ec' ] / 2 + quadrotor ['Mb' ] * quadrotor ['r' ] / 2 ) # mb Static blade moment
81+ quadrotor ['Ir' ] = quadrotor ['nb' ] * (quadrotor ['Ib' ] + quadrotor ['Ic' ]) # Ir Total rotor inertia
82+
83+ quadrotor ['Ct' ] = 0.0048 # Ct Non-dim. thrust coefficient
84+ quadrotor ['Cq' ] = quadrotor ['Ct' ] * sqrt (quadrotor ['Ct' ]/ 2 ) # Cq Non-dim. torque coefficient
85+
86+ quadrotor ['sigma' ] = quadrotor ['c' ] * quadrotor ['nb' ] / (pi * quadrotor ['r' ]) # sigma Rotor solidity ratio
87+ quadrotor ['thetat' ] = 6.8 * (pi / 180 ) # thetat Blade tip angle
88+ quadrotor ['theta0' ] = 14.6 * (pi / 180 ) # theta0 Blade root angle
89+ quadrotor ['theta1' ] = quadrotor ['thetat' ] - quadrotor ['theta0' ] # theta1 Blade twist angle
90+ quadrotor ['theta75' ] = quadrotor ['theta0' ] + 0.75 * quadrotor ['theta1' ] # theta76 3/4 blade angle
91+ try :
92+ quadrotor ['thetai' ] = quadrotor ['thetat' ] * (quadrotor ['r' ] / quadrotor ['e' ]) # thetai Blade ideal root approximation
93+ except ZeroDivisionError :
94+ quadrotor ['thetai' ] = inf
95+ quadrotor ['a' ] = 5.5 # a Lift slope gradient
96+
97+ # derived constants
98+ quadrotor ['A' ] = pi * quadrotor ['r' ]** 2 # A Rotor disc area
99+ quadrotor ['gamma' ] = quadrotor ['rho' ] * quadrotor ['a' ] * quadrotor ['c' ] * quadrotor ['r' ]** 4 / (quadrotor ['Ib' ] + quadrotor ['Ic' ]) # gamma Lock number
100+
101+ quadrotor ['b' ] = quadrotor ['Ct' ] * quadrotor ['rho' ]* quadrotor ['A' ]* quadrotor ['r' ]** 2 # T = b w^2
102+ quadrotor ['k' ] = quadrotor ['Cq' ] * quadrotor ['rho' ]* quadrotor ['A' ]* quadrotor ['r' ]** 3 # Q = k w^2
103+
104+ quadrotor ['verbose' ] = False
0 commit comments