Escolar Documentos
Profissional Documentos
Cultura Documentos
Candidato:
Matteo Ragni
Matricola 156994
Part I
Project report
1 Introduction
The goal of this report is to dene an iterative procedure that can be used to reach a good project of a quadcopter for aggressive maneuvers; this means low tolerance to wind interference, high accelerations and an automatic control for stabilization. As we will see from QFD interviews, this type of quadcopter is the most requested from typical customers. To reach all those objectives, is important to dene a good, ro#. Customer requirements KIdx bust and complete dynamic model, obtained through 1. It adapts to environmental conditions 0.33 quaternions formulation. Force models for propeller are derived from ex2. It has an human/sensors interface 0.26 perimental data and aerodynamic force are obtained 3. It is easy to assemble/repair/transport 0.22 through numeric simulations (CFD). Inertial values are acquired from an unbalanced, as a real object, CAD 4. It has an attractive aspect 0.21 model. In section 8 is shown how to optimize quad5. It travels at high speed 0.17 copter frame, to lower as much as possible total weight, 6. It has propellers blades protections 0.11 via analytical or numerical (FEM) simulations. Must be taken into account that even the more rened model 7. It has elements in recycled materials 0.06 cannot provide perfect solutions against bad formed propeller or too high wind interference. Table 1: Customer requirements and relative ranks (KIdx
stands for Kano index)
From interview we have extracted 7 main customer requirements. Relative importance for each customer requirements was judged by Kano method, through further interviews formed byfeel if [requirement] implemented/not implemented questions. Results of those two interviews are summed up in Table 1. Records in magenta will not be further considered to get a simpler problem.
Some of those requirements import several issues in our model approach. The rst requirement, for an The rst question we have to take into account is: who example, changes air density value that must be considare costumers? We can identify four possible main cos- ered for force models ( 3 @1000mslm = 1.112 kg/m ), and tumers, whose requirements have to be deeply consid- also changes the automatic control approach that must ered: be persecuted to stabilize the system. The third and sixth requirements have several implications on frame hobbyist; design and weight. Beside what was expected, cus scientist whom uses quadcopter for geophysical tomers do not bother about quadcopter life-time. logging;
scientist whom uses quadcopter for research in automation controls and robotics; assembler for ready-to-y quadcopter.
Customer requirements
Benchmark
With our simulation of QFD, we succeeded to collect requirements from the rst type of costumers (hobbyist) through interviews1 . In the interview were 19 multiple-choice questions plus an open question about functional behavior of an hypothetical quadcopter.
In this section we compare what market already offers against our customer requirements. Beside all DIY prototypes and kits that are available, I have selected three dierent model:
Parrot A.R. Drone; Xenus L; Anteos L.
1 To make interview Google Form service were used. For privacy restrictions, only interview results are reported in this le. Form (Italian version) is available online at QFD Form (Google Docs).
If rst and second can be considered as toys, the last one diers for dimensions and aims. In fact Anteos L is an high payload stable quad rotor used for professional, low cost lming and geophysical logging. It requires a specic license and its ights must be approved by nearest control tower. Benchmark are made summing up data collected from companys sites and specic forums (AeroQuad, Mikrokopter.de, etc...). In fact, results compared to customers requirements are made by customers themselves. Table 2 summarizes results: C.R. Model P 1. 2. 3. 4. 5. 6. 7. Score
P
of customer requirements. Some of those specications are related each other, with positive or negative relations. In case there is a negative relation, a trade o between two specication must be found, as function of their relative importance. Table 4 summarizes this last aspect. Specication A. Mass B. Hor. Area C. Ver. Area D. Z C. of mass E. Z Speed F. XY Speed G. Stall angle H. RF Channels I. Arms length J. Max current K. Tight. torque L. Thrust force M. Drag torque
1 low impact 3
X 3 3 2 2 4 1 1 2.55
X
A 4 3 2 2 5 1 1 2.92
Xenus L; A Anteos L.
1 2 3 4 5
2 5 4 5 3 3 3 3.61
Requirements 1. 2. 3. 4. 9 9 3 9 3 3 9 3 1 9 3 3 3 3 9 9 9 3 3 3 3 1 9 9
medium impact 9
5. 3 3 3 9 9 9 9 3 9 9 9
6. 9 3 1 3 3 3
7. 9 1 1
9 9
3 3
strong impact
Stall angle stands for maximum inclination along propeller plane at which maximum propeller force is enough to balance system weight. A. M. L. I. G. F. E. D. C. B. B. C. D. E. -1 9 F. 9 9 G. 9 1 I. L. 9
Parrot A. R. Drone, that is product for hobbyist market, seems to be prototype that responds better to our customers requirements.
Technical specications
Customer requirements cannot be used for solutions comparison, so we need to provide a list of technical specications. Each customer requirement generates one or more technical specications that can be in competitions with others. Table 4 summarizes specications against customer requirements. Records in magenta will not be further considered to get a simpler problem. For example, consider z coordinate of center of mass. This value should be under plane identied by set of propellers barycenter. In this case, system can be approximate to a simple pendulum. If z coordinate is above the plane, system can be easily approximated to an inverse pendulum, so stability becomes a very hard aim to reach. It is easy to understand why weight has a so strong impact on many
3 -1 -1 -1 9 9
-1 3
3 -1
3 3 -1
1 9
One can note strong relations between thrust force and drag force. This relation derives from aerodynamic local force generated by propellers rotation, from witch both phenomena track their origin. If we desire a great thrust force, we have also to face against a great drag Mechanical Model for Quadcopter UAV 3
Now that we have clearly dened specications, we can dene some targets for our system. Strong relations allow us to reduce total number of goals to some that are fundamentals.
z
Z_CB
Ra
diu
Valore 2625.40 -8.79 3.65 1.57 60666424.25 60677857.88 120000774.39 1491.78 284.59 3001.50
Unit g mm
g mm^2
Lxz Lyz
Table 5: Targets
Those targets imply all others specications, as simulation thrust force or dimensions. In fact, those others can be used as parameters for system design. Constrains on Mechanical modeling is done in Maple using MBmass implies maximum frame volume, batteries, and, Symba r6 and other packages. Analysis will proceed therefore, constrains on maximum length or shape for in this way: rst of all there are some considerations propellers arms. A list of possible parameters are: about system simplications. Then the chosen kinematic approach will be explained. System of force will propellers arms length: L; be analyzed deeply. At last point, will be sketched a simpler dynamic system to understand what was done to dene Maple model. propellers arms shape (2 or 3 parameter, used in optimization);
6.1
propellers radius and average cord: Rpropeller and cavg ; materials used;
System simplications
and so on. Some parameters can be seen in gure 1. It is obvious that this set of targets is not sucient to get a stable systems, and other parameters should be set about closed-loop control system (such as input errors and settlement times on each controlled variable), but in this document will not be examined thoroughly. In table reported in section 10 all QFD results discussed from section 2 to section 5 are summed up into house of quality diagram.
There are a lot of simplications, and not all of them can be proofed only with computer modeling. First of all, we have a clash between a sti problem (angular speed of propellers too fast w.r.t. central system body angular speed) and a very complex set of equations. Solutions can be found only with an huge use of memory2 , so we have decided to neglect propellers inertial eects in the model. This assumption is not new to quadcopter modeling and was often gave as standard assumption in literature [1, 3]. There are many approximations in aerodynamic model for propeller force and torque, most of them derived from limit interpretation of [1] equations. Those simplied equations should be proved experimentally to be conrmed. Experimental data are derived from
2 With my computer, Maples garbage collector system always reached threshold value during numeric integration with sti option set to true, interrupting computations.
online database and compared with unocial data collected by hobbyist. The last strong simplication regards propellers arms deections. Shape of arms is optimized to grantee a total deection littler than 0.1 mm, enough to consider the central body as rigid.
FT
0.7
6.2
Kinematic approach
System is composed by a single rigid body with 6 degrees of freedom, 3 translations {x(t), y (t), z (t)} and MD 3 rotations, dened by a quaternion vector: q = {q0 (t), q1 (t), q2 (t), q3 (t)}, so reference system is in form (equation 4.1 in Maple script, variable TMquad): Figure 2: Propeller forces and aerodynamic force distribution
[T M ] = 0 R33 (q ) 0
(1) As suggested in [1], thrust force and drag momentum are the major eect that must be taken into account. Bending momentum, even if present on a single blade of propeller, is balanced by bending momentum on the opposite blade, so its eects on central body can be neglected. From equations of lift and drag coefcients, and inversion of those denitions, it is possible to nd an expression for lift force and drag momentum. To get numeric values, we can suppose that with an extreme approximation, to get a stall angle greater than 45 with a mass of 3 kg , propeller must impose a force of: F T 1/4 3 kg g cos(45) = 5.3 N at low angular speed. This means that we can select as initial type of propeller an AP C 13 63 , and its value of lift and drag coecients are tabulated online at [2.a] and how data is collected is explained in [2.b]. Experimental data are interpolated with an exponential function, and interpolation results can be seen in gure 3. Thrust force and drag momentum are dened as functions of angular ratios: FT ( ) =
Origin of reference is in system center of mass. For a simpler denitions of force, another reference system is dened in the geometrical center of quadcopter (TMquad2). The use of quaternions grants complete absence of singularities, that can occurs during aggressive maneuver. All functions necessary to make computation with quaternion are dened in the rst part of the script.We need to add to all set of equation a constraint about quaternion:
2 2 2 2 |q | = q0 + q1 + q2 + q3 =1
(2)
This equations is implicitly used to get a simplication and maintains system an ODE type. Representation of reference system is portraited in gure 7.
1 CL ( ) S v 2 = 2 1 = CL ( ) (R cavg ) (.7 R )2 (3) 2 6.3 Force modeling 1 MD ( ) = CD ( ) S v 2 (.7 R) = 2 There are three main forces that must be modeled. 1 The rst one, and simpler, is gravitational force, and = CD ( ) (R cavg ) (.7 R )2 (.7 R) (4) 2 dened in the script by gravity variable. The second force is propeller thrust and propeller drag. If we To validate model we have compared results of force w.r.t. some experimental data retrieved from forums consider a single propeller:
3 There are two type of propeller: clockwise and anticlockwise, used to balance drag torque. For anticlockwise propeller only and M D change signs. F T is positive in both cases.
and collected by hobbyist, in gure 4. Our model is only compared with, and not based upon, because those data cannot be veried.
follow the same behavior of propeller force, but a value of drag coecient must be provided in function of our system shape. To obtain a numeric value, we can try to make a CFD simulation4 of the body (see section 13), for dierent airow speed. Using principle of conservation of linear momentum for uids, we can approximate coecient with: C= p 1 2 v 2 (5)
where p is pressure drop of airow due to presence of model in simulated wind gallery. Coecient for xz plane and yz plane can be considered equal, due to model symmetry. With CAD model is easy also to evaluate exposed surface to uid impact. Results of simulations are presented in gure 5 and in gure 6 are presented aerodynamic forces, evaluated with next equations:
Figure 3: Cd and Cl interpolation
z Fwind i Fwind
= =
vz |vz | v i |v i|
Figure 4: Force model and Drag torque compared to experimental data. Propeller reactions are intended only positive.
The last force that must be modeled is force that apparent wind, as dierence between system speed and wind speed, generates on quadcopter. To get an easier formulation, aerodynamic force components are dened in systems reference frame. Aerodynamic forces
4 Aerodynamic
g) FT( i i
3 gi (t)
Ground Z
Ground Y
Ground 0
Ground X
With this last one we have completed forces modeling, and we can focus on model of the system. From the scheme in gure 7 we can derive a simplied version of equations of motion dened in system center of mass:
6.4
Once dened model of forces, dynamic system model is quite simple, and is obtained through an application of Newton-Euler equation to our system model. We can use formulations of velocity and angular accelerations to get down order equations, necessary to solutions of dynamic second order dierential equations. Angular accelerations and barycentric velocities are derived from solutions of this two equations: u(t) v (t) [T M ] G [T M ] z (t) 0 0 dq 1 x (t) Q(q ) y (t) dt 2 z (t)
i F Ti + Fw + ( M D + Li F Ti ) + 0 Fw i i mI 0 u 0 + (10) 0 J J
(8)
(9)
where J is moment of inertia about center of mass. Equations of motion is formed by set of equations: {Eq. 8 Eq. 9 Eq. 10}5 . As can be seen in Maple script, numeric solutions depends from initial conditions and from a set of 8 parameter: 4 angular speed of propeller and 3 wind velocities in absolute frame. As already said, system is not stable and should be linearized to dene a control law (system diverge from stable condition in less than 2 s): here is plotted an example of positions of quadcopter after 1 s and 3 s6 .
implicit declaration of Eq. 2, for nunknows = dim(x, u, q, }) = 3 + 3 + 4 + 3 = 13. are returned in Euler angles.
Stall angle, as it has been dened, is strictly connected to thrust force that propellers is able to impose: as our propeller can potentially reach 15 N of thrust, we can approximate a stall angle of 60, that follows our specications indication. With some test performed using DAlembert principle we have found that with propeller angular speed set {1 = 424, 1 = 431, 1 = 448, 4 = 441} s1 system can perform a stationary ight with vertical speed z 20 m/s. Even in this case, stationary ight is not stable.
8
Figure 8: Solutions
Optimization
Structural optimization aims to minimize mass o overall system. In the rst version of analysis, we selected ABS, a plastic polymer, for central body frame. Once note propeller force and torque, it was obvious that this material has a too low Youngs module, so deections were too high, against our hypothesis of rigid body. To maintain this hypothesis, only for the central part of the frame, material selection passed to an aluminum alloy. Optimization is done considering minimization of mass, with constrains of deection and yield stress: min (Al L A) 1 P L3 3 E Jx M Jy
Figure 9: Quadcopter position simulation
2
= W L 3000 Y Al sf (11)
+
2
1 M L2 2 E Jy PL Jx
2
Linearization around this equilibrium point is a good start for control and stabilization analysis.
Result discussions
It is time to discuss our results in comparison with technical specications. With this initial solution, even if our system is not been already optimized, it can maintain its overall mass lighter than target value (2.62 kg 3.5 kg ). This is the most important technical parameter, and is fundamental to reach this target.
were d is maximum stress point distance from area barycenter and sf = 2 is a security factor. Analytical solutions is performed only for hollow circular shape and H section beam. For the other shape, solution are performed using SolidWorks Simulation and SolidWorks Design Tools, in which better solution is searched through a discrete set of conguration. Because of Simulation take into account of gravity, results seems to be a little dierent, but we have considered that phase littler than 0.1 mm are insignicant for a real model. The next gure summarize optimization problem: Mechanical Model for Quadcopter UAV 8
Table 9: Solution 4
A A
SEZIONE A-A
Di
b a b s
h SOLUTION 1 SOLUTION 2
s SOLUTION 3 SOLUTION 4
b SOLUTION 5
The best solution seems to be the number 5, with dimensions specied in Table 10.
Conclusions
Next tables summarize results for optimization . Analytical studies can be found in latter pages of maple The aim of this document was, previous than dene a script, numerical studies are in attachments, as auto- complete model, nd an iterative procedure that can be used to project a good quadcopter for aggressive matically generated SolidWorks reports. maneuvers. Thats why, in model denition, we have used quaternions for rotation, and thats why we have Num.Sol. An.Sol. Num.Goal An.Goal imposed so extreme technical specications on speed Di = 32 31.30 W = 118.99 130.91 and stall angle. This procedure, however, lacks of the s = 1.4 1.51 = 0.099 0.099 fundamental automatic control analysis, but also shows = 2.845 2.639 how it is possible with some iteration optimize model to lower mass, that is a crucial objective. It allows us Table 6: Solution 1 to change type of propeller (rst choice that we have done, even before denition of mechanical model), and generates a complete new set of constraints, even in opNum.Sol. An.Sol. Num.Goal An.Goal timization procedure (because of change of maximum a=4 5.75 W = 255.96 376.95 load). Main limit of mechanical model presented is in b = 34 35 = 0.097 0.100 the automatic code generated for quadcopter electronh = 19 22.44 = 4.126 2.715 ics, because of the incredibly complex equations that quaternions algebra generates, dicult to be evaluated Table 7: Solution 2 by a simple -controller. An improvement of this analysis must consider the automatic control. Num.Sol. s=7 a = 30 b = 30 Num.Goal W = 111.3 = 0.096 = 3.488
Table 8: Solution 3
7 Dimensions
Part II
Attachments
10 Complete QFD Diagram
Next page contains attached documents in which is presented all results about QFD investigations, described in sections 2, 3, 4 and 5.
11
CAD Model
In the next page, the CAD model is shown, with some of real object parameters. This model was used to retrieve inertial data for mechanical studies, and it was modied to follow better technical specications. What is presented is only the last version, and it lacks only of structural optimization alterations.
1 5 6
330
Chemistry LiPoly Rating 7.4V 3.3Ah Weight 207 g Discharge 108.9 A Desire 33c LiPo Batt APC13x6
300
EECS 20A
C
Microcontroller ARM
SEZIONE B-B
TITOLO:
Disegno 5
3 4
SCALA:1:10
PESO: 2.6254 Kg
A4
1 DI 1
12
Maple script
This section contains the attached Maple script in which is dened the mechanical model of quadcopter and its linearization for further automatic control and stabilization analysis. In last section of script there is analytical optimization for two section shape.
Libs declarations
In this section will be declared Maple's libs used in this worksheet: > if true then: System := kernelopts(platform): if System = "unix" then libname := libname, cat(getenv("HOME"), "/Universit/Ingegneria Meccatronica Robotica/Modeling and simulation of mechanical systems/Software"): elif System = "windows" then libname := libname, "D:\\Data\\Universit\\Ingegneria Meccatronica Robotica\\Modeling and simulation of mechanical systems\\Software": end if: with(plots): with(plottools): with(LinearAlgebra): with(MBSymba_r6); with(CAD[SolidWorks]); with(Matlab); with(Optimization); with(DynamicSystems); end if: interface(rtablesize=100): kernelopts(numcpus=8): kernelopts(numcpus); 'Loaded_Modules' = packages(); 8 (1.1.1)
Tools Declarations
In this section a huge list of useful tools are decleared. That tools will be used in the worksheet: Procedure to calculate a jacobian of a vectorial function with rispect to a list of function. > jacobian := proc(f::{list,Vector},x::{list,Vector}) local nx,j, x2y,y2x: if type(x,Vector) then nx := Dimensions(x): else nx :=nops(x): end: x2y := [seq(x[i]=y[i],i=1..nx)]: y2x := [seq(y[i]=x[i],i=1..nx)]: j := VectorCalculus[Jacobian](subs(x2y,f),subs(x2y,x)): return(subs(y2x,j)):
end proc: eval_tau := proc(xd::{list,Vector},Phi::{list,Vector},xi:: {list,Vector},$) return collect(simplify( - MatrixInverse( jacobian(Phi, xd) ) . jacobian(Phi,xi) ,size),diff): end:
Dynamic2d
The next procedures evaluate NE equations of a 2D body (3 equations of second order, N: x and y components. E: z component). The Euler equations are evaluated w.r.t. center of mass of the body. > Dyna2D := proc(body::BODY,forces::set, $) printf(" ------ NEWTON ------ \n"); newton_equations({body} union forces,true): printf(" ------ EULERO ------ \n"); euler_equations({body} union forces,CoM(body),true): return collect(simplify([comp_X(%%),comp_Y(%%),comp_Z(%) ],size),{diff}): end:
Dynamic3d
The next procedures evaluate NE equations of a 3D body (6 equations of second order). The Euler equations are evaluated w.r.t. center of mass of the body. > Dyna3D := proc(body::BODY,forces::set, $) printf(" ------ NEWTON ------ \n"); newton_equations({body} union forces,true): printf(" ------ EULERO ------ \n"); euler_equations({body} union forces,CoM(body),true): return collect(simplify([comp_XYZ(%%),comp_XYZ(%)], size),{diff}): end:
Dyna3DSE := proc(body::BODY,forces::set,TM, $) printf(" ------ NEWTON ------ \n"); newton_equations({body} union forces,true): printf(" ------ EULERO ------ \n"); euler_equations({body} union forces,CoM(body),true): return collect(simplify([comp_XYZ(%%,TM),comp_XYZ(%,TM) ],size),{diff}): end:
Quaternions Algebra
In this section are declared all functions and procedures used for quaternions algebra: note that all definitions end with the label "_quat". > # Creates a new quaternion: # q = <q0,q1,q2,q3> make_quat := q -> < q||0(t), q||1(t), q||2(t), q||3(t) >: # Angular ratio of a quaternion: # w = <0,w1,w2,w3> makeAngVel_quat := omega -> < 0, omega||1(t), omega||2(t), omega||3(t) >: # Quaternion conjugate: # qc = <q0,-q1,-q2,-q3> conj_quat := q -> < q[1], -q[2], -q[3], -q[4] >: # Derivatives of quaternion components # dq = <dq0,dq1,dq2,dq3> diff_quat := q -> < seq( diff(q[i],t), i=1..4 ) >: # Quadratic norm of a quaternion # |q|^2 abs2_quat := q -> Transpose(q).q: # Norm of a quaternion # |q| abs_quat := q -> sqrt(abs2_quat(q)): # Inverse of a quaternion # q^-1 = qc/|q|^2 inverse_quat := q -> conj_quat(q)/abs2_quat(q): # Multiplicative matrix of a quaternion # Q(q) Q_quat := proc(q) local q0,q1,q2,q3: q0 q1 q2 q3 << < < < end: # Multiplicative conjugate matrix # QC(q) QC_quat := proc(q) local q0,q1,q2,q3: := := := := q0 q1 q2 q3 q[1]: q[2]: q[3]: q[4]: | -q1 | -q2 | -q3 >, | q0 | -q3 | q2 >, | q3 | q0 | -q1 >, | -q2 | q1 | q0 >>;
:= := := := q0 q1 q2 q3
q[1]: q[2]: q[3]: q[4]: | -q1 | -q2 | q0 | q3 | -q3 | q0 | q2 | -q1 | -q3 >, | -q2 >, | q1 >, | q0 >>;
# Product between quaternions # p*q = Q(p).q prod_quat := (p,q) -> Q(p).q: # Rotational quaternion # q = < cos(a/2), nx sina(a/2), ny sina(a/2), nz sina(a/2)> make_rotation_quat := proc(alpha,nx,ny,nz) < cos( alpha/2 ), nx*sin( alpha/2 ), ny*sin( alpha/2 ), nz*sin( alpha/2 ) >: end: # Rotation matrix from a quaternion. Return also the constrain rotation_matrix_quat := proc(q) local rotation_matrix, constrain: constrain := abs2_quat(q) = 1: rotation_matrix := subs( constrain, ( 1/abs2_quat (q) ) * ( Q_quat(q). Transpose(QC_quat(q)) ) ): return rotation_matrix, contrain; end: # Return a standard 3x3 rotation matrix from a quaternion rotation matrix extract_rotation_matrix_quat := A -> A[2..4,2..4]: # Creates a frame given a quaternion and a origin position TM_quat := proc(q,x,y,z) local R,c: R,c := rotation_matrix_quat(q): R := extract_rotation_matrix_quat(R): << R[1..3,1],0 > | < R[1..3,2],0 > | < R[1. .3,3],0 > | <x,y,z,1>>; end: # Returns quaternions values for a given Eulerian rotation XYZ EulerZYX2Quat_quat := proc(psi,theta,phi) local qx,qy,qz,qrot: qx := make_rotation_quat(phi,1,0,0): qy := make_rotation_quat(theta,0,1, 0): qz := make_rotation_quat(psi,0,0,1): qrot := Q_quat( Q_quat(qz).qy ).qx: return qrot end:
# Returns an Eulerian rotation from a quaternion that respects contraint Quat2EulerXYZ_quat := proc(q) return [ arctan( 2*(q[1]*q[2] + q[3] *q[4] ) / (1 - 2*(q[2]^2+q[3]^2))), arcsin( 2*(q[1]*q[3]-q[4]*q [2]) ), arctan( 2*(q[1]*q[4] + q[2] *q[3] ) / (1 - 2*(q[3]^2+q[4]^2))) ]; end:
"DarkGray","DarkSlateBlue","Goldenrod", "LawnGreen","MediumBlue"]: plotList := []: ic := 1: for p in PL do: pp1 := subs(data,sol,[comp_X(p[1],ground),comp_Y(p[1], ground)]): pp2 := subs(data,sol,[comp_X(p[2],ground),comp_Y(p[2], ground)]): pp3 := subs(data,sol,plottools[disk](pp1,radius,color= yellow)): pp4 := subs(data,sol,plottools[disk](pp2,radius,color= yellow)): plotList := [op(plotList),plot([pp1,pp2],thickness=4, color=colorSet[ic]),pp3,pp4]: ic := ic+1: end : display(plotList,scaling=constrained,gridlines=true): end proc:
op(SetPointSuperiore)[i+1]])]; elif (i = LL) then: Facce := [op(Facce),polygon ([op(SetPointSuperiore)[i], op(SetPointInferiore)[i], op(SetPointInferiore)[1], op(SetPointSuperiore)[1]])]; end if; end; displayObject := DiscoSuperiore, DiscoInferiore,op(Facce): return displayObject; end:
Centro := TF[1..4,4]; CorpoCentrale := DrawOrientedPolygons (TF.Rotate('Z',Pi/4),evalf(m1),evalf(m1/2*sqrt(2)),evalf (m1/2*sqrt(2)),4): TFM1 := evalf( <TF[1..4,1]|TF[1..4,2] |TF[1..4,3]|TF.<0,0,0,1>+TF.(L*<1,0,0,0>)>): TFM2 := evalf( <TF[1..4,1]|TF[1..4,2] |TF[1..4,3]|TF.<0,0,0,1>+TF.(L*<-1,0,0,0>)>): TFM3 := evalf( <TF[1..4,1]|TF[1..4,2] |TF[1..4,3]|TF.<0,0,0,1>+TF.(L*<0,1,0,0>)>): TFM4 := evalf( <TF[1..4,1]|TF[1..4,2] |TF[1..4,3]|TF.<0,0,0,1>+TF.(L*<0,-1,0,0>)>): TFR1 := evalf( <TFM1[1..4,1]|TFM1[1..4, 2]|TFM1[1..4,3]|TFM1.<0,0,0,1>+TFM1.(evalf(m2/2)*<0,0, 1+0.3,0>)> ): TFR2 := evalf( <TFM2[1..4,1]|TFM2[1..4, 2]|TFM2[1..4,3]|TFM2.<0,0,0,1>+TFM2.(evalf(m2/2)*<0,0, 1+0.3,0>)> ): TFR3 := evalf( <TFM3[1..4,1]|TFM3[1..4, 2]|TFM3[1..4,3]|TFM3.<0,0,0,1>+TFM3.(evalf(m2/2)*<0,0, 1+0.3,0>)> ): TFR4 := evalf( <TFM4[1..4,1]|TFM4[1..4,
2]|TFM4[1..4,3]|TFM4.<0,0,0,1>+TFM4.(evalf(m2/2)*<0,0, 1+0.3,0>)> ): motore1 := DrawOrientedPolygons(TFM1, m2,evalf(m2/2),evalf(m2/2),20): motore2 := DrawOrientedPolygons(TFM2, m2,evalf(m2/2),evalf(m2/2),20): motore3 := DrawOrientedPolygons(TFM3, m2,evalf(m2/2),evalf(m2/2),20): motore4 := DrawOrientedPolygons(TFM4, m2,evalf(m2/2),evalf(m2/2),20): propeller1 := DrawOrientedPolygons (TFR1,0.1,r,r,20): propeller2 := DrawOrientedPolygons (TFR2,0.1,r,r,20): propeller3 := DrawOrientedPolygons (TFR3,0.1,r,r,20): propeller4 := DrawOrientedPolygons (TFR4,0.1,r,r,20): Line1 := line(convert(TF[1..3,4],list), convert(TFM1[1..3,4],list),thickness=round(5*m2),color= black): Line2 := line(convert(TF[1..3,4],list), convert(TFM2[1..3,4],list),thickness=round(5*m2),color= black): Line3 := line(convert(TF[1..3,4],list), convert(TFM3[1..3,4],list),thickness=round(5*m2),color= black): Line4 := line(convert(TF[1..3,4],list), convert(TFM4[1..3,4],list),thickness=round(5*m2),color= black): DrawingObject := [CorpoCentrale, motore1, propeller1, Line1, motore2, propeller2, Line2, motore3, propeller3, Line3, motore4, propeller4, Line4]: return display(DrawingObject); end:
Numerical Data
In this section can be found all experimental data and numerical value for the parameters. At the end of this section, numerical value used for numerical integration are collected in a single variable named Data. Square brackets in comments are used to identificate dimensions. > DataLift := [ rho = 1.112, # [Kg / m^3] Radius = 13*2.54*0.01, # [m] CordAvg = 0.035 ]: # [m] DataWind := [ SYZ = 0.0595, SXY = 0.094 ]: # [m^2] > ProbdDBData13x6 := <<1655|0.0936|0.0524>,<2019|0.0962|0.0523>, <2320|0.0972|0.0519>,<2616|0.0978|0.0513>,<2916|0.0996|0.0520>, <3209|0.1002|0.0520>,<3512|0.1008|0.0526>,<3805|0.1009|0.0522>, <4119|0.1014|0.0520>,<4406|0.1023|0.0522>,<4722|0.1029|0.0522>, <5001|0.1042|0.0522>,<5302|0.1065|0.0516>,<5598|0.1072|0.0514>, <5905|0.1096|0.0505>,<6213|0.1118|0.0503>>: # < [RPM] | Clift [] | CDrag [] > MikroKData := <<0| 0.>, <.5| 100.00>, <1.0| 200.00>, <1.5| 300.00>, <2.0| 360.00>, <2.5| 435.00>, <3.0| 500.00>, <3.5|
550.00>, <4.0| 600.00>, <4.5| 660.00>, <5.0| 720.00>, <5.5| 780.00>, <6.0| 820.00>, <6.5| 880.00>, <7.0| 920.00>, <7.5| 970.00>, <8.0| 1010.00>, <8.5| 1050.00>, <9.0| 1090.00>, <9.5| 1130.00>, <10.0| 1150.00>>: # < Current [A], Thrust [g]> CWindFlowSimulationXY := <<4.759|0.0564>,<9.59|0.064>, <14.385|0.0506>,<19.18|0.0554>>: # < Vel [m/s] | CWind [] > CWindFlowSimulationZY := <<4.759|0.1624>,<14.370|0.1793>, <19.161|0.1908>,<23.952|0.1478>>: # < Vel [m/s] | CWind [] > > DataCB := [ m = 2.62542189, # kg xG = -0.00878856, # m yG = 0.00364785, zG = 0.00157027, Lxx = 0.05384242, # kg*m^2 Lyy = 0.05385576, Lzz = 0.01066556, Lxy = 0.00000104, Lxz = 0.00000018, Lyz = -0.00000322]: DataGeom := [ L_MCB = 0.3, Z_CB = 0.0403]: > Data := DataLift union DataWind union DataCB union DataGeom; (2.1)
Here I had another idea, that will be implemented when the next version of Maple will be avaiable. Inertial and dimensional data may be queried via SolidWorks local server. This is a very simple method to obtain an update set of data, but version that I'm using now can access only dimensions (and not inertial SolidWorks's variables). To open a connection to SolidWorks simply use command OpenConnection(): then open the model using the command Document := OpenDocument("C:\Address_to_file\file.sldasm"): The variable Document now contains a pointer variable to assembly file (loaded in SolidWorks: notice that SolidWorks may ask to rebuild the components, so we have to pay attention that server isn't waiting for user input): in the next command and retrieve dinmensions lists: GetDimensionsList(Document); GetDimensionsList(Document,component="part1-1"); (we have to choose an eventually configuration, if different from Default one) Once we know the dimensions avaiable, we can query them with command: DimensionsList := GetDimensionValue(Document, ["Dimension1@part1-1",...,"Dimension2@part1 -1"]):
we can approximate the Thrust Force (or Lift force) as follows (using typical approximation for propeller):
(0.7 is a typical scale factor). First we have to define Cl and Cd functions, from experimental data: > <<'RPM'|'CLift'|'CDrag'>>; ProbdDBData13x6; OmegaPropDB := [seq(evalf(Pi*ProbdDBData13x6[i][1]/30),i=1. .16)]: CLPropDB CDPropDB := [seq(ProbdDBData13x6[i][2],i=1..16)]: := [seq(ProbdDBData13x6[i][3],i=1..16)]:
(3.2.1)
> # Creation of spline interpolation of Clift: CliftData := [seq( [ OmegaPropDB[i],CLPropDB[i] ],i=1..nops (OmegaPropDB)) ]: CLift := unapply(CurveFitting[Spline](CliftData,omega,degree= 3,endpoint='notaknot'),[omega]): # Creation of spline interpolation of CDrag: CdragData := [seq( [ OmegaPropDB[i],CDPropDB[i] ],i=1..nops (OmegaPropDB)) ]: CDrag := unapply(CurveFitting[Spline](CdragData,omega,degree= 2,endpoint='notaknot'),[omega]): display(array(1..2,[ display([pointplot([OmegaPropDB,CLPropDB],legend= "Experimental"), plot(CLift(omega),omega=OmegaPropDB[1]..OmegaPropDB [nops(OmegaPropDB)],legend="Spline interpolation")], title="CLift",thickness=2), display([pointplot([OmegaPropDB,CDPropDB],legend=
CLift
CDrag
> # Definition of the force FLift and MDrag: FLift2 := omega -> 0.50 * 0.7^2 * rho * CLift(omega) * omega^2 * Radius^3 * CordAvg: # N MDrag2 := omega -> 0.50 * 0.7^3 * rho * CDrag(omega) * omega^2 * Radius^4 * CordAvg: # N*m FLift174omega := FLift2(174): MDrag174omega := MDrag2(174): FLift := omega -> piecewise( omega <= -174, (-1)*FLift2(-omega), omega > -174 and omega < 174, FLift174omega*omega/174, omega >= 174, FLift2(omega) ); MDrag := omega -> piecewise( omega <= -174, (-1)*MDrag2(-omega), omega > -174 and omega < 174, MDrag174omega*omega/174, omega >= 174, MDrag2(omega) ); display(array(1..2, [plot(subs(DataLift,FLift(omega)),omega=0..650,title= "FLift(omega)",thickness=2 ), plot(subs(DataLift,MDrag(omega)),omega=0..650,title= "MDrag(omega)",thickness=2)]));
MDrag(omega)
Obviously, this function cannot be used to evaluate the dynamic of quadcopter, due to singularities that splines and approximetions generate. As we can see, I have implemented those two functions only to compare results of approximations. I have decided to approximate the value of CL and CD with continuos parametric functions, in wich parameters are defined with a minimization of function:
PARAM_C cannot be automatically minimized (an automatic minimization will return obviously the minimum value possible), so will be chosen manually. We can do the same minimization with CD coefficient. This is the best way that I have found to interpolate experimental data. The interpolation systems already implemented in Maple create non continuos (piecewise) functions, that cannot be used in numeric solvers. > infolevel[Optimization] := 3: # Speed of exponential function PARAM_T := 45: printf(" STARTING CLIFT APPROXIMATION \n ---------------------------\n"); residualsLift := [seq( CLPropDB[i] - (PARAM_A+PARAM_B* OmegaPropDB[i])*( 1-exp(-OmegaPropDB[i]/PARAM_T)),i=1..16)]: optimizedL:=op(LSSolve(residualsLift))[2]: Param_A := subs(optimizedL,PARAM_A); Param_B := subs(optimizedL,PARAM_B); CLiftApprox := omega -> (Param_A + Param_B*omega) * ( 1-exp(omega/PARAM_T)); printf(" STARTING CDRAG APPROXIMATION \n ---------------------------\n"); residualsDrag := [ seq( CDPropDB[i] - (PARAM_C+PARAM_D* OmegaPropDB[i])*( 1-exp(-OmegaPropDB[i]/PARAM_T)),i=1..16)]: optimizedD:=op(LSSolve(residualsDrag))[2]; Param_C := subs(optimizedD,PARAM_C); Param_D := subs(optimizedD,PARAM_D); CDragApprox := omega -> (Param_C + Param_D * abs(omega)) * ( 1-exp(-omega/PARAM_T)); display(array(1..2, [display([pointplot([OmegaPropDB,CDPropDB]), plot(CDragApprox(omega),omega=0..700,thickness=2)], view=[0..700,0.02..0.08],title="CDrag Approximation",gridlines=true), display([pointplot([OmegaPropDB,CLPropDB]), plot(CLiftApprox(omega),omega=0..700,thickness=2)], view=[0..700,0.08..0.12], title="CLift Approximation",gridlines=true)])); STARTING CLIFT APPROXIMATION ---------------------------LSSolve: calling linear LS solver LSSolve: calling solver for linearly-constrained linear least-squares problems LSSolve: number of problem variables 2 LSSolve: number of residuals 16 LSSolve: number of general linear constraints 0 LSSolve: feasibility tolerance set to 0.1053671213e-7 LSSolve: iteration limit set to 50 LSSolve: infinite bound set to 0.10e21 LSSolve: number of iterations taken 1 LSSolve: final value of objective 0.949277992106190486e-5
STARTING CDRAG APPROXIMATION ---------------------------LSSolve: calling linear LS solver LSSolve: calling solver for linearly-constrained linear least-squares problems LSSolve: number of problem variables 2 LSSolve: number of residuals 16 LSSolve: number of general linear constraints 0 LSSolve: feasibility tolerance set to 0.1053671213e-7 LSSolve: iteration limit set to 50 LSSolve: infinite bound set to 0.10e21 LSSolve: number of iterations taken 1 LSSolve: final value of objective 0.210573730504911153e-5
CDrag Approximation
CLift Approximation
> # Definitions of thrust force and drag momentum of propellers FLiftApprox := omega -> 0.50 * rho * CLiftApprox(omega) * omega^2 * Radius^3 * CordAvg *(0.7)^2; # N MDragApprox := omega -> 0.35 * rho * CDragApprox(omega) * omega^2 * Radius^4 * CordAvg *0.7^2; # N*m
(3.2.2) We can now evaluate errors committed in that approximation. To have a more robust model will be made another comparison with experimental data from a different source (the wiki of MikroKopter.de on MK3538 motor with the same propeller here modeled: http://www. mikrokopter.de/ucwiki/MK3538). Because of documentation about experimental data collecting are not provide, those data are used only for comparison and not as base for model. Data are provided as Thrust [g] in function of Current [A]. The translation from Current to angular ratio will be based upon Conservative Energy concept (see The Propeller Handbook, Dave Gerr)
in which: > R_inch := 13: # Radius [inch] P_inch := 6: # Pitch [inch] k_inch := 5.3*10^(-15): # Constant Voltage := 16: # [V] < 'Current'| 'Thrust' >; MikroKData;
OmegaMikrok := [ seq( evalf( Pi/30 * (( MikroKData[i][1] * Voltage )/ ( (R_inch)^4 * P_inch * k_inch ))^ (1/3)), i=1..21)]: FTMikrok := [seq([OmegaMikrok[i], MikroKData[i][2]*9.81* 0.001],i=1..21)]:
(3.2.3)
Now that we have comparable data we can plot the difference between formulations: > display(array(1..3,1..2, [[display( [pointplot(FTMikrok,legend="MikroKopter experimental data"), plot(subs(DataLift,[FLift(omega),FLiftApprox (omega)]),omega=0..650,title="FLift(omega)", legend=["FLift","FLift approx"],thickness=2 ) ],gridlines=true), plot(subs(DataLift,[MDrag(omega),MDragApprox(omega) ]),omega=0..650,title="MDrag(omega)" , legend=["MDrag","MDrag approx"], thickness=2, gridlines=true )], [plot(subs(DataLift,FLift(omega)-FLiftApprox(omega) ),omega=0..650,title="Errore FLift(omega)" ), plot(subs(DataLift,MDrag(omega)-MDragApprox(omega) ),omega=0..650,title="Errore MDrag(omega)")], [plot(subs(DataLift,(FLift(omega)-FLiftApprox(omega) )/FLift(omega)),omega=0..650,title="Errore \% FLift(omega)"
MDrag(omega)
Errore FLift(omega)
Errore MDrag(omega)
0 100 200 300 400 500 600 w 0 100 200 300 400 500 600 w
Errore % FLift(omega) 1 1
Errore % MDrag(omega)
The error, as we can see in the second and third row, is more evident for low angular ratio.
Wind Force
The wind force with the follow equation:
Extimation for value of C_wind maybe hard and depends on relative speed of body. I have decided to use a flow simulation software to extimate this value with this procedure: - build of an approximate quadcopter CAD model in SolidWorks and evaluation of exposed surface of the model - simulation of a wind gallery (CAD) bigger enough to approximate boundaries walls dynamic; - Flow Simulation of a air fluid with defined initial speed and pressure (2 different type of simulation, for XY and ZY (= ZX) plane); - retireving from solution average value of pressure behind cad approximate model of quadcopter (horizontal cut plot for pressure, vertical cut plot for velocities). - Evaluation from next equation of drag coefficient:
The simulation returned those values, approximated to a mean value: > < 'Velocity' | 'CWindXY' >; CWindFlowSimulationXY; CWindXY := ( CWindFlowSimulationXY[1][2] + CWindFlowSimulationXY[2][2] + CWindFlowSimulationXY[3][2] +
CWindFlowSimulationXY[4][2] < 'Velocity' | 'CWindZY' >; CWindFlowSimulationZY; CWindZY := ( CWindFlowSimulationZY[1][2] CWindFlowSimulationZY[2][2] CWindFlowSimulationZY[3][2] CWindFlowSimulationZY[4][2]
) / 4; + + + ) / 4;
CWindXYplot := [ seq( [CWindFlowSimulationXY[i][1], CWindFlowSimulationXY[i][2]],i=1..4) ]: CWindZYplot := [ seq( [CWindFlowSimulationZY[i][1], CWindFlowSimulationZY[i][2]],i=1..4) ]: display( array(1..2, [display( [plot(CWindXY,x=CWindFlowSimulationXY[1][1].. CWindFlowSimulationXY[4][1],linestyle=dash,thickness=2), pointplot(CWindXYplot)],gridlines=true,title= "CwindXY",view=[0..25,0..0.25]), display( [plot(CWindZY,x=CWindFlowSimulationZY[1][1].. CWindFlowSimulationZY[4][1],linestyle=dash,thickness=2), pointplot(CWindZYplot)],gridlines=true,title= "CwindZY",view=[0..25,0..0.25])]));
CwindXY
CwindZY
0 0 5 10 x 15 20 25
0 0 5 10 x 15 20 25
To create a sign function will be used the combination of a sin and an arctan: in this case is not important to have fast sign function (as in friction model problem) > plot(sin(arctan(x)), x = -5 .. 5);
2 x
> # Function of wind. Wind speed components must be projected in plant reference matrix: FWindX := (vx,vwindx) -> - sin(arctan(vx)) * 1/2 * rho * CWindZY * SYZ * ( vx - vwindx )^2: FWindY := (vy,vwindy) -> - sin(arctan(vy)) * 1/2 * rho * CWindZY * SYZ * ( vy - vwindy )^2: FWindZ := (vz,vwindz) -> - sin(arctan(vz)) * 1/2 * rho * CWindXY * SXY * ( vz - vwindz )^2: > plot(subs(DataLift,DataWind,[FWindX(v,0),FWindZ(v,0)]),v=-50. .50,title="Wind force",legend=["FwindX/Y","FwindZ"], gridlines=true);
Wind force
10
20 v
40
FwindX/Y
FwindZ
Quadcopter Modeling
> def_quat := true: # TRUE: Quaternion formulation. FALSE: Euler angle formulation
As first passage we need to define the body kinematic with quaternion algebra:
> if def_quat then: qq := make_quat(q): Position := [ x(t), y(t), z(t) ]; TMquad := TM_quat(qq,seq(Position[i],i=1..3)); Phiqq := [abs2_quat(qq)-1]; else: Angle := [ phi(t), mu(t), psi(t) ]; Position := [ x(t), y(t), z(t) ]; TMquad := Translate(x(t),y(t),z(t)). Rotate('Z',Angle[3]). Rotate('Y',Angle[2]). Rotate('X',Angle[1]); end;
(4.1) Definition of main point for body: > PG := origin(TMquad): TMquad2 := TMquad.Translate(-xG,-yG,-zG): PP1 := make_POINT(TMquad2, L_MCB, 0, Z_CB): PP2 := make_POINT(TMquad2, 0,-L_MCB, Z_CB): PP3 := make_POINT(TMquad2,-L_MCB, 0, Z_CB): PP4 := make_POINT(TMquad2, 0, L_MCB, Z_CB): Definition of first order substitution equations: we can refer velocity to origin of the main body as we are considering body as rigid. > if def_quat then: qq_dot := makeAngVel_quat(omega); x_dot := [ u(t), v(t), w(t) ]; # Quaternions angular ratio vs. derivative Phiqq_dot := simplify(subs( abs2_quat(qq) = 1, op( solve( convert( qq_dot - (2 * Transpose(Q_quat(qq)) . map(diff,qq,t) ),set), convert( map(diff,qq,t),list)))),Phiqq): <%>; Phiqq_dot2 := simplify( simplify([seq( diff(lhs(Phiqq_dot[i]),t) = subs(Phiqq_dot, expand(diff(rhs(Phiqq_dot[i]),t)) ), i=1..4)],size), Phiqq); Phix_dot := simplify( simplify(subs( Phiqq_dot,collect( op(
solve( [comp_XYZ( velocity(PG) - make_VECTOR(TMquad, op(x_dot)), TMquad)], map(diff,[comp_XYZ(origin(TMquad),ground)],t))), x_dot)),size),Phiqq): <%>; Phix_dot2 := simplify( simplify([seq( diff(lhs(Phix_dot[i]),t) = subs(Phix_dot, Phiqq_dot,expand(diff(rhs(Phix_dot[i]),t)) ), i=1..3)],size), Phiqq); Phi := Phiqq_dot union Phix_dot: else: x_dot := [ u(t), v(t), w(t) ]; AngRatio := [ phi_dot(t), mu_dot(t), psi_dot(t) ]; Phix_dot := [ seq( diff(Position[i],t) - x_dot[i], i=1..3)]; PhiAngRatio := [ seq( diff(Angle[i],t) - AngRatio[i],i=1..3) ]; Phix_dot_subs := [ seq( diff(Position[i],t) = .3)] union [ seq( diff(Position[i],t,t) [i],t), i=1..3)]; PhiAngRatio_subs := [ seq( diff(Angle[i],t,t) [i],t),i=1..3) ] union [ seq( diff(Angle[i],t) = 1..3) ]; Phi := Phix_dot union PhiAngRatio: end: if def_quat then: <Phiqq_dot>; <Phiqq_dot2>; <Phix_dot>; <Phix_dot2>; else: <PhiAngRatio>; <Phix_dot>; end; x_dot[i], i=1. = diff(x_dot = diff(AngRatio AngRatio[i],i=
(4.2)
We can now define dynamic of bodies. The dynamic of propeller is neglected as too fast for numeric solutions (as usually done in litterature). In fact the presence of propeller dynamuc generates a stiff problem, so solver requires a huge ammount of time and computational resource to converge to numeric solution. So I have decided to use one body formulation. > QUADCOPTER := make_BODY(PG, m, Lxx, Lyy, Lzz, Lyz, Lxz, Lxy): We have to define the propeller angular ratio functions, propeller forces and drag torque of propeller that acts on quadcopter. We can define a sign rule:
FProp + + + + +
Tprop + + -1^(i)
Segni > ### PROPELLER FUNCTIONS ### #gamma1 #gamma2 #gamma3 #gamma4 := := := := t t t t -> -> -> -> 390; 390; 420; 390; # # # # rad/s rad/s rad/s rad/s
########################### > ### PROPELLER FORCE ### for i from 1 to 4 do: ForceP||i := make_FORCE( make_VECTOR( TMquad2, 0, 0, FLiftApprox( gamma||i(t) )),
PP||i, QUADCOPTER): TorqueP||i := make_TORQUE( make_VECTOR( TMquad2, 0, 0, (-1)^(i) * MDragApprox( gamma||i(t) )), QUADCOPTER): end: PropellerForce := [ seq(ForceP||i, i=1..4) ] union [ seq (TorqueP||i, i=1..4) ]; (4.3) > ### WIND FORCE ### #VwX := t -> 0; #VwX := t -> 0; #VwX := t -> 0; WindSpeed := make_VECTOR(ground, VwX(t),VwY(t),VwZ(t)): FWind := make_FORCE( make_VECTOR(TMquad, FWindX(u(t),comp_X(WindSpeed,TMquad)), FWindY(v(t),comp_Y(WindSpeed,TMquad)), FWindZ(w(t),comp_Z(WindSpeed,TMquad))), PG, QUADCOPTER): Now we are ready to define the equations of motion (Newton - Euler formulation) > ts := time(): if def_quat then: if true then: DynaEq2 := Dyna3DSE(QUADCOPTER,{op(PropellerForce), FWind},TMquad): DynaEq := simplify( simplify(subs(Phiqq_dot,Phix_dot, expand(subs(Phiqq_dot2,Phix_dot2, evalf(subs(Data,DynaEq2))))),size),Phiqq); end: else: if true then: DynaEq2 := Dyna3D(QUADCOPTER,{op(PropellerForce),FWind} ): DynaEq := subs(PhiAngRatio_subs, Phix_dot_subs, DynaEq2): end: end: te := time(): printf("\n--- Evaluation time: %f s ---\n",te-ts); ------ NEWTON -----BODIES: 1 - QUADCOPTER EXTERNAL FORCES: 2 - FWind 3 - ForceP1 4 - ForceP2 5 - ForceP3 6 - ForceP4 WARNING: the following objects will not appear in the equations of motion: 7 - TorqueP1 8 - TorqueP2 9 - TorqueP3 10 - TorqueP4 ------ EULERO ------
BODIES: 1 - QUADCOPTER EXTERNAL FORCES: 2 - FWind 3 - ForceP1 4 - ForceP2 5 - ForceP3 6 - ForceP4 EXTERNAL TORQUES: 7 - TorqueP1 8 - TorqueP2 9 - TorqueP3 10 - TorqueP4 --- Evaluation time: 92.165000 s --It is necessary to define initial conditions. We start with a steady state Quadcopter (velocities all neglected): > if def_quat then: IC_position := { x(t) = 0, y(t) = 0, z(t) = 2}: IC_quaternion := { seq( qq[i] = EulerZYX2Quat_quat(0,0,0)[i] ,i=1..4)}: IC_speed := { seq( x_dot[i] = 0, i=1..3) }: IC_AngRatio := { seq( qq_dot[i+1] = 0, i=1..3) }: IC0 := subs(t=0,IC_position union IC_quaternion union IC_speed union IC_AngRatio); else: IC_position := { x(t) = 0, y(t) = 0, z(t) = 0}: IC_angle := { seq( Angle[i] = 0, i=1..3) }: IC_speed := { seq( x_dot[i] = 0, i=1..3) }: IC_AngRatio := { seq( AngRatio[i] = 0, i=1..3) }: IC0 := subs(t=0, IC_position union IC_angle union IC_speed union IC_AngRatio); end: IC0; (4.4) > DAEs := convert(subs( Data union [seq(gamma||i(t)=gamma||i,i=1. .4)] union [VwX(t) = VwX,VwY(t) = VwY,VwZ(t) = VwZ], DynaEq union Phi),set): > if true then: ###### WARNING :: DSOLVE! :: ####### IntRange := 5: ts := time(): solZ := dsolve(DAEs union IC0, numeric,method=classical[rk4], parameters=[gamma1,gamma2,gamma3,gamma4,VwX,VwY,VwZ]); te := time(): printf("Computation DONE! Time: %f seconds",(te-ts)): solZ(parameters=[415.52,422.55,439.11,432.34,0,0,0]); if def_quat then: odeplot(solZ, [t,op(Phiqq)],0..5); end; #################################### end;
0 1 2 t 3 4 5
> solZ(parameters); (4.5) > if def_quat then: odeplot(solZ,[[t,x(t)],[t,y(t)],[t,z(t)]], 0..5, legend=[x,y, z],numpoints=150); odeplot(solZ, [[t,evalf(Quat2EulerXYZ_quat(qq)[1])],[t,evalf (Quat2EulerXYZ_quat(qq)[2])],[t,evalf(Quat2EulerXYZ_quat(qq)[3]) ]],0..5,legend=[psi,mu,phi],numpoints=150); odeplot(solZ,[seq([t,qq[i]],i=1..4)],0..5,legend=[q1,q2,q3, q4],numpoints=150); else: odeplot(solZ,[[t,x(t)],[t,y(t)],[t,z(t)]], 0..5, legend=[x,y, z],numpoints=150); odeplot(solZ,[[t,psi(t)],[t,mu(t)],[t,phi(t)]], 0..5, legend= [psi,mu,phi],numpoints=150); odeplot(solZ,[[t,u(t)],[t,v(t)],[t,w(t)]], 0..5, legend=[u,v, w],numpoints=150); end;
x, y, z
0 1 2 t 3 4 5
0 0 1 2 t 3 4 5
0 0 1 2 t 3 4 5
q1
> if true then: CUDA[Enable](true); ts := time(); NSTEPS := 50:
q2
q3
q4
PlotSeq := [seq(PlotQUADCOPTER(subs(solZ(IntRange/NSTEPS*i), Data,TMquad),3,1,10,5),i=0..NSTEPS)]: display(PlotSeq,view=[-100..100,-100..100,-100..100],scaling= constrained,insequence=true,axes=boxed); te := time(); te-ts; CUDA[Enable](false); end; false
37.674 true
(4.6)
(5.1) Now we have to find an equilibrium point. I have used a little trick to make system converge to desired equilibrium, based on the fact that our modeled quadcopter (like a real one) is not balanced (there is a slighty distance between center of mass and geometrical center of the system). First of all we try to evaluate equilibrium point desired without define input vector values, but only setting a constraint on it. Equilibrium point will evaluate for us exact values for input vector, but not positions.
We have only to recall equilibrium point function to get the list of right positions that has to be passed to linearize command. Thus this can be done with a simple equilibrium evaluated with a solve command, this method can be easily used to find propeller speed in non-canonical positions (positions different from hoovering, usefull if we want to perform a gain scheduling controller, even if it's a little bit useless regulator for quadcopter). > eqPoint := EquilibriumPoint(subs([VwX(t)=0,VwY(t)=0,VwZ(t)=0], STATE_SPACE), subs([VwX(t)=0,VwY(t)=0,VwZ(t)=0], InputVar)[1..4], initialpoint = [x(t)=0, y(t)=0, z(t) =2, u(t)=0, v(t)=0, w(t) =0, q0(t)=1, q1(t)=0, q2 (t)=0, q3(t)=0, omega1(t)=0, omega2 (t)=0, omega3(t)=0], constraints=[seq(gamma||i(t)>250,i= 1..4)]); eqPoint2 := EquilibriumPoint(subs([VwX(t)=0,VwY(t)=0,VwZ(t)=0], STATE_SPACE), subs([VwX(t)=0,VwY(t)=0,VwZ(t)=0], InputVar)[1..4], initialpoint = [x(t)=0, y(t)=0, z (t)=2, u(t)=0, v(t)=0, w (t)=0, q0(t)=1, q1(t)=0, q2(t)=0, q3(t)=0, omega1(t)=0, omega2 (t)=0, omega3(t)=0,op(eqPoint[3])]); NLPSolve: calling NLP solver NLPSolve: using method=sqp NLPSolve: number of problem variables 17 NLPSolve: number of nonlinear inequality constraints 4 NLPSolve: number of nonlinear equality constraints 0 NLPSolve: number of general linear constraints 0 NLPSolve: feasibility tolerance set to 0.1053671213e-7 NLPSolve: optimality tolerance set to 0.3256082241e-11 NLPSolve: iteration limit set to 91 NLPSolve: infinite bound set to 0.10e21 NLPSolve: trying evalhf mode NLPSolve: trying evalf mode NLPSolve: calling NLP solver NLPSolve: using method=sqp NLPSolve: number of problem variables 17 NLPSolve: number of nonlinear inequality constraints 4 NLPSolve: number of nonlinear equality constraints 0 NLPSolve: number of general linear constraints 0 NLPSolve: feasibility tolerance set to 0.1053671213e-7 NLPSolve: optimality tolerance set to 0.3256082241e-11 NLPSolve: iteration limit set to 91 NLPSolve: infinite bound set to 0.10e21 NLPSolve: trying evalhf mode Warning, limiting number of major iterations has been reached attemptsolution: number of major iterations taken 91
NLPSolve: calling NLP solver NLPSolve: using method=pcg NLPSolve: number of problem variables 17 NLPSolve: optimality tolerance set to 0.3256082241e-11 NLPSolve: iteration limit set to 85 NLPSolve: trying evalhf mode attemptsolution: number of major iterations taken 48 (5.2)
Now the system is linearized around equilibrium point found in previous step: > LinPoint := [x(t)=0, y(t)=0, z(t)=2, u(t)=0, v(t)=0, w(t)=0, q0(t)=1, q1(t)=0, q2(t)=0, q3(t)=0, omega1(t)=0, omega2(t)=0, omega3(t)=0, op(eqPoint2 [3])]: LINEAR_SYSTEM := Linearize(subs([VwX(t)=0,VwY(t)=0,VwZ(t)=0], STATE_SPACE), InputVar[1..4], OutputVar, LinPoint);
(5.3)
(5.3)
> PrintSystem(LINEAR_SYSTEM[1]);
list
(5.5) From those equations we can easily derive state space matrices: > x_V2 := [seq(x[i](t),i=1..13)]: u_V2 := [seq(u[i](t),i=1..4)]: A_LinSys,garbage := GenerateMatrix([seq(rhs (LinearizedSysEquations[i]),i=1..13)],x_V2):
'A' = A_LinSys; B_LinSys,garbage := GenerateMatrix([seq(rhs (LinearizedSysEquations[i]),i=1..13)],u_V2): 'B' = B_LinSys; C_LinSys,garbage := GenerateMatrix([seq(rhs(LinearizedSysOutputs [i]),i=1..7)],x_V2): 'C' = C_LinSys; D_LinSys,garbage := GenerateMatrix(linsysout,u_V2): 'D' = D_LinSys; 'x_dot' = 'Ax' + 'Bu'; 'y' = 'Cx';
(5.6) Now we are ready to pass those matrices and the nonlinear model to Matlab. > # Open connection with Matlab internal server. Remember to add Matlab path to enviromental Path variable. Also remember to register Matlab server running a prompt as administrator a typing "matlab /regserver" the first time you try to open a Matlab-link. To open desktop interface type "desktop" in Matlab console. (it does it automatically now!) openlink(); evalM("desktop"); > setvar("ASYS",A_LinSys); setvar("BSYS",B_LinSys); setvar("CSYS",C_LinSys); setvar("DSYS",D_LinSys); Here I have to stop my analysis on system regulator. I have no time to carry on also this topic, that will be implemented as main topic for another course (Automatic Control). In fact, this system presents several issues in stability, observability and reachability, so it requires a very accurate synthesys that, at moment, I don't have enough time to implement. But the initial idea was: - find eigenvalues assigned regulator that manteins linearized system in equilibrium - connect regulator to nonlinear model, via Simulink - Start a simulation with Simulink and check - as option, get vector for numeric value from Matlab enviroment (getvar command) and show quadcopter trajectory with PlotQUADCOPTER procedure. > x_VARS_ss := [ x(t) = x11, y(t) = x12, z(t) = x13, q0(t) = x4, q1(t) = x5, q2(t) = x6, q3(t) = x7, u(t) = x8, v(t) = x9, w(t) = x10, omega1(t) = x1, omega2(t) = x2, omega3(t) = x3]; xdot_VARS_ss := [ diff(omega1(t),t) = x1_dot,
diff(omega2(t),t) = x2_dot, diff(omega3(t),t) = x3_dot, diff(q0(t),t) = x4_dot, diff(q1(t),t) = x5_dot, diff(q2(t),t) = x6_dot, diff(q3(t),t) = x7_dot, diff(u(t),t) = x8_dot, diff(v(t),t) = x9_dot, diff(w(t),t) = x10_dot, diff(x(t),t) = x11_dot, diff(y(t),t) = x12_dot, diff(z(t),t) = x13_dot]; u_VARS_ss := [ gamma1(t) gamma2(t) gamma3(t) gamma4(t) = = = = u1, u2, u3, u4];
(5.7) > NonLinearModel := subs(x_VARS_ss union u_VARS_ss union [VwX(t)= 0,VwY(t)=0,VwZ(t)=0], subs(xdot_VARS_ss,STATE_SPACE)): Eigenvalues assignment problem return as result: > evalM("cd('D:\\Data\\Universit\\Ingegneria Meccatronica Robotica\\Modeling and simulation of mechanical systems\\Tesina\\Matlab')"); evalm("run ./QuadCopter.m"); 'K'=getvar("K"); getvar("StableEig"); "run ./QuadCopter.m"
(5.8)
> # Minimizing function MinimizeIT := (Weight,Deflection,Payload,ConstSet) -> Minimize( subs(DataMin,Weight), subs(DataMin,{ Deflection^2 <= delta^2, Payload^2 <= sigma [Amm]^2, seq( ConstSet[i],i=1.. nops(ConstSet)) })); (6.2)
> FWeight := (A) -> A*L*Density; FDeflection := (Ix,Iy) -> sqrt((1/3*P*L^3/(Ix*E))^2 + (1/2*M* L^2/(Iy*E))^2); FPayload := (dg,Ix,Iy) -> (sqrt(M+P*L^2))*dg/sqrt(Iy^2+Ix^2);
(6.3) > #################### Sezione 1: Circular empty shape beam ###################### # Dimensions Parameter1 := {Di, s}; Area1 := Pi*((Di+2*s)^2-Di^2)/4; Ix1 := Pi*((Di+2*s)^4-Di^4)/64; Iy1 := Pi*((Di+2*s)^4-Di^4)/64; dg1 := Di/2+s; # Shape Shape1 := {s>=0,s>=Di/20}; # Value Weight1 := FWeight(Area1); Deflection1 := FDeflection(Ix1,Iy1); Payload1 := FPayload(dg1,Ix1,Iy1);
(6.4) > MinimizeIT(Weight1,Deflection1,Payload1,Shape1); NLPSolve: calling NLP solver NLPSolve: using method=sqp NLPSolve: number of problem variables 2 NLPSolve: number of nonlinear inequality constraints 2 NLPSolve: number of nonlinear equality constraints 0 NLPSolve: number of general linear constraints 2 NLPSolve: feasibility tolerance set to 0.1053671213e-7 NLPSolve: optimality tolerance set to 0.3256082241e-11 NLPSolve: iteration limit set to 50 NLPSolve: infinite bound set to 0.10e21 NLPSolve: trying evalhf mode attemptsolution: number of major iterations taken 29 (6.5) > ############# Section 2: I Shape Beam ##################
> # Dimensions Parameter2 := { b, h, a }; Area2 := b*h-(b-a)*(h-2*a); Iy2 := b*h^3/12-(b-a)*(h-2*a)^3/12; Ix2 := a*b^3/12+a^3*(h-2*a)/12; dg2 := sqrt((b/2)^2+(h/2)^2); # Shape Shape2 := {b>=20, h>=20, a>=1, a<=6, b<=35, h<=35}; # Value Weight2 := FWeight(Area2); Deflection2 := FDeflection(Ix2,Iy2); Payload2 := FPayload(dg2,Ix2,Iy2);
(6.6)
> MinimizeIT(Weight2,Deflection2,Payload2,Shape2); NLPSolve: calling NLP solver NLPSolve: using method=sqp NLPSolve: number of problem variables 3 NLPSolve: number of nonlinear inequality constraints 2 NLPSolve: number of nonlinear equality constraints 0 NLPSolve: number of general linear constraints 6 NLPSolve: feasibility tolerance set to 0.1053671213e-7 NLPSolve: optimality tolerance set to 0.3256082241e-11 NLPSolve: iteration limit set to 50 NLPSolve: infinite bound set to 0.10e21 NLPSolve: trying evalhf mode attemptsolution: number of major iterations taken 16 (6.7)
13
In this section there are several images that portrait CFD simulation made with SolidWorks Flow Simulation. Simulation is made considering model xed inside a CAD model of a wind gallery with radius greater than 1 m (big enough to not consider gallery boundaries eect), in which a dened airow impacts on surface of the model. On the plane in which is evaluated drag coecient there is a contour plot for global pressure. On the other plane, there is a contour plot of local velocities.
13.1
Simulation images
13.2
Coecients interpolation
14
In the next pages are attached automatically generated reports, in which all proofed congurations results for each solution are summarized.
Data: marted 19 giugno 2012 Designer: Matteo Ragni [134977] Nome studio: Studio progettuale 1 Tipo di analisi: Studio progettuale
Descrizione .......................................... 1
Unit ................................................. 3
Descrizione
Studio Trave a sezione circolare cava. Ottimizzazione del diametro interno e dello spessore della sezione. In questo documento presente solo lultima parte della ottimizzazione, con la fase pi stretta. Il report stato generato automaticamente da SolidWorks Simulation
1
Analizzato con SolidWorks Simulation Simulazione diSezioneCircolare
Unit
68 su 68 scenari eseguiti con successo. Nome del componente
Spessore Diametro Interno Sollecitazione1 Massa1 Spostamento1 mm mm psi g mm 1.4 30 0.12143169 111.865 610.42446009 2 32 0.07178218 173.039 405.84108037
Sistema di unit:
SI (MKS)
mm
Temperatura
Kelvin
Ottimale
1.4 32 0.09950787 118.99 846.6258128
Velocit angolare
Rad/sec
Pressione/Sollecitazione
N/m^2
Unit
Scenario3
Scenario4
Scenario5
Scenario6
Scenario7
Variabili di progetto
Nome
Tipo
Valori
Spessore
Diametro Interno
Unit
Scenario8
Scenario9
Scenario10
Scenario11
Scenario12
Vincoli Unit
mm psi Studio 1 Studio 1
Nome sensore
Condizione
Margini
Nome studio
Spostamento1
minore di
Max:0.1
Sollecitazione1
minore di
Max:2001.5207798
Unit
Scenario13
Scenario14
Scenario15
Scenario16
Scenario17
Nome
Obiettivo
Propriet
Spessore
Massa1
Minimizzare
Massa
10
mm mm mm psi g
Unit
mm mm mm psi g
Scenario18
2 30.4 0.08269411 441.7444834 164.896
Scenario19
1 30.6 0.15382809 807.34270415 80.4122
Scenario20
1.2 30.6 0.13121677 709.75819594 97.1054
Scenario21
1.4 30.6 0.11437707 636.0021552 114.002
Scenario22
1.6 30.6 0.10349574 548.13238344 131.102
Unit
mm mm
Scenario23
1.8 30.6
Scenario24
2 30.6
Scenario25
1 30.8
Scenario26
1.2 30.8
Scenario27
1.4 30.8
Simulazione diSezioneCircolare
Simulazione diSezioneCircolare
Spostamento1 Sollecitazione1 Massa1 0.15121674 790.61281867 80.9211 0.12915045 726.30605906 97.7161 0.1128012 629.82528803 114.715 psi g 462.18740749 152.987 412.5287342 171.003 763.84131794 83.4658 663.33415427 100.77
mm psi g
Sollecitazione1 Massa1
782.72849473 118.277
Unit
Scenario58
Scenario59
Scenario60
Scenario61
1 32 0.13523897 771.48422656 83.9748
Scenario62
1.2 32 0.11474927 645.66681737 101.38
Unit
Scenario28
Scenario29
Scenario31
Scenario32
mm mm mm psi g
Unit
Scenario63
Scenario64
Scenario65
1.8 32 0.08116318 447.00282658 154.819
Scenario66
2 32 0.07178218 405.84108037 173.039
<L_Iter5/>
<SR_Iter5/>
Unit
Scenario33
Scenario34
Scenario36
Scenario37
mm mm mm psi g
Unit
Scenario38
Scenario39
Scenario40
Scenario41
Scenario42
mm mm mm psi g
Unit
Scenario43
Scenario44
Scenario45
Scenario46
Scenario47
mm mm mm psi g
Unit
Scenario48
Scenario49
Scenario50
Scenario51
Scenario52
mm mm mm psi g
Unit
Scenario53
Scenario54
Scenario55
Scenario56
Scenario57
mm mm mm
2 31.6 0.07434461
Simulazione diSezioneCircolare
Simulazione diSezioneCircolare
Trave Sezione ad H
Nome documento SezioneI Default D:\Data\Universit\Ingegneria Meccatronica Robotica\Modeling and simulation of mechanical systems\Tesina\Ottimizzazione\Sezione I\SezioneI.SLDPRT Configurazione Percorso del documento Data modifica Jun 19 11:17:13 2012
Simulazione di Sezione H
Data: marted 19 giugno 2012 Designer: Matteo Ragni [134977] Nome studio: Studio progettuale 1 Tipo di analisi: Studio progettuale
Descrizione .......................................... 1
Unit ................................................. 3
Descrizione
Conclusione .......................................... 9
Studi della trave con sezione ad H. Ottimizzazione della altezza, larghezza e dello spessore. In questo documento presente solo lultima parte della ottimizzazione, con la fase pi stretta. Il report stato generato automaticamente da SolidWorks Simulation
Simulazione diSezioneI
1
Analizzato con SolidWorks Simulation
Simulazione di Sezione ad H
Unit
127 su 127 scenari eseguiti con successo. Nome del componente Unit
25 40 6 0.03768558 1.9527185 451.98 451.98 1.9527185 25 40 6 0.03768558 19 34 4 0.09746581 4.11659425 255.96
Sistema di unit:
SI (MKS)
mm
Temperatura
Altezza Larghezza Spessore Spostamento1 Sollecitazione1 Massa1 mm mm mm mm N/mm^2 (MPa)
Kelvin
Velocit angolare
Rad/sec
Scenario1
19 34 4 0.09746581 4.11659425 255.96
Scenario2
19.5 34 4 0.0950711 4.08560125 257.58
Pressione/Sollecitazione
N/m^2
Scenario3
Scenario4
Scenario5
Scenario6
Scenario7
Nome
Tipo
Valori
Altezza
Larghezza
Spessore
Vincoli Unit
mm Ottimizzazione Trave a I Ottimizzazione Trave a I
Unit
Scenario8
Scenario9
Scenario10
Scenario11
Scenario12
Nome sensore
Condizione
Margini
Spostamento1
minore di
Max:0.1
Sollecitazione1
Max:13.8
mm mm mm mm N/mm^2 (MPa) g
Unit
Nome
Obiettivo
Propriet
Spessore
Massa1
Minimizzare
Massa
10
mm mm mm mm N/mm^2 (MPa) g
Unit
Simulazione di Sezione ad H
Simulazione di Sezione ad H
Altezza Larghezza Spessore Spostamento1 21 35.5 4 0.08092549 3.77989025 272.16 268.92 270.54 3.81038 3.77722125 19 36 4 0.08641526 19.5 36 4 0.08399176
20 35.5 4 0.08441373
3.6928297.0680 075
Sollecitazione1
3.83669825
3.80682075
Massa1
mm mm mm mm N/mm^2 (MPa) g
268.92
270.54
Unit
20 36 4 0.08187498
20.5 36 4 0.08000922
Sollecitazione1
3.74698875
3.7183375
Massa1
mm mm mm mm N/mm^2 (MPa) g
272.16
273.78
Unit
20 34 4.5 0.08421916
Sollecitazione1
3.59546325
3.60871875
Massa1
mm mm mm mm N/mm^2 (MPa) g
287.955
289.778
Unit
Unit
Sollecitazione1
3.50936925
3.48307175
mm mm mm mm N/mm^2 (MPa) g
Massa1
mm mm mm mm N/mm^2 (MPa) g
291.6
293.423
Unit
Unit
Scenario 38
Scenario 39
Scenario 41
mm mm mm mm
20 35 4.5 0.0790123
Simulazione di Sezione ad H
Simulazione di Sezione ad H
Unit
Larghezza Spessore Spostamento1 34.5 5.5 0.06991492 34.5 5.5 0.0679735 34.5 5.5 0.06627038 35 5.5 0.07261319 mm mm mm N/mm^2 (MPa) g
20 35 5 0.07273808
20.5 35 5 0.07085634
Sollecitazione1
3.15553975
3.12780275
mm mm mm mm N/mm^2 (MPa) g
324
326.025
Unit
Altezza Larghezza Spessore Spostamento1 20 35 5.5 0.06786043 20.5 35 5.5 0.0659183 mm mm mm mm N/mm^2 (MPa) g
20 35.5 5 0.07060322
Sollecitazione1
3.0852925
3.04973425
mm mm mm mm N/mm^2 (MPa) g
328.05
330.075
Unit
20 36 5 0.06857901
20.5 36 5 0.06669124
Sollecitazione1
3.0871575
3.019176
Unit
Massa1
mm mm mm mm N/mm^2 (MPa) g
332.1
334.125
Unit
20 34 5.5 0.07209054
mm mm mm mm N/mm^2 (MPa) g
Sollecitazione1
3.04844675
3.01627925
Unit
Massa1
mm mm mm mm N/mm^2 (MPa) g
343.035
345.263
Unit
20 34 6 0.06788046 2.744921
21 34 6 0.06414823 2.68630075
Altezza
mm
20
20.5
mm mm mm mm N/mm^2 (MPa)
Simulazione di Sezione ad H
Simulazione di Sezione ad H
369.36
371.79
Unit
20 34.5 6 0.06588498
Sollecitazione1
2.670604
2.79542375
Massa1
mm mm mm mm N/mm^2 (MPa) g
374.22
376.65
Unit
20 35 6 0.06399964
20.5 35 6 0.06200818
Sollecitazione1
2.75594675
2.8463115
Massa1
mm mm mm mm N/mm^2 (MPa) g
379.08
381.51
Unit
20 35.5 6 0.06222259
Sollecitazione1
2.548199
2.5183905
Massa1
mm mm mm mm N/mm^2 (MPa) g
383.94
386.37
Unit
Scenario123
Scenario124
Scenario125
mm mm mm mm N/mm^2 (MPa) g
Simulazione di Sezione ad H
Data: marted 19 giugno 2012 Designer: Matteo Ragni [134977] Nome studio: Studio progettuale 1 Tipo di analisi: Studio progettuale
Unit
Sistema di unit: Lunghezza/Spostamento Temperatura Velocit angolare Pressione/Sollecitazione mm Kelvin Rad/sec N/m^2 SI (MKS)
Table of Contents
Descrizione .......................................... 1
Unit ................................................. 2
Descrizione
Variabili di progetto Nome
Larghezza Spessore Altezza
Valori
Min:25 Max:30 Fase:1 Min:4 Max:8 Fase:1 Min:25 Max:30 Fase:1
Unit
mm mm mm
Studio di design: ottimizzazione della sezione della trave a T. Si ottimizzano larghezza, altezza e spessore. In questo documento presente solo lultima parte della ottimizzazione, con la fase pi stretta. Il report stato generato automaticamente da SolidWorks Simulation
Condizione
minore di minore di
Margini
Max:0.1 Max:13.8
Unit
mm N/mm^2 (MPa)
Nome studio
Trave T Trave T
Obiettivi Nome
Massa2
Obiettivo
Minimizzare
Propriet
Massa
Spessore
10
Nome studio
-
1
Analizzato con SolidWorks Simulation Simulazione diTrave T
Larghezza Spessore Altezza Spostamento1 30 6 25 0.15343649 4.9639445 94.5 25 7 25 0.16479845 26 7 25 0.15677734 27 7 25 0.15003564
Unit
Corrente
Iniziale
Massa2
mm mm mm mm N/mm^2 (MPa) g
Larghezza Spessore Altezza Spostamento1 3.48882775 111.3 Sollecitazione1 4.839794 98.7 Massa2 55.2 56.4 8.261297 8.1450795 Larghezza Spessore Altezza Spostamento1 29 7 25 0.13949594 4.7814715 100.8 30 7 25 0.13546638 mm mm mm mm N/mm^2 (MPa) g
30 8 27 0.10137196
30 8 27 0.10137196
Sollecitazione1
mm mm mm mm N/mm^2 (MPa)
3.67478425
3.67478425
Massa2
117.6
117.6
Scenario3
Scenario4
Scenario5
Scenario6
Scenario7
mm mm mm mm N/mm^2 (MPa) g
Unit
Scenario8
Scenario9
Scenario10
Scenario11
Scenario12
Larghezza Spessore Altezza Spostamento1 Sollecitazione1 Massa2 28 5 25 0.19253002 6.4968385 72 29 5 25 0.19253002 6.4062895 73.5 30 5 25 0.1791041 6.35442 75
mm mm mm mm N/mm^2 (MPa) g
26 5 25 0.22354788 6.7475725 69
Unit
Unit
28 4 26 0.23272479 7.604447 60
25 5 26 0.21762722 6.519492 69
25 6 25 0.18888357
26 6 25 0.17914879
mm mm mm mm N/mm^2 (MPa) g
Sollecitazione1
5.827081
5.751001
Unit
Massa2
mm mm mm mm N/mm^2 (MPa) g
79.2
81
Unit
mm mm mm mm N/mm^2
26 5 26 0.20471872 6.4226825
27 5 26 0.19388599 6.3545465
28 5 26 0.18466249 6.2772695
29 5 26 0.17677424 6.1980215
30 5 26 0.17002466 6.130626
Simulazione diTrave T
Simulazione diTrave T
Massa2
(MPa)70.57273.57576.5 g
Unit
Larghezza Spessore Altezza Spostamento1 27 6 26 0.16243917 5.3863505 84.6 86.4 88.2 5.299087 5.2359915 28 6 26 0.15513304 29 6 26 0.14890201
25 6 26 0.18122872
26 6 26 0.17102995
Sollecitazione1
5.5467155
5.4719075
Massa2
mm mm mm mm N/mm^2 (MPa) g
81
82.8
Unit
28 5 27 0.17426112 5.8062245 75
30 5 27 0.15915744 5.664773 78
Larghezza Spessore Altezza Spostamento1 26 7 26 0.14803906 4.814897 94.5 96.6 98.7 4.7424155 4.6646585 27 7 26 0.14099898 28 7 26 0.13499742
30 6 26 0.14355639
25 7 26 0.15637312
Sollecitazione1
5.172532
5.330896
Massa2
mm mm mm mm N/mm^2 (MPa) g
90
92.4
Unit
29 6 27 0.13904058 4.9876755 90
Larghezza Spessore Altezza Spostamento1 25 8 26 0.13847488 4.372572 103.2 105.6 108 4.314104 4.2313125 26 8 26 0.13146276 27 8 26 0.12552548
29 7 26 0.12987082
30 7 26 0.12544208
Sollecitazione1
4.6086515
5.0819265
Massa2
mm mm mm mm N/mm^2 (MPa) g
100.8
102.9
Unit
Unit
Larghezza Spessore Altezza Spostamento1 30 8 26 0.11243895 4.058508 115.2 57.6 58.8 7.3777095 7.2815125 25 4 27 0.26633259 26 4 27 0.24878667
28 8 26 0.12045777
29 8 26 0.11612257
mm mm mm mm N/mm^2 (MPa) g
Sollecitazione1
4.15458
4.0953565
Massa2
mm mm mm mm N/mm^2 (MPa) g
110.4
112.8
Unit
mm mm
Simulazione diTrave T
Simulazione diTrave T
Altezza Spostamento1 27 0.13029974 4.1514455 105.6 108 110.4 Larghezza Spessore Altezza Spostamento1 30 6 28 0.12441908 4.898758 93.6 96.6 98.7 4.101182 4.2243265 25 7 28 0.11172609 26 7 28 0.13168999 Sollecitazione1 Massa2 mm mm mm mm N/mm^2 (MPa) g 4.0672475 3.98250175 27 0.12313173 27 0.11705037
27 0.12071317
27 0.11618206
Sollecitazione1
4.36464
4.306768
Massa2
mm mm N/mm^2 (MPa) g
102.9
105
Unit
28 8 27 0.11185661
29 8 27 0.10741926
Sollecitazione1
3.90214875
3.865645
Massa2
mm mm mm mm N/mm^2 (MPa) g
112.8
115.2
Unit
27 4 28 0.22509624
28 4 28 0.21213997
Sollecitazione1
7.2590025
6.720429
Massa2
mm mm mm mm N/mm^2 (MPa) g
61.2
62.4
Unit
26 5 28 0.1869557
27 5 28 0.17553889
Sollecitazione1
5.6356285
5.541313
Unit
Massa2
mm mm mm mm N/mm^2 (MPa) g
73.5
75
Unit
25 6 28 0.16408454
26 6 28 0.15337671
mm mm mm mm N/mm^2 (MPa) g
Sollecitazione1
4.964514
4.794583
Unit
mm
Massa2
mm mm mm mm N/mm^2 (MPa) g
84.6
86.4
Simulazione diTrave T
Simulazione diTrave T
Spessore Altezza Spostamento1 5 29 0.15718037 5.133854 78 79.5 81 Larghezza Spessore Altezza Spostamento1 27 4 30 0.2086766 6.081536 63.6 64.8 66 6.331444 6.2417715 28 4 30 0.19524741 29 4 30 0.18369063 Sollecitazione1 Massa2 mm mm mm mm N/mm^2 (MPa) g 5.020054 4.950963 5 29 0.14868357 5 29 0.14134451 g 117.6 120 122.4 61.2
5 29 0.17870223
5 29 0.16712131
Massa2
62.4
Sollecitazione1
5.6533695
5.145599
Massa2
mm mm mm N/mm^2 (MPa) g
75
76.5
Unit
25 6 29 0.15809106
26 6 29 0.14718009
Sollecitazione1
5.0617495
4.627392
Massa2
mm mm mm mm N/mm^2 (MPa) g
86.4
88.2
Unit
30 6 29 0.1175306
25 7 29 0.13465936
Sollecitazione1
4.1977245
4.381186
Massa2
mm mm mm mm N/mm^2 (MPa) g
95.4
98.7
Unit
29 7 29 0.10622424
30 7 29 0.10148811
mm mm mm mm N/mm^2 (MPa) g
Sollecitazione1
3.76910125
3.7273595
Unit
Massa2
mm mm mm mm N/mm^2 (MPa) g
107.1
109.2
Unit
28 8 29 0.09852786
29 8 29 0.09388272
mm mm mm mm N/mm^2 (MPa) g
Sollecitazione1
mm mm mm mm N/mm^2 (MPa)
3.45237275
3.39609
Unit
Simulazione diTrave T
Simulazione diTrave T
10
Larghezza Spessore Altezza Spostamento1 25 8 30 0.11311136 3.62342625 112.8 115.2 117.6 3.4549285 3.34402525 26 8 30 0.10555935 27 8 30 0.09910939
29 7 30 0.10091829
30 7 30 0.09605732
Sollecitazione1
3.57066375
3.48882775
Massa2
mm mm mm mm N/mm^2 (MPa) g
109.2
111.3
Unit
Scenario178
Scenario179
Scenario180
mm mm mm mm N/mm^2 (MPa) g
Simulazione diTrave T
11
Sezione a croce
Nome documento Sezione croce Default D:\Data\Universit\Ingegneria Meccatronica Robotica\Modeling and simulation of mechanical systems\Tesina\Ottimizzazione\Sezione Croce\Sezione croce.SLDPRT Configurazione Percorso del documento Data modifica Jun 19 11:45:33 2012
Data: marted 19 giugno 2012 Designer: Matteo Ragni [134977] Nome studio: Studio progettuale 1 Tipo di analisi: Studio progettuale
Table of Contents
Nome studio Tipo di analisi Qualit Studio del progetto Cartella Risultato
Descrizione .......................................... 1
Unit ................................................. 2
Descrizione Unit
Sistema di unit: Lunghezza/Spostamento Temperatura Velocit angolare Pressione/Sollecitazione
Trave sezione a croce. Ottimizzazione delle dimensioni caratteristiche di altezza e larghezza del braccio della croce. In questo documento presente solo lultima parte della ottimizzazione, con la fase pi stretta. Il report stato generato automaticamente da SolidWorks Simulation
Tipo
Range con fase Range con fase
Valori
Min:11 Max:13 Fase:0.5 Min:7 Max:9 Fase:0.5
Unit
mm mm
Vincoli
1
Analizzato con SolidWorks Simulation Simulazione diSezione croce
Nome sensore
N/mm^2 (MPa) mm Trave a croce Trave a croce
Condizione
Margini
Unit
Nome studio
Sollecitazione1
minore di
Max:13.8
Spostamento1
minore di
Max:0.1
Scenario1
11 7 4.5658045 0.14732881 107.1
Scenario2
11.5 7 4.2297295 0.13343977 111.3
Nome
B A Sollecitazione 1 Spostamento1 Massa1 mm mm N/mm^2 (MPa)
Obiettivo
Propriet
Spessore
Massa1
Minimizzare
Massa
10
Unit
Scenario3
Scenario4
12.5 7 3.79522675 0.11050614 119.7
Scenario5
13 7 3.48886275 0.10103859 123.9
Scenario6
11 7.5 4.115922 0.13014858 115.875
Scenario7
11.5 7.5 4.09412725 0.11810204 120.375
Unit
mm mm N/mm^2 (MPa) mm g
Scenario8
12 7.5 3.83950475 0.10750756 124.875
Scenario9
12.5 7.5 3.62968875 0.09814074 129.375
Scenario10
13 7.5 3.15592025 0.08985421 133.875
Scenario11
11 8 3.71391275 0.11558882 124.8
Scenario12
11.5 8 3.45335325 0.10509312 129.6
Unit
Scenario1 7
11.5 8.5 3.37887775 0.09395117 138.975 mm mm N/mm^2 (MPa) mm g
Unit
Scenario2 2
11.5 9 2.87256975 mm mm N/mm^2 (MPa)
mm g
0.08578294 144.075
0.07855781 149.175
Unit
Scenario23
Scenario24
Scenario25
mm mm N/mm^2 (MPa) mm g
Data: luned 25 giugno 2012 Designer: Matteo Ragni [156994] Nome studio: Studio progettuale 1 Tipo di analisi: Studio progettuale
Table of Contents
Nome studio Tipo di analisi Qualit Studio del progetto Cartella Risultato
Descrizione .......................................... 1
Unit ................................................. 3
Descrizione
Ottimizzazione della trave rettangolare cava. Ottimizzazione di tre parametri, altezza base e spessore. In questo documento presente solo lultima parte della ottimizzazione, con la fase pi stretta. Il report stato generato automaticamente da SolidWorks Simulation
1
Analizzato con SolidWorks Simulation Simulazione diRettangolare Cava
Unit
29 su 29 scenari eseguiti con successo. Nome del componente Unit
0.6 17.2 25.2 0.22706023 18.57607 15.696 15.696 18.57607 0.6 17.2 25.2 0.22706023 1.4 17.8 26.8 0.07610937 7.1647475 39.816
Sistema di unit:
SI (MKS)
mm
Temperatura
Spessore Altezza Base Spostamento2 Sollecitazione2 Massa1 mm mm mm mm N/mm^2 (MPa)
Kelvin
Velocit angolare
Rad/sec
Scenario1
1.4 17.8 26.8 0.07610937 7.1647475 39.816
Scenario2
1.5 17.8 26.8 0.06999203 6.666674 42.84
Pressione/Sollecitazione
N/m^2
Scenario3
Scenario4
Scenario5
Scenario6
Scenario7
Nome
Tipo
Valori
Spessore
Altezza
Base
Vincoli Unit
mm N/mm^2 (MPa) Studio 1 Studio 1
Unit
Scenario8
Scenario9
Scenario10
Scenario11
Scenario12
Nome sensore
Condizione
Margini
Spostamento2
minore di
Max:0.1
Sollecitazione2
minore di
Max:13.7
mm mm mm mm N/mm^2 (MPa) g
Nome
Obiettivo
Propriet
Spessore
Unit
Massa1
Minimizzare
Massa
10
Unit
Spessore Altezza Base Spostamento2 1.5 17.8 27.2 0.06911332 6.5904435 43.2 46.272 40.32 6.1196725 6.941991 1.6 17.8 27.2 0.06382501 1.4 18 27.2 0.07362358
Sollecitazione2
6.053096
7.084602
Massa1
mm mm mm mm N/mm^2 (MPa) g
46.464
40.152
Unit
Sollecitazione2
6.5144185
6.092531
Massa1
mm mm mm mm N/mm^2 (MPa) g
43.38
46.464
Contents
I Project report 2
2 2 2 3 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 5 5 7 8 8 9
1 Introduction 2 Customer requirements 3 Benchmark 4 Technical specications 5 Targets, goals and parameters 6 Mechanical system model and simulation 6.1 System simplications . . . . . . . . . . . 6.2 Kinematic approach . . . . . . . . . . . . 6.3 Force modeling . . . . . . . . . . . . . . . 6.4 System mechanical model . . . . . . . . . 7 Result discussions 8 Optimization 9 Conclusions
II
Attachments
10
10 12 14
13 CFD Simulation for aerodynamic drag coecients 59 13.1 Simulation images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 13.2 Coecients interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 14 Optimization: numeric simulations 65
References
[1] [2.a] [2.b] [3] P.J. Bristeau, P. Martin, E. Sala un, N. Pedit,The role of propeller aerodynamics in the model of quadrotor UAV, 2009, Procedings of the European Control Conference, 683-688 Propeller coecients database Brandt, J.B. and Selig, M.S., Propeller Performance Data at Low Reynolds Numbers, 2011, 49th AIAA Aerospace Sciences Meeting, AIAA Paper 2011-1255 P. Castillo, R. Lozano, A. Dzul, Stabilization of a Mini Rotorcraft with Four Rotors, 2005, IEEE Control Systems Magazine, 46-55