Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Team Number : 5
Abstract
The project aims to solve one of the many optimization problems which appear while the M-Racing team
is designing the Formula style car; specifically it aims to optimize the structural design of suspension and
steering system. Even though such an exercise might appear to be a minor detail for a competition it is
definitely worth exploring as it gives a useful insight into the analysis of systems with complex
kinematics. This system has been decomposed into 3 subsystems namely, the A-arm subsystem, the
pushrod-bellcrank-shocker subsystem and the steering subsystem. The mounting points of the suspension
and steering systems are chosen as variables. The objective functions for the system and subsystems are
decided after giving due weightage to all the other function that could qualify as objective functions; this
ensures that the problem does not become too complicated. The constraints are driven by engineering
judgment as well as the rules of the competition.
Contents
Abstract ......................................................................................................................................................... 1
1.
Introduction .......................................................................................................................................... 5
2.
Introduction ................................................................................................................................... 6
2.2.
2.3.
Nomenclature ................................................................................................................................ 7
2.4.
2.4.1.
2.4.2.
Constraints ............................................................................................................................ 9
2.4.3.
2.4.4.
Summary Model.................................................................................................................. 10
2.4.5.
2.5.
2.5.1.
2.5.2.
2.6.
2.5.2.1.
2.5.2.2.
2.6.1.
2.6.2.
2.7.
3.
3.2.
Nomenclature .............................................................................................................................. 18
3.3.
3.3.1.
3.3.2.
Constraints: ......................................................................................................................... 20
3.3.3.
3.3.4.
Summary Model.................................................................................................................. 22
3.3.5.
3.4.
3.4.1.
Assumptions ........................................................................................................................ 23
3.4.2.
3.4.3.
3.5.
3.5.1.
3.5.1.1.
3.5.2.
Parametric Studies............................................................................................................... 27
3.5.2.1.
3.5.2.2.
3.6.
4.
Parameter - ......................................................................................................... 29
Discussion ................................................................................................................................... 31
3.6.1.
3.6.2.
Introduction ................................................................................................................................. 32
4.2.
4.3.
Nomenclature .............................................................................................................................. 34
4.4.
4.4.1.
4.4.2.
Constraints .......................................................................................................................... 37
4.4.3.
4.4.4.
Summary Model.................................................................................................................. 38
4.4.5.
4.5.
4.5.1.
4.5.2.
Scaling................................................................................................................................. 41
4.5.3.
4.5.3.1.
4.5.3.2.
4.5.4.
4.6.
4.6.1.
4.6.2.
4.6.3.
4.6.3.2.
4.6.3.3.
4.6.3.1.
4.7.
Discussion ................................................................................................................................... 49
3
5.
System Integration.............................................................................................................................. 51
5.1.
Introduction ................................................................................................................................. 51
5.2.
5.3.
Nomenclature .............................................................................................................................. 51
5.4.
5.4.1.
5.4.2.
Constraints .......................................................................................................................... 53
5.4.3.
5.4.4.
5.5.
6.
5.5.1.
5.5.2.
5.6.
5.7.
Discussion ................................................................................................................................... 58
5.7.1.
5.7.2.
References .......................................................................................................................................... 60
Appendix A ................................................................................................................................................. 61
Appendix B ................................................................................................................................................. 62
Appendix C1 ............................................................................................................................................... 64
Appendix C2 ............................................................................................................................................... 77
Appendix C3 ............................................................................................................................................... 81
Appendix C4 ............................................................................................................................................... 97
1. Introduction
The M-Racing team at the University of Michigan regularly participates in the Formula SAE event every
year and the optimization of the suspension and steering system is a very interesting problem that is an
obvious extension in the design stage of the vehicle. Since the suspension and steering geometry are
normally decided by engineering judgment or unintentional manual optimization, a rough system of
constraints and objective functions already exists for the problem. Even though such an exercise might
appear to be a minor detail for a competition it is definitely worth exploring as it gives a useful insight
into the analysis of systems with complex kinematics.
The suspension system provides the opportunity to clearly identify three subsystems, namely, the A-arm
subsystem, the pushrod-bellcrank-rocker subsystem and the steering subsystem which were considered
for the individual optimization problems by Rohit Jain, Shrikant Mandapaka and Danvir Singh Sethi
respectively.
The objective functions are therefore either performance parameters for the system or factors that affect
the performance factors. The constraints are either trivial, like no contact between 2 elements except at
the point of connection and stresses being within the maximum limit specified by the yield stress of the
material and the desired factor of safety; or specialized, like desired ranges of camber and caster angles of
the wheel assembly, minimum desired turning radius of the vehicle.
The next natural step is to mathematically model these systems or to create meta-models for systems that
do not allow for one. Parametric studies and optimization routines will follow this step to generate
meaningful results in the form of a practically implementable choice of values for the design variables.
The model hence created will be useful for the M-Racing team in the coming years of their design too;
which is why the current model will appear to be a bit too general. Data from the M-Racing team was
acquired and has been used as a basis for this project.
For all the discussion that follows the reader should refer to Figure 1.
2. A-Arm Subsystem
2.1. Introduction
The A-arms along with the pushrod-bellcrank-shocker connect the chassis to the wheel assembly. As a
consequence of being the connecting links they are subjected to forces and moments whenever the vehicle
accelerates or decelerates. The caster and camber angles are important parts of the wheel mounting
geometry and they are evaluated using the outboard mounting points of the A-arms.
2.3. Nomenclature
Table 1: Nomenclature for A-Arm Subsystem
Symbols
Units
2
Description
amax
m/s
diA
doA
EA
Pa
FOS
Factor of Safety
kg
(m,m,m)
Coordinate of point C1
(m,m,m)
Coordinate of point C2
(m,m,m)
Coordinate of point C3
(m,m,m)
Coordinate of point C4
(m,m,m)
Coordinate of point U1
(m,m,m)
Coordinate of point U2
(m,m,m)
Maximum of U1 and U2
U1
Deflection of point U1
U2
Deflection of point U2
cb
degrees
Camber angle
cbmax
degrees
cbmin
degrees
ct
degrees
Caster angle
ctmax
degrees
ctmin
degrees
A1
Pa
A2
Pa
yA
Pa
VU1
VU2
(1)
This function is not expressed analytically; instead an ANSYS model capable of being driven by
MATLAB is prepared. This model is utilizes BEAM189 elements and input data is provided to it through
a file written by MATLAB. At the end of each simulation, the stresses and deformations of the two Aarms are written to an output file which is then loaded into MATLAB so that the data is available for
further analysis. The MATLAB function chooses the maximum of these values and makes them available
to fmincon as and when it is called. A plot of the results obtained at the end of a simulation is shown in
Figure 2 on the next page.
It should be noted that the max function is not a continuous function and therefore optimization results,
even though available for each individual simulation, are not consistent over all simulations.
Here, = 1 (1 ) + 2
(2)
(3)
It should be noted that the von Mises stress is not available as an output for the BEAM189 element in
ANSYS in batch mode. However, it does provide information about the bending, transverse and axial
stresses separately. It was observed that the addition of these values serves as a fairly accurate
approximation of the von Mises stress. This assumption is not dangerous as it is noticed that the stresses
for the system are always well below the limit set by the constraint. This assumption however poses
computational difficulty as the derivative of this constraint is not continuous anymore. This can be used to
explain the slight disparities in the Pareto curves.
8
2.4.2. Constraints
The stress in the A-arm should be less than or equal to the maximum stress that the pushrod can withstand
before failure. The stress is also obtained from the aforementioned ANSYS simulations which are driven
by MATLAB.
1 ( , , , , , , 1 , 2 ; 1 , 2 , 3 , 4 , )
2 ( , , , , , , 1 , 2 ; 1 , 2 , 3 , 4 , )
(4)
(5)
The coordinates of points U1 and U2 correspondingly belong to a vector space VU1, VU2
VUi
where i {1, 2}
(6)
The camber and caster angle should lie within the limits prescribed by their respective minimum and
maximum values. The camber and caster angles are determined using vector algebra. Camber is the angle
made by the projection of the vector from U1 to U2 on x2x3 plane with the x3 axis. Similarly, caster is the
angle made by the projection of the vector from U1 to U2 on x1x3 plane with the x3 axis (Figure 1). Once
the projection has been determined the angle is determined by taking a dot product with the appropriate
unit vector.
0
0
0
0 . 2 1 1 2 1 1 = 2 1 cos
1
1
1
0
1
1
0 . 2 1 0 2 1 0 = 2 1 cos
1
1
1
(7)
(8)
The camber and caster angles lie within a specified limit which is obtained from the M-Racing team.
[ , ]
(9)
[ , ]
(10)
Units
Description
(m,m,m)
Coordinate of point U1
(m,m,m)
Coordinate of point U2
Units
Description
amax
m/s2
diA
doA
EA
Pa
kg
(m,m,m)
Coordinate of point C1
(m,m,m)
Coordinate of point C2
(m,m,m)
Coordinate of point C3
(m,m,m)
Coordinate of point C4
(m,m,m)
Coordinate of point W
(11)
min = 101 (1 , 2 ; 1 , 2 , 3 , 4 , , , , , , , , )
(12)
with = 1 (1 ) + 2
(13)
Subject to:
101 : 1 ( , , , , , , , 1 , 2 ; 1 , 2 , 3 , 4 , , )
102 : 2 ( , , , , , , , 1 , 2 ; 1 , 2 , 3 , 4 , , )
103 104 : (1 , 2 )[ , ]
105 106 : (1 , 2 )[ , ]
107 118 : VUi
(14)
(15)
(16)
(17)
where i {1, 2}
(18)
10
1
X
2
X
g1
g2
g3
g4
g5
The functional dependency table demonstrates that xW is an important parameter but since it is fixed by
the competition rules, a parametric study for the same is not performed. However, the pipe diameters, doA
and diA, and material properties EA and A are considered for parametric studies and results for the same
are presented in the following sections.
1
1
2
1
g1
3
1
1
2
2
2
3
2
g2
g3
g4
g5
Since the objective function is monotonic with respect to only 3 variables, it can be easily noticed,
following from Monotonicity Principle 1, that constraints g2, g4 and g5 are potentially active. It should
also be noted that the problem is well bounded since for variables xU11 and xU13 with respect to
which the objective function is monotonic, there exist constraints with an opposite trend. With
respect to xU11, however, the problem could be unbounded depending on how the variables
interact with each other.
11
Aluminium 7075
200
71.7
Poissons Ratio A
0.285
0.330
360.6
503
It was noted that the variables differ by an order of magnitude while the constraint function values differ
by up to 8 orders of magnitude. Hence, the variables and constraints were scaled to fall within the range [1,1] and the scaled problem was solved.
2.5.2.1. 1st order Design of Experiments
g1(x) v/s x 1U1
-1.12
x 10
-1.12
-1.14
x 10
-1.14
-1.16
-0.02
0.02
0.04
-1.16
0.48
0.5
0.52
-1.1
x 10
-1.1453
-1.15
0.56
x 10
-1.1453
-1.2
0.1
0.12
0.14
0.16
-1.1453
0.02
x 3U1
8
-1.1453
0.54
x 2U1
x 1U1
x 10
-1.1
-1.1453
-1.1453
0.48
0.04
0.06
x 1U2
x 10
-1.12
0.5
0.52
0.54
0.56
-1.14
0.25
0.3
0.35
0.4
x 3U2
x 2U2
12
10
-2
-0.02
0.02
-10
0.48
0.04
0
0.12
0.14
-2
0.16
0.02
0.04
x 1U2
1
0.5
0.52
0.54
0
0.25
0.56
0.35
x 3U2
-2
-4
-0.02
0.3
x 2U2
0.02
-20
0.48
0.04
0.5
0.52
0.54
x 1U1
x 2U1
-2
-3
-2
0.12
0.14
-4
0.16
0.02
0.04
x 3U1
x 1U2
20
-2
-3
-20
0.48
x 3U1
10
-4
0.1
0.54
-10
0.48
0.52
x 2U1
0
0.1
0.5
x 1U1
0.5
0.52
0.54
-4
0.25
0.56
0.3
0.35
0.56
0.06
0.4
0.56
0.06
0.4
x 3U2
x 2U2
0 0.4
0.5
0.6
-1.12
-1.14
-1.16
0.6
x 2U1
0.5
0.6
-1.1
-1.15
-1.2
0.1
x 2U1
0.05
x 1U2
0.15
0 0.1
0.2
x 3U1
x 10
-1
-1.1
-1.15
-1.2
0.6
0.5
x 2U2
0.4 0.1
0.15
-1.1
-1.2
0.35
0.2
x 3U1
0.2
0.15
0.25
0.1
x 3U1
0.3 x 3
U2
-10
-10
-20
0.10.05
x 1U2
0.45
0.5
x 2U1
0.55
0.6
-20
0.55
0.5
0.3
0.25 0.45
x 3U2
0.5
x 2U1
0.55
0.6
0
-10
0.2
0.4 0.1 0.15
3
x U1
0.05
x 1U2
0.5
x 2U2
x 2U2
0.6
0.4 0.5
2
x U1
0.45
0
-10
-20
0.35
-20
0.6
0.6
x 10
0.5
x 2U1
0 0.1
0.15
0.2
x 3U1
0.15
0.3
3 0.25 0.1
3
x U2
x U1
0.2
= 12.269 104
= 8.324 104
Following the first run a few more simulation were run for different initial points and not surprisingly,
they led us to different local minima. This is not strange since the function is not a well behaved
continuous function. This has led us to use the other definition for the objective function as mentioned in
section 1.4.1. The same algorithm was used on the new objective function for both the materials.
The results for the parametric study in are used to generate the following Pareto curves which are
shown below in figure 3:
0.16
0.15
0.14
0.13
0.12
0.7
0.8
0.9
1
1.1
1.2
Deformation of Upper A-arm (mm)
0.82
0.72
0.62
0.52
0.42
0.32
2.20
2.70
3.20
Deformation of Upper A-arm (mm)
15
110
100
90
80
70
60
50
40
30
20
Stress (MPa)
70
50
40
30
20
5
7
9
11
Pipe Outer Diamter (mm)
Stress (MPa)
60
13
7
9
11
Pipe Outer Diameter (mm)
13
Figure 6 Stress at optimal point v/s Pipe OD for Steel (left) and Aluminum (right) for =0.1
One should note that the parametric studies with changing pipe dimensions are important because they
allow for a design which is makes full use of the available material. From the plots it is clear that the
stresses for larger pipes are significantly smaller than those for smaller dimensions. This, in effect, means
that the mechanism is not over-designed for smaller pipes.
On the contrary, however, smaller pipe diameters also give rise to larger deflection of the A-arms. This
behavior is plotted in Figure 7.
Figure 7 Deformation at optimal point v/s Pipe OD for Steel (left) and Aluminum (right) for =0.1
The inner and outer diameters for which the parametric study was carried out are tabulated below:
Table 7 Outer and Inner diameters for parametric study, A-Arm Subsystem
Outer Diameter (mm)
12.7
11
10.922
4.5
16
The above mentioned results from parametric study reflect the classic tradeoff between material usage
and material deflection. While high stresses (within safety limits) are desirable, they are accompanied by
large deformations which are undesirable.
Another very important observation from the parametric studies is the fact that the minimizer remains the
same within an error of 0.1 mm for all the different pipe diameters for a particular choice of material and
the weighting factor . The corresponding results have been tabulated in the following table:
Table 8 Minimizer coordinates (mm)
Steel
= 0.1
= 0.9
Aluminum
[5.0 516.1 151.7 33.0 507.4 341.0] [5.0 516.3 152.1 33.0 507.5 340.9]
[5.0 519.1 128.0 33.0 507.2 321.7] [5.0 517.8 131.6 33.0 507.4 323.3]
Even though a lot of minimizers were obtained during the course of different parametric studies and
formulations of the problem, it should be noted that the optimization exercise did indeed achieve the
desired objective, namely, minimizing the deformation. By observing the difference in deformations in
the upper and lower A-arms, a wise choice of focusing on the upper A-arm while closely maintaining the
lower A-arm within the desired envelope, was made. Very clear trends in stress and deformation with
changing pipe diameters and materials is also observed.
Even though it is hard to pinpoint a single optimizer and optimized function value, the best results were
produced for the following case:
Material
Steel 4130
Weighting factor
0.1
10.922mm, 12.7mm
Minimizer
Initial maximum deformation
0.897 mm
Percentage decrease
43.16%
17
3. Pushrod-Bellcrank-Shocker Subsystem
3.1. Problem Statement
The Pushrod-Bellcrank-Shocker is chosen to be a sub-system, as the spring and the damper give it a
dynamic characteristic, and it is advisable to separate it from the main system and analyze it, if not done,
it gets difficult to solve as an optimization problem when connected to more subsystems.
The objective is to linearize the rate of loading and unloading on the spring-damper system. For this, the
double derivative of the compression in the spring is minimized and made as close to zero as possible.
3.2. Nomenclature
Symbols
Units
Description
(m,m,m)
Coordinate of point S1
(m,m,m)
Coordinate of point S2
(m,m,m)
Coordinate of point S3
N s/m
N/m
lwb
Wheelbase
kg
rc
Cornering radius
m/s
Cornering velocity
(m,m,m)
Coordinate of point C1
(m,m,m)
Coordinate of point C2
(m,m,m)
Coordinate of point C3
(m,m,m)
Coordinate of point C4
(m,m,m)
Coordinate of point C5
(m,m,m)
Coordinate of point C6
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
Coordinate of point S2
(m,m,m)
Coordinate of point S3
(m,m,m)
Coordinate of point S4
Compression of shocker
Coordinate of point S1
18
effect on the objective function was neither convex, nor concave, and not monotonic either. Hence 4
was used as a parameter and the variables were 1 , 2 , 3 .
The following differential equation for a general spring-damper system is solved for the compression in
the shocker.
After solving,
d()
dt
() =
+ K() = , (0) =
(F+ F)
(19)
(20)
Then a double differential of the compression is taken so as to linearize the rate of loading, i.e., minimize
its acceleration as much as possible.
2 ()
2
()
2
()min =
(21)
() 2
{
}
2
Where, F: Force on the spring-damper when cornering (due to its own weight as well as centripetal
acceleration
A: Force on the spring-damper when the vehicle is static (due to its own weight)
Since everything in the objective function is a constant at maximum cornering acceleration, except F,
the objective function can be reduced to;
Reduced Objective function:
201 ()min = ( )2
(22)
The perpendicular force at the wheel W (either due to its own weight or when cornering) is determined.
The moment due to this force on the rod (1 2 ) is calculated, and then subsequently the force vector
at 4 can be calculated as 4 lies in the same plane as plane (1 2 1 ). Then the projection of
this force at 2 is calculated, and then the moment of the force at 2 on the hinge 1 can be calculated.
Using this, the force at 3 is calculated, and then the projection of this force in the direction of 3 5
is calculated.
19
3.3.2. Constraints:
Inequality Constraints
201 : 1
2 1 .3 1
0.75 0
2 1 3 1
202 : 1
2 1 .3 1
2 1 3 1
203 : 3 1 0.080 0
(23)
+ 0.25 0
(24)
(25)
204 : 3 1 + 0.020 0
(26)
205 : 2 1 0.080 0
(27)
207 : 2 3 0.080 0
(29)
206 : 2 1 + 0.020 0
(28)
208 : 2 3 + 0.020 0
(30)
g201(x) and g202(x) state that the angle made between the two vectors 2 1 and 3 1 lies
g203(x), g204(x), g205(x), g206(x), g207(x) and g208(x) state that the lengths of all the sides of the bell-crank
2 1 , 2 3 and 3 1 lie between 20 mm and 80 mm.
Equality Constraints
201 : 4 2 X 2 1 . 3 1 = 0
202 : 2 1 X 3 1 . 5 3 = 0
203 :
204 :
1 1 3 1
4 1 3 1
1 1 3 1
4 1 3 1
(31)
(32)
1 2 3 2
(33)
1 3 3 3
(34)
4 2 3 2
4 3 3 3
h201(x) and h202(x) state that 1 , 2 , 3 , 4 and 5 lie in the same plane.
h203(x) and h204(x) state that 1 lies on the line defined by 3 4 .
Number of Variables: 9
Number of Inequality constraints: 8
Number of Equality constraints: 4
20
Units
Description
(m,m,m)
Coordinate of point S1
(m,m,m)
Coordinate of point S2
(m,m,m)
Coordinate of point S3
Units
Description
N s/m
N/m
lwb
Wheelbase
kg
rc
Cornering radius
m/s
Cornering velocity
(m,m,m)
Coordinate of point C1
(m,m,m)
Coordinate of point C2
(m,m,m)
Coordinate of point C3
(m,m,m)
Coordinate of point C4
(m,m,m)
Coordinate of point C5
(m,m,m)
Coordinate of point C6
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
Coordinate of point U1
Compression of shocker
Coordinate of point S4
21
2 1.3 1
201 ()min = ( )2
|2 1 3 1 |
202 : 1
0.75 0
2 1 .3 1
|2 1 3 1 |
203 : |3 1 | 0.080 0
+ 0.25 0
(35)
(36)
(37)
(38)
204 : |3 1 | + 0.020 0
(39)
205 : |2 1 | 0.080 0
(40)
207 : |2 3 | 0.080 0
(42)
208 : |2 3 | + 0.020 0
(43)
201 : 4 2 X 2 1 . 3 1 = 0
(44)
206 : |2 1 | + 0.020 0
(41)
202 : 2 1 X 3 1 . 5 3 = 0
203 :
204 :
1 1 3 1
4 1 3 1
1 1 3 1
4 1 3 1
(45)
1 2 3 2
(46)
1 3 3 3
(47)
4 2 3 2
4 3 3 3
22
()min
1()
2()
3()
4()
5()
6()
7()
8()
1()
2()
3()
4()
4
X
1
X
The functional dependency table is purely for the understanding of the reader and no results can be
derived from it.
1 , 2 , 3 and 4 all lie in the design space of the A-arm, bounded below by the plane
bounded on the left to about 100 mm to the plane defined by 4 1 2 , and bounded
on the right by the plane 1 3 2 . These bounds have been defined in the lower and
23
&
11
1 2
1 3
21
2 2
2 3
1()
3 2
3 3
2()
31
3()
4()
5()
6()
7()
8()
Since all of the functions used are explicit equations, monotonicity analysis cannot be used for possible
simplifications and possible redundancy of contraints.
24
10
x 10
10
x 10
Objective v/s x 2
S1
5
0
-0.05
0.05
0.1
0.15
0.2
x1
S1
11
x 10
0.3
0.35
x2
S1
Objective v/s x 3
S1
x 10
Objective v/s x 1
S2
0
0.2
0.25
0.3
0.35
0
-0.05
0.4
x3
S1
8
10
0.25
x 10
x 10
0
0.2
0
0.2
0.3
0.1
0.15
x1
S2
Objective v/s x 2
S2
0.25
0.05
0.35
0.4
x2
S2
Objective v/s x 3
S2
0.25
0.3
0.35
0.4
x3
S2
25
Functional
Value
Number
of
Iterations
Initial
Conditions
(1)
7.73E5
31
Initial
Conditions
(2)
7.73E5
33
Initial
Conditions
(3)
7.73E5
28
The functional value of 7.73E+05 corresponds to a force of 89.17 kgs of force on the spring due the
acceleration while turning.
The model was plotted in SolidWorks and the suspension system is shown in Figure 10.
26
3.5.1.1.
Interpretation of Results:
Active constraints: g3(x), g6(x), g8(x)
o The Lagrange Multipliers for the above said constraints are non-zero, and hence theyre
inferred to be active. Their numerical value at the optimum is also checked and as
expected, is zero.
o
The active constraint g3(x) restricts the length of 1 3 to 80 mm and the algorithm
was tending to increasing this value of the length of the bellcrank arm to reduce the
functional value and proceed towards the global minimum, but the constraint was applied
to keep the length of this bellcrank arm within the design space.
o
The active constraint g6(x) states that the length of 1 2 cannot be lesser than
20mm and it is predicted that the algorithm would proceed to make this length zero in
order to proceed towards the global minima, which cannot be allowed in the design
space.
o
The active constraint g8(x) restricts the length of 2 3 to 80 mm and the algorithm
was tending to increasing this value of the length of the bellcrank arm to reduce the
functional value and proceed towards the global minimum, but the constraint was applied
to keep the length of this bellcrank arm within the design space.
Gradient of the function at the optimum is not equal to zero
o This suggests that the function is not at its global optimum at the minimum values found
by the algorithm, and this is in perfect conjunction with the fact that some of the
constraints are active. Hence, it is concluded that within the feasible space, the point
found by the algorithm is the boundary optima within that feasible space.
All the initial conditions converge to the same solution suggesting that it is the global minima
within the feasible design space.
and midpoint of 1 2 .
initial_values=[100;250;265;10
0;270;280;100;260;310]*1e-3;
27
As we go
from
from
XU1 and
towards
the line
defined
by XC1XC2
Functio
nal
Value
4
= [0.233; 0.27; [0.233; 0.288; [0.174; 0.31; 2.04E6
0.2616]
0.232]
[0.0105;0.4254;0.126] 0.269]
Number of
Iterations
19
4
= [0.176; 0.267; [0.176; 0.284; [0.233; 0.26; 1.47E6
0.269]
0.260]
0.308]
[0.0298;0.38;0.1266]
22
9.98E4
37
4
= [0.134; 0.264; [0.135; 0.281; [0.176; 0.27; 1.84E5
0.269]
0.257]
0.326]
[0.062;0.307;0.1271]
26
4
= [0.0487;
0.261; 0.270]
[0.075;0.276;0.1273]
22
4
= [0.04071;
0.2564;
[0.075;0.276;0.1273]
0.270]
[-0.03958;
0.274; 0.260]
28
4
= [0.04021;
[0.107;0.2027;0.1278] 0.259; 0.270]
[0.0138;
0.2786; 0.265]
[-0.027;
0.28; 0.334]
33
4
= [0.012; 0.258; [0.012; 0.278; [-0.013;
0.263]
0.288; 0.34]
[0.0463;0.3424;0.127] 0.270]
9.5E6
Interpretation of Results:
Interpretation of Functional Value in each case: Since the objective is to minimize ( )2 ,
the algorithm will try to bring F, which is the force on the spring due to acceleration as close to
A (Force on the spring at zero acceleration), as possible. The large functional values are actually
just about 100-120 kgs of force on the spring due to the acceleration.
Prediction of Force on Spring when moving away from 1 towards 1 2 : Since the
force on the spring is a function of the force transmitted through the pushrod, which is a function
of cos(), where is the angle between the perpendicular force at 4 and the force that is
transmitted through the pushrod 4 2 .
28
F
u
n
c
t
i
o
n
a
2.00E+07
l
1.50E+07
V 1.00E+07
a
l 5.00E+06
u
0.00E+00
e
s -5.00E+06
The gradient of the function at the boundary optima is not zero, suggesting the fact that there are
some active constraints, stopping the algorithm to proceed to the global optimum.
The boundary optimums for each parametric study are different for the same initial conditions as
they converge to different boundary optimum and the plane in which the algorithm has to work
with changes with the change in the parameter.
3.5.2.2. Parameter -
Seven points for 1 on the line 1 2 were chosen as shown in Figure 14.
The
results
are
as
follows
for
same
initial
conditions:
initial_values=[100;250;265;100;270;280;100;260;310]*1e-3;
29
As we go
away
from
XU1 and
towards
XU2
Functio
nal
Value
Number of
Iterations
1
= [0.115; 0.264; [0. 116; 0.283; [0.053; 0.27; 2.55E5
0.263]
0.22]
[0.0105;0.4254;0.126] 0.269]
49
38
45
27
1
= [0.025; 0.26; [0.025;
0.27]
0.266]
[0.0298;0.38;0.1266]
1
= [0.025; 0.26; [0.025;
0.265]
[0.0463;0.3424;0.127] 0.27]
1
= [-0.023;
0.257; 0.27]
[0.062;0.307;0.1271]
1
= [0.025; 0.26; [0.025;
0.270]
0.266]
[0.075;0.276;0.1273]
0.28; [0.033;
0.287;
0.344]
1.02E6
42
1
= [0.233; 0.27; [0.233; 0.288; [0.174; 0.31; 2.04E6
0.27]
0.261]
0.232]
[0.075;0.276;0.1273]
27
1
= [0.235; 0.27; [0.233; 0.288; [0.174; 0.31; 2.04E6
0.265]
0.232]
[0.107;0.2027;0.1278] 0.270]
25
Interpretation of Results:
Interpretation of Functional Value in each case:
Since the objective is to minimize ( )2 , the
algorithm will try to bring F, which is the force on
the spring due to acceleration as close to A (Force
on the spring at zero acceleration), as possible. The
large functional values are actually just about 100120 kgs of force on the spring due to the
acceleration.
Figure 15: Definition of
Prediction of Force on Spring when moving away
from 1 towards 2 : Since the force on the spring is a function of the force transmitted
through the pushrod, which is a function of
perpendicular force at 4 and the force that is transmitted through the pushrod 4 2 .
o
F
u
n
c
t
i
o
n
a
l
2.50E+06
2.00E+06
V
a 1.50E+06
l
u
1.00E+06
e
s
5.00E+05
0.00E+00
The boundary optimums for each parametric study are different for the same initial conditions as
they converge to different local optimum and the plane in which the algorithm has to work with
changes with the change in the parameter.
3.6. Discussion
3.6.1. Design Implications
Designing a shocker-damper system where the rate of loading is linearized would mean that we try to
minimize the force on the spring-damper system due to the acceleration while cornering. This could lead
to lot of stresses on the pushrod and the pushrod plate. This is not advisable to do so from an engineering
perspective when designing such a system.
Another important point to note is that functional values of the order of 105 correspond to about 80-120
kgs of force on the spring-damper system. Thus, such functional values should not be considered as
impractical.
3.6.2. A possible 'Design Rule' for the solution
A possible design rule that is very much plausible is that, in a given plane of 1 , 2 , 3 , 4 and 5 ,
the length of (1 2 ) should be reduced as much as possible, and the length of (1 3 ) should be
increased as much as possible. After careful analysis of the objective function, this trend has been seen in
several simulations.
These results are very much practical if you're looking to reduce the force on the shocker due to the
acceleration while cornering. But in the design sense, building such a system would be impractical.
The practical constraints on the system that limit the reduction of the objective function further are the
lengths of (1 2 ) & (1 3 ), and plausible 'Design Rule' could be derived as mentioned above.
A stress analysis on the rods was not done in the scope of this project. An interesting future project would
be to include the stresses in the model, and then limit the stresses in the rods to a certain value, and then
minimize the amount of force absorbed by the shocker-damper system. This kind of a study would give a
more usable model, and by usable, I mean in the engineering industry.
31
4. Steering Subsystem
4.1.
Introduction
The steering subsystem of a Formula style car is an interesting optimization problem due to its interaction
with the other subsystems and conflicting design parameters. The rack-and-pinion tie-rod mechanical
steering configuration has been analyzed through this project, the model of which is shown in Figure 17.
An important design aspect of the steering system is the steering torque required from the driver side for
steering the vehicle. Other important considerations are that the steering geometry should be designed
such that the vehicle does not skid when taking the turn and the steering is able to achieve the desired
minimum turning radius of the vehicle. Thus the combination of these different design requirements in the
design of the steering geometry has been analyzed here.
4.2.
Problem Statement
A very important aspect of the performance of the steering subsystem is the torque required for steering
the vehicle. It is desired that the steering torque is not too high but neither too low because we want that
the driver can get some feedback through the steering wheel about the steer of the vehicle, for a
mechanical steering system based on the rack and pinion geometry. A very low steering torque can lead to
problems as small perturbations or disturbances in the steering wheel position can lead to sudden changes
in the angle of steer of the vehicle, besides providing no feedback too the driver. Thus it is desired that the
steering torque is as close as possible to the desired steering torque, which is decided according to the
tradeoff between the feedback to the driver and the effort in steering the vehicle.
Besides trying to achieve a steering torque as close as possible to the desired steering torque, it is also
required that the steering geometry is as close as possible to the Ackermann geometry. The Ackermann
steering geometry is the arrangement of the linkages to avoid slip of the tires when negotiating a turn.
32
This geometric configuration dictates that all axes of rotation of all the wheels of the vehicle pass through
a common center point and the inside front wheel is turned more than the outside front wheel.
Thus the tradeoff between the two aforementioned objective functions motivate the optimization study, as
the optimal solution from one of the objectives might be bad for the other one. In order to minimize the
steering torque the steering arm on the upright needs to be as far away from the pivot axis of the upright
so that the force required for the steering through the rack is minimized. This is practically not possible as
it affects the Ackermann condition as well as it violates the size constraints and also the tie rod is inclined
at an angle to the rack geometry which actually increases the longitudinal force that is required from the
rack and subsequently the steering torque from the driver end. Thus we wish to analyze this tradeoff in
this optimization problem. From the basic Ackermann geometry configuration, it is expected that if no
constraint of the steering torque was considered, then the optimization would lead to a configuration
similar to top image in Figure 18, in which the tie rod is parallel to the rack and point U3 of the upright is
far from the uptight axis. But due to this conflicting requirement, in order to reduce the steering torque,
the tie rod moves out from the line of the rack as the point U3 is now closer to the upright axis, which
decreases the force required from the rack to move the upright, as shown in bottom image of Figure 18.
But this configuration is not similar to the pure Ackermann steering geometry and the point of rotation of
the vehicle now varies with the rack displacement.
But in order to simplify this multi-objective optimization problem, instead of considering the Ackermann
steering parameter as a variable, it would be considered as a parameter and we would try to keep it as
close as possible to pure Ackermann geometry by considering small bounds around it, in the form of
constraints and considering the difference between the steering torque and the desired steering torque as
the objective function, or vice versa, as explained in the succeeding sections.
In this subsystem, we would see from the functions that the objective function is dependent on the
coordinates of the points U1 and U2 as well, which were the variables of the optimization problem in the
A-Arm subsystem optimization problem. Thus the coordinates of these points will be considered as
parameters for the present optimization problem and parametric study can be performed on them.
It should also be noted that as the wheel angle is changed, the torque required for steering the vehicle
varies and how close the geometry is to pure Ackermann geometry also changes. Thus a parametric study
on the steering angle would also be performed.
Upright
Tie rod
Rack
Figure 18: Steering system
33
4.3.
Nomenclature
Table 16: Nomenclature for the Steering subsystem
Symbols
Units
Description
diT
doT
dh
dP
Diameter of pinion
dT
ET
Pa
FOS
Factor of Safety
lack
lR
Length of rack
lti
Toe In
ltid
Desired toe In
ltw
Track Width
lwb
Wheelbase
kg
(m,m)
Rmin
Rmind
ww
Width of wheel
xlimit
xR
Displacement of rack
(m,m,m)
Coordinate of point C6
(m,m,m)
(m,m,m)
Coordinate of point T1
(m,m,m)
Coordinate of point U1
(m,m,m)
Coordinate of point U2
(m,m,m)
Coordinate of point U3
(m,m,m)
cb
radians
Camber angle
cbmax
radians
cbmin
radians
ct
radians
Caster angle
ctmax
radians
ctmin
radians
radians
Steering Angle
Smax
radians
Smin
radians
ti
radians
Nm
Bound on coordinate of T1
Coefficient of friction
Pa
yT
Pa
Nm
Steering Torque
Td
Nm
VU3
4.4.
Optimization Model
force and moment balance equations in 3-D, the force required to move the rack is calculated which is
then used to calculate the torque that the user has to exert at the steering wheel, through the pinion.
All the above mentioned calculations for the mathematical model are performed using 3-D vectors in
MATLAB.
The Ackermann parameter lack represents how close the geometry is to the pure Ackermann geometry for
a particular angle of steer. This parameter can represented as the distance between the center of rotation
w.r.t. the orientation of the front wheels and the center of the rear axle, as depicted in Figure 19. This
parameter is calculated by finding the point of intersection of the axis of the wheels, which are at different
angles. This parameter can be computed for different steer angles, and this steer angle was varied for
different analysis performed, as described in the subsequent chapters.
lack
COR
min( 2 2 )2 = 301 (3 , 1 , ; , 1 , 2 , , 6 , , , , , , , , , )
(48)
Model II: In this case, the Ackermann parameter is treated as the objective function and the steering
torque with small bounds around it is treated as constraint.
min ( )2 = 302 (3 , 1 ; , 1 , 2 , 3 , , 6 , 1 , , )
(49)
Here the parameter c was chosen in order to improve the sensitivity of the function and was chosen to be
c=1000 for the problem.
36
4.4.2. Constraints
As described in Section 4.4.1, two cases have been considered:
Model I: In this case, the steering torque is treated as the objective function and the Ackermann
parameter with small bounds around it is treated as constraints:
1 < ( 1 , 2 , , , 3 , , 6 , 1 , , ) < 1
(50)
2 < ( 2 3 , 1 , ; , 1 , 2 , , 6 , , , , , , , , 2 )2 < 2
...(51)
Model II: In this model, the Ackermann parameter is treated as the objective function and the steering
torque with small bounds around it is treated as constraint.
Besides the aforementioned constraint, the other constraints include the stress limits, toe in and the
minimum turning radius of the vehicle.
The stress in both the tie rods should be less than or equal to the maximum stress that the tie rod pipe can
withstand before failure. The force in the tie-rod was computed by performing the force and moment
balance for the steering torque computation. The stress was computed for two models, when the vehicle is
being steered in both directions. Thus we actually have 4 stress constraints, as stress in both the tie rods
for both the models considered.
, ( , , 6 , 1 , 2 , 3 , 1 , , , , , , , , , )
The minimum radius of turning of the vehicle should be less than the minimum desired radius.
1 , 2 , 3 , , 6 , 1 , , , , 0
(52)
(53)
All the above mentioned constraints are non-linear constraints which cannot be explicitly written and are
calculated analytically in MATLAB.
The coordinates of points U3 and T1 should belong to a vector space VU3 and VT1 as we would consider
the points to lie within a 3D rectangular space within which we would like to find the optimal points.
These constraints have been considered as bounds (lower and upper bounds) on the variables.
3 VU3
(54)
11 11 3
(55)
1 2 = 6 2
(56)
1 3 = 6 3
(57)
Units
Description
(m,m,m)
Coordinate of point T1
(m,m,m)
Coordinate of point U3
37
Units
Description
dP
Diameter of pinion
dT
lR
Length of rack
ltw
Track Width
lwb
Wheelbase
kg
(m,m)
ww
Width of wheel
xR
Displacement of rack
(m,m,m)
Coordinate of point C6
(m,m,m)
Coordinate of point U1
(m,m,m)
Coordinate of point U2
(m,m,m)
N2m2
Bound on coordinate of T1
Coefficient of friction
Nm
Td
(58)
Subject to:
301 : ( , , 1 , 2 , 3 , , 6 , 1 , , ) 1 0
302 : 1 ( , , 1 , 2 , 3 , , 6 , 1 , , ) 0
303 306 , ( , , 6 , 1 , 2 , 3 , 1 , , , , , , , , , , )
307 : 1 , 2 , 3 , , 6 , 1 , , , , , , 0
(59)
(60)
(61)
(62)
38
(63)
314 ; 11 3 11 0
(64)
315 : 11 11 3 0
(65)
301 : 1 2 6 2 = 0
(66)
302 : 1 3 6 3 = 0
(67)
Number of variables: 6
Number of inequality constraints: 15
Number of equality constraints:2
Model II:
Objective function:
min ( )2 = 302 (3 , 1 ; , 1 , 2 , 3 , , 6 , 1 , , )
(68)
Subject to:
g301 : ( 2 3 , 1 , ; , 1 , 2 , , 6 , , , , , , , , 2 )2 2 0
(69)
g 302 : 2 ( 2 3 , 1 ; , 1 , 2 , , 6 , , , , , , , , 2 ) 0
303 306 , ( , , 6 , 1 , 2 , 3 , 1 , , , , , , , , , , )
(70)
(71)
307 : 1 , 2 , 3 , , 6 , 1 , , , , , , 0
(72)
314 ; 11 3 11 0
(74)
(73)
315 : 11 11 3 0
(75)
302 : 1 3 6 3 = 0
(77)
301 : 1 2 6 2 = 0
(76)
Number of variables: 6
f301
1
X
3
X
1
X
2
X
g301
g302
g303 to
g306
g307
g308
g309
g310
g312
g312
g313
g314
g315
h301
h302
40
4.5.
Model Analysis
41
10
100
0
-1
-0.5
9
10
x 10
0
0.5
T1x
f(x) v/s U3y
x 10
0
-1
-0.5
0
0.5
U3x
f(x) v/s U3z
1000
500
0
-1
-0.5
0
U3y
0.5
0
-1
-0.5
0.5
0.5
0
U3x
g1(x) v/s U3z
14
x 10
0
U3z
2
2
0
-2
0
-1
-0.5
15
10
x 10
0
0.5
T1x
g1(x) v/s U3y
20
5
0
-1
-0.5
10
-0.5
0
U3y
0.5
0
-1
-0.5
0
U3z
0.5
42
4.5.3.2.
Variation with rack displacement
An important consideration in the optimization of the subsystem is how the two objective functions vary
with the displacement of the rack. The results from this preliminary study would then be used to decide
the steering angle or the rack position at which the steering torque and the Ackermann parameter should
be computed. As we can see from Figure 21, the shape of the function changes as the variables are
changed (the coordinates of points U3).
Variation of steering torque with angle of steer
with xT1 = 21.9964, coordinates of U31 = (521.599, -45.499, 195)
32.5
19.2
32
19
31.5
Steering Torque
Steering Torque
18.8
18.6
18.4
31
30.5
30
18.2
29.5
18
17.8
29
0
10
15
Position of rack (mm)
20
-0.8
36
35
-0.9
34
-1
Ackermann parameter
Steering Torque
25
20
15
10
Position of rack (mm)
25
33
32
31
-1.1
-1.2
-1.3
30
-1.4
29
0
10
15
Position of rack (mm)
20
25
-1.5
10
15
Position of rack (mm)
20
25
0.6
-9.3
0.4
-9.4
0.2
Ackermann parameter
Ackermann parameter
-9.5
-9.6
-9.7
-9.8
-9.9
-0.2
-0.4
-10
-0.6
-10.1
-10.2
-10.3
-0.8
15
10
Position of rack (mm)
20
15
10
Position of rack (mm)
20
25
25
Figure 21: Variation of steering torque and Ackermann parameter with the
displacement of rack, for different variable values
43
We can observe from the above plots that the variation of the torque with the displacement of rack is
generally increasing and is not very significant. Thus in the subsequent optimization, instead of
considering the average of the steering torque for different rack positions, the steering torque when the
rack is displaced in one direction by half of the maximum rack travel in that direction is considered,
which would reduce the computations required to calculate the steering torque required at each rack
position and then taking the average of that.
We can also observe that the Ackermann parameter trend is not very smooth with the rack travel and the
shape is not consistent with different variable values. Also, from the discussion in Section 4.4.1, the
Ackermann geometry is important only at high steering angles. Thus the Ackermann parameter is
computed and the maximum of the parameter is taken and used in equations (50), (59), (60), (68) from the
rack position given by to the extreme position of rack. Initially xlimit = lR/4 was used for the
optimization, but due to the severe non linearity of the objective function caused by this, the optimization
results were inconsistent and sometimes didnt converge. Thus instead the simplified problem of
xlimit=lR/4 which essentially means calculating the Ackermann parameter at the extreme position of the
rack was used.
Thus according to the analysis with the rack displacement, the steering torque in equations (58), (69) and
(70) was computed at =
as = max
x 2
and the Ackermann parameter in equations (59), (60) and (68) is computed
( ) .
f21
11
31
3 2
3 3
g201
g202
g203
g204
g205
g206
g207
44
4.6.
Optimization Study
11
0.022
3 2
-0.065
31
3 3
0.502
0.175
Function
value at
initial
guess
227.35
Steering
Torque at
initial
guess (Nm)
17.378
Optimized Variable
values (m)
11
0.148
3 2
-0.092
31
3 3
0.490
Function
value at
optima
Steering
Torque at
optima
(Nm)
No of
iteration
2.07E-12
14.162
53
0.200
For the above optimization results, Model II was used with a bound of 2 = 36 N2m2 was used on the
steering torque. For the above result, the following was observed:
None of the constraints or bounds are active as nine of the Lagrangian multipliers were positive.
Thus it is an interior minima.
The minima is probably a local minima. The Interior Point algorithm was actually not able to
solve for some of the initial guesses chosen around the one mentioned above.
There is a significant improvement in the objective function as the optimization is able to reduce
the Ackermann parameter to zero from the initial value of 0.4768m
It was observed that the Interior Point algorithm wasnt able to converge to a feasible solution for some
of the initial guesses. Thus other algorithms like the Active Set and SQP were explored. Similar behavior
was observed with SQP. The Active Set algorithm was slower to perform the optimizations in some cases
though it was able to converge to a feasible solution for all cases. Thus the Active Set algorithm was used
for subsequent runs. It was also observed that the optimization results from the two algorithms do not
match exactly.
45
In general the 'Active Set' algorithm converges to a Boundary Optima, as can also be observed from
Table 22 from the active constraints.
Table 22: Optimization Results for different initial guesses, Model II
Serial
No
Changed
variable
x
coordinate
of U3
x
coordinate
of T1, z
coordinate
of U3
y
coordinate
of U3
z
coordinate
of U3
Initial
Guess (m)
Optimized
Variable
values (m)
0.022
0.272
0.502
0.487
-0.065
-0.085
0.175
0.127
0.022
0.022
0.522
0.528
-0.065
-0.011
0.175
0.194
0.027
0.046
0.502
0.499
-0.065
-0.050
0.155
0.127
0.027
0.036
0.502
0.483
-0.085
-0.061
0.175
0.127
0.032
0.059
0.502
0.484
-0.085
-0.060
0.175
0.127
Function
value
17.663
0.000
440.218
838.866
821.742
Ackermann
steering
parameter,
lack (m)
Steering
Torque
(Nm)
Active
Constraints
0.133
15.232
g201, g207,
lower
bound 4,
upper
bound 1
0.000
13.012
0.663
12.661
0.916
0.907
12.653
14.02073
none
g202, lower
bound 4
g202, lower
bound 1,
lower
bound 4
g202, lower
bound 4
From Table 22, we can observe that the solution is not global optimum as for different guesses, the
optimization result is different. Thus there exist a number of local minima points. From the data collected
for numerous initial conditions (shown in Appendix A, Table 29), we can identify at least 2 points (with
variation of about 5mm in some coordinated) which appear to be consistent as at least 4 optimization runs
each from different initial guesses converge to those points. These points occur at the boundary of the
feasible space.
46
Figure 22: Model of optimized steering system with nominal parameter and initial guess values
As discussed in Section 4.5.3.1, there are multiple smaller peaks in the objective function and constraint 1
with respect to y coordinate of U3, which leads to a number of complicated troughs and peaks in the
actual function and multiple local optima points.
If instead Model I is used for the optimization problem, it was observed that the Interior Point algorithm
cannot compute the optimization result accurately and consistently for different initial guesses as was the
case with Model II. As expected, the optimization result for case where interior optima is found for both
Model I and II is consistent but when a boundary optima is point is found with an active constraint or
bound, in that case the optimal solution for Model I and II is different. Because these two functions seem
to be conflicting, the optimal solution is different.
Table 23: Comparison of optimization results for Model I and II
Initial Guess (m)
Model II
11
0.022
0.269
0.272
0.502
0.493
0.487
3 2
-0.065
-0.086
-0.085
3 3
0.175
0.127
0.127
11
0.032
0.038
0.022
31
0.502
0.591
0.527
3 2
-0.065
-0.002
-0.019
0.175
0.237
0.127
31
3 3
Ackermann parameter
at optima
Model I
Model II
Model I
Model II
0.000
0.133
15.230
17.663
0.352
1.859
14.847
14.020
47
12000
Function Value
10000
8000
6000
4000
2000
function value at the optimal increases. The
0
optimal point also shifts due to this. As the
0.000 10.000 20.000 30.000 40.000
bound is further tightened, the algorithm
Bound on Steering torque (N^2m^2)
breaks down and fails to find the optimal
point, due to which we see unpredictable Figure 23: Parametric Study on bound on steering torque
behavior in the beginning of Figure 23.
(Model II)
4.6.3.2.
With position of rack, xR
As discussed in Section 4.2, it is expected that the optimization might change as the steering angle or the
position of the rack is changed. Thus the optimization was run for different rack positions, where the
Ackermann parameter and the steering torque for turning the wheels from this rack position was
calculated. Thus lack and T were computed at the given xR. The optimization results for the parametric
study with variation in xR are given in Appendix B.
We can observe from the results in Table 30 that there exist different variable values for the optimization
for different xR values and the function value at these is nearly the same, 0.00. Thus we can optimize the
steering geometry according to the xR position where the optimal value of the steering torque and
Ackermann parameter is most important.
4.6.3.3.
With point U1& U2
The coordinates of the point U1 and U2 would actually be optimized by the A-arm subsystem. But for the
present subsystem analysis they have been assumed as parameters. From the parametric study on the point
U1, it was observed that changing any coordinate of the point changes the behavior and optimal solution.
The variable values at the optimal solution point change but it is able to find the local interior minima
with approximately the same function value, but a different steering torque value at the optimal point.
From the results in Table 24, we can conclude that due to the shift in point U1 to the right, the angle of
inclination of the axis of the upright changes. Due to this change the Ackermann parameter for the same
U3 and T1 points would change and actually the control on the steering would reduce. Thus the point T1
and U3 have to be adjusted to find the optimal point.
Similar trends are also obtained as point U2 is moved. The optimal variable values change to compensate
for the change in the axis orientation which leads to a change in the steering capability.
48
1 (m)
0.022
Optimal
variable
values (m)
0.502
0.272
0.502
-0.065
0.493
-0.065
0.175
-0.080
0.175
Ackermann
parameter (m)
Steering Torque
(Nm)
0.086
0.009
15.232
9e-6
9e-5
0.137
0.022
0.522
0.022
0.502
-0.065
0.508
-0.065
0.175
0.175
-0.040
12.653
0.152
0.022
0.552
0.042
0.502
-0.065
0.495
-0.065
0.175
-0.056
0.175
4.7.
Function
value at
optimum
699.526
0.836
12.649
0.175
Discussion
From the optimization study presented through this report for the steering subsystem, it can be observed
that the design of the steering system of a formula style racing car is not straight forward. A number of
parameters are important for the design of the subsystem, namely the steering torque, the closeness to the
Ackermann geometry and the minimum radius of turn required. Based on the weightage of these
functions and parameters, a number of designs can be chosen as there exist a number of local minima
from the optimization study.
Due to the complex nature of the steering torque function and the Ackermann parameter, a global minima
is difficult to converge to. Based on the staring guess, the local optima might be different. Thus other
optimization algorithms and procedures can also be explored to get to a better minima and possibly the
global minima. Due to the huge peaks in the functions near the scaled zero points and the other peaks and
troughs, the gradients are not so smooth and thus sometimes the algorithms of fmincon function fail to
reach the optimal point. And as expected, with the variation of the parameters and the bounds on the
steering torque, the optimal point changes.
The results obtained from the above analysis and optimization models were obtained through a number of
assumptions such as a constant contact patch of the wheel with the ground, no variation of the contact
patch as the car negotiates a turn, static computations for estimating the forces and torques and not
dynamics etc. If better models of these assumptions are available, then a smooth minima might be
possible. Based on a better understanding of the important parameters such as the importance of the
Ackermann parameter at which steering angle, interaction of the static and dynamic toe in with the
steering of the vehicle, and the dynamics of the car, a better optimization problem can be created as at
present the functions and parameters identified were based on a few assumptions.
49
Based on the above optimization study, it was observed that the optimal solution is dependent on some
parameters like coordinates of point U1 and U2 etc. which are also variables of the A-Arm subsystem.
Thus ideally, the A-Arm subsystem should be first designed in order to fix the U1 and U2 variables for
that problem and subsequently optimize the steering subsystem. But this is assuming that only the
individual objective functions are important. Actually there would also be a group objective function
which would lead to direct interaction of the subsystems, which would be explored in the system
integration and system level problem.
50
5. System Integration
5.1. Introduction
Once the subsystem level problems have been solved we move on to solve the system level problem and
notice the design tradeoffs that occur due to contradictions between the optima of the various subsystems
as well as those between the system and subsystem level optima. A mathematical model for the new
objective function is prepared and the subsystem level objectives are incorporated in the problem as
constraints with their bounds as relaxed optima values. A preliminary design of experiments suggests the
tradeoff in the problem which is later verified by the optimization results.
5.3. Nomenclature
Table 25: Nomenclature for the System
Symbols
ac
amax
C
diA
diT
doA
doT
dh
dP
dT
EA
ET
FOS
K
lack
lb
lR
lti
ltides
Units
2
m/s
m/s2
N s/m
m
m
m
m
m
m
m
Pa
Pa
N/s
N/m
m
m
m
m
m
Description
Cornering acceleration
Maximum longitudnal acceleration
Damping Coefficient of shocker
Inner diameter of pipes of A-arm
Inner diameter of pipes of tie rod
Outer diameter of pipes of A-arm
Outer diameter of pipes of tie rod
Diameter of wheel hub
Diameter of pinion
Diameter of Steering wheel
Youngs modulus of material of pipes of A-arm
Youngs modulus of material of the tie rod
Factor of Safety
Rate of loading-unloading of shocker
Spring Constant of shocker
Distance from Pure Ackermann
Height of bump
Length of rack
Toe In
Desired toe In
51
ltw
lwb
m
p
Rmin
Rmind
rc
v
ww
xlimit
xR
1
2
3
4
5
6
1
2
3
4
1
1
2
3
U
U1
U2
cb
cbmax
cbmin
ct
ctmax
ctmin
W
Wmax
S
Smax
Smin
ti
1
m
m
kg
(m,m)
m
m
m
m/s
m
m
m
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
m
m
m
m
radians
radians
radians
radians
radians
radians
radians
radians
radians
radians
radians
radians
m
Track Width
Wheelbase
Mass of the vehicle
Dimension of wheel patch in contact with ground
Minimum radius of rotation of vehicle
Minimum radius of rotation desired
Cornering radius
Cornering velocity
Width of wheel
Position of rack from which Ackermann parameter is computed
Displacement of rack
Coordinate of point C1
Coordinate of point C2
Coordinate of point C3
Coordinate of point C4
Coordinate of point C5
Coordinate of point C6
Coordinate of point CG (Centre of Gravity)
Coordinate of point S1
Coordinate of point S2
Coordinate of point S3
Coordinate of point S4
Coordinate of point T1
Coordinate of point U1
Coordinate of point U2
Coordinate of point U3
Coordinate of point W (center of wheel)
Weighting parameter for multi-objective optimization
Compression of shocker
Maximum of (U1 and U2)
Deflection of point U1
Deflection of point U2
Camber angle
Maximum allowable camber angle
Minimum allowable camber angle
Caster angle
Maximum allowable caster angle
Minimum allowable caster angle
Bump steer
Maximum allowable bump steer
Steering Angle
Maximum allowable steering Angle
Minimum allowable steering Angle
Angle representing the toe in of the wheels
Bound on Ackermann parameter constraint
52
2
3
A
A
T
yA
yT
T
Td
N2m2
m
Pa
Pa
Pa
Pa
Nm
Nm
-
VS2
VS1
VS3
VS4
VT1
VU1
VU2
VU3
(78)
The objective function is coded in MATLAB as an implicit function which returns the steering angle as a
function of the various coordinates of the suspension geometry, the code of which is attached in Appendix
C4. It was first checked for correctness through test cases and was then used for the optimization.
5.4.2. Constraints
This problem is subject to all the constraints of the previously solved subsystem level problems.
Moreover, new constraints appear as constraints in the form of the previous objective functions in the
system level problem. It should be noted that the bounds on these constraints are relaxed optima values
that were obtained while solving subsystem level problems. Even though these relaxed bounds were
obtained by trial and error, it was made sure that they do guarantee subsystem level improvement from
the nominal design.
1 , 2 ; 1 , 2 , 3 , 4 , , , , , , , , 4
with = 1 (1 ) + 2
(79)
53
( )2 5
(80)
( 2 3 , 1 , ; , 1 , 2 , , 6 , , , , , , , , 2 )2 2
(81)
Units
Description
(m,m,m)
Coordinate of point T1
(m,m,m)
Coordinate of point U1
(m,m,m)
Coordinate of point U2
(m,m,m)
Coordinate of point U3
1
2
3
Units
Description
lb
1
2
3
4
1
m
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
(m,m,m)
Height of bump
Coordinate of point C1
Coordinate of point C2
Coordinate of point C3
Coordinate of point C4
Coordinate of point T1
(82)
1 1 , 2 ; 1 , 2 , 3 , 4 , , , , , , , , 4 0
(83)
2 : ( )2 5
(84)
Subject to:
with = 1 (1 ) + 2
3 : ( 2 3 , 1 , ; , 1 , 2 , , 6 , , , , , , , , 2 )2 2
4 : 1 ( , , , , , , , 1 , 2 ; 1 , 2 , 3 , 4 , , )
5 : 2 ( , , , , , , , 1 , 2 ; 1 , 2 , 3 , 4 , , )
6 7 (1 , 2 )[ , ]
8 9 (1 , 2 )[ , ]
10 : 1
2 1 .3 1
2 1 3 1
(85)
(86)
(87)
(88)
(89)
0.75 0
(90)
54
11 : 1
2 1 .3 1
+ 0.25 0
(91)
2 1 3 1
12 : 3 1 0.080 0
(92)
13 : 3 1 + 0.020 0
(93)
15 : 2 1 + 0.020 0
(95)
17 : 2 3 + 0.020 0
(97)
14 : 2 1 0.080 0
(94)
16 : 2 3 0.080 0
(96)
18 : ( , , 1 , 2 , 3 , , 6 , 1 , , ) 1 0
19 : 1 ( , , 1 , 2 , 3 , , 6 , 1 , , ) 0
20 23 , ( , , 6 , 1 , 2 , 3 , 1 , , , , , , , , , , )
24 : 1 , 2 , 3 , , 6 , 1 , , , , , , 0
25 30 VUi
31 39 VSi
40 42 : 3 VU3
where i {1, 2}
where i {1, 2, 3}
4 =
1 1 3 1
4 1 3 1
(100)
(101)
(102)
(106)
(107)
2 : 2 1 X 3 1 . 5 3 = 0
4 1 3 1
(105)
1 : 4 2 X 2 1 . 3 1 = 0
(104)
44 : 11 11 3 0
1 1 3 1
(99)
(103)
43 ; 11 3 11 0
3 =
(98)
(108)
1 2 3 2
(109)
1 3 3 3
(110)
4 2 3 2
4 3 3 3
5 : 1 2 6 2 = 0
(111)
6 : 1 3 6 3 = 0
(112)
55
10
0
-1
-0.5
0.5
0
-1
10
5
-0.5
0.5
0
-1
0
X1U2
10
-0.5
-0.5
X3U1
10
0
-1
0
X2U1
20
0
-1
-0.5
X1U1
0.5
0
-1
X2U2
-0.5
0.5
0.5
0.5
X3U2
56
1.5
0.5
-1
-0.5
0.5
0
-1
10
-0.5
0
X1U3
10
0
-1
-0.5
X2T1
0.5
0
-1
X2U3
-0.5
0.5
0.5
X3U3
Figure 24: First order design of experiments for objective function of system
The DOE plots are characterized by the existence of cusps in the interior of the variable range and by the
existence of well-behaved flattened regions towards the outer reaches of the variables. The fact that the
DOE results are plotted with the scaled variables makes this behavior very evident.
These plots predict the existence of boundary optima because the gradient based algorithms (fmincon)
wouldnt be able to identify the potential minima near the center of the design space due to the cusps; but
we should not get ahead of ourselves because we are currently considering the relaxed problem.
57
Different local optima were obtained from different initial guesses which is expected because we also
observed local optimum in the subsystem level optimization problems.
5.7. Discussion
5.7.1. Result Inference
From the system optimization results it can be seen that the tradeoffs discussed at the subsystem level
have actually manifested themselves. The activity of the constraints points us in this direction. It is also
noticed that the bump steer with the optimized subsystem results is about 45 whereas the optimized
results give a value of about 3. This supports the proposition that the subsystems and the system have
contradicting optima.
In order to justify the contradiction between the different subsystems, one should take a look at the system
level constraints that were formulated from the subsystem objective functions. It is noteworthy to mention
that the bounds for these constraints were chosen not by arbitrary guess but by tuning. This means that it
was tried to keep the bounds as tight as possible while trying to look for a solution. It was noticed that all
the bounds had to be relaxed simultaneously; hence justifying the observation that all the subsystems have
contradicting requirements for optimization.
All the above observations are explained by the following:
The effect of U1 on the shocker force, camber angle and steering geometry; bringing U1 closer to
the chassis decreases the shocker force while increases the camber angle and worsens the
Ackermann parameter.
The effect of U3 on the steering torque and bump steer; moving U3 from the kingpin increases
the steering torque as well as the bump steer.
Effect of U2 on bump steer and camber, bringing U2 towards a point vertically above U1
decreases bump steer but worsens the caster angle conditions.
Besides the above mentioned effects, there are others too which arise due to the nonlinear nature of the
problem.
5.7.2. Possible Design rules
For the Pushrod-bellcrank-shocker subsystem optimization, we can observe the following design rules to
design the subsystem:
There are no general design rules for the A-arm subsystem, the steering subsystem and the system as a
whole because of the nonlinear nature of the problem. Various design iterations can however be
performed and optimization routines be run on them to judge their worth.
59
6. References
[1] Dale Thompson, "Ackerman? Or not? Does it matter?", http://www.racing-cartechnology.com.au/
[2] "Ackerman Steering and Racing Circle (oval) Tracks", http://www.autoware.com/setup/ack_rac.htm
[1] Lu, X. P., Li, H. L., and Papalambros, P., "A Design Procedure for the Optimization of Vehicle
Suspensions", International Journal of Vehicle Design, Vol. 5, No. 1-2, 1984, pp. 129-142
60
Appendix A
Optimization results for Steering Subsystem for various initial guesses to identify potential Local
Minima:
In Table 29, the variable values from the optimization runs for various initial conditions, which are a
combination of the following points, are shown.
11 = 0.022, 0.027, 0.032, 0.037, 0.042
0.272
0.022
0.070
0.094
0.022
0.062
0.252
0.036
0.046
0.084
0.487
0.528
0.483
0.497
0.475
0.496
0.526
0.483
0.499
0.495
-0.085
-0.011
-0.062
-0.056
-0.065
-0.057
-0.008
-0.061
-0.050
-0.057
0.127
0.194
0.127
0.161
0.127
0.178
0.186
0.127
0.127
0.165
0.029
0.022
0.059
0.051
0.045
0.022
0.092
0.022
0.114
0.053
0.492
0.528
0.484
0.492
0.502
0.492
0.527
0.485
0.496
0.498
-0.055
-0.011
-0.060
-0.055
-0.057
-0.055
-0.010
-0.059
-0.056
-0.053
0.127
0.192
0.127
0.127
0.240
0.127
0.191
0.127
0.154
0.154
0.022
0.025
0.049
0.075
0.067
0.494
0.524
0.483
0.509
0.495
-0.053
-0.022
-0.061
-0.048
-0.053
0.127
0.201
0.127
0.195
0.127
61
Appendix B
Optimization results for different xR, for Steering Subsystem:
In Table 30, the variable values from the optimization runs for different xR values, with the following
initial guess are shown.
11 = 0.022
3
0.502
= 0.065
0.175
Function
value at
optimum
Ackermann
parameter (m)
Steering Torque
(Nm)
2479.995
1.575
14.435
0.000
0.000
13.995
0.000
0.000
14.515
1171.179
1.082
12.649
0.000
0.000
13.996
0.000
0.000
14.955
0.136
0.506
-0.078
0.181
0.141
0.513
-0.020
0.207
0.022
0.504
-0.022
0.127
0.032
0.485
-0.037
0.127
0.146
0.518
-0.016
0.225
0.239
0.510
-0.032
62
0.127
0.167
14.010
0.000
0.000
0.523
-0.007
0.162
0.096
13.975
0.000
0.000
0.528
-0.024
0.299
0.073
13.955
0.000
0.000
13.770
0.000
0.000
0.531
-0.024
0.308
0.033
0.532
-0.025
0.314
63
Appendix C1
MATLAB and ANSYS code for A-Arm Subsystem
clear all
% All SI Units
% Constants
g = 9.8; %m/s^2
% Optimization parameters:
cubesize = .05; %cube of side 5cm around the nominal point
% Vehicle specs:
m = 190; %kg
amax = 1.8*g; %Max longitudinal acceleration
%% Material specs:
% 4130 Steel
EA = 200e9; % Young's modulus = 200GPa
nuA = 0.285; % Poisson's ratio
yStress = 360.6e6; % Yield stress = 360.6MPa
FOS = 2.6;
%
%
%
%
%
7075 Aluminium
EA = 71.7e9;
nuA = 0.33;
yStress = 503e6;
FOS = 2.6;
164.500
153.830
254.000
268.000
132.000]';
122.000]';
270.500]';
269.500]';
64
parameters{1}
parameters{2}
parameters{3}
parameters{4}
parameters{5}
parameters{6}
=
=
=
=
=
=
Coords;
MatData;
WheelAngles;
VehicleData;
Bounds;
alpha;
2012\ME555\My
fprintf(fid,'XU1_1 = %f\n',XU1nom(1));
fprintf(fid,'XU1_2 = %f\n',XU1nom(2));
fprintf(fid,'XU1_3 = %f\n',XU1nom(3));
fprintf(fid,'XU2_1 = %f\n',XU2nom(1));
fprintf(fid,'XU2_2 = %f\n',XU2nom(2));
fprintf(fid,'XU2_3 = %f\n\n',XU2nom(3));
fprintf(fid,'Lower Bounds:\n-------------\n');
fprintf(fid,'XU1_1 = %f\n',XU1l(1));
fprintf(fid,'XU1_2 = %f\n',XU1l(2));
fprintf(fid,'XU1_3 = %f\n',XU1l(3));
65
fprintf(fid,'XU2_1 = %f\n',XU2l(1));
fprintf(fid,'XU2_2 = %f\n',XU2l(2));
fprintf(fid,'XU2_3 = %f\n\n',XU2l(3));
fprintf(fid,'Upper Bounds:\n-------------\n');
fprintf(fid,'XU1_1 = %f\n',XU1u(1));
fprintf(fid,'XU1_2 = %f\n',XU1u(2));
fprintf(fid,'XU1_3 = %f\n',XU1u(3));
fprintf(fid,'XU2_1 = %f\n',XU2u(1));
fprintf(fid,'XU2_2 = %f\n',XU2u(2));
fprintf(fid,'XU2_3 = %f\n\n',XU2u(3));
% To be used for no scaling
%
fprintf(fid,'Initial
Deformation
%f\n',optimFunction([XU1nom;XU2nom],parameters)/1e-3);
% init_c = optimFunction([XU1nom;XU2nom],parameters,1);
(mm)
(mm)
+
+
upper
Aarm
(MPa)
%f\n',(init_c(1)
lower
Aarm
(MPa)
%f\n',(init_c(2)
= %f\n',cbmin-init_c(3));
= %f\n\n',ctmin-init_c(5));
% OPTIMIZATION %%%%%%%%%
% To be used for no scaling
%
[x,fval]
=
fmincon(@(x)
optimFunction(x,parameters),[XU1nom;XU2nom],[],[],[],[],[XU1l;XU2l],[XU1u;XU2
u],@(x) optimFunction(x,parameters,1));
% To be used for scaling of variables
[x,fval,exitflag,outputs]
=
fmincon(@(x)
optimFunction(x,parameters),XUnomscaled,[],[],[],[],XUlscaled,XUuscaled,@(x)
optimFunction(x,parameters,1));
xsol = x;
x = (1/2)*(x.*(XUu - XUl) + XUu + XUl);
%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(fid,'Optimized Coordinates:\n----------------------\n');
66
fprintf(fid,'XU1_1 = %f\n',x(1));
fprintf(fid,'XU1_2 = %f\n',x(2));
fprintf(fid,'XU1_3 = %f\n',x(3));
fprintf(fid,'XU2_1 = %f\n',x(4));
fprintf(fid,'XU2_2 = %f\n',x(5));
fprintf(fid,'XU2_3 = %f\n\n',x(6));
fprintf(fid,'Minimum Function Value (mm) = %f\n',fval/1e-3);
final_c = optimFunction(xsol,parameters,1);
% For scaled constraints
fprintf(fid,'Final Stress in upper Aarm (MPa) = %f\n',(final_c(1)
1)*(yStress/FOS)/1e6);
fprintf(fid,'Final Stress in lower Aarm (MPa) = %f\n',(final_c(2)
1)*(yStress/FOS)/1e6);
fprintf(fid,'Final Camber (deg) = %f\n',cbmin*(1+final_c(3)));
fprintf(fid,'Final Caster (deg) = %f\n\n',ctmin*(1-final_c(5)));
+
+
+
+
67
!*** Preprocessor
/TITLE,Upper Aarm Optimization
/PREP7
!*
ET,1,BEAM189
!*
KEYOPT,1,1,1
KEYOPT,1,2,0
KEYOPT,1,3,0
KEYOPT,1,4,2
KEYOPT,1,6,0
KEYOPT,1,7,0
KEYOPT,1,9,0
KEYOPT,1,11,0
KEYOPT,1,12,0
KEYOPT,1,15,0
!*
!*
MPTEMP,,,,,,,,
MPTEMP,1,0
MPDATA,EX,1,,EMODULUS
MPDATA,PRXY,1,,POISSONRATIO
!*** Preprocessor
K,1,X1,Y1,Z1,
K,2,X2,Y2,Z2,
FINISH
1,
LSTR,
2,
!*
! /SHRINK,0
! /ESHAPE,1.0
! /EFACET,1
! /RATIO,1,1,1
/CFORMAT,32,0
! /REPLOT
!*
!*
LATT,1, ,1, , , ,1
!*
LESIZE,ALL, , ,NELEPERBEAM, ,1, , ,1,
LMESH,1,2,1
FINISH
!*** Solution
/SOL
DK,1,,0,,0,ALL, , , , , ,
DK,2,,0,,0,ALL, , , , , ,
FK,3,FX,FORCEONARM1
70
! /STATUS,SOLU
SOLVE
FINISH
AVPRIN,0, ,
ETABLE,SDIR1,SMISC, 31
!*
AVPRIN,0, ,
ETABLE,SDIR2,SMISC, 36
!*
AVPRIN,0, ,
ETABLE,SBYT1,SMISC, 32
!*
AVPRIN,0, ,
ETABLE,SBYT2,SMISC, 37
!*
AVPRIN,0, ,
ETABLE,SBZB1,SMISC, 35
!*
AVPRIN,0, ,
ETABLE,SBZB2,SMISC, 40
71
!*
ESORT,ETAB,SDIR1,0,0, ,
*GET,SAX1,SORT,,MAX
!*
ESORT,ETAB,SDIR2,0,0, ,
*GET,SAX2,SORT,,MAX
!*
ESORT,ETAB,SBYT1,0,0, ,
*GET,SBY1,SORT,,MAX
!*
ESORT,ETAB,SBYT2,0,0, ,
*GET,SBY2,SORT,,MAX
!*
ESORT,ETAB,SBZB1,0,0, ,
*GET,SBZ1,SORT,,MAX
!*
ESORT,ETAB,SBZB2,0,0, ,
*GET,SBZ2,SORT,,MAX
MAXSIGMA1 = (SAX1+SAX2+SBY1+SBY2+SBZ1+SBZ2)/2
!***PLNSOL,S,EQV,0,1.0
!****GET,MAXSIGMA1,PLNSOL,0,MAX
OUTPUTDATA(1,1) = MAXDEFORM1
!***OUTPUTDATA(1,2) = 0
OUTPUTDATA(1,2) = MAXSIGMA1
FINISH
/SOL
LSCLEAR,ALL
72
FINISH
/PREP7
LCLEAR,1,2,1
LDELE,1,2,1,1
K,1,X4,Y4,Z4,
K,2,X5,Y5,Z5,
K,3,X6,Y6,Z6,
LSTR,
1,
LSTR,
2,
!*
! /SHRINK,0
! /ESHAPE,1.0
! /EFACET,1
! /RATIO,1,1,1
/CFORMAT,32,0
! /REPLOT
!*
!*
LATT,1, ,1, , , ,1
!*
LESIZE,ALL, , ,NELEPERBEAM, ,1, , ,1,
LMESH,1,2,1
FINISH
!*** Solution
/SOL
DK,1,,0,,0,ALL, , , , , ,
DK,2,,0,,0,ALL, , , , , ,
73
FK,3,FX,FORCEONARM2
! /STATUS,SOLU
SOLVE
FINISH
AVPRIN,0, ,
ETABLE,SDIR1,SMISC, 31
!*
AVPRIN,0, ,
ETABLE,SDIR2,SMISC, 36
!*
AVPRIN,0, ,
ETABLE,SBYT1,SMISC, 32
!*
AVPRIN,0, ,
ETABLE,SBYT2,SMISC, 37
!*
AVPRIN,0, ,
ETABLE,SBZB1,SMISC, 35
!*
AVPRIN,0, ,
74
ETABLE,SBZB2,SMISC, 40
!*
ESORT,ETAB,SDIR1,0,0, ,
*GET,SAX1,SORT,,MAX
!*
ESORT,ETAB,SDIR2,0,0, ,
*GET,SAX2,SORT,,MAX
!*
ESORT,ETAB,SBYT1,0,0, ,
*GET,SBY1,SORT,,MAX
!*
ESORT,ETAB,SBYT2,0,0, ,
*GET,SBY2,SORT,,MAX
!*
ESORT,ETAB,SBZB1,0,0, ,
*GET,SBZ1,SORT,,MAX
!*
ESORT,ETAB,SBZB2,0,0, ,
*GET,SBZ2,SORT,,MAX
MAXSIGMA2 = (SAX1+SAX2+SBY1+SBY2+SBZ1+SBZ2)/2
!***PLNSOL,S,EQV,0,1.0
!****GET,MAXSIGMA2,PLNSOL,0,MAX
OUTPUTDATA(1,3) = MAXDEFORM2
!***OUTPUTDATA(1,4) = 0
OUTPUTDATA(1,4) = MAXSIGMA2
/OUTPUT
76
Appendix C2
MATLAB code for Pushrod-Bellcrank-Shocker Subsystem:
The fmincon function using Sequential Quadratic Programming is called in MATLAB as follows.
% clear all;
coordinatevalues;
% initial_values=[80;230;245;75;290;245;93;250;325]*1e-3;
initial_values=[100;250;265;100;270;280;100;260;310]*1e-3;
OPTIONS = optimset('Algorithm','sqp');
[X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN] = fmincon(@(x)
displ(x,XS4,XC1,XC2,XW,Mv,Wb,XCG,XC5,Tw,v,R,t,K,C,nu),initial_values,[],[],[]
,[],[XC3(1,1);XC6(2,1);XC6(3,1);XC3(1,1);XC6(2,1);XC6(3,1);XC3(1,1);XC6(2,1);
XC6(3,1)],[XC1(1,1);XU1(2,1);XC3(3,1)+0.100;XC1(1,1);XU1(2,1);XC3(3,1)+0.100;
XC1(1,1);XU1(2,1);XC3(3,1)+0.100],@(x)
constraint(x,XS4,XC1,XC2,XC3,XC4,XU1,XW,Mv,Wb,XCG,XC5,Tw,v,R,nu),OPTIONS);
The objective function, and the other functions that define the objective function are:
function [obj]=displ(XS,XS4,XC1,XC2,XW,Mv,Wb,XCG,XC5,Tw,v,R,t,K,C,nu)
XS1=XS(1:3,1);
XS2=XS(4:6,1);
XS3=XS(7:9,1);
forcep_S3=forceS3(XS,XS4,XC1,XC2,XW,Mv,Wb,XCG,XC5,Tw,v,R,nu); % force at S3
due to acceleration and weight of the vehicle
forcep_S3=forcep_S3*(-1);
fweightpush=fweight(XS,XS4,XC1,XC2,XC5,XW,XCG,Mv,Wb);
% force at S3 at
initial conditions (vector)
% OBJECTIVE FUNTION
obj=(-forcep_S3+(fweightpush))^2;
% fprintf(fid,'Value %f\n\n',obj);
end
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
function [forcep_S3]=forceS3(XS,XS4,XC1,XC2,XW,Mv,Wb,XCG,XC5,Tw,v,R,nu)
77
XS1=XS(1:3,1);
XS2=XS(4:6,1);
XS3=XS(7:9,1);
r2=XS2-XS1;
r3=XS2-XS4;
forcep_S4=forceS4(XS,XS4,XC1,XC2,XW,Mv,Wb,XCG,XC5,Tw,v,R,nu);
forcep_S2=forcep_S4; %Assuming S4-S2 to be a two force member, hence force at
S2=force at S4
forcep_S3=norm(cross((XS2-XS1),forcep_S2))/norm(cross((XS3-XS1),XC5-XS3));
% torque_S1S2=cross(r2,forcep_S2);
% forcep_S3=fsolve(@(x) shrikant(x, torque_S1S2, XS),[1;2;4]); %force at S3
opposing the torque about S1 due to force at S3
end
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
function [forcep_S4]=forceS4(XS,XS4,XC1,XC2,XW,Mv,Wb,XCG,XC5,Tw,v,R,nu)
XS1=XS(1:3,1);
XS2=XS(4:6,1);
XS3=XS(7:9,1);
Fv4=force_wheel(Mv,Wb,XCG);
facc=(((v^2)*XCG(3,1)*Mv/(R*Tw))+(Mv*9.81/2))/(2*nu);
facc=[0;-facc;0];
FS=Fv4+facc;
%Adding the force due to centripetal acceleration to
the weight acting at t=0 seconds
torque_C1C2=torqueC1C2(XC1,XC2,XW,FS);
forcep_S4=fsolve(@(x) danvir(x,XS4,torque_C1C2,XS,XC1,XC2),[1;10;8]);
% forcep_S4=FS;
end
% Fv4 : Force on the front outer wheel due to the weight of the vehicle
(Vector)
% facc : Force on the front outer wheel due to the centripetal force (Vector)
78
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
79
ceq(1)=dot(cross((XS4-XS2),(XS2-XS1)),(XS3-XS1));
ceq(2)=dot(cross((XS2-XS1),(XS3-XS1)),(XC5-XS3));
ceq(3)=((XS1(1,1)-XC3(1,1))/((XC4(1,1)-XC3(1,1))))-((XS1(2,1)XC3(2,1))/(XC4(2,1)-XC3(2,1)));
ceq(4)=((XS1(1,1)-XC3(1,1))/((XC4(1,1)-XC3(1,1))))-((XS1(3,1)XC3(3,1))/(XC4(3,1)-XC3(3,1)));
end
80
Appendix C3
MATLAB code for Steering Subsystem:
The MATLAB functions and m files used for the optimization are included in the succeeding pages:
%M file containing the parametric values and constants, based on the
% data obtained from the M Racing team
clear
clc
%Fixed points
XCG = [0; -755.904; 299.72]/1000;
XC6 = [ 0; -101.998; 15.897]/1000;
XW1o = [584.2; 0; 222.25]/1000;
XU11 = [518.599; -5.001; 127]/1000;
XU21 = [ 505.729; -32.999; 315.998]/1000;
%vehicle dimensions
ltw = 1168.4/1000;
lwb = 1574.8/1000;
m = 190;
mu = 1.34;
wheelw = 8*25.4/1000; %8 inch
patch = [8.315/1000, wheelw];
%rack-pinion-steering wheel
dP=1*25.4/1000; %diameter of pinion = 1 inch
lR = 0.866*2*25.4/1000;
dT = 260.35/1000;%diameter of steering wheel
% material properties
diT = 10.922/1000;
doT = 12.7/1000;
ET = 200e9;
sigmaT = 360.6e6;
nuT = 0.285;
FOS = 1.6;
%desired properties
ltid = 0.05*25.4/1000; %toe in length
dh = 10*25.4/1000; %hub diameter
tauTd = 14;
Rmind = 7.25;
%phiti1d = asin(ltid/ dh);
phiti1d=0;
phiti2d = -phiti1d;
%Var = [XT11; XU31; phiti] phiti is toe in angle of wheel
%bounds
cuboid_bound = 0.25; %25cm bound around XUC1
T1_bound = 0.25; %25cm bound
lack_bound = 0.4;
lti_bound = 0.01; % 2mm bound
tauT_bound = 6^2; %0.5Nm bound
81
=
=
=
=
XU11-[ltw-2*(XW1o(1)-XU11(1));0;0];
XU21-[ltw-2*(XW1o(1)-XU21(1));0;0];
(XU11+XU21)/2; %center point of U1 and U2
(XU12+XU22)/2;
U3_bound = abs(XU11-XU21);
%defualt values
XT11_initx = XC6(1)+lR/2+0.01;
XU31_init =([501.599; -65.49898; 175.00]+[5;5;5]) /1000;
phiti1_init = phiti1d;
xp = 0;
%Change this to true if want to switch the ackermann parameter as the
%objective function and the steering torque as a constraint..
lack_obj = 1;
xlimit = lR/4; %the lower x point from which the ackermann steering
% is minimized that is the steering parameter is minimized from xlimit
% to lR/2 (length of rack/2)
i=1;
filename_optim = strcat(file_start, num2str(i), file_end);
82
if phi_var==0
headings_optim = {'lack upper'; 'lack lower'; 'stress 1'; 'stress 2'; 'stress
3';...
'stress 4'; 'min turning radius'; 'Var 1'; 'Var 2'; 'Var 3'; 'Var 4'; ...
Var 5'; 'Steering torque'; 'lack max'; 'lack min'; 'Function value'};
else
headings_optim = {'lack upper'; 'lack lower'; 'stress 1'; 'stress 2'; stress
3';...
'stress 4'; 'toe in 1 upper'; 'toe in 1 lower'; 'toe in 1 upper'; ...
'toe in 1 lower'; 'min turning radius'; 'Var 1'; 'Var 2'; 'Var 3';'Var 4';...
'Var 5'; 'Steering torque'; 'lack max'; 'lack min';'Function value'};
end
fid = fopen(filename_optim, 'w');
for p=1: length(headings_optim)
fprintf(fid, '%s, ', headings_optim{p});
end
fprintf(fid, '\n');
fclose(fid);
if (U3_bound(1,1)<cuboid_bound)
U3_bound(1,1) = cuboid_bound;
end
if (U3_bound(2,1)<cuboid_bound)
U3_bound(2,1) = cuboid_bound;
end
%parameters combined
fixed_points = [XU11, XU21, XU12, XU22, XUC1, XUC2, XW1o, XW2o, XCG, XC6];
veh_dim = [m, mu, ltw, lwb, wheelw, patch];
diameters = [dP, lR, dT];
material = [diT, doT, ET, sigmaT, nuT, FOS];
desired = [tauTd, ltid, dh, Rmind];
bounds = [cuboid_bound, T1_bound, lack_bound, lti_bound, tauT_bound];
if phi_var==0
LB = [-1; -1; -1; -1];
UB = [1; 1; 1; 1];
Var_init = [XT11_initx; XU31_init];
lower_bound = [XC6(1,1)+lR/2; XUC1 - U3_bound/2];
upper_bound = [XC6(1,1)+T1_bound+lR/2; XUC1 + U3_bound/2];
else
Var_init = [XT11_initx; XU31_init; phiti1_init];
LB = [-1; -1; -1; -1; -1];
UB = [1; 1; 1; 1; 1];
lower_bound = [XC6(1,1)+lR/2; XUC1 - U3_bound/2; phiti1d-0.5];
upper_bound = [XC6(1,1)+T1_bound+lR/2; XUC1 + U3_bound/2; phiti1d + 0.5];
end
parameters{1} = fixed_points;
parameters{2} = veh_dim;
83
parameters{3}
parameters{4}
parameters{5}
parameters{6}
parameters{7}
parameters{8}
=
=
=
=
=
=
diameters;
material;
desired;
bounds;
lower_bound;
upper_bound;
scaled_var_init = (2*Var_init-upper_bound-lower_bound)./(upper_boundlower_bound);
options = optimset('Algorithm', 'active-set',...
'Display', 'final-detailed');
%fmincon called
[optim_scaled, fval, exitflag, output, lambda, grad, hessian] = ...
fmincon(@(x) steering_subsystem(x, xp, xlimit, parameters, filename_optim,
...
0, lack_obj), scaled_var_init, [], [], [],[], ...
LB, UB, @(x) steering_subsystem(x), options)
for q=1:length(optim_scaled)
optim(q, 1) = 0.5*(optim_scaled(q, 1)*(upper_bound(q,1)lower_bound(q,1))+upper_bound(q,1)+lower_bound(q,1));
end
[val, Ceq, COR, lack, tauT, lack_max, lack_min, tauTx] = ...
steering_subsystem(optim_scaled, xp, xlimit, parameters, '', 0, lack_obj);
[C] = steering_subsystem(optim_scaled);
84
if (nargin<3)
return_val = C;
else
%%
clear lack stress tauT
%extracting the parameters from the cell array
fixed_points = parameters{1};
veh_dim = parameters{2};
diameters = parameters{3} ;
material = parameters{4} ;
desired = parameters{5};
bounds = parameters{6};
lower_bound = parameters{7};
upper_bound = parameters{8};
%descaling the variables
for i=1:length(scaled_var)
Var(i, 1) = 0.5*(scaled_var(i, 1)*(upper_bound(i,1)lower_bound(i,1))...
+upper_bound(i,1)+lower_bound(i,1));
end
XT11x = Var(1,1);
XU31p = Var(2:4, 1);
85
%if the toe in angle is not sent or is not a variable, then use toe
% in angle as 0
if length(Var)~=5
phiti1 = 0;
Var = [Var; phiti1];
else
phiti1 = Var(5, 1);
end
phiti2 = -phiti1;
XU11 = fixed_points(:,1);
XU21 = fixed_points(:,2);
XU12 = fixed_points(:,3);
XU22= fixed_points(:,4);
XW1o = fixed_points(:,7);
XCG = fixed_points(:,9);
m = veh_dim(1);
mu = veh_dim(2);
ltw = veh_dim(3);
lwb = veh_dim(4);
patch = veh_dim(6:7);
dP = diameters(1);
lR = diameters(2);
diT = material(1);
doT = material(2);
sigmaT = material(4);
FOS = material(6);
tauTd = desired(1);
ltid = desired(2);
dh = desired(3);
Rmind = desired(4);
cuboid_bound = bounds(1);
T1_bound = bounds(2);
lack_bound = bounds(3);
lti_bound = bounds(4);
tauT_bound = bounds(5);
%%
[pr_coord, link_lengths, o_coord, Flag1] = ...
coordinates(xp, Var,lR, fixed_points);
%computing the coordinates of other points, given coordinates of U31,
%T11
%If fsolve failed, then return default values
if Flag1<0
if length(scaled_var)==5
C = [1e10, 1e10,1e10, 1e10, 1e10, 1e10, 1e10, 1e10, 1e10, ...
1e10, 1e10];
else
C = [1e10, 1e10,1e10, 1e10, 1e10, 1e10, 1e10];
end
return_val = 1e10;
COR=[0;0;0];
tauT = 1e10;
lack_max = 100;
86
lack_min=100;
lack = zeros(50,1);
tauTx=zeros(50,1);
return;
end
%Toe-in parameters
lti1 = sin(phiti1)*dh;
lti2 = sin(phiti2)*dh;
xnew = linspace(xlimit, lR/2, 50);
%xnew=xp;
[lack, lack_max, lack_min, COR, CORmin, new_coord]= ...
steer(xnew, lwb, ltw, Var, lR, fixed_points, link_lengths, o_coord,...
pr_coord);
XW1p = pr_coord(13:15);
XW2p = pr_coord(16:18);
phi1p = pr_coord(19);
phi2p = pr_coord(20);
% Computing the torque on the uprights and the force required from the
rack
tau11 = wheel_tor(XU11, XU21, XW1p, [0; patch(1)], ...
[-patch(2)/2; patch(2)/2], phi1p, m, mu, +1);
% torques on the two wheels are opposing
tau21 = wheel_tor(XU12, XU22, XW2p, [-patch(1); 0], ...
[-patch(2)/2; patch(2)/2], phi2p, m, mu, +1);
[Fin1, R11, R21] = statics(fixed_points, pr_coord, tau11, tau21);
tau12 = wheel_tor(XU11, XU21, XW1p, [0; patch(1)], ...
[-patch(2)/2; patch(2)/2], phi1p, m, mu, -1);
tau22 = wheel_tor(XU12, XU22, XW2p, [-patch(1); 0], ...
[-patch(2)/2; patch(2)/2], phi2p, m, mu, -1);
[Fin2, R12, R22] = statics(fixed_points, pr_coord, tau12, tau22);
Fin = (max(abs(Fin1), abs(Fin2)));
tauT = Fin*dP/2; % Steering torque is due to max force required
[tauTx] = compute_tauTx(Var, fixed_points, link_lengths, ...
o_coord, pr_coord, m, mu, patch, dP, lwb, ltw, lR);
AT = pi*(doT^2-diT^2)/4;
%computing stressesin tie-rods
stressT11 = R11/AT;
stressT21 = R21/AT;
stressT12 = R12/AT;
stressT22 = R22/AT;
%Minimum radius of turning
87
Rmin = norm(CORmin(1:2)-XCG(1:2));
if (nargin>5)&&(to_plot==1)
figure(1)
plot(xnew, lack)
figure(2)
plot(COR(1,:), COR(2,:), 'x')
figure(3)
plot(xnew, new_coord(19,:), xnew, new_coord(20,:))
legend('Right wheel angle', 'Left wheel angle')
figure(4)
plot(xnew, new_coord(7,:), xnew, new_coord(10,:))
figure(5)
plot(xnew, new_coord(8,:), xnew, new_coord(11,:))
figure(6)
plot(xnew, new_coord(9,:), xnew, new_coord(12,:))
figure(7)
plot(xnew, new_coord(13,:))
figure(8)
plot(xnew, new_coord(14,:))
figure(9)
plot(new_coord(7,:), new_coord(8,:), 'xr', new_coord(13, :),...
new_coord(14, :), 'ob', fixed_points(1,5), fixed_points(2,5), 'xc')
end
if nargin==7
if lack_obj==1
C(1,1) = tauT^2/(tauTd^2+tauT_bound)-1;
C(1,2) = 1-tauT^2/(tauTd^2-tauT_bound);
if lack_max^2>lack_min^2
return_val = 1000*lack_max^2;
else
return_val =1000*lack_min^2;
end
else
C(1,1) = lack_max/lack_bound-1;
C(1,2) = -1-lack_min/lack_bound;
return_val = (tauT^2-tauTd^2)^2;
end
else
return_val=0;
end
C(1,3)
C(1,4)
C(1,5)
C(1,6)
C(1,7)
=
=
=
=
=
(stressT11/sigmaT*FOS)^2-1;
(stressT12/sigmaT*FOS)^2-1;
(stressT21/sigmaT*FOS)^2-1;
(stressT22/sigmaT*FOS)^2-1;
Rmin/Rmind-1;
if length(scaled_var)==5
C(1,8) = ((lti1-ltid)/lti_bound)^2-1;
C(1,9) = ((ltid-lti1)/lti_bound)^2-1;
C(1,10) = ((lti2-ltid)/lti_bound)^2-1;
C(1,11) = ((ltid-lti2)/lti_bound)^2-1;
88
end
if (nargin>=5)
fid = fopen(filename, 'a');
%Save data in the file
if ~(fid== -1)
fprintf(fid, '%d, ', [C Var' tauT lack_max lack_min]);
fprintf(fid, '%d \n',return_val);
fclose(fid);
end
end
end
end
%%
% To calculate the steering torque over the range of motion of the rak, and
% return for plotting..
function [tauTx] = compute_tauTx(Var, fixed_points, link_lengths, o_coord,...
pr_coord, m, mu, patch, dP, lwb, ltw, lR)
xnew = linspace(0,lR/2, 50);
[lack, lack_max, lack_min, COR, CORmin, new_coord]= steer(xnew, lwb,...
ltw, Var, lR, fixed_points, link_lengths, o_coord, pr_coord);
for i=1:size(new_coord,2)
XW1n = new_coord(13:15,i);
XW2n = new_coord(16:18,i);
phi1n = new_coord(19,i);
phi2n = new_coord(20,i);
XU11 = fixed_points(:,1);
XU21 = fixed_points(:,2);
XU12 = fixed_points(:,3);
XU22 = fixed_points(:,4);
89
end
%%
% Function to calcualte the coordinates of all the points, given the
% coordinates of T11, U31 and agle the wheel makes with the forward
% direction (phi)
function [pr_coord, link_lengths, o_coord, Flag] =...
coordinates(xp, given_coord,lR, fixed_points, link_lengths, o_coord)
%Extracting the coordinates of fixed points
XU11 = fixed_points(:,1);
XU21 = fixed_points(:,2);
XU12 = fixed_points(:,3);
XU22 = fixed_points(:,4);
XUC1 = fixed_points(:,5);
XUC2 = fixed_points(:,6);
XW1o = fixed_points(:,7);
XW2o = fixed_points(:,8);
XCG = fixed_points(:,9);
XC6 = fixed_points(:,10);
%
XT11p = [given_coord(1,1); XC6(2:3,1)];%y and z coordinate of T11 are same
% as those of C6 (chassis point)
XU31p = given_coord(2:4,1);
phiti1 = given_coord(5);
phiti2 = -phiti1;
XG1p = XC6+[xp;0;0]; % Center of gravity point of the rack
Flag1=0;
90
o_coord = [XT11o;...% 1 to 3
XT12o; ... %4 to 6
XU31o; ... %7 to 9
XU32o;... % 10 to 12
XW1o;... %13 to 15
XW2o; ... % 16 to 18
rUC1W1o; ...%19 to 21
rUC2W2o; ... %22 to 24
distT1];% 25
%angles normalized and stored in link_lengths.. These dont change with
%the position of the rack
link_lengths = [l2; l31; l32;... % 1 to 3
normalize(alpha1); normalize(alpha2); normalize(psi1);...
normalize(psi2)];% 4 to 7
else
%Extracting the original coordinaes and link lengths
XU32o = o_coord(10:12,1);
XW1o = o_coord(13:15,1);
XW2o = o_coord(16:18,1);
rUC1W1o = o_coord(19:21,1);
rUC2W2o =o_coord(22:24,1);
distT1 = o_coord(25,1);
l2 = link_lengths(1);
l31 =link_lengths(2);
l32 = link_lengths(3);
alpha1 = link_lengths(4);
alpha2 = link_lengths(5);
psi1 = link_lengths(6);
psi2 = link_lengths(7);
end
clear XW2p XW1p
91
XT12p = XG1p-[lR/2+distT1;0;0];
perp = [0;1;0];
options = optimset('MaxIter',1000, 'MaxFunEvals', 1000, ...
'TolFun', 1e-10, 'Display', 'off');
[XU32p, fval , Flag2] = ...
fsolve(@(x) XU3(x, l2, l31, l32, XU12, XU22, XT12p), XU32o, options);
rUC1U31p = XU31p-XUC1;
Ralpha1 = [cos(alpha1) -sin(alpha1); sin(alpha1) cos(alpha1)];
%rotation matrix to rotate the UC1-U31 vector by alpha to get unit vector
%from UC1 to W1p
rUC1W1p = Ralpha1*rUC1U31p(1:2)/norm( rUC1U31p(1:2)); % unit vector from
UC1 to XW1p
XW1p(1:2, 1) = XUC1(1:2,1)+norm(rUC1W1o(1:2,1))*rUC1W1p(1:2,1);
XW1p(3,1) = XW1o(3,1);
rUC2U32p =XU32p- XUC2;
Ralpha2 = [cos(alpha2) -sin(alpha2); sin(alpha2) cos(alpha2)];
rUC2W2p = Ralpha2* rUC2U32p(1:2)/norm( rUC2U32p(1:2)); % unit vector from
W2p to UC2
XW2p(1:2, 1) = XUC2(1:2,1)+norm(rUC2W2o(1:2,1))*rUC2W2p(1:2,1);
XW2p(3, 1) = XW2o(3,1);
theta31p = atan2(rUC1U31p(2), rUC1U31p(1))-atan2(perp(2), perp(1));
phi1p = theta31p+psi1;
%phi is the angle of the wheel with the forward direction of the car (given
%by vector perp)
theta32p = atan2(rUC2U32p(2), rUC2U32p(1))-atan2(perp(2), perp(1));
phi2p = theta32p+psi2;
pr_coord = [XT11p;...% 1 to 3
XT12p;...% 4 to 6
XU31p;... % 7 to 9
XU32p;... % 10 to 12
XW1p;... % 13 to 15
XW2p;... % 16 to 18
normalize(phi1p); normalize(phi2p)]; %19 to 20
if Flag1<0 || Flag2<0
Flag=-1;
else
Flag=1;
end
%if fsolve cannot solve, then retun a negative flag which indicates that
%the points are not allowed
end
%%
%To compute the coordinates of the points when rack at new position 'xnew'
%given the present coordinates of the points..
function [new_coord, Flag] = kinematics(xnew, given_coord, lR, ...
fixed_points, link_lengths, o_coord, pr_coord)
92
distT1 = o_coord(25,1);
l2 = link_lengths(1);
l31 =link_lengths(2);
l32 = link_lengths(3);
phiti1 = given_coord(5);
XU11 = fixed_points(:,1);
XU21 = fixed_points(:,2);
XC6 = fixed_points(:,10);
XU31p = pr_coord(7:9,1);
XG1new = XC6+[xnew;0;0]; %New center of gravity of the rack
%distT1 = XT11p(1)-XG1p(1)-lR/2;
XT11new = XG1new+[lR/2+distT1; 0; 0];% new coordinates of T11 point
options = optimset('MaxIter',1000, 'MaxFunEvals', 1000, 'Display', 'off');
[XU31new, fval, Flag1] = ...
fsolve(@(x) XU3(x, l2, l31, l32, XU11, XU21, XT11new), XU31p, options);
%Solve for the new coordinates of point U31
given_coord = [XT11new(1,1); XU31new; phiti1]; % array of points for
% passing to the coordinates function
[new_coord, link_lengths, o_coord, Flag2] =...
coordinates(xnew, given_coord, lR, fixed_points, link_lengths, o_coord);
if Flag1<0 || Flag2<0
Flag=-1; %If fsolve failed, then return negativeflag which says that
% some problem encountered
else
Flag=1;
end
end
%%
% TO calculate the steering parameters ie when the new position of rack
% given, computing the coordinates of all the points sing 'kinematics'
% function and then computing the Ackermann parameter and the center of
% rotation of the front wheels
function [lack, lack_max, lack_min, COR, CORmin, new_coord] = ...
steer(xnew, lwb, ltw, Var, lR, fixed_points, link_lengths, o_coord,
pr_coord)
XW1o = fixed_points(:,7);
Xrear2 = XW1o(2)-lwb;
%lack(1,1) = 0;
lack_max=0;
lack_min=1e6;
new_coord(:,1) = pr_coord;%initialized, in case xnew length is 0
%new_coord(20,1) = new_coord(20,1)-2*pi;
for i=1:length(xnew)
[new_coord(:,i), Flag2] = kinematics(xnew(i), Var, lR, ...
fixed_points, link_lengths, o_coord, pr_coord);
93
94
=
=
=
=
=
=
fixed_points(:,1);
fixed_points(:,2);
fixed_points(:,3);
fixed_points(:,4);
fixed_points(:,5);
fixed_points(:,6);
XT11
XT12
XU31
XU32
=
=
=
=
pr_coord(1:3, 1);
pr_coord(4:6, 1);
pr_coord(7:9, 1);
pr_coord(10:12, 1);
95
96
Appendix C4
MATLAB code for System level optimization:
variables;
Variables.m:
% All parameter values defined
clear all
clc
% All SI Units
username = 'danvir';
% Constants
g = 9.8; %m/s^2
% Optimization parameters:
cubesize = .05; %cube of side 5cm around the nominal point
cuboid_bound = 0.05; %5cm bound around XUC1
T1_bound = 0.12; %25cm bound
lack_bound = 1;
lti_bound = 0.01; % 2mm bound
tauT_bound = 8^2; % bound on torque^2
% U3_bound = abs(XU11-XU21);
U3_bound = cuboid_bound;
%%
% Vehicle specs:
ltw = 1168.4/1000;
lwb = 1574.8/1000;
m = 190; %kg
mu = 1.34;
wheelw = 8*25.4/1000; %8 inch
patch = [8.315/1000, wheelw];
97
7075 Aluminium
EA = 71.7e9;
nuA = 0.33;
yStress = 503e6;
FOS = 2.6;
=
=
=
=
=
=
98
%%
%Subsystem 1
% Weighting parameter
alpha = 0.9;
99
Coords;
MatData;
WheelAngles;
VehicleData;
BoundsU;
alpha;
maxDeform;
username;
%%
%Subsystem 2
phi_var = 0;
% XT11_initx = XC6(1)+lR/2+0.01;
% XU31_init =([501.599; -65.49898; 175.00]+[5;5;5]) /1000;
% phiti1_init = phiti1d;
XUC1nom = (XU1nom+XU2nom)/2;
xp = 0;
xlimit = lR/2;%the lower x point from which the ackermann steering
% is minimized that is the steering parameter is minimized from xlimit
% to lR/2 (length of rack/2)
% %Change this to true if want to switch the ackermann parameter as the
% %objective function and the steering torque as a constraint..
% lack_obj = 1;
% fixed_points = [XU11, XU21, XU12, XU22, XUC1, XUC2, XW1o, XW2o, XCG, XC6];
fixed_points = [Xw, XCG, XC6];
veh_dim = [m, mu, ltw, lwb, wheelw, patch];
diameters = [dP, lR, dT];
material = [diT, doT, ET, sigmaT, nuT, FOS];
desired = [tauTd, ltid, dh, Rmind];
param_bounds2 = [cuboid_bound, T1_bound, lack_bound, lti_bound, tauT_bound];
100
if (phi_var==0)
LB2 = [-1; -1; -1; -1];
UB2 = [1; 1; 1; 1];
%Var_init = [XT11_initx; XU31_init];
LBound2 = [XC6(1,1)+lR/2; XUC1nom - U3_bound/2];
UBound2 = [XC6(1,1)+T1_bound+lR/2; XUC1nom + U3_bound/2];
%
else
%
%
Var_init = [XT11_initx; XU31_init; phiti1_init];
%
LB2 = [-1; -1; -1; -1; -1];
%
UB2 = [1; 1; 1; 1; 1];
%
LBound2 = [XC6(1,1)+lR/2; XUC1nom - U3_bound/2; phiti1d-0.5];
%
UBound2 = [XC6(1,1)+T1_bound+lR/2; XUC1nom + U3_bound/2; phiti1d +
0.5];
%
%
end
parameters2{1}
parameters2{2}
parameters2{3}
parameters2{4}
parameters2{5}
parameters2{6}
parameters2{7}
parameters2{8}
parameters2{9}
=
=
=
=
=
=
=
=
=
fixed_points;
veh_dim;
diameters;
material;
desired;
param_bounds2;
LBound2;
UBound2;
rack_pos;
%
scaled_var_init = (2*Var_init-upper_boundlower_bound)./(upper_bound-lower_bound);
%%
%Subsystem 3
LBound3 =
[XC3(1,1);XC6(2,1);XC6(3,1);XC3(1,1);XC6(2,1);XC6(3,1);XC3(1,1);XC6(2,1);XC6(
3,1)];
UBound3 =
[XC1(1,1);XU1nom(2,1);XC3(3,1)+0.100;XC1(1,1);XU1nom(2,1);XC3(3,1)+0.100;XC1(
1,1);XU1nom(2,1);XC3(3,1)+0.100];
parameters3 = {XS4, XC1, XC2, XC3, XC4, Xw, m, lwb, XCG, XC5, ltw, v, R, t,
K, C, mu, LBound3, UBound3};
XS=[ 0.232495774049219;
0.269739697123786;
0.269375829919730;
0.233172000000000;
0.288189286854181;
0.261684577925185;
0.174252134436610;
0.309984567746931;
0.232119570939488];
101
%%
LBound_sys = [XUl; LBound2; LBound3 ];
UBound_sys = [XUu; UBound2; UBound3 ];
lb = 0.0254; %Bump height
fixed_points_sys = [Xw, XCG, XC1, XC2, XC3, XC4, XC5, XC6];
parameters_sys{1}
parameters_sys{2}
parameters_sys{3}
parameters_sys{4}
parameters_sys{5}
parameters_sys{6}
parameters_sys{7}
=
=
=
=
=
=
=
fixed_points_sys;
veh_dim;
rack_pos;
param_bounds2;
LBound_sys;
UBound_sys;
lb;
XU1o
XU2o
XT1x
XU3o
=
=
=
=
var(1:3);
var(4:6);
var(7);
var(8:10);
bump_steer = delta_phi^2;
end
%%
% Function to calcualte length of links
function [delta_phi, link_lengths, X_o, X_b,
bump(lb, var, fixed_points)
Flag] =...
102
XU1o = var(1:3);
XU2o = var(4:6);
XT1o = [var(7); XC6(2:3,1)];
XU3o = var(8:10); %y and z coordinate of T11 are same as those of C6(chassis
point)
%Calculating lengths of links
lU3T1 = norm(XU3o-XT1o); %length of tie rod
lU3U1 = norm(XU3o-XU1o); %length of upright U3-U1
lU3U2 = norm(XU3o-XU2o);%length of upright U3-U2
lU1U2 = norm(XU1o-XU2o);
lU1C1 = norm(XU1o-XC1);
lU1C2 = norm(XU1o-XC2);
lU2C3 = norm(XU2o-XC3);
lU2C4 = norm(XU2o-XC4);
link_lengths = [lU3T1, lU3U1, lU3U2, lU1U2, lU1C1, lU1C2, lU2C3, lU2C4];
XU1bz = XU1o(3)+lb;
options = optimset('MaxIter',1000, 'MaxFunEvals', 1000, 'TolFun', 1e-10,
'Display', 'off');
[XU1bxy, fval , Flag1] = fsolve(@(x) coord_solve_2(x,[lU1C1, lU1C2],[XC1,
XC2], XU1bz), XU1o(1:2), options);
% Solve for coordinate of U1 at bump. Intitial guess is original
% coordinate of U1
XU1b = [XU1bxy; XU1bz];
[XU2b, fval , Flag2] = fsolve(@(x) coord_solve_3(x,[lU1U2, lU2C3,
lU2C4],[XU1b, XC3, XC4]), XU2o, options);
[XU3b, fval , Flag3] = fsolve(@(x) coord_solve_3(x,[lU3T1, lU3U1,
lU3U2],[XT1o, XU1b, XU2b]), XU3o, options);
%Now we have the new coordinates of points U1, U2 and U3 when the car goes
%over a bump
%Using the coordinates to find the change in the angle of the wheel
%normal to the plane formed by U1o, U2o, U3o
XNo = cross(XU1o-XU2o, XU1o-XU3o);
XNb = cross(XU1b- XU2b, XU1b-XU3b);
XNo_proj = XNo(1:2); %Normal vector projected on horizontal plane
XNb_proj = XNb(1:2);
%Orginal coordinates
X_o = [XU1o, XU2o, XU3o, XT1o];
%Coordinates when bump encountered
X_b = [XU1b, XU2b, XU3b, XT1o];
% Change in angle of the wheel when bump encountered (difference in the
% angles of the projected vectors of the normals to the plane formed by U1,
% U2 and U3)
delta_phi = atan2(XNo_proj(1), XNo_proj(2))-atan2(XNb_proj(1), XNb_proj(2));
if (Flag1<0)||(Flag2<0)||(Flag3<0)
103
Flag=-1;
else
Flag = 1;
end
end
104