Sei sulla pagina 1di 104

April 13, 2012

Team Number : 5

ME 555 Design Optimization: Project Report

OPTIMIZATION OF A-ARM SUSPENSION


AND STEERING SYSTEM
Rohit Jain
Shrikant Mandapaka
Danvir Singh Sethi

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.

A-Arm Subsystem ................................................................................................................................ 6


2.1.

Introduction ................................................................................................................................... 6

2.2.

Problem Statement ........................................................................................................................ 6

2.3.

Nomenclature ................................................................................................................................ 7

2.4.

Optimization Model ...................................................................................................................... 8

2.4.1.

Objective Function ................................................................................................................ 8

2.4.2.

Constraints ............................................................................................................................ 9

2.4.3.

Design Variables and Parameters.......................................................................................... 9

2.4.4.

Summary Model.................................................................................................................. 10

2.4.5.

Functional Dependency Table ............................................................................................ 11

2.5.

2.5.1.

Monotonicity Analysis ........................................................................................................ 11

2.5.2.

Numerical Results ............................................................................................................... 12

2.6.

2.5.2.1.

1st order Design of Experiments .................................................................................. 12

2.5.2.2.

2nd order Design of Experiments ................................................................................. 14

Optimization Study ..................................................................................................................... 15

2.6.1.

Optimization Results ........................................................................................................... 15

2.6.2.

Parametric Study ................................................................................................................. 16

2.7.
3.

Model Analysis ........................................................................................................................... 11

Results and Discussion ............................................................................................................... 17

Pushrod-Bellcrank-Shocker Subsystem ............................................................................................. 18


3.1.

Problem Statement ...................................................................................................................... 18

3.2.

Nomenclature .............................................................................................................................. 18

3.3.

Optimization Model .................................................................................................................... 19

3.3.1.

Objective Function .............................................................................................................. 19

3.3.2.

Constraints: ......................................................................................................................... 20

3.3.3.

Design variables and parameters......................................................................................... 21

3.3.4.

Summary Model.................................................................................................................. 22

3.3.5.

Functional Dependency Table ............................................................................................ 23

3.4.

Model Analysis ........................................................................................................................... 23

3.4.1.

Assumptions ........................................................................................................................ 23

3.4.2.

Monotonicity Table ............................................................................................................. 24

3.4.3.

First order Design of Experiments ...................................................................................... 25


2

3.5.

Optimization Results ................................................................................................................... 26

3.5.1.

Results for possible minima using different initial conditions:........................................... 26

3.5.1.1.
3.5.2.

Parametric Studies............................................................................................................... 27

3.5.2.1.
3.5.2.2.
3.6.

4.

Interpretation of Results: ............................................................................................. 27


Parameter - ........................................................................................................... 27

Parameter - ......................................................................................................... 29

Discussion ................................................................................................................................... 31

3.6.1.

Design Implications ............................................................................................................ 31

3.6.2.

A possible 'Design Rule' for the solution ............................................................................ 31

Steering Subsystem ............................................................................................................................ 32


4.1.

Introduction ................................................................................................................................. 32

4.2.

Problem Statement ...................................................................................................................... 32

4.3.

Nomenclature .............................................................................................................................. 34

4.4.

Optimization Model .................................................................................................................... 35

4.4.1.

Objective Function .............................................................................................................. 35

4.4.2.

Constraints .......................................................................................................................... 37

4.4.3.

Design variables and parameters......................................................................................... 37

4.4.4.

Summary Model.................................................................................................................. 38

4.4.5.

Function Dependency Table ............................................................................................... 40

4.5.

Model Analysis ........................................................................................................................... 41

4.5.1.

Model Simplification: ......................................................................................................... 41

4.5.2.

Scaling................................................................................................................................. 41

4.5.3.

Numerical Results ............................................................................................................... 41

4.5.3.1.

Variation with variables .............................................................................................. 42

4.5.3.2.

Variation with rack displacement................................................................................ 43

4.5.4.
4.6.

Monotonicity Analysis ........................................................................................................ 44

Optimization Study ..................................................................................................................... 45

4.6.1.

Preliminary Optimization Results ....................................................................................... 45

4.6.2.

Optimization Results ........................................................................................................... 45

4.6.3.

Parametric Study ................................................................................................................. 48

4.6.3.2.

With (bound on steering torque) ............................................................................. 48

4.6.3.3.

With point U1& U2..................................................................................................... 48

4.6.3.1.

4.7.

With position of rack, xR ............................................................................................. 48

Discussion ................................................................................................................................... 49
3

5.

System Integration.............................................................................................................................. 51
5.1.

Introduction ................................................................................................................................. 51

5.2.

Problem statement ....................................................................................................................... 51

5.3.

Nomenclature .............................................................................................................................. 51

5.4.

Optimization Model .................................................................................................................... 53

5.4.1.

Objective function ............................................................................................................... 53

5.4.2.

Constraints .......................................................................................................................... 53

5.4.3.

Design Variables and Parameters........................................................................................ 54

5.4.4.

Summary model .................................................................................................................. 54

5.5.

6.

Model Analysis ........................................................................................................................... 56

5.5.1.

Model Simplification .......................................................................................................... 56

5.5.2.

Numerical Results ............................................................................................................... 56

5.6.

Optimization Study ..................................................................................................................... 57

5.7.

Discussion ................................................................................................................................... 58

5.7.1.

Result Inference .................................................................................................................. 58

5.7.2.

Possible Design rules .......................................................................................................... 58

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.

Figure 1: System model


5

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.2. Problem Statement


The wheel is connected to the chassis through the A-arms, the steering linkage and the pushrod-bellcrankshocker mechanism. It should be remarked that all three of these mechanisms have different mounting
points on the chassis which translates to multiple points about which the wheel assembly can rotate as it
undergoes a bump or a droop. This particular fashion of securing the wheel assembly to the chassis can be
compared to a 3D mechanism with the point of actuation lying at the point where the wheel touches the
ground. Through a preliminary analysis of this mechanism, it can be concluded that, even with the
steering wheel locked in its position, the wheel undergoes steering when it undergoes a bump or a droop;
this behavior is termed bump steer and is undesirable as it leads to uncontrollable phenomenon while
driving. The system level problem, therefore, is defined as the following: to minimize the bump steer of
the front wheels subject to the constraints posed by the material, the geometry, the feasibility and the rules
which govern the completion and the design of the vehicle.
The subsystem under consideration in this report is the A-arm subsystem and it serves as the most critical
structural link between the wheel assembly and the chassis. As mentioned earlier the outboard mounting
points of the A-arms decide the camber and caster angle for the wheel. The tuning of these angles is very
important in order to ensure a particular level of ride quality and drivability of the vehicle. In order to
make sure that this subsystem performs its functions in the best possible way we desire that it balances
the forces and moments being exchanged between the wheel assembly and the chassis without failing and
without causing too much change in the camber and caster angles.
In the design process it assumed that the inboard mounting points of the A-arms have been decided in
advance. Hence, we are left with the choice of the outboard mounting points as variables to satisfy the
goals of design.
The requirements mentioned above effectively translate to the following: to maximize the stiffness of the
A-arms; this translates to minimizing the deflection of any point on the A-arms. In order to ensure the
integrity of the vehicle, both material and geometry constraints are imposed on the system. Material
constraints take the form of maximum allowable stress in the A-arms while the geometry constraints are
defined by camber and caster angles as well as the upper and lower bounds for the variables.
This design problem is interesting for optimization problem by virtue of the fundamental tradeoff it poses
between the stiffness, stress and geometry constraints. One might want to decrease the length of the Aarms in order to minimize the deflection and also keep the stress in check. This, however, violates the
constraints of dimensions as well as the required upright geometry. Lower deflections can also be
achieved by designing symmetric A-arms which again violate the constraints on camber and caster
angles.

2.3. Nomenclature
Table 1: Nomenclature for A-Arm Subsystem
Symbols

Units
2

Description

amax

m/s

diA

Inner diameter of pipes of A-arm

doA

Outer diameter of pipes of A-arm

EA

Pa

Youngs modulus of material of pipes of A-arm

FOS

Factor of Safety

kg

Mass of the vehicle

(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)

Coordinate of point W (center of wheel)

Weighting parameter for multi-objective optimization

Maximum of U1 and U2

U1

Deflection of point U1

U2

Deflection of point U2

cb

degrees

Camber angle

cbmax

degrees

Maximum allowable camber angle

cbmin

degrees

Minimum allowable camber angle

ct

degrees

Caster angle

ctmax

degrees

Maximum allowable caster angle

ctmin

degrees

Minimum allowable caster angle

Poissons ratio of material of pipes of A-arm

A1

Pa

Stress in upper A-arm

A2

Pa

Stress in lower A-arm

yA

Pa

Yield stress of pipes of the A-arms

VU1

Vector space of allowable values of 1

VU2

Maximum longitudinal acceleration

Vector space of allowable values of 2


7

2.4. Optimization Model


2.4.1. Objective Function
Initially, the objective function is identified to be the maximum deflection of the A-arms. This deflection
is a function of the maximum acceleration (amax) the vehicle experiences, the location of the wheel (W),
the mass (m) and the geometry of the coordinates of the mounting points C1, C2, C3, C4, U1 and U2.
min = 11 (1 , 2 ; 1 , 2 , 3 , 4 , , , , , , , )

(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.

Figure 2 ANSYS Results for lower A-arm at the end of a simulation


In order to get over this difficulty, the problem is posed in the form of a multi-objective optimization
problem with , a parameter, as a weighting factor for the deformations of the two A-arms. This can be
represented as follows:
min = 11 (1 , 2 ; 1 , 2 , 3 , 4 , , , , , , , , )

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)

2.4.3. Design Variables and Parameters


The design variables and parameters considered for the problem are:
Table 2: Design variables for A-Arm Subsystem
Symbols

Units

Description

(m,m,m)

Coordinate of point U1

(m,m,m)

Coordinate of point U2

Table 3: Design parameters for A-arm subsystem


Symbols

Units

Description

amax

m/s2

Maximum longitudinal acceleration

diA

Inner diameter of pipes of A-arms

doA

Outer diameter of pipes of A-arms

EA

Pa

Youngs modulus of material of the A-arms

kg

Mass of the vehicle

Weighting parameter for multi-objective optimization

Poissons ratio of material of A-arms

(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

2.4.4. Summary Model


The summary of the entire A-arm subsystem optimization problem is shown below, with the primary
objective function and all the inequality constraints in negative null form.
Objective function:
min = 101 (1 , 2 ; 1 , 2 , 3 , 4 , , , , , , , )

(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

2.4.5. Functional Dependency Table


The functional dependency table is shown below:
Table 4: Functional Dependency Table, A-Arm subsystem

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.

2.5. Model Analysis


2.5.1. Monotonicity Analysis
Since the objective and constraint functions are already available, a detailed simulation was run in order
to check for monotonic behavior within the upper and lower bounds specified for the variables. The
results of this analysis have been presented in Table 5.
Table 5: Monotonicity Table, A-Arm subsystem

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

2.5.2. Numerical Results


The analysis models was successfully linked with and driven from MATLAB. The first and second order
design of experiment studies which are presented in the following pages were done on the function .
Parametric studies have been performed with different pipe diameters as well as different materials.
The material properties have been tabulated below:
Table 6 Materials for parametric study, A-Arm subsystem
Steel 4130

Aluminium 7075

Youngs Modulus EA (GPa)

200

71.7

Poissons Ratio A

0.285

0.330

Yield Stress (MPa)

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

g1(x) v/s x 2U1

-1.14

-1.16
-0.02

0.02

0.04

-1.16
0.48

0.5

0.52

g1(x) v/s x 3U1

-1.1

x 10

-1.1453

-1.15

0.56

x 10

g1(x) v/s x 1U2

-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

g1(x) v/s x 2U2

-1.1

-1.1453
-1.1453
0.48

0.04

0.06

x 1U2
x 10

g1(x) v/s x 3U2

-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

g2(x) v/s x 2U1

g2(x) v/s x 1U1


2

10

-2
-0.02

0.02

-10
0.48

0.04

g2(x) v/s x 1U2

0
0.12

0.14

-2

0.16

0.02

0.04
x 1U2

g2(x) v/s x 2U2

g2(x) v/s x 3U2


2

1
0.5

0.52

0.54

0
0.25

0.56

0.35
x 3U2

g3(x) v/s x 1U1

g3(x) v/s x 2U1


20

-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

g3(x) v/s x 3U1

g3(x) v/s x 1U2

-2

-3

-2
0.12

0.14

-4

0.16

0.02

0.04

x 3U1

x 1U2

g3(x) v/s x 2U2

g3(x) v/s x 3U2

20

-2

-3

-20
0.48

x 3U1
10

-4
0.1

0.54

g2(x) v/s x 3U1


2

-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

Figure 3: First order design of experiments, A-Arm subsystem


Clear trends for variables are observed from the 1st order DOE. While some variables do not affect certain
constraints at all, others have a very strong influence on both the constraints and the objective function.
13

2.5.2.2. 2nd order Design of Experiments


90 plots were generated from the 2nd order DOE, the most interesting of which are shown:
8

x 10 g (x) v/s x 2 & x 2


U2
U1
1

x 10 g (x) v/s x 2 & x 1


U2
U1
1
-1.12
-1.14
-1.16
0.1 0.05
x 1U2

0 0.4

0.5

0.6

-1.12
-1.14
-1.16
0.6

x 2U1

0.3 0.25 0.4


x 3U2

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

g1(x) v/s x 3U1 & x 2U2

g1(x) v/s x 3U1 & x 3U2

-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

g3(x) v/s x 2U1 & x 2U2

g3(x) v/s x 2U1 & x 1U2


0

-10

-10

-20
0.10.05
x 1U2

0.45

0.5
x 2U1

0.55

0.6

-20
0.55

0.5

g3(x) v/s x 2U1 & x 3U2


-2
-3
-4
0.1

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

g3(x) v/s x 3U1 & x 2U2

0.5
x 2U2

x 2U2

0.6
0.4 0.5
2
x U1

0.45

g3(x) v/s x 3U1 & x 1U2

0
-10
-20
0.35

-20
0.6

0.6

x 10 g (x) v/s x 3 & x 1


U2
U1
1

x 10

0.5

x 2U1

x 10 g (x) v/s x 2 & x 3


U2
1
U1
-1.05
-1.1
-1.15
0.35

0.5 0.4 0.4


x 2U2

0 0.1

0.15

0.2

x 3U1

g3(x) v/s x 3U1 & x 3U2


-2
-4
-6
0.35

0.15
0.3
3 0.25 0.1
3
x U2
x U1

0.2

Figure 4: Second order design of experiments, A-Arm subsystem


14

2.6. Optimization Study


2.6.1. Optimization Results
The ANSYS model was successfully linked to and driven from MATLAB, the code for which is included
in Appendix C1. The functions were linked to fmincon with SQP Quasi-Newton algorithm with line
search. The first initial guess of the variables is chosen from the data provided by M-Racing team. A 5cm
cube was constructed about the initial guess to form the upper and lower bounds of the variables. The size
of this cube is chosen keeping in mind the size restriction imposed by the hub and wheel assembly. The
initial guess and the local minimizer for are:
= 103 [5.001 518.599 127.000 33.000 505.729 315.999]
= 103 [5.001 517.116 152.000 33.000 507.211 340.999]

The corresponding function values are:

= 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.

Deformation of Lower A-arm


(mm)

Deformation of Lower A-arm


(mm)

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)

Figure 5 Pareto curves for Steel (left) and Aluminum (right)


One of the most important and straightforward conclusions from the Pareto curve is that the minimized
value of the deformation of the upper A-arm is about an order of magnitude higher than that of the lower
A-arm. This means that the weighting factor must have a very small value as that puts more emphasis
on the minimization of the larger, and hence more critical, of the two deformations.

15

2.6.2. Parametric Study


The first parametric study was done with changing the inner and outer diameters of the pipe for steel and
aluminum as the material. The parametric study was done for different values of the weighting coefficient
as well but only the relevant results are shown below in the plots in Figure 6. Same initial points for the
fmincon iteration were chosen and they produced results which are expected and can be explained by
theory.
90
80

110
100
90
80
70
60
50
40
30
20

Upper A-arm Stress

Stress (MPa)

70
50
40
30
20
5

7
9
11
Pipe Outer Diamter (mm)

Lower A-arm Stress

Stress (MPa)

Lower A-arm Stress

60

Upper A-arm Stress

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

Inner Diameter (mm)

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]

2.7. Results and Discussion

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

Pipe dimensions (ID, OD)

10.922mm, 12.7mm

Initial variable value

[5.0 519.9 127.0 33.0 502.7 318.0] mm

Minimizer
Initial maximum deformation

[5.0 516.1 151.7 33.0 507.4 341.0] mm


1.578 mm

Minimized 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

Damping Coefficient of shocker

N/m

Spring Constant of shocker

lwb

Wheelbase

kg

Mass of the vehicle

rc

Cornering radius

Velocity Ratio (= (velocity of wheel)/(velocity of shocker))

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)

Coordinate of point CG (Centre of Gravity)

(m,m,m)

Coordinate of point W (center of wheel)

(m,m,m)

(m,m,m)

Coordinate of point C (defined as a point [31 ; 3 2 ; 5 3]

(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

3.3. Optimization Model


3.3.1. Objective Function
Optimum values of 1 , 2 , 3 , 4 using them as variables were first tried to be computed, but the
variable 4 was extremely erratic due to its 3-D dimensional angles forming with the push-rod, hence its

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

Hence, objective Function:


(4)

()
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)

F and A, are determined by the following method:

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

between 45 degrees and 135 degrees.

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

3.3.3. Design variables and parameters


Table 9: Design variables of Pushrod-Bellcrank-Shocker subsystem
Symbols

Units

Description

(m,m,m)

Coordinate of point S1

(m,m,m)

Coordinate of point S2

(m,m,m)

Coordinate of point S3

Table 10: Parameters of Pushrod- Bellcrank-Shocker subsystem


Symbols

Units

Description

N s/m

Damping Coefficient of shocker

N/m

Spring Constant of shocker

lwb

Wheelbase

kg

Mass of the vehicle

rc

Cornering radius

Velocity Ratio (= (velocity of wheel)/(velocity of shocker))

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)

Coordinate of point CG (Centre of Gravity)

(m,m,m)

Coordinate of point W (center of wheel)

(m,m,m)

(m,m,m)

Coordinate of point C (defined as a point [31 ; 3 2 ; 5 3]

(m,m,m)

Coordinate of point U1

Compression of shocker

Coordinate of point S4

21

3.3.4. Summary Model


Objective function:
201 : 1

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

3.3.5. Functional Dependency Table


Table 11: Functional Dependency Table
1

Variables & Parameters


Functions

()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.

3.4. Model Analysis


3.4.1. Assumptions

1 , 2 , 3 , 4 and 5 lie in the same plane.

1 , 2 , 3 and 4 all lie in the design space of the A-arm, bounded below by the plane

1 2 1 , bounded above to about 100 mm above the plane 3 4 2 ,

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

upper bounds in the function fmincon.

23

Figure 8: Bounds set for the design space


3.4.2. Monotonicity Table
Table 12: Monotonicity Table
Variables
Parameters
Functions
()

&

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

3.4.3. First order Design of Experiments


Objective v/s x 1
S1

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

Figure 9: Design of Experiments, Pushrod-Bellcrank-Shocker subsystem


The first order DOE suggests that the objective function is well behaved within the feasible space and the
algorithm should be able to converge to a local minima defined within the design feasible space.
This also suggests that the objective function is monotonic with respect to 1 2 , 2 2 , 3 2 , and convex
with respect to 11 , 21 , 2 3 and concave with respect to 31 . The anomalies in the dependence of the
objective function with respect to 3 3 , and 1 3 can be attributed to the complexities of the 3-D
geometrical design space.
It should be duly noted that these functions behave in this way only inside the feasible design space and
nothing can be said of how they behave outside of it and neither is that of any relevance to the scope of
this project.

25

3.5. Optimization Results


The fmincon function available in MATLAB was used, using the Sequential Quadratic Programming
algorithm. (Code attached in Appendix C2)
3.5.1. Results for possible minima using different initial conditions:
Three different random initial values for the variables were given as follows:
1. initial_values=[80;230;245;75;290;245;93;250;325]*1e-3;
2. initial_values=[90;225;250;86;300;250;91;270;330]*1e-3;
3. initial_values=[85;227;248;89;296;247;103;256;327]*1e-3;

They all converge to the same coordinates, as shown in Table 13:


Table 13: Optimization Results for different initial conditions
1

Functional
Value

Number
of
Iterations

Initial
Conditions
(1)

[0.0252;0.259;0.27] [0.0248;0.279;0.266] 0.033;0.287;0.345]

7.73E5

31

Initial
Conditions
(2)

[0.0252;0.259;0.27] [0.0248;0.279;0.266] 0.033;0.287;0.345]

7.73E5

33

Initial
Conditions
(3)

[0.0252;0.259;0.27] [0.0248;0.279;0.266] 0.033;0.287;0.345]

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.

Figure 10: SolidWorks model of Optimized coordinates

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.

3.5.2. Parametric Studies


Two parametric studies using 4 and 1 as parameters was performed.
3.5.2.1. Parameter -

First parametric study

Seven points on the plane 1 2

1 are chosen as follows. The logic

behind choosing points was to choose


points which go toward the rod 1
2 and also across the line joining 1

and midpoint of 1 2 .

The results are as follows for same initial


conditions:

Figure 11: Variation of XS4

initial_values=[100;250;265;10
0;270;280;100;260;310]*1e-3;

27

Table 14: Optimization results by varying the parameter XS4


1

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]

[0.047; 0.2755; [0.034; 0.26; 2.45E6


0.283]
0.349]

22

4
= [0.04071;
0.2564;
[0.075;0.276;0.1273]
0.270]

[-0.03958;
0.274; 0.260]

[-0.09; 0.26; 1.42E7


0.322]

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 .

Hence, it is expected that the functional value to increase as moves


towards 0, and then decreases when starts increasing in the
negative direction.
And plotting the results agrees with the above said phenomenon.

Figure 12: Diagram


showing alpha defined in
the explanation

28

The dip in the functional value is an


anomaly which is probably due to the
unpredictive nature of 4 .
This unpredictive nature of 4 is due

to the combined effect of the


dependence of , the dependence on
the perpendicular distance between the
point and the rod 1 2 , and

also the angles made by the pushrod


with the perpendicular plane between
5 4 in the 3-D geometry.

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

Coordinates of XS4 as we move away from XC1-XC2


towards XU1 ------>

Figure 13: Functional Values with respect to change in XS4

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;

Figure 14: Variation of coordinates of U1

29

Table 15: Optimization results by varying the parameter XU1


1

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

0.28; [0.017; 0.25; 7.49E5


0.19]

38

0.28; [0.017; 0.25; 7.49E5


0.19]

45

[-0.025; 0.276; [0.033; 0.29; 9.91E5


0.265]
0.171]

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

cos(), where is the angle between the

perpendicular force at 4 and the force that is transmitted through the pushrod 4 2 .
o

The functional value is expected to increase as we approach 2 from 1 , and this is

shown by the below graph.


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.
30

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

As we go from XU2 towards XU1 ---->

Figure 16: Functional Values with respect to change in XU1

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.

Figure 17: System Model

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

Inner diameter of pipes of tie rod

doT

Outer diameter of pipes of tie rod

dh

Diameter of wheel hub

dP

Diameter of pinion

dT

Diameter of Steering wheel

ET

Pa

Youngs modulus of material of the tie rod

FOS

Factor of Safety

lack

Distance from Pure Ackermann

lR

Length of rack

lti

Toe In

ltid

Desired toe In

ltw

Track Width

lwb

Wheelbase

kg

Mass of the vehicle

(m,m)

Dimension of wheel patch in contact with ground

Rmin

Minimum radius of rotation of vehicle

Rmind

Minimum radius of rotation desired

ww

Width of wheel

xlimit

Position of rack from which Ackermann parameter is computed

xR

Displacement of rack

(m,m,m)

Coordinate of point C6

(m,m,m)

Coordinate of point CG (Centre of Gravity)

(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)

Coordinate of point W (Center of wheel)

cb

radians

Camber angle

cbmax

radians

Maximum allowable camber angle

cbmin

radians

Minimum allowable camber angle

ct

radians

Caster angle

ctmax

radians

Maximum allowable caster angle


34

ctmin

radians

Minimum allowable caster angle

radians

Steering Angle

Smax

radians

Maximum allowable steering Angle

Smin

radians

Minimum allowable steering Angle

ti

radians

Angle representing the toe in of the wheels

Bound on Ackermann parameter constraint

Nm

Bound on Steering Torque constraint

Bound on coordinate of T1

Coefficient of friction

Poissons ratio of material of tie rod

Pa

Stress in the tie rod

yT

Pa

Yield stress of the tie rod

Nm

Steering Torque

Td

Nm

Desired steering torque

VU3

4.4.

Optimization Model

Vector space of allowable values of 3

4.4.1. Objective Function


In the steering subsystem, it is desired to achieve a geometry in which the torque required to steer the
vehicle using the steering wheel is as close as possible to the desired steering torque and how close the
steering geometry is to the pure Ackermann geometry for a particular angle of steer. Thus we potentially
have two objective functions, namely the square of the difference of the steering torque and the desired
steering torque, and the Ackermann parameter lack which is a measure of the how close the geometry is to
the pure Ackermann geometry. We should note that the steering geometry is not exactly the same as the
pure Ackermann geometry due to an additional link, namely the tie rod, which is pivoted at one end with
the rack and the other end with the upright. Thus the point of intersection of the axes of the wheels
doesnt lie on the rear axis of the vehicle and also changes with the angle of steer. Thus with this
configuration, it is very difficult to achieve a configuration for which the Ackermann parameter is small
for all angles of steer.
Due to the tire slip and flexing or twisting of the tire contact patch because of dynamic toe during
steering, the tire is able to deform to a slip angle which allows the vehicle to maintain control and prevent
slipping when taking turns [1], [2]. This leads to a big improvement in the handling of the vehicle and the
vehicle is able to maintain its grip even if the Ackermann steering geometry is not maintained at low
steering angles and high speeds. Therefore, the Ackermann steering geometry characteristics are
important for a Formula racing car only at high angle of steer and low speeds. Thus the Ackermann
parameter lack is important only at large steering angle.
The steering torque is computed for a particular angle of the wheel by first computing the coordinates of
the different links of the steering mechanism through kinetic analysis of the 3-D mechanism. Then the
torque due to the friction force at the wheel, acting on the axis of the upright, is estimated by integrating
the moment arm vector of the friction force at each point of the tire contact patch. Subsequently, using
35

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

Figure 19: Ackermann parameter, lack


Based on the above discussion, two models were 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:

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)

4.4.3. Design variables and parameters


Table 17: Design variables for steering subsystem
Symbols

Units

Description

(m,m,m)

Coordinate of point T1

(m,m,m)

Coordinate of point U3

37

Table 18: Parameters for steering subsystem


Symbols

Units

Description

dP

Diameter of pinion

dT

Diameter of Steering wheel

lR

Length of rack

ltw

Track Width

lwb

Wheelbase

kg

Mass of the vehicle

(m,m)

Dimension of wheel patch in contact with ground

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)

Coordinate of point W (Center of wheel)

Bound on Ackermann parameter constraint

N2m2

Bound on Steering Torque constraint

Bound on coordinate of T1

Coefficient of friction

Nm

Desired steering torque

Td

4.4.4. Summary Model


Model I:
Objective function:
min( 2 2 )2 = 301 3 , 1 ; , 1 , 2 , , 6 , , , , , , , , ,

(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

308 313 : 3 VU3

(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)

308 313 : 3 VU3

(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

Number of inequality constraints: 15


Number of equality constraints:2
39

4.4.5. Function Dependency Table


Table 19 shows the function dependency of the objective function and constraint functions. In this table,
not all the parameters of the function have been shown. Only those parameters which are of interest and
would be varied to perform the parametric study have been listed in the table.
Table 19: Function Dependency Table
Model I:

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

4.5.1. Model Simplification:


By incorporating the two equality constraints h301 and h302 directly, the model can be simplified to
having 4 variables, 11 , 31 , 3 2 , 3 3 .
The inequality constraints g308 to g315 were used as bounds and not as constraints.

Thus the simplified model finally used had:


Number of variables: 4
Number of inequality constraints: 7 (all Non Linear constraints)
Bounds: 4+4 (Lower + Upper bounds)
Number of equality constraints: 0
Initially the toe in of the wheels was also considered as a variable but this led to problems in computing
the Ackermann parameter as the point of rotation of the vehicle is inconsistent due to the toe in, which is
actually compensated on the vehicle in real life due to the deformation of the wheel and the wheel patch.
Thus in the final version, the toe in was neglected. This led to decrease in the number of parameters by 1
and 2 inequality constraints.
The torque for steering is computed by first estimating the torque acting on the upright due to the friction
force acting on the wheel patch in contact with the ground. This estimation was earlier done by
integrating the torque due to the friction force symbolically in MATLAB. But due to lot of time in
computing this, it was simplified by assuming that the friction force is uniform on the patch and the
average of the friction force was used to compute the torque.
4.5.2. Scaling
Through initial numerical analysis and preliminary optimization results and unsuccessful attempts, the
variables and constraints were scaled. The variables were scaled to lie between -1 and 1 by using their
upper and lower bounds. The bounds for the variables were decided according to the data for the actual
Formula car obtained from the University of Michigan MRacing team. The constraints were also scaled
for better sensitivity.
As described in Section 4.4.1, the objective function involving the Ackermann parameter was scaled by
using a parameter c=1000 in order to improve the sensitivity of the function.
4.5.3. Numerical Results
The mathematical model formed for the problem includes implicit functions which include a lot of 3D
vector analysis and cannot be explicitly written in terms of the variables. Thus the explicit monotonicity
analysis cannot be performed. Thus the functions formed in MATLAB were used to analyze the trend of
the functions and constraints through design of experiments. The first order analysis of the objective and
constraint functions has been performed. The analysis was also used to form the monotonicity table
shown above as the explicit equations for the different constraints and objective function couldnt be
developed due to the complexity of the model. Thus the experimental study of the implicit equations has
been performed.

41

4.5.3.1. Variation with variables


For the first order and second order analysis, graphs for the objective function and the constraints were
plotted some of which are shown below. Here f(x) is the objective function and g1(x) is the first
constraint for Model II. The same trend was also observed for g1(x) and -f(x) respectively for Model I as
the constraint and objective functions for the two models are switched.
9

f(x) v/s T1x


200

10

100

0
-1

-0.5
9

10

x 10

0
0.5
T1x
f(x) v/s U3y

f(x) v/s U3x

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

g1(x) v/s T1x

-0.5

0.5

0.5
0
U3x
g1(x) v/s U3z

g1(x) v/s U3x

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

Figure 20: First order design of experiments analysis


From Figure 20, we can observe that the Ackermann parameter and the steering torque are inconsistent
and a peak is formed when the x and y coordinate of point U3 are close to the scaled 0 value. The scaling
has been performed about the nominal U3 point which is actually the center point on the line joining
points U1 and U2 (upright points which act as the axis of rotation for the upright). Thus when the y
coordinate of point U3 is near the axis of the upright, the steering capability is reduced drastically and the
steer of the vehicle is very less. The point of rotation of the vehicle is very far from the rear axle in that
case, which explains the peak in the figure. Similarly, when the x coordinate of the point U3 is negative,
i.e. far away from the axis to the left, the Ackermann parameter is very large as the center of rotation of
the vehicle is very far from the real axle as the outer wheel is steered by a much larger angle than
required.
Another thing to note is that besides the visible large peaks in the above figure, there are also multiple
smaller peaks in the objective function and constraint 1 with respect to y coordinate of U3, which would
lead to a number of complicated troughs and peaks in the actual function when all the variables are
varied.

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)

Variation of steering torque with angle of steer


with xT1 = 21.9964, coordinates of U31 = (501.599, -65.499, 175)

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

Variation of Ackermann parameter with angle of steer


with xT1 = 41.9964, coordinates of U31 = (501.599, -65.499, 175)

Variation of steering torque with angle of steer


with xT1 = 21.9964, coordinates of U31 = (501.599, -45.499, 175)

-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

Variation of Ackermann parameter with angle of steer


with xT1 = 36.9964, coordinates of U31 = (501.599, -45.499, 175)

Variation of Ackermann parameter with angle of steer


with xT1 = 41.9964, coordinates of U31 = (521.599, -65.499, 175)

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

( ) .

4.5.4. Monotonicity Analysis


From the mathematical models formed, the monotonicity of the variables was studied through the design
of experiments as the explicit functions for the same couldnt be identified, which is represented in Table
20 for Model II. This has been performed for the simplified model with 4 variables. We can see that the
objective function is not monotonic in any of the variables and thus model constraint activity and model
reduction cannot be performed.
Table 20: Monotonicity Analysis (Model II)

f21

11

31

3 2

3 3

g201

g202

g203

g204

g205

g206

g207

44

4.6.

Optimization Study

4.6.1. Preliminary Optimization Results


fmincon function in MATLAB was used for all the optimization runs.
The initial optimization runs were performed with Model 1 with the steering torque as the objective
function and the Ackermann parameter with bounds and xlimit=0 as constraints. The problem encountered
was that optimization algorithm Active Set, which is the default algorithm used by fmincon, was not able
to converge to a solution. This was because the function tried to reduce the Ackermann parameter lack as a
whole below a certain value, but was not able to reduce it beyond a limit, after which it started to increase
again. Therefore Model II as described in Section 4.4.1 was developed and used but a similar problem
was encountered with Active-Set and Interior Point algorithm. On recognizing this problem and also as
discussed in Section 4.4.1, the Ackermann steering geometry is of interest only for large steering torques.
Thus the model was updated and xlimit = lR/2 that is computing the Ackermann parameter at the
extremity of the rack was done to simplify the problem. It was also noted that the Interior Point algorithm
was able to converge quicker.
4.6.2. Optimization Results
Using fmincon function in MATLAB and the starting guess as the data points obtained from the actual
car developed by the MRacing team, the following results were found.
Table 21: Optimization Results with Interior Point algorithm

Initial Guess (m)

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)

Optimized Variable values


(m)
Model I

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

Steering Torque at optima


(Nm)

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

4.6.3. Parametric Study


4.6.3.1.
With (bound on steering torque)
On varying the bound on the steering torque, it was
observed that as the bound is tightened, the
constraint g201 or g202 becomes active and the

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

Table 24: Parametric Study w.r.t. point U1


Initial
guess

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.2. Problem statement


The wheel assembly along with the A-arms, the pushrod-bellcrank-shocker assembly and the steering tie
rod can be thought of to be a 3D linkage. As the wheel encounters a bump (or a droop), the entire wheel
assembly moves up (or down). In such a case, the outboard mounting point U3 can be modeled the
actuation point of the linkage. By virtue of it being a kinematic linkage, the system preserves the link
lengths and leads to movement of nodes that are not grounded in 3D space. The A-arm and tie rod
outboard mounting points, U2 and T2 respectively, are two such nodes and their movement along with the
movement of actuation point U1 leads to the steering of the wheels without the steering wheel being
rotated. This phenomenon is termed bump steer and is highly undesirable as it leads to loss of vehicle of
control. We therefore aim to minimize the bump steer while trying to keep within certain limits the
subsystem level objective functions.

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

5.4. Optimization Model

Bound on Steering Torque constraint


Bound on coordinate of T1
Coefficient of friction
Poissons ratio of material of A-arms
Stress in the A-arms
Stress in the tie rod
Yield stress of pipes of the A-arms
Yield stress of the tie rod
Steering Torque
Desired steering torque
Vector space of allowable values of 1
Vector space of allowable values of 2
Vector space of allowable values of 3
Vector space of allowable values of 4

Vector space of allowable values of 1

Vector space of allowable values of 1


Vector space of allowable values of 2
Vector space of allowable values of 3

5.4.1. Objective function


It is desired to minimize the bump steer (lb)- (0) of the wheel while undergoing a bump which deflects
the point U1 by lb. Here, (x) is the steering angle as a function of displacement x in the x3 direction of U3.
The objective therefore is:
min(( ) (0))2 = 1 (1 , 2 , 3 , 1 ; 1 , 2 , 3 , 4 , 6 , , )

(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)

5.4.3. Design Variables and Parameters


Table 26: Design Variables for the System
Symbols

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

Table 27: Parameters for the System


Symbols

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

5.4.4. Summary model


Objective Function:
min(( ) (0))2 = 1 (1 , 2 , 3 , 1 ; 1 , 2 , 3 , 4 , 6 , , )

(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

5.5. Model Analysis


5.5.1. Model Simplification
By incorporating the two equality constraints h5 and h6 directly, the model can be simplified to have 19
variables.
The inequality constraints g25 to g44 were used as bounds and not as constraints in the final problem
formulation.
Thus the simplified model finally used had:
Number of variables: 19
Number of inequality constraints: 24 (all Non Linear constraints)
Bounds: 19+19 (Lower + Upper bounds)
Number of equality constraints: 4
5.5.2. Numerical Results
A first degree design of experiments was conducted for the problem with all constraints but the bounds on
the variables relaxed. This DOE provides very interesting results about the existence of local optima and
the existence of the other optima that might not be found by gradient based algorithms.
The results from this DOE for the objective function are plotted in Figure 24.
f(x) v/s X1U1

f(x) v/s X2U1

10

0
-1

-0.5

0.5

0
-1

f(x) v/s X3U1

f(x) v/s X1U2


10

10

5
-0.5

0.5

0
-1

0
X1U2

f(x) v/s X2U2

f(x) v/s X3U2


20

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

f(x) v/s X2T1

f(x) v/s X1U3

1.5

0.5
-1

-0.5

0.5

0
-1

f(x) v/s X2U3

f(x) v/s X3U3


20

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.

5.6. Optimization Study


Optimization algorithm was first run on the unconstrained problem. The unconstrained optima hence
obtained agreed with the design of experiments study done on the system. The constraints were then
evaluated at this unconstrained optimum. It was observed that the following constraints are not satisfied:
1. 1. Camber angle upper bound
2. Steering torque upper bound
3. Ackermann steering parameter upper bound
4. Minimum radius of turning
This information can be used to determine that these constraints should be active in the constrained
problem. Therefore the optima will not be a boundary optimum as might have been predicted from the
first degree DOE.
The results shown in Table 28 were obtained from optimization of the constrained problem.

57

Table 28: Optimization Results for system:


Algorithm: Interior Point, SQP, Inexact Line Search
Number of iterations: 23
Function Evaluations: 548
Initial Guess: Subsystem optimization results
Initial Bump steer: 0.8158rad = 46.74
Optimized Bump steer = 0.0632 rad = 3.62
Reduction in bump steer: 92.25%

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:

Length of 1 2 should be reduced as much as possible.

Length of 3 2 should be increased as much as possible.


58

1 should be placed as close to the ground as possible


4 should be placed as close to 1 as possible

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.502 0.502 0.502 0.522 0.522


3 = 0.065, 0.085, 0.065, 0.065, 0.085
0.175 0.175 0.155 0.175 0.175

Table 29: Optimized variable values for different initial guesses

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

Table 30: Optimization results for different xR values


Optimal
variable
values (m)

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;

%% Pipe: OD = 8mm, ID = 6mm


diA = 10.922e-3;
doA = 12.700e-3;
% diA = [10.922e-3; 9e-3; 7e-3; 5e-3; 4.5e-3];
% doA = [12.700e-3; 11e-3; 9e-3; 7e-3; 6e-3];
%% Coordinates:
XC1 = 0.001*[233.172
XC2 = 0.001*[-40.051
XC3 = 0.001*[-90.000
XC4 = 0.001*[196.850

164.500
153.830
254.000
268.000

132.000]';
122.000]';
270.500]';
269.500]';

Xw = 0.001*[0.000 584.200 222.250]';


%% Camber and Caster
cbmin = -3; % degree
cbmax = -1; % degree
ctmin = 7.75; % degree
ctmax = 9.25; % degree
%% Game begins
% Weighting parameter
alpha = 0.9;

% Nominal values of Optimization variables

64

XU1nom = 0.001*[5.001 518.599 127.000]';


XU2nom = 0.001*[33.000 505.729 315.999]';
XUnom = [XU1nom; XU2nom];
%
%
%
%
%
%

Lower and upper bounds of Optimization variables


XU1l = [-0.020 0.494 0.102]';
XU2l = [0.008 0.481 0.346]';
XU1u = [0.030 0.544 0.192]';
XU2u = [0.058 0.531 0.396]';

XU1l = XU1nom - (cubesize/2)*ones(3,1);


XU1u = XU1nom + (cubesize/2)*ones(3,1);
XU2l = XU2nom - (cubesize/2)*ones(3,1);
XU2u = XU2nom + (cubesize/2)*ones(3,1);
XUl = [XU1l; XU2l];
XUu = [XU1u; XU2u];
Bounds = [XUl XUu];
% XUnom = XUl + 0.1*i*(XUu-XUl);
XUnomscaled = (2*XUnom - XUu - XUl)./(XUu - XUl);
XUuscaled = ones(6,1);
XUlscaled = -ones(6,1);
Coords = [XC1
MatData = [EA
WheelAngles =
VehicleData =

XC2 XC3 XC4 Xw];


nuA yStress FOS diA doA];
[cbmin cbmax; ctmin ctmax]';
[m, amax];

parameters{1}
parameters{2}
parameters{3}
parameters{4}
parameters{5}
parameters{6}

=
=
=
=
=
=

Coords;
MatData;
WheelAngles;
VehicleData;
Bounds;
alpha;

% fileName = ['ParametricStudy9_' num2str(i) '.dat'];


fileAddress
=
['C:\Users\jainrht\Dropbox\UMich\Winter
Work\Results\' fileName];
fid = fopen(fileAddress,'w');
fprintf(fid,'Initial Conditions:\n-------------------\n');

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)

% To be used for scaling of variables


fprintf(fid,'Initial
Deformation
%f\n',optimFunction(XUnomscaled,parameters)/1e-3);
init_c = optimFunction(XUnomscaled,parameters,1);

(mm)

% For scaled constraints


fprintf(fid,'Intial Stress in upper Aarm (MPa) = %f\n',(init_c(1)
1)*(yStress/FOS)/1e6);
fprintf(fid,'Intial Stress in lower Aarm (MPa) = %f\n',(init_c(2)
1)*(yStress/FOS)/1e6);
fprintf(fid,'Initial Camber (deg) = %f\n',cbmin*(1+init_c(3)));
fprintf(fid,'Initial Caster (deg) = %f\n\n',ctmin*(1-init_c(5)));
% For unscaled constraints
% fprintf(fid,'Intial Stress in
yStress/FOS)/1e6);
% fprintf(fid,'Intial Stress in
yStress/FOS)/1e6);
% fprintf(fid,'Initial Camber (deg)
% fprintf(fid,'Initial Caster (deg)

+
+

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)));

+
+

% For unscaled constraints


% fprintf(fid,'Final Stress in upper Aarm (MPa) = %f\n',(final_c(1)
yStress/FOS)/1e6);
% fprintf(fid,'Final Stress in lower Aarm (MPa) = %f\n',(final_c(2)
yStress/FOS)/1e6);
% fprintf(fid,'Final Camber (deg) = %f\n',cbmin-final_c(3));
% fprintf(fid,'Final Caster (deg) = %f\n\n',ctmin-final_c(5));

+
+

fprintf(fid,'Weighting factor alpha = %f\n',alpha);


fprintf(fid,'Number of Iterations = %f\n',outputs.iterations);
fprintf(fid,'Number of Function evaluations = %f\n\n',outputs.funcCount);
lastRun = optimFunction(xsol,parameters);
results = load('C:\Users\jainrht\OutputData.dat');
deform = results(1:2:3); % Extract deformations
% fprintf(fid,'Inner Dia (mm) = %f\n',diA(i)*1e3);
% fprintf(fid,'Outer Dia (mm) = %f\n\n',doA(i)*1e3);
fprintf(fid,'Final deformation in upper Aarm (mm) = %f\n',deform(1)/1e-3);
fprintf(fid,'Final deformation in lower Aarm (mm) = %f\n',deform(2)/1e-3);
fclose(fid);

67

April 12, 2012


Team Number : 5
!*** 11 Mar 2012: Both Aarms with one batch file for a particular set of values of outboard mounting
points

!*** Clear previous files


FINISH
/clear

!*** Set preferences


/NOPR
TEKEYW,PR_SET,1
KEYW,PR_STRUC,1
KEYW,PR_THERM,0
KEYW,PR_FLUID,0
KEYW,PR_ELMAG,0
KEYW,MAGNOD,0
KEYW,MAGEDG,0
KEYW,MAGHFE,0
KEYW,MAGELC,0
KEYW,PR_MULTI,0
KEYW,PR_CFD,0
/GO
!*
! /COM,
! /COM,Preferences for GUI filtering have been set to display:
! /COM, Structural
!*

!*** Preprocessor
/TITLE,Upper Aarm Optimization

!*** Read Parameters for Simulation


/INPUT,C:\Users\jainrht\ANSYSParameters,dat
68

!*** Read Variables for Simulation


/INPUT,C:\Users\jainrht\ANSYSVariables,dat

!*** Row Vector for Outputs


*DIM,OUTPUTDATA,ARRAY,1,4,

/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

!*** Section Data


SECTYPE, 1, BEAM, CTUBE, , 0
SECOFFSET, CENT
SECDATA,INNERDIA/2,OUTERDIA/2,0,0,0,0,0,0,0,0,0,0
69

!*** Preprocessor
K,1,X1,Y1,Z1,
K,2,X2,Y2,Z2,
FINISH

!*** Outboard Mounting point for Top A-arm


/PREP7
K,3,X3,Y3,Z3,
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, , , , , ,

FK,3,FX,FORCEONARM1
70

! /STATUS,SOLU
SOLVE
FINISH

!*** Post Processing


/POST1
/ESHAPE,1,

!*** Get max deformation


NSORT,U,SUM,0,1, ,0
!*
!*
*GET,MAXDEFORM1,SORT,,MAX

!*** Get max stress

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

!*** Post Processing


/POST1
/ESHAPE,1,

!*** Get max deformation


NSORT,U,SUM,0,1, ,0
!*
!*
*GET,MAXDEFORM2,SORT,,MAX

!*** Get max stress

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

!*** Write Interpolation data in Interpolationdata.txt


/OUTPUT,C:\Users\jainrht\OutputData.dat
75

!***X3 Y3 Z3 Max Deformation Max Stress


*VWRITE,OUTPUTDATA(1,1),OUTPUTDATA(1,2),OUTPUTDATA(1,3),OUTPUTDATA(1,4)
%20.15f%20.5f%20.15f%20.5f

/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
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

XS1 : Vector coordinates of S1


XS2 : Vector coordinates of S2
XS3 : Vector coordinates of S3
XS4 : Vector coordinates of S4
XC1 : Vector coordinates of C1
XC2 : Vector coordinates of C2
XC5 : Vector coordinates of C5
XW : Vector coordinates of W
XCG : Vector coordinates of CG
Tw : Track Width
Wb : Wheelbase
Mv : Mass of vehicle
v : velocity of the car
R : radius of turning
t : Time
K : spring coefficient
C: Damping coefficient
displ : amount of compression in the spring-damper system

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
%
%
%
%

forcep_S3 : force along the rocker arm S3-C5 (Vector)


forcep_S4 : force along the pushrod arm S4-S2 (Scalar)
forcepv_S4 : force along the pushrod arm S4-S2 (Vector)
torque_S1S2 : torque about line S1-S2 (Vector)

%
%
%
%
%
%
%
%
%
%
%
%
%
%

XS1 : Vector coordinates of S1


XS2 : Vector coordinates of S2
XS3 : Vector coordinates of S3
XS4 : Vector coordinates of S4
XC1 : Vector coordinates of C1
XC2 : Vector coordinates of C2
XC5 : Vector coordinates of C5
XW : Vector coordinates of W
XCG : Vector coordinates of CG
Tw : Track Width
Wb : Wheelbase
Mv : Mass of vehicle
v : velocity of the car
R : radius of turning

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

%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

torque_C1C2 : torque about the line C1-C2


forcep_S4 : force along the pushrod arm S4-S2 (Vector)
XS1 : Vector coordinates of S1
XS2 : Vector coordinates of S2
XS3 : Vector coordinates of S3
XS4 : Vector coordinates of S4
XC1 : Vector coordinates of C1
XC2 : Vector coordinates of C2
XC5 : Vector coordinates of C5
XW : Vector coordinates of W
XCG : Vector coordinates of CG
Tw : Track Width
Wb : Wheelbase
Mv : Mass of vehicle
v : velocity of the car
R : radius of turning

function [torque_C1C2] = torqueC1C2(XC1, XC2, XW, FS)


% rot = XC1-XC2;
CC=fsolve(@(x) myfun(x,XC1,XC2,XW), [1;2;3]);
r = CC-XW;
torque_C1C2=cross(r, FS); %FS is the force due to the mass of vehicle at the
wheel and force due to acceleration at the wheel
end
% CC : vector coordinates of point perpendicular on XC1-XC2 from XW
function [F] = danvir(x, XS4, torque_C1C2,XS,XC1,XC2)
XS1=XS(1:3,1);
XS2=XS(4:6,1);
XS3=XS(7:9,1);
CCF=fsolve(@(x) myfun1(x,XC1,XC2,XS4), [1;2;3]);
r=CCF-XS4;
F=torque_C1C2 - cross(r, x);
end

The constraints file is given as follows:


function [c,ceq] =
constraint(XS,XS4,XC1,XC2,XC3,XC4,XU1,XW,Mv,Wb,XCG,XC5,Tw,v,R,nu)
XS1=XS(1:3,1);
XS2=XS(4:6,1);
XS3=XS(7:9,1);
c(1)=acos(dot((XS2-XS1),(XS3-XS1))/(norm(XS2-XS1)*norm(XS3-XS1)))-(0.75*pi);
c(2)=-(acos(dot((XS2-XS1),(XS3-XS1))/(norm(XS2-XS1)*norm(XS3XS1))))+(0.25*pi);
c(3)=norm(XS3-XS1)-0.080;
c(4)=-norm(XS3-XS1)+0.02;
c(5)=norm(XS2-XS1)-0.080;
c(6)=-norm(XS2-XS1)+0.02;
c(7)=-norm(XS2-XS3)+0.02;
c(8)=norm(XS2-XS3)-0.08;

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

%fixed points calculated


XW2o = XW1o-[ltw;0;0];
XU12
XU22
XUC1
XUC2

=
=
=
=

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);

%Main program to be run


% Performs the optimization and stored the data in a csv file.
%First calls the steering_variables.m file to load all the constants
% and data into workspace
steering_variables
file_start = 'optim'; file_end = '.csv';
phi_var = 0;
headings = {'Initial value'; 'Optim'; 'Func Value'; 'lack objective?';...
'No of iterations'; 'No of func evals'; 'Exit Flag'; 'x'; 'Torque';
'lack Max'; 'lack Min'; 'Bounds'; 'Constraints; XU11'};
% to create the headings in the csv file
filename = 'Parametric.csv';
fid = fopen(filename, 'a');
for i=1: length(headings)
fprintf(fid, '%s, ', headings{i});
end
fprintf(fid, '\n');
fclose(fid);

%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);

fid = fopen(filename, 'a');


fprintf(fid, '%d, %d, %d, %d, %d,%d, %d, %d, %d, %d, %d, %d, %d, %d \n',...
Var_init(1,1), optim(1,1),fval, lack_obj, output.iterations, ...
output.funcCount, exitflag, xp, tauT, lack_max ,lack_min,bounds(1), C(1,1),
XU11(1));
for m=2:length(Var_init)
if m<4
fprintf(fid, '%d, %d, , , , , , , , , , %d, %d, %d \n',...
Var_init(m,1), optim(m,1),bounds(m), C(1,m), XU11(m,1));
else
fprintf(fid, '%d, %d, , , , , , , , , , %d, %d \n',...
Var_init(m,1), optim(m,1),bounds(m), C(1,m));
end
end
for n=m+1:size(bounds,2)
fprintf(fid, ' , , , , , , , , , , , %d, %d \n',bounds(n), C(1,n));
end
for o = n+1:size(C, 2)
fprintf(fid, ' , , , , , , , , , , , , %d \n', C(1,o));
end
fprintf(fid, 'Lagrange Multiplliers(non lin; lower; upper) :,');
fprintf(fid, '%d, ', [lambda.ineqnonlin' lambda.lower' lambda.upper']);
fprintf(fid, '\n\n');
fclose(fid);

84

end% Steering Subsystem!!


%The main function computing the objective function and all the non linear
%constraints.
%Objective function is either the steering torque or the Ackermann
%parameter
%Inputs:
% scaled variables: T11, U31 coordinates, phi1
% xp : present position of the rack, at which the steering torque is
% calulated
% xlimit: position of rack from which onwards we want to reduce the
% Ackermann parameter
%parameters: Cell array containing all parameters used by the function
%filename: To save the function evaluation data
% to_plot: Set as 1 if you want to plot the various computations like
% Ackermann parameter etc.. 0 otherwise
%lack_obj: Set equal to one if the Ackermann parameter is the objective
%function to be minimized. Set zero if steering torque is desired objective
%function
% Var = [distT1; l2 or XU31, psi]
function [return_val, Ceq, COR, lack, tauT, lack_max, lack_min, tauTx] = ...
steering_subsystem(scaled_var, xp, xlimit, parameters, filename, ...
to_plot, lack_obj)
Ceq = []; %No equality constraints
persistent C %constraints

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);

tau11x = wheel_tor(XU11, XU21, XW1n, [0; patch(1)], ...


[-patch(2)/2; patch(2)/2], phi1n, m, mu, +1); % torques on the
two wheels are opposing
tau21x = wheel_tor(XU12, XU22, XW2n, [-patch(1); 0], ...
[-patch(2)/2; patch(2)/2], phi2n, m, mu, +1);
[Fin1x, R11x, R21x] = statics(fixed_points, pr_coord, tau11x,
tau21x);
tau12x = wheel_tor(XU11, XU21, XW1n, [0; patch(1)], ...
[-patch(2)/2; patch(2)/2], phi1n, m, mu, -1);
tau22x = wheel_tor(XU12, XU22, XW2n, [-patch(1); 0], ...
[-patch(2)/2; patch(2)/2], phi2n, m, mu, -1);
[Fin2x, R12x, R22x] = statics(fixed_points, pr_coord, tau12x,
tau22x);
Finx = (max(abs(Fin1x), abs(Fin2x)));
tauTx(i) = Finx*dP/2;
end

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;

if (nargin<6) % if link_lengths and o_coord not calculated previously and


% not passed to this function, then calculate them
clear link_lengths o_coord
l2 = norm(XU31p-XT11p); %length of tie rod
l31 = norm(XU31p-XU11); %length of upright U3-U1
l32 = norm(XU31p-XU21);%length of upright U3-U2
distT1 = XT11p(1)-XG1p(1)-lR/2; % distance between point T11 and end of
rack
%o_coord are the coordinates of the points when zero displacement of
%rack
XT11o = XC6+[lR/2+distT1;0;0]; %Original coordinate of T1 when
% displacement of rack =0
XT12o = XC6-[lR/2+distT1;0;0];
options = optimset('MaxIter',1000, 'MaxFunEvals', 1000, ...
'TolFun', 1e-10, 'Display', 'off');
[XU31o, fval , Flag1] = ...
fsolve(@(x) XU3(x, l2, l31, l32, XU11, XU21, XT11o), XU31p,
options);
% Solve for original coordinate of U31. Intitial guess is present
% coordinate of U31
distC6U3o = XU31o(1,1)-XC6(1,1);
XU32o = [ XC6(1,1)-distC6U3o; XU31o(2,1); XU31o(3,1)];
% mirror U32 as U31 about the chassis point C6

90

perp = [0;1;0]; %vector along the length of the vehicle, pointing


forward
%calculate alpha1 and alpha2 from phiti1 and phiti2
rUC1U31o = XU31o-XUC1;
theta31o = atan2(rUC1U31o(2), rUC1U31o(1))-atan2(perp(2), perp(1));
%angle from front direction to the upright
psi1 = phiti1-theta31o; % angle from the upright to the wheel
rUC1W1o = XW1o-XUC1;
alpha1 = atan2(rUC1W1o(2), rUC1W1o(1))-atan2(rUC1U31o(2), rUC1U31o(1));
%angle from the upright to wheel-upright vector
rUC2U32o = XU32o-XUC2;
theta32o = atan2(rUC2U32o(2), rUC2U32o(1))-atan2(perp(2), perp(1));
psi2 = phiti2-theta32o;
rUC2W2o = XW2o-XUC2;
alpha2 = atan2(rUC2W2o(2), rUC2W2o(1))-atan2(rUC2U32o(2), rUC2U32o(1));

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

% kinematics function used to calculate the new coordinates of the


% points when rack at xnew
COR(:,i) = CenterOfRotation(new_coord(:,i), fixed_points, ltw, lwb) ;
lack(i,1) = COR(2,i)-Xrear2; %Ackermann parameter is the difference
% the y coordinate of the center of rotation and the rear axle
if lack_max<lack(i,1)
lack_max = lack(i,1);
end
if lack_min>lack(i,1)
lack_min=lack(i,1);
end
end
CORmin = COR(:,i);
end
%%
% To compute the center of rotation of the axis of the two front wheels,
% for present coordinates
function [COR] = CenterOfRotation(pr_coord, fixed_points, ltw, lwb)
phi1p = pr_coord(19);% angle of wheel 1 (right) with the front direction
phi2p = pr_coord(20);
XW1p = pr_coord(13:15);
XW2p = pr_coord(15:18);
b = ((XW1p(1)-XW2p(1))*sin(phi1p)-(XW1p(2)-XW2p(2))*cos(phi1p))...
/(sin(phi1p)*cos(phi2p)-cos(phi1p)*sin(phi2p));
a = (b*sin(phi2p)-(XW1p(2)-XW2p(2)))/sin(phi1p);
if isnan(b) || isnan(a)
COR=[XW2o(1:2); 0];
else
COR = [XW2o(1:2); 0]+b*[cos(phi2p); sin(phi2p); 0];
end
end
%%
% Calculating the torqe on the upright due to the friction at the wheel
% patch.
Force is assumed to act at center of the patch area,
% perpendicular to the vector from upright to the patch center
%sign of torque decided according to 'sign' input.. Thus for one case,
%torque on the right upright is considered positive and negative on other
%and then vice versa
function [torque] = wheel_tor(XU1, XU2, XW, x1lim, x2lim, phi, m, mu, sign)
%for left wheel, xlim1(1) is negative and xlim(2)=0
%for right wheel, xlim(1)=0 and xlim(2) is positive
g = 9.81;
x1_mean = (x1lim(1)+x1lim(2))/2;
x2_mean = (x2lim(1)+x2lim(2))/2;

94

R = [cos(phi) -sin(phi) 0; sin(phi) cos(phi) 0; 0 0 1]; % rotation


% matrix as rotating clockwise by phi
a=R*[x1_mean;x2_mean;-XW(3)]; % position vector rotated by the angle of
% the wheel with the forward direction as the wheel is actually tilted at
% phi at that instant
X = XW+a;
rot = XU1-XU2;
rothat = rot/norm(rot); %unit vector along axis of rotation (upright)
r = X-XU1; %vector from upright to the point in center of wheel pacth
%p=[r(1); r(2); 0];
if (r(1)==0 || r(2) ==0)
F = [0;0;0];
else
b = 1/sqrt((r(2)/r(1))^2+1);
a = -r(2)/r(1)*b;
F = [a; b; 0]; % unit vector perpendicular to the vector r, along
%which the friction force is acting
end
torque = sign*abs(dot(mu*m*g/4*cross(r, F), rothat));%in N m along rothat
end
%%
% Function to calculate the static forces due to torques
% Using the torque at the uprights due to the friction at the wheels,
% the forces R1, R2 on the right tie rod and the left tie rod can be
% calculated. Then the force input required at the rack can be calculated
function [Fin, R1, R2] = statics(fixed_points, pr_coord, tau1, tau2)
XU11
XU21
XU12
XU22
XUC1
XUC2

=
=
=
=
=
=

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);

r1 = (XU31-XT11)/norm(XU31-XT11); % unit vector along R1


r2 = (XU32-XT12)/norm(XU32-XT12); % unit vector along R2
rUC1U31 = XU31-XUC1; % vector from UC1 to U31
rU21U11 = (XU11-XU21)/norm(XU11-XU21); % unit vector along right upright
% from XU21 to XU11
R1 = tau1/(dot(cross(rUC1U31,-r1), rU21U11)); % force along tie rod
calculated
% tau1 is along rU21U11. R1 should be along r1. And torque on the upright
% (rU21U11) due to the force from UC1 to U31 (along rUC1U31) should be
% equal to tau1. Then the force along r1 is calculated..

95

rUC2U32 = XU32-XUC2; % vector from UC2 to U32


rU22U12 = (XU12-XU22)/norm(XU12-XU22); % unit vector along left upright
% from XU22 to XU12
R2 = tau2/(dot(cross(rUC2U32,-r2), rU22U12));
rXT12XT11 = (XT11-XT12)/norm(XT11-XT12);
Fin = R1*dot(rXT12XT11 ,r1)+R2*dot(rXT12XT11 , r2); %Force required from
% rack is the combination of force required along rXT12XT11 for R1 and R2
end
%%
% x is coordinates of XU3 and F should be equal to zero to be solved
% Solve using fsolve
% Function to solve for the coordinates of XU3 given XU1, XU2, XT1 and the
% lengths of the links between (XU3-XT1) = l2, (XU3-XU1) = l31, (XU3-XU2) =
% l32
function F = XU3(x,l2, l31, l32, XU1,XU2, XT1)
F(1) = l2-norm(x-XT1);
F(2) = l31-norm(x-XU1);
F(3) = l32 -norm(x-XU2);
P1 = XU1;
P2 = XU2;
P3 = XT1;
end
%%
% Function to normalize the angles between 0 and 2*pi
function [angle_out] = normalize(angle_in)
angle_out = angle_in;
for i=1: length(angle_in)
if angle_in(i)>2*pi || angle_in(i)<0
angle_out(i) = mod(angle_in(i), 2*pi);
else
angle_out(i) = angle_in(i);
end
end
end

96

Appendix C4
MATLAB code for System level optimization:
variables;

var_nom = [XU1nom; XU2nom; XT1xnom; XU3nom; XS1nom; XS2nom; XS3nom];


var_nom_scaled = (2*var_nom - UBound_sys - LBound_sys)./(UBound_sys LBound_sys);
%Lower bound and Upper bound for scaled variables for fmincon
LB = -ones(length(var_nom));
UB = ones(length(var_nom));
options = optimset('Algorithm', 'active-set', 'Display', 'final-detailed');
[optim_scaled, fval, exitflag, output, lambda, grad, hessian] = ...
fmincon(@(x) objective(x, parameters_sys), var_nom_scaled, [], [], [],[],
...
LB, UB, @(x) system_constraints(x, parameters1, parameters2,
parameters3)...
, options);

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

amax = 1.8*g; %Max longitudinal acceleration


%%
%Suspension
K=17512.6835; %spring constant
C=1300; % damping coefficient
v=17.8816; %velocity of car (m/s)
R=6.0842; %Radius of turn
t=0; %time instant
%%
%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 specs:
% 4130 Steel
EA = 200e9; % Young's modulus = 200GPa
nuA = 0.285; % Poisson's ratio
yStress = 360.6e6; % Yield stress = 360.6MPa
FOSA = 2.6;
%Tie Rod
diT = 10.922/1000;
doT = 12.7/1000;
ET = 200e9;
sigmaT = 360.6e6;
nuT = 0.285;
FOS = 1.6;
%
%
%
%
%

7075 Aluminium
EA = 71.7e9;
nuA = 0.33;
yStress = 503e6;
FOS = 2.6;

%% Pipe: OD = 8mm, ID = 6mm


diA = 10.922e-3;
doA = 12.700e-3;
% diA = [10.922e-3; 9e-3; 7e-3; 5e-3; 4.5e-3];
% doA = [12.700e-3; 11e-3; 9e-3; 7e-3; 6e-3];
%% Max Deformation
maxDeform = 1.2e-3;
%% Coordinates:
XC1
XC2
XC3
XC4
XC5
XC6

=
=
=
=
=
=

0.001*[233.172 164.500 132.000]';


0.001*[-40.051 153.830 122.000]';
0.001*[-90.000 254.000 270.500]';
0.001*[196.850 268.000 269.500]';
0.001*[28.700;12.4079;310];
0.001*[ 101.998 0 15.897]';

98

XCG = 0.001*[755.904 0 299.72]';


Xw = 0.001*[0.000 584.200 222.250]';
XS4= [0.0105;0.4254;0.1264];
XU1nom = 0.001*[5.001 518.599 127.000]';
XU2nom = 0.001*[33.000 505.729 315.999]';
XU3nom = 0.001*[65.49898 501.599 175.00]';
XT1xnom = XC6(2)+lR/2;
XS1nom = 0.001*[80 230 245]';
XS2nom = 0.001*[75 290 245]';
XS3nom = 0.001*[93 250 325]';
%%
%desired properties
ltid = 0.05*25.4/1000; %toe in length
dh = 10*25.4/1000; %hub diameter
tauTd = 14;
Rmind = 7.25;
phiti1d=0;
phiti2d = -phiti1d;

%% Camber and Caster


cbmin = -3; % degree
cbmax = -1; % degree
ctmin = 7.75; % degree
ctmax = 9.25; % degree

%%
%Subsystem 1
% Weighting parameter
alpha = 0.9;

% Nominal values of Optimization variables


% XU1nom = 0.001*[125.001 60.599 00.000]';
% XU2nom = 0.001*[33.000 55.729 370.999]';
XUnom = [XU1nom; XU2nom];
%
%
%
%
%
%

Lower and upper bounds of Optimization variables


XU1l = [-0.020 0.494 0.102]';
XU2l = [0.008 0.481 0.346]';
XU1u = [0.030 0.544 0.192]';
XU2u = [0.058 0.531 0.396]';

XU1l = XU1nom - (cubesize/2)*ones(3,1);


XU1u = XU1nom + (cubesize/2)*ones(3,1);
XU2l = XU2nom - (cubesize/2)*ones(3,1);

99

XU2u = XU2nom + (cubesize/2)*ones(3,1);


XUl = [XU1l; XU2l];
XUu = [XU1u; XU2u];
BoundsU = [XUl XUu];
% XUnom = XUl + 0.1*i*(XUu-XUl);
% XU1nom = 0.001*[0.001 500.599 100.000]';
% XU2nom = 0.001*[10.000 500.729 335.999]';
% XUnom = [XU1nom; XU2nom];
XUnomscaled =
% XUuscaled =
% XUlscaled =
Coords = [XC1
MatData = [EA
WheelAngles =
VehicleData =
parameters1{1}
parameters1{2}
parameters1{3}
parameters1{4}
parameters1{5}
parameters1{6}
parameters1{7}
parameters1{8}

(2*XUnom - XUu - XUl)./(XUu - XUl);


ones(6,1);
-ones(6,1);
XC2 XC3 XC4 Xw];
nuA yStress FOSA diA doA];
[cbmin cbmax; ctmin ctmax]';
[m, amax];
=
=
=
=
=
=
=
=

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

rack_pos = [xp xlimit];


%
%
%

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;

function bump_steer = objective(var_scaled, parameters)


% var_scaled are: XU1(1:3), XU2(4:6), XT11x(7), XU3(8:10), XS1(11:13),
XS2(14:16), XS3(17:19))
fixed_points = parameters{1};
LBound_sys = parameters{5};
UBound_sys = parameters{6};
lb = parameters{7};
for i=1:length(var_scaled)
var(i, 1) = 0.5*(var_scaled(i, 1)*(UBound_sys(i,1)LBound_sys(i,1))+UBound_sys(i,1)+LBound_sys(i,1));
end
%
%
%
%

XU1o
XU2o
XT1x
XU3o

=
=
=
=

var(1:3);
var(4:6);
var(7);
var(8:10);

[delta_phi, link_lengths, X_o, X_b,

Flag] = bump(lb, var, fixed_points)

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] =...

%Extracting the coordinates of fixed points


XW1o = fixed_points(:,1);
XCG = fixed_points(:,2);
XC1 = fixed_points(:,3);
XC2 = fixed_points(:,4);
XC3 = fixed_points(:,5);
XC4 = fixed_points(:,6);
XC5 = fixed_points(:,7);
XC6 = fixed_points(:,8);

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

function F = coord_solve_3(x, l, X_coord)


for i=1:length(l)
F(i) = l(i)-norm(x-X_coord(:,i));
end
end
function F = coord_solve_2(x,l,X_coord, x_z)
for i= 1: length(l)
F(i) = l(i)-norm([x; x_z]-X_coord(:,i));
end
end
%Constraints file!!
function [C, Ceq] = system_constraints(var_scaled, parameters1, parameters2,
parameters3)
% var_scaled are: XU1(1:3), XU2(4:6), XT11x(7), XU3(8:10), XS1(11:13),
XS2(14:16), XS3(17:19))
XU_scaled = var_scaled(1:6);
BoundsU = parameters1{5};
XUl = BoundsU(:,1);
XUu = BoundsU(:,2);
%unscale XU11, XU12
XU = 0.5*((XU_scaled.*(XUu-XUl))+XUu+XUl);
XU1 = XU(1:3);
XU2 = XU(4:6);
%Call Subsystem 1 Aarm
[C1] = AarmFunction(var_scaled(1:6),parameters1);
%Call Subsystem2
[C2] = steering(var_scaled(7:10), parameters2, XU1, XU2);
%Call Subsystem3
[C3, Ceq3] = constraints_PBR(var_scaled(11:19), parameters3);

%Additional System level constraints


C_sys = [];
%Combine constraints
Ceq = [Ceq3];
C = [C1 C2 C3 C_sys];

104

Potrebbero piacerti anche