You are on page 1of 148

Design and Synthesis of

Active and Passive Vehicle Suspensions

Fu-Cheng Wang
Queens’ College

Control Group
Department of Engineering
University of Cambridge

A dissertation submitted for


the degree of Doctor of Philosophy

September 2001
To my parents
for
their love
Abstract

This dissertation discusses the active suspension control of vehicle models. It contains two main
parts. In the first part of the thesis, we discuss the necessity of employing active suspension through
the analysis of the mechanical networks. We apply classical network theory to show that an active
suspension is necessary in half- and full-car vehicle models in certain situations. Typically, these
situations involved specifying a soft response from road disturbances as when a soft passive suspension
is implemented, and a stiff response from load disturbances as when a stiff passive suspension is
implemented.
In the second part of the thesis, we derive a parametrisation of the set of all stabilising controllers
for a given plant which leaves some pre-specified closed-loop transfer function fixed. To facilitate the
parametrisation at the required level of generality we define left and right normalrank factorisations
of a rational matrix. We also show that under some certain conditions, the achievable performance of
the remaining transmission paths can approximate the original performance set. The results are then
studied in the context of quarter-, half- and full-car vehicle models, to derive appropriate controller
structures. In the half-car case, we discuss the simplicity assumptions which are required to allow
a decomposition of the half-car into two quarter-cars. In the full-car case, we exploit a symmetry
assumption to decompose it into the bounce/pitch and roll/warp half-car models. The warp mode
is handled in a special way to reduce the twisting forces on the chassis. For complex models, the
numerical calculation of the controller structures is also discussed and applied to the double-wishbone
models.
We also present the trailing-arm model as an example of the main ideas of this thesis. We discuss
the traditional anti-squat and anti-dive design for the trailing-arm model. Through the use of network
analysis, it is found that an active suspension should be adopted to satisfy the performance criteria.
Then the disturbance response decoupling method is applied to design an active suspension for this
model.
Throughout this dissertation, the multi-body simulation package AutoSim is used for simulation
of vehicle models in combination with the theoretical work. As a result, the analysis and synthesis
methods developed in this dissertation could be directly applied to complex models.
Keywords: active suspension, network, LFT, controller parametrisation, disturbance response
decoupling, achievable performance, H∞ loop-shaping, trailing arm, anti-squat, anti-dive, AutoSim.

i
Acknowledgements

I would like to take this opportunity to express my gratitude to my supervisor Dr. Malcolm C. Smith for
his constant guidance and encouragement during the past three years. He always appreciates whatever
little progress I have achieved, and continuously gives me much inspiration by sharing his precious
knowledge and experience. I shall always remember the fun we have had together.
I would also like to thank Prof. Keith Glover for giving me the chance of doing research in this
group. He is always here for me whenever I need his help. I am also grateful to Dr. Jan Maciejowski
and Dr. Glenn Vinnicombe for their advice and help on my work.
It is a great pleasure to work with the colleagues, past and present, in the Control Group. My
special thanks to Dr. Gavin Walker, for helping me to become familiar with AutoSim and vehicle
dynamics. Particular thanks to Dr. George Papageorgiou and Dr. Alexander Lanzon for offering their
help and advice when I got stuck in my work. Many thanks to John Steele for improving the computer
facility and function in the Group. My sincere thanks to all the members in this Group for creating
such a relaxed and supportive working environment.
I am grateful to Master Sulgok. Not only did he teach me martial art, but also gave me warmth and
accompanied me when I was depressed. I am particularly indebted to Mrs Kit Pharaoh for providing
her warm hospitality toward me and devoting her valuable time to reading through my dissertation
and helping me with my English. I would further thank Mr. Chen and his family, Mrs Hsiao and Dr.
Laura Gellman for their hospitality and friendship. They are my family in England. Without them,
my study in England would not be so comfortable and pleasant.
I would like to extend my gratitude to my teachers in Taiwan, especially Prof. Jia-Yush Yen and
Prof. Min-Shin Chen in National Taiwan University, for leading me to the hall of knowledge. Their
support, emotionally and financially, helps me concentrate on my research work in Cambridge.
This work has been financially supported by the Overseas Research Student Award (ORS), Cam-
bridge Overseas Trust and Queens’ College. The overrun funding was granted by CUED. To all these
organisations I am grateful.
Finally, but most importantly of all, my parents, Jin-Shi and Bon-Tsi should receive my greatest
appreciation for their enormous love. They always respect what I want to do and give me their full
support. The support from my brother Ping-Ta, my sister Mei-Hsia, and my brother-in-law Chung-
Huang is also highly appreciated.

iii
iv ACKNOWLEDGEMENTS

As required by University Statute, I hereby declare that this dissertation is not substantially the
same as any that I have submitted for a degree or diploma or other qualification at any other university.
This dissertation is the result of my own work and includes nothing which is the outcome of work
done in collaboration.
Fu-Cheng Wang
Cambridge
September 2001
Contents

Abstract i

Acknowledgements iii

Notation and Acronyms xiii

1 Introduction 1
1.1 Passive Suspensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Active Suspensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Controller Parametrisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Outline of the Dissertation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5 Software Used in This Dissertation . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Necessity of Active Suspension – A Network Approach 7


2.1 Network Theorems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.1 Mechanical-Electrical Analogy . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.2 Network and Passivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 The Quarter-Car Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.1 Hand Derivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.2 Computational Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 The Half-Car Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4 The Full-Car Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5 Summary and Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3 Analysis and Design for the Trailing-Arm Model 17


3.1 The Trailing-Arm Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2 Anti-Squat and Anti-Dive Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.1 Anti-Squat Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.2 Anti-Dive Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3 Classical Conditions for Anti-Squat and Anti-Dive . . . . . . . . . . . . . . . . . . 25

v
vi CONTENTS

3.4 Comparison with the Work of Sharp [26] . . . . . . . . . . . . . . . . . . . . . . . . 26


3.5 Passivity Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.6 Summary and Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

4 Controller Parametrisation for Disturbance Response Decoupling 31


4.1 Normalrank Factorisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.2 Controller Parametrisation Results . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.3 Design Freedom and Achievable Performance . . . . . . . . . . . . . . . . . . . . . 41
4.4 Numerical Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.5 Summary and Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

5 Disturbance Response Decoupling for The Quarter-Car Model 49


5.1 The Quarter-Car with Two Measurements . . . . . . . . . . . . . . . . . . . . . . . 49
5.2 The Quarter-Car with Three Measurements . . . . . . . . . . . . . . . . . . . . . . 54
5.2.1 Alternative Controller Structures . . . . . . . . . . . . . . . . . . . . . . . . 56
5.3 Quarter-Car Control Structures and Design . . . . . . . . . . . . . . . . . . . . . . . 57
5.4 Achievable Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.4.1 Two Measurement Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.4.2 Three Measurement Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.5 A General Quarter-Car Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.6 Summary and Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

6 Disturbance Response Decoupling for The Half-Car Model 61


6.1 The Half-Car Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.2 Achievable Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.3 Decoupling by Simplicity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.4 Refined Design for The Half-Car Model . . . . . . . . . . . . . . . . . . . . . . . . 66
6.4.1 Controller Structure of Design for Fs . . . . . . . . . . . . . . . . . . . . . 66
6.4.2 Controller Structure of Design for Fψ . . . . . . . . . . . . . . . . . . . . . 67
6.4.3 The Relation Between the Controller Structures . . . . . . . . . . . . . . . . 68
6.4.4 Design Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
6.5 Summary and Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

7 Disturbance Response Decoupling for The Full-Car Model 71


7.1 The Dynamic Equations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.2 Symmetric Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.2.1 Bounce/Pitch Half-Car . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.2.2 Roll/Warp Half-Car . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.3 A Design Example for the Full-Car Model . . . . . . . . . . . . . . . . . . . . . . . 75
CONTENTS vii

7.3.1 Bounce/Pitch Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77


7.3.2 Roll Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
7.3.3 Warp Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
7.3.4 The Full-Car Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
7.3.5 Vehicle Dynamics Simulations . . . . . . . . . . . . . . . . . . . . . . . . . 82
7.4 Summary and Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

8 Numerical Calculation of the Controller Structure 85


8.1 The Half-Car Double-Wishbone Model . . . . . . . . . . . . . . . . . . . . . . . . 85
8.2 The Full-Car Double-Wishbone Model . . . . . . . . . . . . . . . . . . . . . . . . . 89
8.2.1 Special Treatment for the Warp Mode . . . . . . . . . . . . . . . . . . . . . 91
8.2.2 Nonlinear Simulation Results . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.3 Summary and Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

9 Active Suspension Design for the Trailing-Arm Model 95


9.1 Controller Design for Disturbance Response Decoupling . . . . . . . . . . . . . . . 95
9.2 Network Analysis of the Active Trailing-Arm Models . . . . . . . . . . . . . . . . . 96
9.3 Simulation Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
9.4 Summary and Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

10 Concluding Remarks 99
10.1 Main Contributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
10.2 Direction for Future Research . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

A Appendix to Chapter 2 101


A.1 The AutoSim Linearised Quarter-Car Model . . . . . . . . . . . . . . . . . . . . . . 101
A.2 The Passivity Analysis Based on AutoSim Models . . . . . . . . . . . . . . . . . . . 102

B Appendix to Chapter 3 103


B.1 Appendix to Anti-Squat Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
B.2 Appendix to Anti-Dive Geometry (Outboard Braking) . . . . . . . . . . . . . . . . . 106
B.3 AutoSim Code of the Linearised Trailing-Arm Model . . . . . . . . . . . . . . . . . 106

C Appendix to Chapter 5 108

D Appendix to Chapter 6 109

E Appendix to Chapter 7 111


E.1 AutoSim Code of the Nonlinear Full-Car Model . . . . . . . . . . . . . . . . . . . . 111
E.2 C-Code for the Active Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
viii CONTENTS

E.3 C-Code for the Tyre Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

F Appendix to Chapter 8 118


F.1 The Linearised Half-Car Double-Wishbone Model . . . . . . . . . . . . . . . . . . 118
F.2 The Linearised Full-Car Double-Wishbone Model . . . . . . . . . . . . . . . . . . . 120

G Appendix to Chapter 9 123


G.1 AutoSim Code of the Nonlinear Trailing-Arm Model . . . . . . . . . . . . . . . . . 123
G.2 C-Code for the Active Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

Bibliography 127
List of Figures

2.1 A n-port network. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8


2.2 The quarter-car model, and as a two-port network. . . . . . . . . . . . . . . . . . . . 10
2.3 Eigenvalues of (Y + Y ∗ )( j ω) for the quarter-car model. . . . . . . . . . . . . . . . . 12
2.4 The half-car model, and as a four-port network. . . . . . . . . . . . . . . . . . . . . 13
2.5 Eigenvalues of (Y + Y ∗ )( j ω) for the half-car model. . . . . . . . . . . . . . . . . . 14
2.6 The full-car model, and as a seven-port network. . . . . . . . . . . . . . . . . . . . . 15
2.7 Eigenvalues of (Y + Y ∗ )( j ω) for the full-car model. . . . . . . . . . . . . . . . . . 16

3.1 A half-car trailing-arm model with passive suspensions. . . . . . . . . . . . . . . . . 18


3.2 Squat and dive motions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3 Anti-squat design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.4 Anti-dive design (outboard braking). . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.5 Anti-squat/anti-dive design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.6 Simplified trailing-arm geometry: (a) anti-squat; (b) anti-dive with outboard braking. 25
3.7 Compromised anti-squat/anti-dive geometry. . . . . . . . . . . . . . . . . . . . . . . 28
3.8 The passivity analysis of the half-car trailing-arm model with outboard braking. . . . 29
3.9 The passivity analysis of the half-car trailing-arm model with outboard braking (2). . 29

4.1 Generalised model in LFT form. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34


4.2 General controller structure and equivalent controller. . . . . . . . . . . . . . . . . . 38
4.3 Controller structure as a left annihilator. . . . . . . . . . . . . . . . . . . . . . . . . 39
4.4 Classical feedback interconnection. . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

5.1 The quarter-car model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50


5.2 Controller structure for the quarter-car with two feedbacks. . . . . . . . . . . . . . . 52
5.3 Passive suspension (Q 1 = 0, solid) and active suspension (Q 1 = 1.08, dashed). . . . 52
5.4 Passive suspension (solid) and active suspension using H∞ loop shaping design (dashed). 53
5.5 Controller structure of R.A. Williams et al. . . . . . . . . . . . . . . . . . . . . . . . 54
5.6 Controller structure for the quarter-car with three feedbacks. . . . . . . . . . . . . . 56
5.7 A general quarter-car model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

ix
x LIST OF FIGURES

6.1 The half-car model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62


6.2 Controller structure for the half-car model. . . . . . . . . . . . . . . . . . . . . . . . 63
6.3 Step responses of TF̂s →ẑs and TF̂ψ →ẑψ : passive (solid) and active control (dashed). . . 64
6.4 Closed-loop step responses using various controllers. . . . . . . . . . . . . . . . . . 69

7.1 The full-car model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72


7.2 Control scheme for the full-car model. . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.3 The warp quarter-car. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.4 Final controller structure for the full-car model. . . . . . . . . . . . . . . . . . . . . 80
7.5 Step responses using active and passive suspensions. . . . . . . . . . . . . . . . . . 81
7.6 Response of z u 1 to a step input of 1 cm at zr1 for AutoSim model. . . . . . . . . . . . 82
7.7 Anti-dive and anti-squat effect in AutoSim model using active suspension (dashed),
compared with passive suspension (solid). . . . . . . . . . . . . . . . . . . . . . . . 83

8.1 The half-car double-wishbone model. . . . . . . . . . . . . . . . . . . . . . . . . . 86


8.2 Step responses for linearised model of TF̂s →ẑs and TF̂ψ →ẑψ . . . . . . . . . . . . . . 87
8.3 Step responses for the linearised model of TF̂s →ẑs and TF̂ψ →ẑψ with various controllers. 88
8.4 The full-car double-wishbone model. . . . . . . . . . . . . . . . . . . . . . . . . . . 89
8.5 AutoSim nonlinear simulations: step responses of TF̂s →ẑs , TT̂θ →ẑθ and TT̂φ →ẑφ . . . . . 92

9.1 The passivity analyses for (a): acceleration (or inboard braking); (b): outboard braking. 96
9.2 (a) applied torques (b) velocity; (c) and (d) the pitch motion of the active (dashed) and
passive (solid) systems without and with tyre springs. . . . . . . . . . . . . . . . . . 97

B.1 Free-body diagram for the anti-squat design. . . . . . . . . . . . . . . . . . . . . . . 103


List of Tables

2.1 Mechanical-electrical analogy – force-current. . . . . . . . . . . . . . . . . . . . . . 8


2.2 Mechanical-electrical analogy – force-voltage. . . . . . . . . . . . . . . . . . . . . . 8

5.1 The Ũ2 structures and the transformed plants of the quarter-car model with various
measurements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.2 The Ũ2 structures and the transformed plants of the general quarter-car model with
various measurements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

6.1 Decoupled half-car by simplicity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

7.1 Decoupled (symmetric) full-car. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74


7.2 Decoupled roll and warp modes of the full-car by simplicity. . . . . . . . . . . . . . 75

xi
Notation and Acronyms

Notations
RH∞ Set of stable and norm-bounded real-rational functions.
RHm×n
∞ Set of matrices with m rows and n columns, and all elements in RH∞ .
R m
Set of real column vectors with m entries.
C Set of complex numbers.
Q Youla parameter.
N, M Right coprime factorisation matrices.
Ñ , M̃ Left coprime factorisation matrices.
k · k∞ H∞ -norm.
σ̄ (A) Largest singular value of matrix A.
0
(·) Transpose operator.

(·) Complex conjugate transpose operator.
ŵ, ẑ Laplace transform of functions w(t), z(t).
ms Sprung mass.
m u , m 1, m 2, m 3, m 4, m f , mr Unsprung masses.
k s , k 1 , k 2 , k 3 , k 4 , k f , kr Suspension spring stiffnesses.
cs , c1 , c2 , c3 , c4 , c f , cr Suspension damper damping ratios.
kt , kt1 , kt2 , kt3 , kt4 , kt f , ktr Tyre spring stiffnesses.
u Controlled input.
y Measured output.
w Exogenous input.
z Regulated output.
D Strut deflection.
P Generalised plant.
K Controller.
T Transfer function.
G Immitance matrix.
Y Admittance matrix.

xiii
xiv NOTATION AND ACRONYMS

Z Impedance matrix.
F Force.
A, B Sets of proper, stable transfer matrices.

Subscripts
b, ρ Bounce and rotation components in half-car model.
b f , br Front and rear bounce components in full-car model.
ρ f , ρr Front and rear roll components in full-car model.
bp Bounce/pitch component in full-car model.
roll Roll component in full-car model.
war p Warp component in full-car model.

Acronyms
SISO Single Input Single Output.
LFT Linear Fractional Transformation.
lnf Left Normalrank Factorisation.
rnf Right Normalrank Factorisation.
Chapter 1

Introduction

Suspension systems have been widely applied to vehicles, from the horse-drawn carriage with flexible
leaf springs fixed in the four corners, to the modern automobile with complex control algorithms.
Generally speaking, a good suspension should provide a comfortable ride and good handling within
a reasonable range of deflection. Moreover, these criteria subjectively depend on the purpose of the
vehicle. For example, a sports car driver will accept a relatively hard ride as a compromise for high
speed handling and safe fast cornering. But the same ride would be intolerable for the passengers of
a big saloon car.
From a system design point of view, there are two main categories of disturbances on a vehicle,
namely road and load disturbances. Road disturbances have the characteristics of large magnitude in
low frequency (such as hills) and small magnitude in high frequency (such as road roughness). Load
disturbances include the variation of loads induced by accelerating, braking and cornering. Therefore,
a good suspension design is concerned with disturbance rejection from these disturbances to the
outputs (e.g. vehicle height etc) in which we are interested. Roughly speaking a conventional passive
suspension needs to be “soft” to insulate against road disturbances and “hard” to insulate against load
disturbances. Therefore, suspension design is an art of compromise between these two goals.
There are two main categories of suspension systems, namely passive and active suspension sys-
tems. A passive suspension, which means there is no energy source in the system, provides a simpler
and cheaper way of suspension design at the expense of performance limitations of the type described
above. On the other hand, active suspensions incorporate extra energy sources to refine the compro-
mise, though the freedom to shape disturbance response transfer functions is still not arbitrary due to
factors such as invariant points [31].

1.1 Passive Suspensions

Passive suspensions contain elements, such as springs and dampers, which can only store or dissipate
energy. Different types of springs and dampers might be used in design, but most suspensions in this

1
2 Introduction

class can be considered as a spring in parallel with a damper placed at each corner of the vehicle, and
normally such a spring-damper unit is called a “strut” [37].
In addition to the struts, some other elements or special geometrical arrangements are also used
to increase the performance of passive systems. For example, additional roll springs (anti-roll bars)
could be used to increase the stiffness to roll motion. Trailing arms could be implemented between the
sprung mass and the wheel hubs to reduce the dive and squat motion of the vehicle body during braking
and acceleration. The Moulton Hydro-lastic system inter-connected the front and rear suspensions
by hydraulic pipes to change the dynamic responses to pitch [3, 37]. In [19] a self-energizing hydro-
pneumatic levelling system was presented which used the relative wheel-to-body movement to “pump”
the car body up to achieve a desired ride height, so that soft springs can be employed to give a better
ride.
The performance limitation of passive suspensions was illustrated in [32, Example 3], using an
example of the linear quarter-car model. It was concluded that active suspensions have significantly
greater freedom to optimise among the variety of performance specifications. This dissertation will
continue this idea by analysing situations for half-car, full-car, trailing-arm, double-wishbone models
where desired performance behaviour can only be achieved using active means.

1.2 Active Suspensions

The use of active suspension on road vehicles has been considered for many years [35, 24, 15, 41, 27]. A
large number of different arrangements from semi-active to fully active schemes has been investigated
[7, 28, 42, 40]. There has also been interest in characterising the degrees of freedom and constraints
involved in active suspension design. Constraints on the achievable response have been investigated
from “invariant points”, transfer-function and energy/passivity point of view in [16, 13, 14, 31, 32].
In [31], a complete set of constraints was derived on the road and load disturbance response transfer-
functions and results on the choice of sensors needed to achieve these degrees of freedom independently
were obtained for the quarter-car model. The generalisation of these results to half- and full-car models
was then presented in [9]. In [32] it was shown that the road and load disturbance responses cannot
be adjusted independently for any passive suspension applied to a quarter-car model.
The need to design the road and load disturbance responses independently has been considered
elsewhere in the active suspension literature. For example, in [24] a hardware and sensing arrangement
was devised so that the feedback part of the scheme would not affect the response to road disturbances,
which were designed to be suitably soft by means of passive elements in the scheme. In [39, 40]
the actuator was placed in series with a spring and damper, which were chosen to give a suitably soft
response to road irregularities in the absence of a feedback signal. A controller structure using a filtered
combination of the sensor measurements was then selected so that the road disturbance responses were
unaffected by the feedback. In this dissertation we develop a continuation of this idea by finding in
1.3 Controller Parametrisation 3

general the required controller structure to achieve this property for any set of measurements.
In active suspension design for full-car models it has been found advantageous to decompose
the motion into bounce, pitch and roll components for the vehicle body, and additionally warp for the
wheels in contact with the road [20, 17, 12, 32]. This dissertation will also exploit such transformations.
In the full-car case we will exploit symmetry to decompose into the bounce/pitch and roll/warp half-
cars. In the half-car case we will use our results to determine the feedback structure to allow road
and load disturbances to be shaped independently and discuss the simplicity assumptions which are
required to allow a further decomposition of the half-car into two quarter-cars.

1.3 Controller Parametrisation

The idea of parametrising all stabilising controllers in a linear feedback system is a standard one
[44, 45]. The extension of this idea to two-degree-of-freedom schemes (which allows the response
to reference commands and the return ratio of the feedback path to be optimised independently) is
also standard [43, 36]. The generalisation to additional degrees-of-freedom to include some exoge-
nous disturbances has also been considered [23]. The parametrisation of all stabilising controllers
which leave some pre-specified closed-loop transfer function fixed, as considered in this dissertation,
represents a continuation of these ideas and techniques.
Our approach makes use of algebraic properties of the ring of stable, proper rational functions
[36]. To facilitate the parametrisation at the required level of generality we will introduce the idea of
left and right normalrank factorisations of a rational matrix (Definition 4.1).

1.4 Outline of the Dissertation

This dissertation contains ten chapters and is organised as follows:

Chapter 2: This chapter introduces the analogy of mechanical/electrical systems, and presents the
vehicle models as corresponding networks. The passivity of the network can then be checked
by the positive realness of its transformation matrices. An analysis procedure combined with
AutoSim is employed to show the necessity of implementing active suspensions in order to
achieve certain performance requirements. This procedure is especially useful for complex
models, such as the full-car model, where it is not so easy to derive the transfer functions
symbolically.

Chapter 3: This chapter considers a half-car trailing-arm model, and discusses the traditional solution
to reduce vehicle pitching motions during acceleration and braking. We derive the generalised
trailing-arm geometry for perfect anti-squat/anti-dive design. By checking the positive realness
of the transformation matrices, we know that active suspensions should be used to satisfy the
performance requirements.
4 Introduction

Chapter 4: This chapter develops the general theorem for disturbance response decoupling, which
improves the closed-loop responses while keeping some pre-specified transmission paths un-
changed. A simplified theorem for the vehicle models used in this dissertation is also given,
which enables us to perform the active controller design using existing controller synthesis
methods, e.g. H∞ loop shaping. For refined design, it is also shown that we can make further
improvement on the closed-loop transmission paths stage by stage. The achievable performance
after disturbance response decoupling is discussed from the scalar case to the matrix form. The
conditions under which the achievable performance remains effectively the same as before the
disturbance response decoupling design are also derived.

Chapter 5: This chapter applies the disturbance response decoupling theorem to the linear quarter-
car model employing a “Sharp” actuator with various measurements. The results are compared
with the controller structure in [40], and illustrate our systematic approach for vehicle active
suspension design. The achievable load responses are shown not to be reduced in a significant
way after the design.

Chapter 6: This chapter extends the application of disturbance response decoupling to the linear
half-car model, and discusses the “simplicity” conditions which decompose the half-car into
two quarter-car models. The procedure of successive design, which improves the closed-loop
responses stage by stage, is also exemplified in this chapter.

Chapter 7: This chapter discusses the application of disturbance response decoupling to the linear
full-car model. It shows that the full-car model can be separated into two half-car models
under a symmetry assumption. The bounce/pitch half-car is treated according to the theory in
Chap. 6. The roll/warp half-car decomposes further into two quarter-car models, where the roll
mode is treated as a quarter-car and the warp mode is handled in a special way to reduce the
twisting forces on the chassis. The final controller is simulated with a nonlinear vehicle model
by AutoSim.

Chapter 8: This chapter presents the procedure for the numerical calculation of the controller structure
when it is difficult or not feasible to derive symbolically. This procedure is then applied to to
the half-car and full-car double-wishbone models.

Chapter 9: This chapter applies the disturbance response decoupling to the half-car trailing-arm
model introduced in Chap. 3. An active controller is numerically derived and implemented in
C code which is then called by a nonlinear AutoSim model. The results show that we can apply
active suspension control to the model with reasonable trailing-arm geometry to significantly
reduce vehicle pitching motions.

Chapter 10 This chapter summarises the main contributions of this dissertation and outlines potential
directions for further research.
1.5 Software Used in This Dissertation 5

1.5 Software Used in This Dissertation

The following software is used for the works of this dissertation:

Maple: Much of the work in this dissertation involves explicit computation of complicated matricial
expressions. To avoid any possible error, all the symbolic equations in this dissertation are either
derived or checked by the “algebraic manipulation package” Maple V [6].

AutoSim: The vehicle models are built by the “muti-body simulation code” AutoSim, which can give
linearised models for analysis in matlab or perform the nonlinear simulation. It writes the
simulation code in C or FORTRAN languages. To implement the active controller, we write the
active controller in C code as a sub-routine of the AutoSim models [25, 26].

Matlab: It is used for numerical calculation and simulation of the linearised models.
Chapter 2

Necessity of Active Suspension – A


Network Approach

In this chapter, we consider the necessity of using an active suspension system to achieve certain
performance requirements using network theorems, especially the concept of passivity. The multi-
body simulation code AutoSim is then employed to carry out the analysis for complex models.
Section 2.1 defines a network, and discusses the equivalence of the passivity of a network and the
positive realness of its transfer matrices. Section 2.2 discusses the necessity of using active suspension
for a quarter-car model which is required to be “soft” to road disturbance and “hard” to load disturbance.
An AutoSim linearised model is introduced to set up the standard analysis procedure, which will then
be used in Section 2.3 and Section 2.4 for the analysis of the half- and full-car models.

2.1 Network Theorems

It is well-known that mechanical and electrical systems are analogous. After transferring a mechanical
dynamic system to an equivalent electrical circuit, some of the well-developed network theorems can
be directly applied to our analyses. In this section, we shall first introduce the analogies between
mechanical and electrical systems, and then discuss some network theorems.

2.1.1 Mechanical-Electrical Analogy

Between mechanical and electrical systems, there are two well-known analogies, namely force-current
and force-voltage analogies [11, 29]. These analogies are listed in Table 2.1 and Table 2.2. From the
tables, it is clear that the instantaneous power should be the same, no matter what analogy we choose.
In [29], the force-current analogy is used to deal with mechanical systems since forces are more easily
thought of as “through variables”, like currents going through electrical elements.

7
8 Necessity of Active Suspension – A Network Approach

Mechanical Electrical
Force F Current i
Displacement x
Velocity v Voltage V
Mass m Capacitance C
1
Spring rate k Inductance L
1
Damping rate c Resistance R
Power F ·v Power V ·i

Table 2.1: Mechanical-electrical analogy – force-current.

Mechanical Electrical
Force F Voltage V
Displacement x Charge q
Velocity v Current i
Mass m Inductance L
1
Spring rate k Capacitance C
Damping rate c Resistance R
Power F ·v Power V ·i

Table 2.2: Mechanical-electrical analogy – force-voltage.

2.1.2 Network and Passivity

i1 i4
V1 V4
i2 ..
.
V2 n-port network ..
.
i3 in
V3 Vn

Figure 2.1: A n-port network.

A network can be represented as Fig. 2.1, where i 0 s (V 0 s) are called through (cross) variables.
Such a network is called a n-port network [4].

Definition 2.1 A n-port network has n pairs of port variables {Vi , i i }, i=1,2,. . .,n and can be depicted
as in Fig. 2.1.

Circuits containing only three basic elements – resistance, capacitance and inductance, are some-
times termed passive circuits. On the other hand, active circuits contain also devices such as transistors
2.1 Network Theorems 9

which, unlike passive elements, are capable of energy amplification [30]. The basic defining property
of passive elements is that they can only dissipate or store energy [21]. Expressed in mathematical
terms this is as follows [22]:

Definition 2.2 A multi-port network is defined to be passive if for all admissible V , i which are square
integrable on (−∞, t], Z t
E(t) = V (τ )∗ i(τ )dτ ≥ 0.
−∞

That is, a passive network is one for which the absorbed energy never goes negative. If N is not passive,
it is called active.

Using the mechanical-electrical analogy, a mechanical network is defined to be passive if


Z t
F(τ )∗ v(τ )dτ ≥ 0. (2.1)
−∞

The quantity on the left-hand side of (2.1) is the total energy delivered to the network up to time t.
For a linear network, a matrix Z (s) (resp. Y (s)) for which V̂ = Z (s)î (resp. î = Y (s) V̂ ) is termed the
impedance (resp. admittance) matrix. It is also possible to define a mixed immittance matrix relating a
vector containing both forces and velocities to a vector containing the complementary variables. Then
the total energy delivered to the network is
Z ∞ Z ∞

E = V (t) i(t)dt (= i(t)∗ V (t)dt)
−∞ −∞
Z ∞
1
= V̂ ( j ω)∗î( j ω)dw (Parseval theorem)
2π −∞
Z ∞
1
= î( j ω)∗ Z ( j ω)∗î ( j ω)dw
2π −∞
Z ∞
1
= î( j ω)∗(Z ( j ω) + Z ( j ω)∗)î( j ω)dw. (2.2)
4π 0

Thus a necessary condition for passivity is that Z ( j ω) + Z ( j ω)∗ ≥ 0. If the system is SISO, the
condition is equivalent to Re(Z ( j ω)) ≥ 0. This says that the Nyquist diagram of Z cannot enter the
left half plane.
In order to give a precise necessary and sufficient condition for passivity, positive realness is
now defined.

Definition 2.3 Z(s) is positive real if

1. Z(s) is analytic in Re(s) > 0.

2. One of the following conditions is true,

(i) . Z (s) + Z (s)∗ ≥ 0 in Re(s) > 0,


10 Necessity of Active Suspension – A Network Approach

(ii). Z ( j ω) + Z ( j ω)∗ ≥ 0 for all ω at which Z ( j ω) is finite, and any poles of Z(s) on the
imaginary axis or at infinity are simple and have a non-negative definite, Hermitian residue.

With the definition of positive-realness, we shall complete this section by stating an important theorem
[22], [37]:

Theorem 2.1 Consider a network with impedance Z(s). The network is passive if and only if Z(s) is
positive real. ♥

It should also be noticed that Theorem 2.1 also holds with Z (s) replaced by Y (s) or a mixed immittance
G(s).

2.2 The Quarter-Car Model

In this section, we shall apply Theorem 2.1 to a linear quarter-car model, as shown in Fig. 2.2, following
a numerical example given in [32, Example 3]. The purpose of this section is to prepare the way for
this type of reasoning to be generalised to more complex models. Such a procedure can then be applied
to complex systems where the symbolic transfer functions are not available or difficult to derive.

Fs
ms zs

u Fr Fs

żr G ż s
mu zu Fr Fs
kt

Fr zr

Figure 2.2: The quarter-car model, and as a two-port network.

2.2.1 Hand Derivation

The dynamic equations of this system are:

m s z̈ s = Fs − u,
m u z̈ u = u + Fr ,

where

Fr = kt (zr − z u ),
2.2 The Quarter-Car Model 11

and u represents any possible suspension force. For a passive suspension u = cs (ż s − ż u )+ks (z s − z u ),
the transfer matrix of the mixed immittance can be expressed as:
" # " #" #
s ẑ s G 11 G 12 F̂s
= ,
F̂r G 21 G 22 s ẑr

where,
m u s 3 + cs s 2 + (ks + kt )s
G 11 = ,
P4 (s)
kt (cs s + ks )
G 12 = ,
P4 (s)
kt (cs s + ks )
G 21 = − ,
P4 (s)
kt s(m s m u s 2 + (m s + m u )cs s + (m s + m u )ks )
G 22 = ,
P4 (s)
in which P4 (s) = m s m u s 4 + (m s + m u )cs s 3 + (m s kt + (m s + m u )ks )s 2 + kt cs s + kt ks .
Suppose this system is required to be soft to road disturbance zr as when a soft passive suspension
u = css (ż s − ż u ) + kss (z s − z u ) is implemented, and hard to load disturbance Fs as when a hard passive
suspension u = csh (ż s − ż u ) + ksh (z s − z u ) is implemented, that is,
" # " #" #
s ẑ s G h11 G s12 F̂s
= , (2.3)
F̂r G h21 G s22 s ẑr

where s and h represent soft and hard suspension settings respectively. Following [32] we will use The-
orem 2.1 to show a numerical example that an active suspension is necessary to satisfy the performance
requirements. We select the following parameters for the quarter-car model as in [32]: m s = 250 kg,
m u = 35 kg, kt = 150 kN/m, and take ksh = 120 kN/m, csh = 40 kNs/m, kss = 12 kN/m, css = 4
kNs/m. In order to get a suitable scaling, we calculate the positive realness of another transformation
matrix Y :
" # " #
F̂s s ẑ s
= Y .
F̂r s ẑr

The eigenvalues of (Y + Y ∗ )( j ω) are shown in Fig. 2.3. The negative value at the frequency around
10 rad/sec indicates that this system cannot be achieved by a passive suspension, i.e. extra energy
should be introduced by an active suspension to satisfy the performance requirements.

2.2.2 Computational Procedure

The eigenvalue plot of Fig. 2.3 is identical with the one obtained in [32]. However, the plot was
obtained here by the use of AutoSim to generate the linearised models, followed by the use of a matlab
program to compute the eigenvalues. This method, which will be applied in subsequent sections to
more complex models is summarised as follows:
12 Necessity of Active Suspension – A Network Approach

4
x 10
5

Eigenvalues (Ns/m)
2

−1

−2 −2 −1 0 1 2 3
10 10 10 10 10 10
Frequency (rad/sec)

Figure 2.3: Eigenvalues of (Y + Y ∗ )( j ω) for the quarter-car model.

(i) Build AutoSim models, using different passive suspension settings.

(ii) Decide required performance for each transmission path and form a mixed transformation matrix
like (2.3).

(iii) Check the positive realness of this mixed transformation matrix. For better scaling, it is some-
times necessary to change the transformation matrix, which is valid since the positive realness
of G, Y and Z are equivalent.

(iv) If the transformation matrix is not positive real, it means that the performance requirements can
only be achieved by an active control.1 .

The AutoSim program to generate the linearised quarter-car model is given in Appendix A.1, while
the remaining part of the procedure is given by the matlab program in Appendix A.2.

2.3 The Half-Car Model

In this section, we shall follow the procedure described in the previous section to the half-car model,
as shown in Fig. 2.4. The linearised dynamic equations can be expressed as follows:

m s z̈ s = Fs − u 1 − u 2 ,
Iψ z̈ ψ = Fψ − u 1l1 + u 2 l2 ,
m 1 z̈ u 1 = u 1 + Fr1 ,
m 2 z̈ u 2 = u 2 + Fr2 ,
1 If the transformation matrix is positive real, some additional conditions are necessary for realisation by passive control

in the form of Fig. 2.2 [32, Theorem 6]


2.3 The Half-Car Model 13

where the tyre forces Fr1 , Fr2 are given by:

Fr1 = kt1 (zr1 − z u 1 ),


Fr2 = kt2 (zr2 − z u 2 ),

and u 1 = c1 (ż s + l1 ż ψ − ż u 1 ) + k1 (z a1 − z u 1 ), u 2 = c2 (ż s − l2 ż ψ − ż u 2 ) + k2 (z a2 − z u 2 ) for passive


suspensions.

Fs

z ψ , Fψ m s , Iψ zs

l1 l2

u1 u2 Fs Fr1
zu1 zu2 żr1
m1 m2 ż s
Fψ G Fr2
k t1 z r1 k t2 z r2 ż ψ żr2

Figure 2.4: The half-car model, and as a four-port network.

We suppose the performance requirements are that the system should be soft to road disturbances
zr1 , zr2 as when passive elements c1s , c2s , k1s , k2s are used, and hard to load disturbances Fs , Fψ as when
passive elements c1h , c2h , k1h , k2h are used, where s and h
represent soft and hard suspension settings.
Therefore the transformation matrix can be expressed as:
    
s ẑ s Gh Gh Gs Gs F̂s
   11 12 13 14  
 s ẑ   Gh Gh Gs Gs   F̂ 
 ψ   21 22 23 24  ψ 
  =  h h s  .
 F̂r   G G G Gs   s ẑr 
 1   31 32 33 34  1 
F̂r2 G h41 G h42 G s43 G s44 s ẑr2

The expressions for G i j , i, j = 1 . . . 4 can be obtained easily by Maple, but they are too complicated to
list. Instead, the procedure described in Section 2.2.2 will be employed. The following parameters are
used for the half-car model: m s = 1600 kg, Iψ = 1000 kg m2 , m 1 = m 2 = 100 kg, kt1 = kt2 = 500
kN/m, l1 = 1.15 m, l2 = 1.35 m. As the suspension settings, we choose c1h = c2h = 10 kNs/m,
k1h = k2h = 40 kN/m, c1s = c2s = 1 kNs/m, k1s = k2s = 4 kN/m. In order to get a suitable numerical
scaling, we check the positive realness of another transformation matrix Y , where [ F̂s , F̂ψ , F̂r1 , F̂r2 ]0 =
Y [s ẑ s , s ẑ ψ , s ẑr1 , s ẑr2 ]0 . As shown in Fig. 2.5, there are two negative eigenvalues of (Y +Y ∗ )( j ω) in the
region around 3 rad/sec. Therefore, we know that a passive suspension cannot satisfy the performance
requirements, so that an active suspension should be implemented.
14 Necessity of Active Suspension – A Network Approach

4
x 10
10

Eigenvalues (Ns/m)

−5 −2 −1 0 1 2 3
10 10 10 10 10 10
Frequency (rad/sec)

Figure 2.5: Eigenvalues of (Y + Y ∗ )( j ω) for the half-car model.

2.4 The Full-Car Model

In this section, we consider a full-car model, as shown in Fig. 2.6. The linearised dynamics of the
full-car can be expressed as:

m s z̈ s = Fs − u 1 − u 2 − u 3 − u 4 ,
Iθ z̈ θ = Tθ + u 1l f + u 2l f − u 3lr − u 4 lr ,
Iφ z̈ φ = Tφ − u 1 t f + u 2 t f − u 3 tr + u 4 tr ,
m f z̈ u 1 = u 1 + Fr1 ,
m f z̈ u 2 = u 2 + Fr2 ,
m r z̈ u 3 = u 3 + Fr3 ,
m r z̈ u 4 = u 4 + Fr4 ,

where the passive suspension forces u 1 ,…,u 4 and the tyre forces Fr1 ,…,Fr4 are given by:

ui = ci Ḋi + ki Di ,
Fri = kti (zri − z u i ),

for i = 1, . . . , 4 and the strut deflections D1 ,…,D4 are

D1 = z s − l f z θ + t f z φ − z u 1 ,
D2 = z s − l f z θ − t f z φ − z u 2 ,
D3 = z s + lr z θ + tr z φ − z u 3 ,
D4 = z s + lr z θ − tr z φ − z u 4 .
2.5 Summary and Comments 15

tr tr

u3 u4
zu3 zu4
mr mr
lr
z s , Fs
k t3 k t4 z r4
z r3 z θ , Tθ

m s , Iφ , Iθ
Fr1 Fs
z φ , Tφ lf żr1 ż s
tf tf Fr2
żr2 Tθ
Fr3 G ż θ
u1 u2
zu1 zu2 żr3
mf mf
Fr4 Tφ
k t1 z r1 k t2 z r2 żr4 ż φ

Figure 2.6: The full-car model, and as a seven-port network.

Suppose the performance requirements for the suspension design are that the system should be
soft to road disturbances zr1 , …, zr4 as when passive elements cis , kis , are used, and hard to to load
disturbances Fs , Tθ , Tφ as when passive elements cih , kih , are used, where s and h
represent soft and
hard suspension settings, and i = 1, . . . , 4. Therefore the transformation matrix can be expressed as:
h i0  h i0
s ẑ s , s ẑ φ , s ẑ θ , F̂r1 , F̂r2 , F̂r3 , F̂r4 = Gh , Gs F̂s , F̂φ , F̂θ , s ẑr1 , s ẑr2 , s ẑr3 , s ẑr4 .

The following parameters will be used for the full-car model: m s = 1600 kg, Iθ = 1000 kg m2 , Iφ =
450 kg m2 , t f = tr = 0.75 m, l f = 1.15 m, lr = 1.35 m, ki = 250 kN/m, m i = 50 kg.
The performance requirements are stated as cih = 5 kNs/m, kih = 20 kN/m, cis = 0.5 kNs/m,
kis = 2 kN/m. In order to obtain a suitable scaling, we check the positive realness of another
transformation matrix Y :
h i0  0
F̂s , F̂φ , F̂θ , F̂r1 , F̂r2 , F̂r3 , F̂r4 = Y s ẑ s , s ẑ φ , s ẑ θ , s ẑr1 , s ẑr2 , s ẑr3 , s ẑr4 .

The result in Fig. 2.7 shows that three eigenvalues of (Y + Y ∗ )( j ω) are negative at ω ≈ 3 rad/sec,
which means that the performance requirements cannot be achieved passively.

2.5 Summary and Comments

In this chapter, we described the mechanical/electrical analogy and discussed vehicle suspension
models as their corresponding networks. Then we showed how to check the passivity of a network
by checking the positive realness of its transformation matrices. For complex models, we used a
computational procedure combining the use of AutoSim and matlab to simplify the analysis. It was
16 Necessity of Active Suspension – A Network Approach

4
x 10
7

Eigenvalues (Ns/m)
3

−1

−2

−3 −2 −1 0 1 2 3
10 10 10 10 10 10
Frequency (rad/sec)

Figure 2.7: Eigenvalues of (Y + Y ∗ )( j ω) for the full-car model.

also shown that sometimes we need to check the positive realness of different transformation matrices
in order to get a suitable numerical scaling. This idea will be shown again in Chap. 3 for the analysis
and design of a trailing-arm model.
Chapter 3

Analysis and Design for the Trailing-Arm


Model

In this chapter, we shall discuss the half-car trailing-arm model and its geometrical arrangement to
reduce vehicle pitching motions. Using trailing arms is a conventional solution to overcoming the squat
or dive problems for a vehicle during the accelerating or braking motion. Section 3.1 introduces the
half-car trailing-arm model, and shows the effect on pitching motions under acceleration and braking
scenarios of using trailing arms. Section 3.2 derives simple geometric conditions for anti-squat and
anti-dive designs, based on a certain acceleration or braking ratio. Section 3.3 illustrates the classical
graphical relation of the trailing-arm geometry. Section 3.4 compares a recent approach to anti-squat
and anti-dive properties. Section 3.5 presents the trailing-arm model as a mechanical network, and
discusses the necessity of using active suspensions.

3.1 The Trailing-Arm Model

Fig. 3.1 illustrates a general half-car trailing-arm model with passive suspensions. The front wheel hub
is connected to the sprung mass by a trailing-arm AC1 , and the rear connected by BC2 . To simulate
acceleration and braking, torques T1 and T2 are applied to the two wheels, and corresponding forces F1
and F2 are induced at the tyre contact patch to maintain a no-slip rolling contact. For the acceleration
scenario, the reaction torques are applied to the sprung mass in the pitch motion. For the braking
scenario, the reaction torques are applied to either the sprung mass (inboard braking) or the trailing
arms (outboard braking). The following example shows the effect of the trailing arms.

Example 3.1 Consider a half-car trailing-arm model, as shown in Fig. 3.1, with the following coef-
ficients: m s = 1600 kg, Is = 1000 kg m2 , m 1 = m 2 = 100 kg, I1 = I2 = 1 kg m2 , k1 = k2 = 40
kN/m, c1 = c2 = 10 kNs/m, and model the front (rear) tyre as a spring with constant kt1 = 500 kN/m
(kt2 = 500 kN/m). The trailing arms are regarded as massless and without inertia. To model a rolling

17
18 Analysis and Design for the Trailing-Arm Model

y
Fs

x
Q Ts , φ3
E D forward direction
zs
m s , Is
k2 c2 k1 c1

T2 , φ2 H B A G
T1 , φ1

y3
φ5 φ4
C2 C1
m 2 , I2 m 1 , I1
r2 :pin joint r1
N2 N1
F2 F1

z r2 z r1
y2 y1

Figure 3.1: A half-car trailing-arm model with passive suspensions.

wheel with tyre the following method was employed: the unsprung masses were taken to be discs of
mass 100 kg and inertia 1 kg m2 with a no-slip rolling contact on a virtual road; the instantaneous
vertical position of the virtual road was determined by the point being connected to the true road’s
vertical position at each wheel station by a spring of the same stiffness as the tyre spring. (This is
not dissimilar to the method used to produce a tyre spring effect on the ThrustSSC supersonic car
[1] which used aluminium forged wheels without tyres running on a water-laid desert surface with
a natural ‘yield’!) Suppose the geometric arrangement for the nominal (undisturbed) configuration
has the following coordinates: Q = (0, 0), A = (0.15, 0.5), B = (0.15, −0.5), C1 = (0.35, 1.3),
C2 = (0.35, −1.3), D = (0.1, 1.3), E = (0.1, −1.3), G = (0.35, 1.3), H = (0.35, −1.3) in the unit
of meters, the radius of the front and rear wheels are r1 = r2 = 0.15 m. Let the vehicle be accelerated
and braked without the load disturbances (Fs = 0, Ts = 0) and road disturbances (zr1 = zr2 = 0).
Suppose the vehicle is driven by the rear wheel, and accelerated with a ramp input T2 = 0 ∼ −2000
Nm in t = 0 ∼ 1 sec and a step T2 = −2000 Nm in t = 1 ∼ 2 sec and then braked from t = 3 sec
with “inboard braking” T1 = T2 = 1000 Nm until it stops, as shown in Fig. 3.2(a). We can also change
the geometric arrangement of the trailing arms as A = (0.15, 0.8) m, B = (0.15, −0.8) m, and obtain
different responses. The pitch motions of the vehicle are shown in Fig. 3.2(c). Compare the responses
with those of a simple half-car model (without trailing-arm, and the wheels move perpendicular to the
sprung mass), we find that using trailing arms can significantly reduce the squat and dive of the car
body. 2

The above example shows not only the reduction of pitch motion by using trailing arms, but also
the significant influence of the trailing-arm geometry on the responses. For example, in the first setting
(A = (0.15, 0.5), B = (0.15, −0.5)), both the squat and dive motions are reduced. In the second
3.2 Anti-Squat and Anti-Dive Geometry 19

1000 12 0.05

0.04
torques (Nm)
500 10 0.03

0.02

ẏ3 (m/sec)
0 8

φ3 (rad)
0.01

−500 6 0

−0.01
−1000 4
−0.02

−0.03
−1500 2
−0.04

−2000 0 −0.05
0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3 4 5 6

sec sec sec

(a) applying torques (b) forward velocity (c) φ3 (rad)

Figure 3.2: Squat and dive motions: (a) T1 (solid), T2 (dashed); (b) velocity; (c) without trailing-arm
(solid), with trailing-arm A = (0.15, 0.5) m, B = (0.15, −0.5) m (dashed), and A = (0.15, 0.8) m,
B = (0.15, −0.8) m (dash-dotted).

arrangement (A = (0.15, 0.8), B = (0.15, −0.8)) the dive motion has been further reduced, but the
squat motion was also adjusted too much, i.e. the car dives during accelerating. Before bringing the
issue of passive versus active suspension into consideration, it will be useful to consider the problem
of dive and squat in the classical approach, but with a slight generalisation to allow non-zero masses
and inertias of the wheels.

3.2 Anti-Squat and Anti-Dive Geometry

In this section, we shall derive conditions for perfect anti-dive and anti-squat. To simplify the analysis,
the tyres will be temporarily considered as incompressible (kt1 = kt2 = ∞). For the accelerating
scenario (anti-squat design), the reaction torques are applied to the sprung mass. As for the braking
scenario (anti-dive design), the reaction torques could be on the sprung mass (inboard braking), or on
the trailing arms (outboard braking). The basic idea (following [5] and [8]) is to derive conditions
for the geometrical arrangement to remain invariant (i.e. no pitching motion of the sprung mass or
trailing arms) under an acceleration which occurs with a pre-assigned constant ratio of forces at the
tyre contact patches. Our approach is a slight generalisation in that we allow non-zero values for the
mass and inertia of the wheels.

3.2.1 Anti-Squat Geometry

Consider the half-car trailing-arm model of Fig. 3.1. The purpose of perfect anti-squat geometry is to
choose the position of the trailing-arm attachment points (i.e. points A and B) so that the sprung mass
remains at constant height without pitching motion during acceleration. By neglecting the loads Fs and
20 Analysis and Design for the Trailing-Arm Model

Ts , a simplified version of this model is shown in Fig. 3.3. Because the geometric configuration of the
vehicle remains the same during acceleration, we can assume y1 = y2 = y3 = y and the suspension
forces to be zero. Furthermore, another constraint y = −r1 φ1 = −r2 φ2 is added to the design if we
assume there is no slip between the tyres and ground. P1 (P2 ) represents the contact point of the front
(rear) tyre and the ground. The accelerating torques T1 , T2 are transferred from the engine, and the
reaction torques are applied to the sprung mass in the pitch motion. We introduce D’Alembert forces
and torques m 1 ÿ, m 2 ÿ, m s ÿ, I1 φ̈1 and I2 φ̈2 and write down the corresponding equilibrium conditions.

x
T2 Q T1
m s ÿ forward direction

T2 T1
B A
I2 φ̈2 I1 φ̈1

h
m 2 ÿ x1,0 m 1 ÿ
x2,0
N2 N1
F2 F1
P2 P1
y2,0 y1,0

Figure 3.3: Anti-squat design.

In [5] and [8], anti-squat and anti-dive conditions were derived in a simple way, by neglecting the
mass and inertia of the tyres, to obtain a simple geometrical condition. Following the same idea, a
more general condition can be derived as follows:

1. Suppose the accelerating force ratio (F1 /F2 ) is p/(1 − p), then the acceleration ÿ is given by:
F1 + F2
ÿ = , (3.1)
m1 + m2 + ms
so that F1 , F2 can be expressed as:

F1 = pMx ÿ, F2 = (1 − p)Mx ÿ,

where Mx is defined as:


Mx = m 1 + m 2 + m s . (3.2)

2. Taking moments about P2 for the whole system results in:


I1 I2
N1 L + m s ÿh + m 1 ÿr1 + m 2 ÿr2 + ÿ + ÿ = 0,
r1 r2
3.2 Anti-Squat and Anti-Dive Geometry 21

which gives N1 as:


N1 = −M y ÿ, (3.3)

where M y is defined as:


1 I1 I2
My = (m s h + m 1r1 + m 2r2 + + ). (3.4)
L r1 r2

3. Applying Newton’s second law in the vertical direction for the whole system gives:

N2 = −N1 = M y ÿ. (3.5)

4. For the front wheel, taking moments about A results in:

F1 x1,0 + N1 y1,0 − m 1 ÿ(x1,0 − r1 ) − I1 φ̈1 + T1 = 0,

which is equivalent to

pMx (x1,0 − r1 ) − M y y1,0 − m 1 (x1,0 − r1 ) = 0, (3.6)

where Mx , M y are given by (3.2), (3.4) respectively. Here we have used the following equation
for the rotational motion of the front wheel:

T1 + F1r1 − I1 φ̈1 = 0. (3.7)

5. For the rear wheel, taking moments about B results in:

F2 x2,0 − N2 y2,0 − m 2 ÿ(x2,0 − r2 ) − I2 φ̈2 + T2 = 0,

which gives

(1 − p)Mx (x2,0 − r2 ) − M y y2,0 − m 2 (x2,0 − r2 ) = 0, (3.8)

where Mx , M y are given by (3.2), (3.4) respectively. Here we have used the following equation
for the rotational motion of the rear wheel:

T2 + F2 r2 − I2 φ̈2 = 0. (3.9)

The above derivation shows that the trailing-arm vehicle model satisfies an anti-squat property for
tractive forces in the ratio p : (1 − p) only if (3.6) and (3.8) hold. Conversely, we can also show
that conditions (3.6) and (3.8) are sufficient for the anti-squat property. The proof of this direction is
straightforward through the analysis of each element of the model, as illustrated in Appendix B.1 .
From (3.6) and (3.8) we can calculate the position of the trailing arms to eliminate the squat motion
of the vehicle during acceleration. It is noticed that there are four parameters (x1,0 , y1,0 , x2,0 , y2,0 ) with
only two constraints, which means that we have two degrees of freedom (one for each trailing arm) to
determine conditions for anti-squat. We can use this design freedom to assign reasonable position for
the trailing arms, or possibly even combine with anti-dive conditions, as discussed next.
22 Analysis and Design for the Trailing-Arm Model

3.2.2 Anti-Dive Geometry

The purpose of anti-dive design is to restrain the sprung mass from rotating during braking motion.
The analysis procedure will be similar to the anti-squat case. Actually, for inboard braking the anti-
dive conditions are exactly the same as in the anti-squat case. That is, if we have braking forces in the
ratio F1 /F2 = q/(1 − q) and consider the case of inboard brakes, then the equations (3.6) and (3.8)
with p replaced by q are the necessary and sufficient conditions for anti-dive. Therefore, we consider
only the anti-dive case with outboard braking.

x
Q
m s ÿ forward direction

T2 T1
B A
I2 φ̈2 I1 φ̈1

T1
T2 h
m 2 ÿ x1,0 m 1 ÿ
x2,0
N2 N1
F2 F1
P2 P1
y2,0 y1,0

Figure 3.4: Anti-dive design (outboard braking).

Consider the half-car trailing-arm model of Fig. 3.4 for anti-dive design:

1. Suppose the braking force ratio (F1 /F2 ) is q/(1 − q), then the deceleration ÿ is the same as (3.1).
Thus, F1 , F2 can be expressed as:

F1 = q Mx ÿ, F2 = (1 − q)Mx ÿ,

where Mx is given by (3.2). It should be noticed that in the braking scenario ÿ is negative, and
so are F1 and F2 .

2. Taking moments about P2 for the whole system gives N1 as in (3.3).

3. Applying Newton’s second law in the vertical direction for the whole system gives N2 as in (3.5).

4. For the front wheel, taking moments about A results in:

F1 x1,0 + N1 y1,0 − m 1 ÿ(x1,0 − r1 ) − I1 φ̈1 = 0,


3.2 Anti-Squat and Anti-Dive Geometry 23

which gives
I1
q Mx x1,0 − M y y1,0 − m 1 (x1,0 − r1 ) + = 0, (3.10)
r1
where Mx , M y are given by (3.2), (3.4) respectively.

5. For the rear wheel, taking moments about B results in:

F2 x2,0 − N2 y2,0 − m 2 ÿ(x2,0 − r2 ) − I2 φ̈2 = 0,

which gives
I2
(1 − q)Mx x2,0 − M y y2,0 − m 2 (x2,0 − r2 ) + = 0, (3.11)
r2
where Mx , M y are given by (3.2), (3.4) respectively.

The above derivation shows that the outboard braking trailing-arm model with anti-dive property
should satisfy (3.10) and (3.11). The converse direction, i.e. the trailing-arm geometry obtained from
(3.10) and (3.11) ensures the anti-dive property for outboard braking system, is given in Appendix B.2.
In the following example we will apply (3.6, 3.8, 3.10, 3.11) to the trailing-arm model used in
Example 3.1 for the anti-squat and anti-dive design .

Example 3.2 Consider the half-car trailing-arm model used in Example 3.1 with incompressible tyres
(kt1 = kt2 = ∞). We now carry out the following procedure. We fix Q, C1 , C2 as in Example 3.1,
namely Q = (0, 0), C1 = (0.35, 1.3), C2 = (0.35, −1.3), and then calculate the position of A and B
in various cases. Suppose the vehicle is driven from both axes, with T1 /T2 = 2/1, and let us suppose
a braking force ratio of F1 /F2 = 4/6 (or q = 0.4) with outboard braking. First of all, we need to
convert the accelerating torque ratio T1 /T2 to the accelerating force ratio F1 /F2 = p/(1 − p) using
(3.7), (3.9) and the no-slip conditions, which gives p = 0.6749. The following designs can be carried
out:

(1) Anti-Squat Design: We have four degrees of freedom to decide the trailing-arm position (x1,0 ,
x2,0 , y1,0 and y2,0 ) and two equations, (3.6) and (3.8). Therefore, we can assign one value of
x1,0 or y1,0 for the front trailing arm, and one value of x2,0 or y2,0 for the rear trailing arm. If the
heights of joints A and B are fixed as x1,0 = x2,0 = 0.35 m, then (3.6) gives y1,0 = 0.6874 m and
(3.8) gives y2,0 = 0.2992 m, which is equal to A = (0.15, 0.6126) m and B = (0.15, −1.0008)
m.

(2) Anti-Dive Design: Similarly, we can also assign one of x1,0 or y1,0 and one of x2,0 or y2,0 . Assume
the heights of joints A and B are x1,0 = x2,0 = 0.35 m, then (3.10) gives y1,0 = 0.7358 m and
(3.11) gives y2,0 = 1.1243 m, which is equal to A = (0.15, 0.5642) m and B = (0.15, −0.1757)
m.
24 Analysis and Design for the Trailing-Arm Model

(3) Anti-Squat/Anti-Dive Design: For combined anti-squat/anti-dive design we have four equations
for the four variables. (3.6) and (3.10) will give a unique solution of x1,0 = 0.3817 m and
y1,0 = 0.7965 m, while (3.8) and (3.11) will give a unique solution of x2,0 = −0.1909 m and
y2,0 = −0.5099 m, which is equal to A = (0.1183, 0.5035) m and B = (0.6909, −1.8099) m.

2000 25 0.06

1500 0.05
torques (Nm)

20
1000
ẏ3 (m/sec) 0.04

φ3 (rad)
15
500
0.03
0
10
0.02
−500
5
−1000 0.01

−1500 0 0
0 2 4 6 8 0 2 4 6 8 0 2 4 6 8
sec sec sec

(a) applied torques (b) forward velocity (c) φ3 (rad)

Figure 3.5: Anti-squat/anti-dive design: (a) T1 (solid), T2 (dashed); (b) velocity; (c) anti-squat design
(dashed), anti-dive design (dash dotted), combined design (solid).

For designs (1) and (2) we note that the point A is reasonably close to the value used in Example 3.1,
but the position of B is much further to the rear (respectively centre). Different situations could be
obtained by different choices of x2,0 . Actually, we could assign the degree of freedom by choosing
the trailing-arm lengths and just determining their angles of inclination.
For design (3), the point A is reasonably placed, but point B is below ground and behind the rear
wheel, which is absurd! This is likely to be a typical situation in practice, so that perfect anti-dive and
anti-squat are not achievable simultaneously by choice of suspension geometry.
Despite the above practical criticism, we can still use AutoSim to simulate the dynamics of the
vehicle and to demonstrate that theoretical dynamical behaviour is achieved. (AutoSim can cope with
parts of a vehicle running below ground!)
Let the vehicle begin with a forward velocity of 15 m/sec, and apply the accelerating torques
T1 = −1200 Nm and T2 = −600 Nm, and braking torques T1 = 1147 Nm and T2 = 1687 Nm,
as shown in Fig. 3.5(a). The forward velocity is given in Fig. 3.5(b). It is shown in Fig. 3.5(c) that
the effect of the above three designs. The results are exactly as expected: for the anti-squat design
the vehicle has no pitch motion during acceleration, for the anti-dive design the vehicle has no pitch
motion during braking, and for the combined anti-squat/anti-dive design, the vehicle has no pitch
motion during acceleration and braking. 2

In this section, the conventional anti-squat and anti-dive designs were discussed. Although these
two designs can be combined by using the four degrees of freedom (except using inboard brakes with
3.3 Classical Conditions for Anti-Squat and Anti-Dive 25

braking ratio q 6 = p, where the only solution is x1,0 = r1 , x2,0 = r2 and y1,0 = y2,0 = 0 which
is nonsensical), it was pointed out in the example that sometimes the trailing-arm geometry may be
unrealistic. Only in the case of inboard braking and where the accelerating and braking ratios are
the same, is it true that (3.6) and (3.8) are necessary and sufficient conditions for both anti-squat and
anti-dive design.
The reader is reminded that in the analyses the tyres are modelled as solid wheels, i.e. r1 and r2
remain constant. If we consider r1 , r2 as changing variables, then the designs would become more
complex. Furthermore, if we want to relax the “no-slip” constraint, then a tyre model needs to be
considered, which would make the analysis even more complicated.

3.3 Classical Conditions for Anti-Squat and Anti-Dive

O1

O2

A
B
r2 + h

r1 + h

C2 C1

(1 − p)L pL

(a)

B A
h

P2 P1

(1 − q)L qL

(b)

Figure 3.6: Simplified trailing-arm geometry: (a) anti-squat; (b) anti-dive with outboard braking.

It was shown in Section 3.2 that (3.6) and (3.8) are necessary and sufficient conditions for perfect
anti-squat (or anti-dive with inboard brakes), and (3.10) and (3.11) are necessary and sufficient con-
ditions for perfect anti-dive with outboard brakes. In this section, we shall show that those equations
reduce to the standard geometrical conditions if the masses and inertias of the wheels, m 1 , m 2 , I1 , I2 ,
26 Analysis and Design for the Trailing-Arm Model

are negligible. In such a case, (3.6) and (3.8) reduce to:


x1,0 − r1 h x2,0 − r2 h
= , = ,
y1,0 pL y2,0 (1 − p)L
while (3.10) and (3.11) reduce to:
x1,0 h x2,0 h
= , = .
y1,0 qL y2,0 (1 − q)L
The geometrical interpretation of these conditions is illustrated in Fig. 3.6. For the anti-squat case,
the trailing-arm joint A (resp. B) should be on the line C1 O1 (resp. C2 O2 ), where O1 is at a height
h above C1 and a horizontal distance pL from C1 , and similarly for O2 . For the anti-dive case with
outboard braking, the trailing-arm joint A (resp. B) should be on the line P1 O (resp. P2 O). These
results are consistent with the standard conditions in the literature (see [5] and [8]) when we set r1 = r2 .

3.4 Comparison with the Work of Sharp [26]

A recent approach to anti-squat and anti-dive properties was presented in [26], in which the geometry
of suspension linkages is defined in terms of mathematical relationships which determine the allowed
motion of the hub carriers relative to the vehicle body. Specifically, relationships are specified between
the longitudinal and the vertical motions and between the pitch rotation and the vertical motion of the
hub carrier relative to the vehicle body. This is a different approach to the one adopted here in that
we still retain specific mechanical linkages to determine the allowed motion of the hub carriers. The
traditional anti-dive/anti-squat analyses were also criticised in [26] from the following points of view:
(1) “the behaviour treated is quasi-steady and not dynamics”, (2) “the equilibrium analyses simplify the
suspension geometry markedly and imply vertical constraints on the body motion (jacking inhibition),
which caused the solution of the equilibrium problem to mispresent the real behaviour substantially”,
(3) “only special cases are treated overtly”. The approach given in Section 3.2 gives a partial response
to these points as follows:

(1) The analysis of Section 3.2 does not need to assume a constant acceleration. However, the ratio
of tractive forces at the tyre contact patch needs to be constant for braking and accelerating.

(2) In deriving the classical anti-squat and anti-dive conditions, it is indeed the case that no vertical
motion of the sprung mass is assumed (as well as no pitching). However, it is shown in Ap-
pendix B.1 and B.2 that the classical conditions are also sufficient to ensure that these properties
hold dynamically. (In the simulation we allow pitching motion and vertical movement of the
sprung mass to occur, and find that the anti-squat (resp. antidive) geometry ensures the geometric
configuration of the vehicle remains undisturbed during accelerating (resp. braking) under the
ideal assumption of constant accelerating and braking ratios.)

(3) The third criticisim of Sharp is partially lifted in this work in that non-zero masses and inertias
are allowed for the wheels.
3.5 Passivity Analysis 27

3.5 Passivity Analysis

We now return to the passivity analysis methodology of Chap. 2. In particular we look at the influence
of suspension geometry on the compromise between road disturbance responses and the effect of
loads. As discussed in Section 3.2 it will usually be impossible to choose the suspension geometry
so that the effect of inertial loads is sufficiently reduced for both dive and squat together, so that the
suspension struts will be needed to control such motions. Thus the compromise between reducing the
effect of load disturbances while maintaining a soft ride is still likely to be an issue. We now examine
this in a precise way using the same network analysis approach of Chap. 2.
We wish to choose the trailing-arm geometry to give reasonable practical values. We use the same
trailing-arm model and accelerating/braking ratios as Example 3.2, and calculate suitable positions of
points A and B. Setting the lengths of the front and rear trailing arms to be l4 and l5 respectively, we
can substitute x1,0 = l4 cos φ4 + r1 , y1,0 = l4 sin φ4 , x2,0 = l5 cos φ5 + r2 , y2,0 = l5 sin φ5 into (3.6),
(3.8) for anti-squat geometry, and into (3.10), (3.11) for anti-dive geometry. The trailing-arm lengths
are chosen as l4 = l5 = 0.4 m. First we consider the following two cases:

(1). For perfect anti-squat the angles are φ4 = 1.2877 and φ5 = 0.9815, which gives A = (0.2383, 0.9159)
m and B = (0.1277, −0.9675) m.

(2). For perfect anti-dive the angles are φ4 = 1.5109 and φ5 = 1.6720, which gives A = (0.3261, 0.9007)
m and B = (0.3904, −0.9020) m.

We now simulate these models by accelerating with T1 = −1500 Nm and T2 = −750 Nm so


that the vehicle is accelerated to 12 m/sec (which is about 27 mile/hour), and then braked it
until it stops. The applied torques and the forward velocity are shown in Fig. 3.7(a) and 3.7(b)
respectively. The effect of the trailing-arm geometry is illustrated in Fig. 3.7(c). From the
simulation results, we find that perfect anti-squat geometry causes the vehicle to squat during
braking, which is usually thought to be undesirable. On the other hand, the perfect anti-dive
geometry gives more resonable responses. Therefore we will choose an anti-dive geometry for
implementation. We find that further reduction of the squat angle during accelerating will cause
an undesirable squat during braking. We also notice that in design (2) point B is below the
wheel centre, which may not be desirable. Thus we increase the length of the rear trailing arm
in order to make B above C2 , and to further improve the anti-squat effect.

(3). Setting l4 = 0.6 m and l5 = 0.6 m, perfect anti-dive geometry results in φ4 = 1.5109 and
φ5 = 1.5270, which gives A = (0.2276, 0.7126) m and B = (0.3237, −0.7006) m. The effect
of the improvement is illustrated in Fig. 3.7(c).

(4). Further improvement can be achieved by increasing the lengths of trailing arms. For example,
if we set l4 = 0.8 m and l5 = 0.8 m, perfect anti-dive geometry results in φ4 = 1.2951 and
28 Analysis and Design for the Trailing-Arm Model

φ5 = 1.4569, which gives A = (0.1322, 0.5302) m and B = (0.2590, −0.5052) m. The effect
of the improvement is illustrated in Fig. 3.7(c).

2000 12 0.08

0.07
1500 10
torques (Nm)

0.06
1000 8

ẏ3 (m/sec)
0.05

φ3 (rad)
500 6 0.04

0 4 0.03

0.02
−500 2
0.01
−1000 0
0

−1500 −2 −0.01
0 2 4 6 8 0 2 4 6 8 0 1 2 3 4 5 6 7 8

sec sec sec

(a) applied torques (b) forward velocity (c) φ3 (rad)

Figure 3.7: Compromised anti-squat/anti-dive geometry: (a) T1 (solid), T2 (dashed); (b) velocity; (c)
design (1) (dashed), design (2) (dash-dotted), design (3) (solid) and design (4) (star).

As shown in Fig. 3.7(c), even with long trailing arms the maximum pitching angle reaches as
high as 0.022 rad. Consider a suspension strut with ±2.5 cm of deflection space, which allows the
maximum pitching angle of ±0.019 rad, the vehicle needs a harder suspension setting to avoid hitting
the bump stop. But it will also result in uncomfortable ride to road disturbances. These conflicting
performance requirements for passive suspension will now be discussed through network analysis.
We begin with the case where load disturbances Fs , Ts are included as well as the wheel torques
T1 , T2 and road disturbances zr1 , zr2 . We employ vehicle tyre springs kt1 = kt2 = 500 kN/m. To
model a rolling wheel the same method was employed as in Example 3.1. We assume that the normal
performance requirements are that it should insulate against road disturbances zr1 and zr2 as when soft
passive suspensions {cis , kis , i = 1, 2} are used. At the same time it should also insulate against load
disturbances Fs , Ts , and the accelerating/braking torques T1 , T2 as when hard passive suspensions
{cih , kih , i = 1, 2} are used. A corresponding network for the outboard braking model is shown as in
Fig. 3.8(a). The coefficients and coordinates in Example 3.2 are used except A = (0.1322, 0.5302)
m, B = (0.2590, −0.5052) m (which is the anti-dive geometry in design (4) as shown above), and
c1s = c2s = 1 kNs/m, k1s = k2s = 4 kN/m, c1h = c2h = 100 kNs/m, k1h = k2h = 400 kN/m. The
tranformation matrix G can be expressed as:
h i0 h i0
s ẑ s , s φ̂3 , s(φ̂1 − φ̂4 ), s(φ̂2 − φ̂5 ), − N̂1 , − N̂2 = [G h , G s ] F̂s , T̂s , T̂1 , T̂2 , s ẑr1 , s ẑr2 .

In order to get a suitable scale, we check the positive realness of Y instead of G, where Y is defined
as:
h i0 h i0
F̂s , T̂s , T̂1 , T̂2 , − N̂1 , − N̂2 = Y s ẑ s , s φ̂3 , s(φ̂1 − φ̂4 ), s(φ̂2 − φ̂5 ), s ẑr1 , s ẑr2 .
3.5 Passivity Analysis 29

The result of the passivity analysis is shown in Fig. 3.8(b), which means that active suspension is
necessary to satisfy the performance requirements.

5
x 10
6

T1 T2 5

φ̇1 − φ̇4 φ̇2 − φ̇5 4

Eigenvalues (Ns/m)
Fs Ts 2

φ̇3
ż s N 1

−N1 −N2 −1

żr1 żr2 −2

−3 −2 −1 0 1 2 3
10 10 10 10 10 10
Frequency (rad/sec)

(a) The corresponding network. (b) Eigenvalues of (Y + Y ∗ ).

Figure 3.8: The passivity analysis of the half-car trailing-arm model with outboard braking.

We now consider the case where Fs , Ts are set to be zero and we ask if it is possible to ensure that
the performance is stiff to braking torques and soft to road disturbances by passive suspensions. We
can check this by discussing the passivity of the network in 3.9(a). The result shown in Fig. 3.9(b)
suggests that active suspension is still necessary for the remaining performance requirements, where
Y is defined as follows:
h i0 h i0
T̂1 , T̂2 , − N̂1 , − N̂2 = Y s(φ̂1 − φ̂4 ), s(φ̂2 − φ̂5 ), s ẑr1 , s ẑr2 .

5
x 10
6

T1 T2
Eigenvalues (Ns/m)

φ̇1 − φ̇4 φ̇2 − φ̇5 2

−N1 N −N2 −1
0

żr1 żr2 −2

−3 −2 −1 0 1 2 3
10 10 10 10 10 10
Frequency (rad/sec)

(a) The corresponding network. (b) Eigenvalues of (Y + Y ∗ ).

Figure 3.9: The passivity analysis of the half-car trailing-arm model with outboard braking (2).

For the inboard braking and accelerating cases, similar results can also be obtained by replacing
the variables φ4 , φ5 with φ3 in Fig. 3.8(a) and Fig. 3.9(a). The AutoSim linearised trailing-arm model
is given in Appendix B.3.
30 Analysis and Design for the Trailing-Arm Model

3.6 Summary and Comments

In this chapter, we considered the half-car trailing-arm model, which is a conventional method to
reduce the squat and dive of the vehicle under accelerating and braking motions. Firstly, we discussed
the conventional anti-squat and anti-dive designs based on the trailing-arm geometry. Then through
the network analysis it was shown that a passive suspension cannot satisfy the general performance
specification. The active suspension design for this trailing-arm model will later be performed in
Chap. 9.
Chapter 4

Controller Parametrisation for


Disturbance Response Decoupling

In this chapter, we shall derive a parametrisation of the set of all stabilising controllers for a given plant
which leaves some pre-specified closed-loop transfer function fixed. This result is motivated by the
need to independently shape road and load disturbance transmission paths in the vehicle suspension
control problem. We will make use of algebraic properties of the ring of stable, proper rational
functions [36]. To facilitate the parametrisation at the required level of generality we will introduce
the idea of left and right normalrank factorisations of a rational matrix (Definition 4.1).
Section 4.1 defines two factorisations, namely left and right normalrank factorisations, which are
the basic tools for the theorems developed in this chapter. Section 4.2 sets up in generality the problem
of parametrising all stabilising controllers which leave some pre-specified closed-loop transfer function
fixed. Our basic results, which characterise the required structure of the Youla Q-parameter, are given
in Theorems 4.1–4.4. Section 4.3 discusses the design freedom and the achievable performance after
disturbance response decoupling design. Section 4.4 gives two illustrative examples of the theorems
developed in this chapter.

4.1 Normalrank Factorisations

The results we will establish in this section make use of certain algebraic properties of the set RH∞ ,
namely its ring structure. The reader is referred to [36] for the necessary background on this topic.
Here we will be content to recall a few facts. The set RH∞ has the property of being a Euclidean
domain with degree function defined by the total number of zeros of the element in the closed right
half plane and at infinity (counting multiplicities). The invertible elements in RH∞ are called units,
and are the elements with degree equal to zero. A matrix U ∈ RHm×m
∞ is called unimodular if it has
an inverse whose elements belong to RH∞ , or equivalently, if its determinant is a unit in RH∞ . The
normalrank of a matrix Q ∈ RHm×n
∞ , denoted normalrank(Q(s)), is the maximum rank of Q(s) for

31
32 Controller Parametrisation for Disturbance Response Decoupling

any s ∈ C which is not a pole. Equivalently, the normalrank is equal to the rank for almost all s ∈ C.
We now introduce a type of matrix factorisation which will be useful in proving the subsequent results.

Definition 4.1 Let T be a matrix with elements in RH∞ . T is said to have a lnf (left normalrank
factorisation) if there exist matrices E and V = (V10 , V20 )0 over RH∞ with E of full column normalrank
and V unimodular such that T = E V1 . T is said to have a rnf (right normalrank factorisation) if there
exist matrices F and U = (U1 , U2 ) over RH∞ with F of full row normalrank and U unimodular such
that T = U1 F.

Lemma 4.1 For any T ∈ RHr×c


∞ , there exists a lnf and a rnf of T .

(proof): T can be decomposed in terms of its Smith form over RH∞ [36]:

T = U H V,

where U ∈ RHr×r
∞ , V ∈ RH∞ are unimodular, H ∈ RH∞ . Suppose that H has r1 non-zero
c×c r×c

diagonal elements. Then we can write:


!
H1  
H = Ir1 ×r1 , 0r1 ×(c−r1 ) (4.1)
0(r−r1 )×r1
!
Ir1 ×r1  
= H1 , 0r1 ×(c−r1 ) , (4.2)
0(r−r1 )×r1

where H1 ∈ RHr∞1 ×r1 . We also partition U and V conformably:


!
V1
U = (U1 , U2 ), V = ,
V2

r×(r−r1 )
where U1 ∈ RHr×r
∞ , U2 ∈ RH∞
1
, V1 ∈ RHr∞1 ×c , V2 ∈ RH∞
(c−r1 )×c
. We therefore obtain

T = (U1 H1 )V1 = E V1 ,
= U1 (H1 V1 ) = U1 F,
r1 ×c
where E ∈ RHr×r
∞ , F ∈ RH∞ are full column normalrank and full row normalrank respectively. ♥
1

It is noted that the rnf (or lnf) is not unique for a given matrix. However, there are certain relations
between the different factorisations, as shown in the following lemma.

Lemma 4.2 For any T ∈ RHr×c † †


∞ with normalrank r1 , suppose U1 F is a rnf of T , then U1 F is also
a rnf of T if and only if there exists a unimodular matrix Z 1 ∈ RHr∞1 ×r1 such that U1† = U1 Z 1 and
F † = Z 1−1 F.

(proof):
4.1 Normalrank Factorisations 33

(⇐) It is obvious that U1† F † = (U1 Z 1 )(Z 1−1 F) = U1 F = T , whilst [U1† , U2 Z 1 ] is unimodular
and F † has full row normalrank.

(⇒) Suppose U = (U1 , U2 ), and U † = (U1† , U2† ) are unimodular over RH∞ , and
" # " † #
e1
U e1
U
−1 † −1
U = , U = .
e2
U e2†
U
Then we can write:
" # " #
h i F h i F†
T = U1 , U2 = U1† , U2† ,
0 0
e1U1† ) and Y1 = (U
which gives F = X 1 F † and F † = Y1 F, where X 1 = (U e1†U1 ) are square
matrices with elements in RH∞ . X 1 is, therefore, a candidate for Z 1 . Now we need to show
that X 1 Y1 = I . It is clear that F = X 1 F † = X 1 Y1 F, which is equivalent to (I − X 1 Y1 ) = 0
since F is full row normalrank. Since X 1 and Y1 are square, they are inverses of each other and
hence are unimodular. Thus we can assign Z 1 = X 1 and Z 1−1 = Y1 to complete the proof. ♥

Lemma 4.3 For any T ∈ RHr×c † †


∞ with normalrank r1 , suppose both U1 F and U1 F are rnf’s of T and
1)
(U1 , U2 ) is unimodular. Then the set of U2† ∈ RHr×(r−r
∞ such that (U1† , U2† ) is unimodular is given
by {U2† : U2† = U1 α + U2 β, where α ∈ RHr∞1 ×(r−r1 ) , β is unimodular and β ∈ RH∞
(r−r1 )×(r−r1 )
}.
1)
(proof): Suppose U = (U1 , U2 ), then for any U2† ∈ RHr×(r−r
∞ such that U † = (U1† , U2† ) is
unimodular over RH∞ , the matrix W = U −1 U † is unimodular over RH∞ . Therefore, we can write:
" #
h i h i W
11 W12
U1 , U2
† †
= U1 , U2 , (4.3)
W21 W22

where W11 ∈ RHr∞1 ×r1 , W12 ∈ RHr∞1 ×(r−r1 ) , W21 ∈ RH(r−r



1 )×r1 (r−r1 )×(r−r1 )
, W22 ∈ RH∞ , so that
U1† = U1 W11 + U2 W21 . On the other hand, from Lemma 4.2, there exists a unimodular matrix
Z 1 ∈ RHr∞1 ×r1 such that U1† = U1 Z 1 . Then we can write:
" #
h i W −Z
11 1
U1 , U2 = 0,
W21
which, by multiplying by (U1 , U2 )−1 on both sides, gives W11 = Z 1 and W21 = 0, which implies that
W22 is unimodular because W is unimodular. Therefore, by setting α = W12 and β = W22 , U2† can be
expressed as U2† = U1 α + U2 β from (4.3).
Conversely, suppose U2† = U1 α + U2 β for some α ∈ RHr∞1 ×(r−r1 ) and some unimodular matrix
(r−r1 )×(r−r1 )
β ∈ RH∞ , then
" #
h i h i Z1 α
U1† , U2† = U1 , U2 , (4.4)
0 β
is unimodular since both terms on the right hand side of (4.4) are unimodular. ♥
The corresponding results for lnf’s are proved analogously and are stated as follows:
34 Controller Parametrisation for Disturbance Response Decoupling

Lemma 4.4 For any T ∈ RHr×c † †


∞ with normalrank r1 , suppose E V1 is a lnf of T , then E V1 is also
a lnf of T if and only if there exists a unimodular matrix Z 2 ∈ RHr∞1 ×r1 such that V1† = Z 2 V1 and
E † = E Z 2−1 . ♥

Lemma 4.5 For any T ∈ RHr×c † †


∞ with normalrank r1 , suppose both E V1 and E V1 are lnf’s of T and
(c−r1 )×c 0 0
(V10 , V20 )0 is unimodular. Then the set of V2† ∈ RH∞ such that (V1† , V2† )0 is unimodular is given
by {V2† : V2† = γ V1 + δV2 , where γ ∈ RH(c−r

1 )×r1 (c−r1 )×(c−r1 )
, δ is unimodular and δ ∈ RH∞ }. ♥

4.2 Controller Parametrisation Results

We consider the LFT (linear fractional transformation) model in Fig. 4.1, where the Laplace transfer
function of the generalised plant P is partitioned as:
" #
P11 P12
P = ,
P21 P22

and further partitioned conformably with the disturbance signals as:


 " #   " # " #  " # 
ẑ 1 P11,11 P11,12 P12,1 ŵ1
    
  =   ŵ2 ,
 ẑ 2   h P11,21 P11,22 i P12,2   (4.5)
ŷ P21,1 P21,2 P22 û

where w1 ∈ Rm 1 , w2 ∈ Rm 2 , u ∈ Rm 3 , z 1 ∈ R p1 , z 2 ∈ R p2 , y ∈ R p3 at any time instant and û


denotes the Laplace transform of u(t) etc. We consider the problem of parametrising all stabilising
controllers which leave Tŵ1 →ẑ1 (the transfer function from ŵ1 to ẑ 1 ) the same as for some given
stabilising controller K 0 .

w1 z1
w2 P z2

u y

Figure 4.1: Generalised model in LFT form.

Let P22 = N M −1 = M̃ −1 Ñ be the right and left coprime factorisations of P22 over RH∞ . Then
all stabilising controllers can be parametrised by:

K = (Y − M Q)(X − N Q)−1 , (4.6)


= ( X̃ − Q Ñ )−1 (Ỹ − Q M̃), (4.7)
4.2 Controller Parametrisation Results 35

3 × p3
for Q ∈ RHm
∞ where X, Y, X̃ , Ỹ are matrices with elements in RH∞ which satisfy the Bezout
identity: " #" #
X̃ −Ỹ M Y
= I.
− Ñ M̃ N X
In addition the factorisations will always be chosen so that Q = 0 corresponds to the desired stabilising
controller, i.e. K 0 = Y X −1 = ( X̃)−1 (Ỹ ). (This assumption will be relaxed in Theorem 4.4.)
We now consider the problem of parametrising all stabilising controllers which leave the transfer
function Tŵ1 →ẑ1 the same as when the controller K 0 = Y X −1 = ( X̃ )−1 (Ỹ ) is applied. From [10], the
closed loop transfer function in Fig. 4.1 can be expressed as:

T    = T1 − T2 QT3 , (4.8)
 ŵ1   ẑ 1 
 → 
ŵ2 ẑ 2
where T1 , T2 , T3 have elements in RH∞ and are given by:

T1 = P11 + P12 M Ỹ P21 ,


T2 = P12 M,
T3 = M̃ P21 .

Thus the problem reduces to parametrising all stabilising controllers which leave Tŵ1 →ẑ1 = (T1 )1,1 .
3 × p3
These are characterised by all Q ∈ RHm
∞ such that (T2 QT3 )1,1 = T2,1 QT3,1 = 0, where T2,1 =
P12,1 M and T3,1 = M̃ P21,1 . We now introduce a lnf of T2,1 and a rnf of T3,1 as follows:

T2,1 := E V1 , (4.9)
T3,1 := U1 F, (4.10)
p1 ×r2
where E ∈ RH∞ , F ∈ RHr∞3 ×m 1 , U1 ∈ RH∞
p3 ×r3
, V1 ∈ RHr∞2 ×m 3 , r2 and r3 are the normalrank of
T2,1 and T3,1 respectively. Note that r2 and r3 are also the normalrank of P12,1 and P21,1 respectively.
Furthermore we have the inequalities r2 ≤ min( p1 , m 3 ), r3 ≤ min(m 1 , p3 ).

Theorem 4.1 Consider any stabilisable P in the configuration of Fig. 4.1. All stabilising controllers
such that the closed loop transfer function Tŵ1 →ẑ1 = (T1 )1,1 are given by K expressed in the form of
(4.6) and (4.7) with
!−1 !
V1 e2
Q 1U
Q = , (4.11)
V2 Q2

for Q 1 ∈ RHr∞2 ×( p3 −r3 ) and Q 2 ∈ RH(m



3 −r2 )× p3
, V1 and U1 defined from the lnf and rnf factorisations
(4.9) and (4.10), U2 , V2 are chosen such that (U1 , U2 ) and (V10 , V20 )0 are unimodular, and U e2 ∈
RH(∞p3 −r3 )× p3 is a partition of U −1 :
!
e1
U
−1 −1
U = (U1 , U2 ) = .
e2
U
36 Controller Parametrisation for Disturbance Response Decoupling

(proof): A stabilising controller in the form (4.7) leaves Tŵ1 →ẑ1 = (T1 )1,1 if and only if (T2 QT3 )1,1 =
E V1 QU1 F = 0. This is equivalent to V1 QU1 = 0 since E (resp. F) has full column (resp. row) nor-
malrank. We now show that it requires Q to take the form given in (4.11). Clearly

V1 Q(U1 , U2 ) = (0r2 ×r3 , Q 1 ), (4.12)

for some Q 1 ∈ RHr∞2 ×( p3 −r3 ) . This gives

e2 .
V1 Q = (0, Q 1 )U −1 = Q 1 U

Next we see that


! !
V1 e2
Q 1U
Q = , (4.13)
V2 Q2

for some Q 2 ∈ RH(m



3 −r2 )× p3
, which establishes (4.11).
Conversely, if (4.11) holds for some Q 1 ∈ RHr∞2 ×( p3 −r3 ) and Q 2 ∈ RH(m

3 −r2 )× p3
, then so does
(4.13), from which follows V1 Q = (0, Q 1 )U −1 which again implies V1 QU1 = 0. ♥

e2 term
Remark 4.1 In case r2 = m 3 , then the Q 2 block is missing in (4.11). In case r3 = p3 the Q 1 U
in (4.11) is replaced by a zero matrix of dimension r2 × p3 . If both r2 = m 3 and r3 = p3 , (4.11)
reduces to Q = 0. ♦

The control structure given in (4.11) is arrived at by completing the matrix U1 to a unimodular
e2 from the resulting matrix inverse. Since U1 and the completion are not
matrix and then extracting U
e2 . It will be useful to characterise this non-uniqueness by parametrising the
unique then neither is U
e2 : Q 1 ∈ RHr∞2 ×( p3 −r3 ) } directly. This is done in the following lemma.
set {Q 1U

Lemma 4.6 Given two sets A = {Q 1Ue2 : Q 1 ∈ RHr×c † e† e


∞ } and B = {Q 1 U2 : Q 1 ∈ RH∞ } where U2 ,
† r×c

e2† ∈ RHc×q
U ∞ are full row normalrank, then

e2† is a left multiple of U


(i) B ⊆ A if and only if U e2 over RH∞ , i.e. there exists a W ∈ RHc×c
∞ such
e e
that U2 = W U2 .

(ii) B = A if and only if there exists a unimodular matrix W ∈ RHc×c e† e


∞ such that U2 = W U2 .

(proof):

e2† = W U
(i) (⇐) Suppose U e2 where W ∈ RHc×c † e† e
∞ , then B = {Q 1 U2 } = {(Q 1 W )U2 }. Clearly Q 1 W
† †

has elements in RH∞ . Hence, any element of B is also an element of A.

(⇒) Suppose B ⊆ A, then for any Q †1 ∈ RHr×c ∞ there exist some Q 1 ∈ RH∞ such that
r×c

e2† = Q 1 U
Q †1 U e2 . Let us now choose the first row of Q †1 to be [0, · · · , 1, · · · , 0] (with the 1 in
4.2 Controller Parametrisation Results 37

the ith place), and all other rows to be zero, and define qi to be the first row of the corresponding
Q 1 . Then [0, · · · , 1, · · · , 0]U e2 , from which we conclude that U
e2† = qi U e2† = W U e2 where
e2† is a left multiple of U
W = [q10 , q20 , · · · , qc0 ]0 . Hence U e2 .

e2† is a left multiple of U


(ii) From (i) we know that B = A if and only if U e2 and U
e2 is a left multiple
of Ue2† . That is, U e2 and U
e2† = W1 U e2† for some W1 , W2 ∈ RHc×c
e2 = W2 U ∞ . Hence we have
e2 = W2 W1 U
U † e2 which gives (I − W2 W1 )U
† e2 = 0. Since U
† e2 is full row normalrank, it is

equivalent to W2 W1 = I , which is equivalent to W1 and W2 being unimodular and inverses of


each other over RH∞ . ♥

Throughout this dissertation the vehicle dynamics examples will satisfy some special assumptions
on the open-loop plant. This allows the controller parametrisation of Theorem 4.1 to take a simplified
form, and as a result a further useful structural simplification can then be made. It will be convenient to
summarise these simplifications in the theorem below, which will then be applied directly throughout
the dissertation. (The first two special assumptions on the open-loop plant arise because of some passive
elements in the suspension system which ensure that the road disturbance responses are satisfactory
without any feedback control. The third assumption is a rather technical one which says that the number
of outputs to be left invariant is no smaller than the number of actuators and that this transmission path
has full normalrank.)

Theorem 4.2 Let (1) P be (open-loop) stable, (2) K 0 = 0, (3) m 3 = r2 .

e2 ∈ RH(∞p3 −r3 )× p3 such that all stabilising controllers which give Tŵ1 →ẑ1 = (T1 )1,1
(i) There exists U
can be parametrised as
e2 P22 )−1 Q 1 U
K = −(I − Q 1 U e2 , (4.14)

for Q 1 ∈ RHr∞2 ×( p3 −r3 ) .

e2 ∈ RH(∞p3 −r3 )× p3 for which (4.14) parametrises all stabilising controllers such
(ii) A particular U
that Tŵ1 →ẑ1 = (T1 )1,1 can be calculated as follows: choose M = I , M̃ = I , N = Ñ = P22 ,
e2
X = I , X̃ = I , Y = 0, Ỹ = 0 and V1 = I , define U1 from the rnf (4.10), and calculate U2 , U
as in Theorem 4.1.

e2† such that K † = −(I − Q 1 U


(iii) Consider any U e2† P22 )−1 Q 1 U
e2† parametrises all stabilising con-
trollers which give Tŵ1 →ẑ1 = (T1 )1,1 . Then there exist a unimodular matrix W such that
e2† = W U
U e2 , where U
e2 is defined in (ii).

e2 be defined in (ii) and let K 1 be any stabilising controller for U


(iv) Let U e2 is a
e2 P22 . Then K 1 U
stabilising controller for P22 for which Tŵ1 →ẑ1 = (T1 )1,1 .

(v) Let Ue2 be defined in (ii) and consider any stabilising controller K for P22 for which Tŵ1 →ẑ1 =
e2 , where K 1 is a stabilising controller for U
(T1 )1,1 . Then we can write K = K 1 U e2 P22 .
38 Controller Parametrisation for Disturbance Response Decoupling

(proof):

(i), (ii) These conditions allow us to choose M = I , M̃ = I , N = Ñ = P22 , X = I , X̃ = I , Y = 0,


Ỹ = 0 and V1 = I . Then (4.14) follows directly from (4.11) and (4.7).

(iii) Consider U e2 and U e2† such that all stabilising controllers can be parametrised as K = (I −
e2 P22 )−1 Q 1 U
Q 1U e2 , Q 1 ∈ RHr∞2 ×( p3 −r3 ) and K † = (I − Q †1 U
e2† P22 )−1 Q †1 U
e2† , Q †1 ∈ RHr∞2 ×( p3 −r3 )
e2 = Q †1 U
respectively. We can check that K = K † if and only if Q 1 U e2† . From Lemma 4.6, this
means there exits a unimodular matrix W such that Ue2† = W U e2 .

(iv) Since Ue2 , P22 have elements in RH∞ , it follows from [45, Corollary 5.5] that K 1 stabilises U
e2 P22
e2 P22 )−1 K 1 ∈ RH∞3 3 3 , which is equivalent to (I −K 1 U
if and only if (I −K 1 U m ×( p −r ) e2 P22 )−1 K 1 U
e2 ∈
RHm ∞
3 × p3 e2 is right invertible over RH∞ , which is the necessary and sufficient condition
since U
e2 stabilises P22 . To complete the proof, let Q 1 = −(I −K 1U
that K 1 U e2 P22 )−1 K 1 ∈ RH∞m 3 ×( p3 −r3 )

e2 P22 )−1 Q 1 . Therefore K = K 1 U


and note that K 1 = −(I − Q 1 U e2 will take the form of (4.14),
from which the result follows.

(v) Any stabilising controller K for which Tŵ1 →ẑ1 = (T1 )1,1 takes the form of (4.14). We can
e2 P22 )−1 Q 1 for some Q 1 ∈ RH∞
then define a controller K 1 = −(I − Q 1 U m 3 ×( p3 −r3 )
such that
K = K1Ue2 . It can also be shown directly that −(I − K 1 U
e2 P22 )−1 K 1 = Q 1 ∈ RH∞
m 3 ×( p3 −r3 )
,
e2 P22 .
which means that K 1 stabilises U ♥

P P

e2
U e2
U
− P†
Q1
+
e2 P22
U K1

(a) (b)

Figure 4.2: General controller structure and equivalent controller.

The controller structure given in (4.14), which is a special case of the general parametrisation given
in Theorem 4.1, may be represented in the block diagram form shown in Fig. 4.2(a). Theorem 4.2(iv,v)
e2 as the rightmost term in
shows that the essential feature in this controller structure is the presence of U
(4.14). This is illustrated in the block diagram Fig. 4.2(b) where K 1 may be any stabilising controller
e2 factor.
for the transformed plant P † . We now present a partial result to emphasise the role of U
4.2 Controller Parametrisation Results 39

Theorem 4.3 Let (1) P is (open-loop) stable, (2) K 0 = 0. Consider the controller structure of Fig.
4.3 with P given by (4.5). Then

(i) assuming closed-loop stability, the controller structure leaves Tŵ1 →ẑ1 the same as the open loop
e2† is a left annihilator of P21,1 .
if U

(ii) if P12,1 is full column normalrank and the controller structure leaves Tŵ1 →ẑ1 the same as the
e2† is a left
open loop for some controller K 1† for which Fig. 4.3 is closed-loop stable, then K 1† U
annihilator of P21,1 .

(iii) assuming (3) m 3 = r2 , then K † = −(I − Q †1 U e2† P22 )−1 Q †1 U


e2† , where Q †1 ∈ RH∞m 3 ×( p3 −r3 )
,
parametrises all stabilising controllers for P which leave Tŵ1 →ẑ1 invariant if Ue2 ∈ RH∞
† ( p 3 −r 3 )× p 3

is a part of a unimodular matrix and is a left annihilator of P21,1 .

e2†
U
P†

K 1†

Figure 4.3: Controller structure as a left annihilator.

(proof):

e2† P22 )−1 K 1† U


(i) The closed-loop response of the system is Tŵ→ẑ = P11 + P12 (I − K 1† U e2† P21 . If U
e2†
e2† P21,1 = 0, then
is a left annihilator of P21,1 , i.e. U

e2† P22 )−1 K 1† U


Tŵ1 →ẑ1 = P11,11 + P12,1 (I − K 1† U e2† P21,1 = P11,11, (4.15)

which is invariant of the feedback control.

e2† P21,1 = 0.
(ii) If P12,1 is full column normalrank and (4.15) holds for some controller K 1† , then K 1† U
e2† is a left annihilator of P21,1 .
That is K 1† U
0 0
e1† ∈ RHr∞3 × p3 is a completion of U
(iii) Suppose U e2† such that U
e† = (U e1† , U
e2† )0 is unimodular, and
e†−1 = U † = (U1† , U2† ). Since U
U e2† is a left annihilator of P21,1 , we can write
" # " #
e1†
U F†
e† P21,1 =
U P21,1 = ,
e2†
U 0
40 Controller Parametrisation for Disturbance Response Decoupling

for some F † ∈ RHr∞3 ×m 1 , which gives


" #
h i F†
P21,1 = U1† , U2† = U1† F † ,
0

p3 ×r3
where U1† ∈ RH∞ . Note that U1† F † is a rnf of P21,1 because F † has normalrank r3 , which
results from the fact that P21,1 has normalrank r3 and the multiplication of a unimodular matrix
to obtain F † does not change the normalrank.

Using Theorem 4.2 we can find a rnf of P21,1 = U1 F, a unimodular matrix (U1 , U2 ) and its
inverse (U e1 , U e2 )0 so that K in (4.14) parametrises all stabilising controllers for some Q 1 ∈
RHr∞2 ×( p3 −r3 ) . We now wish to show that {Q †1Ue2† } = {Q 1U e2 }. From Lemma 4.2 we know that
U1† = U1 Z 1 for some unimodular matrix Z 1 ∈ RHr∞1 ×r1 , and from Lemma 4.3 we know that U2† =
U1 α + U2 β for some α ∈ RH(∞p3 −r3 )×r3 and some unimodular matrix β ∈ RH∞
( p3 −r3 )×( p3 −r3 )
.
Hence
" #
e1†
U h i−1
= U1† , U2†
e2†
U
" #−1 " #
Z1 α h i−1 e1 − Z 1−1 αβ −1 U
Z 1−1U e2
= U1 , U2 = , (4.16)
0 β e2
β −1 U

e2† } = {Q 1 U
which results in {Q †1 U e2 } from Lemma 4.6, since U e2 and β −1 is unimodular.
e2† = β −1 U
The result now follows from Theorem 4.2(i). ♥

Theorem 4.1, 4.2 parametrise the set of all stabilising controllers which leaves the pre-specified
closed-loop transfer function the same as the open-loop, i.e. T1,1 = (T1 )1,1 . In the following theorem,
we extend this idea to find all stabilising controllers which have the same pre-specified closed-loop
responses as those with a special controller.

Theorem 4.4 Consider any stabilisable P in the configuration of Fig. 4.1. All stabilising controllers
which leave the closed loop transfer function (T )1,1 the same as that of the controller K = (Y −
S
M Q)(X S −1 can be expressed in the form of (4.6) and (4.7) with
− N Q)
!−1 !
V1 e2
Q 1U
S+
Q = Q , (4.17)
V2 Q2

with all the variables defined in Theorem 4.1.

(proof): From (4.8), the closed-loop transfer function (T )1,1 remains the same as that of the controller
S
K = (Y − M Q)(X − N Q)S −1 if and only if (T1 + T2 QT3 )1,1 = (T1 + T2 QT
S 3 )1,1 , which is equivalent
S 3 )1,1 = 0, which results in (4.17) by using Theorem 4.1.
to (T2 (Q − Q)T ♥
4.3 Design Freedom and Achievable Performance 41

Remark 4.2 If P22 is stable and m 3 = r2 , then the set of all stabilising controllers which leaves the
S
closed loop transfer function (T )1,1 the same as that of the controller K = (Y − M Q)(X S −1
− N Q)
is parametrised by:

S + Q 1U
Q = Q e2 . (4.18)

4.3 Design Freedom and Achievable Performance

In the previous section, we introduced the parametrisation of all stabilising controllers which leaves
some pre-specified transmission paths unchanged. To fulfil this goal, we “shrink” the parametrisation
3 × p3
set of all stabilising controllers from Q ∈ RHm
∞ to (4.11). It is therefore interesting to ask whether
this procedure reduces any design freedom, or introduces performance limitation on other transmission
paths. First let us consider the design freedom in the following example:

Example 4.1 Consider the system in Fig. 4.4. Suppose our design goal is to find a controller which
fixes Td̂1 → ŷ and improves Td̂1 → ŷ1 . The question is: can we actually do this?

r =0 e y1
G
+
+

+u y +
K
+ +
d2 d1

Figure 4.4: Classical feedback interconnection.

Clearly this is not possible since the closed-loop transfer function of the system is:
" # " #" # " #" #
y1 (I − G K )−1 G K (I − G K )−1 G d1 T SG d1
= = ,
y (I − G K )−1 (I − G K )−1 G d2 S SG d2
where S is the system sensitivity function and T = I − S is the complementary sensitivity function.
Hence Td̂1 → ŷ + Td̂1 → ŷ1 = I , and there is no design freedom left.
To see this using the machinery of Section 4.2 we rewrite the system in the form of Fig. 4.1 with
w1 = d1 , w2 = d2 , z 1 = y1 , z 2 = y, and u, y the same as in Fig. 4.4. The generalised plant P then
takes the following form:
 
0 G G
 
P = 
 I G G 
. (4.19)
I G G
42 Controller Parametrisation for Disturbance Response Decoupling

Let G = N M −1 = M̃ −1 Ñ be the right and left coprime factorisations of P22 = G, we find a lnf of
T2,1 as T2,1 = G M = E V1 and notice that a lnf of T2 is T2 = [G M, G M]0 = [E, E]0 V1 , which
shares the same V1 in (4.11). Therefore, the parametrisation of all stabilising controllers which leave
Td̂1 → yˆ1 fixed is the same as the parametrisation of all stabilising controllers which leave Td̂1 →[ yˆ1 , ŷ]0
unchanged. As a result, Td̂1 → ŷ cannot be improved once Td̂1 → ŷ1 is fixed. 2

We will now derive conditions under which the achievable performance of the system, when a
certain transmission path is kept fixed, is not reduced in a significant way for other transmission paths.
To do this, we will work directly with the Q-parameters in the Youla parametrisation. In particular,
we will study how restrictions on the form of Q-parameters in (4.11) affect this freedom. We begin
the discussion with a scalar transfer function.

Lemma 4.7 Given two sets of strictly proper transfer functions, A = {G 1 Q : Q ∈ RH∞ } and
B = {G 2 Q : Q ∈ RH∞ }, where G 1 is strictly proper in RH∞ and G 2 = G 1 × n1
m1
in which m 1 , n 1
are Hurwitz polynomials with deg(m 1 ) − deg(n 1 ) = 1, for any R1 ∈ A we can find a R2 ∈ B such
that kR1 − R2 k∞ <  for any  > 0.

(proof): Since G 2 has relative degree one greater than G 1 , for any R1 ∈ A we take the following
candidate for R2 :
1
R2 = R1 × ,
sτ + 1
for some τ > 0. Note that R2 ∈ B since by definition R1 = G 1 Q for some Q ∈ RH∞ and so
R2 = G 1 Q sτ1+1 = G 2 ( n1 (sτ
m1
+1)
Q) and ( n1 (sτ
m1
+1)
Q) ∈ RH∞ . Therefore, we have:


kR1 − R2 k∞ = kR1 k∞ . (4.20)
sτ + 1
We now wish to show that the right-hand side of (4.20) can be made arbitrarily small by taking τ
sufficiently small. Firstly, since R1 is strictly proper, given any  > 0 we can find an ω0 () such
j ωτ
that |R1 ( j ω)| <  for ω > ω0 , and hence supω>ω0 |R1 j ωτ +1
| ≤ |R1 ( j ω)| <  independently of τ .
j ωτ
Secondly, for ω ∈ [0, ω0 ], max| j ωτ +1
| can be made as small as we like by choosing a sufficiently
j ωτ
small τ . Hence we can choose τ sufficiently small so that supω∈[0,ω0 ] |R1 j ωτ +1
| <  for any  > 0
j ωτ
on this interval. Combining these together, we can ensure that supω |R1 j ωτ +1
| <  and is therefore,
k(R1 − R2 )( j ω)k∞ <  by choosing τ sufficiently small. ♥

Remark 4.3 If G 1 is proper in RH∞ and deg(m 1 ) = deg(n 1 ), then for any R1 ∈ A we can find
a R2 = R1 which belongs to B in that R2 = G 1 Q = G 2 ( mn11 Q) and ( mn11 Q) ∈ RH∞ , such that
R1 − R2 = 0. ♦

For the scalar case, Lemma 4.7 gives a way of showing that the achievable closed-loop performance
will not be reduced up to an approximation error of  in the H∞ norm, since the closed-loop transfer
4.3 Design Freedom and Achievable Performance 43

function is affine in Q. Now we will extend Lemma 4.7 to a matrix case in the following lemma. A
matrix is said to be proper if all its elements are proper, and strictly proper if all its elements are strictly
proper.

Lemma 4.8 Given two sets of proper, stable transfer matrices, A = {G 1 Q : Q is a matrix with
elements in RH∞ } and B = {G 2 Q : Q is a matrix with elements in RH∞ }, where G 2 J = G 1 for
some J :

(i) Suppose G 1 is strictly proper in RH∞ and J ( sτ1+1 )r is a matrix with elements in RH∞ for some
r > 0 and any τ > 0. Then for any R1 ∈ A we can find a R2 ∈ B such that kR1 − R2 k∞ < 
for any  > 0.

(ii) If G 1 and J are proper in RH∞ then for any R1 ∈ A we can find a R2 ∈ B such that
kR1 − R2 k∞ = 0. ♥

(proof):

(i) For any R1 ∈ A, we take the following candidate for R2 :

1
R2 = R1 ( )r ,
sτ + 1

for some τ > 0. Note that R2 ∈ B since by definition R1 = G 1 Q for some Q which has
elements in RH∞ and so R2 = G 2 ( J ( sτ1+1 )r Q), where (J ( sτ1+1 )r Q) has elements in RH∞ .
Hence
1
kR1 − R2 k∞ = kR1 (1 − ( )r )k∞ . (4.21)
sτ + 1
The proof is similar to that of Lemma 4.7. Firstly, since R1 is strictly proper, given any  > 0 we
can find an ω0 () such that σ̄ (R1 ( j ω)) <  for ω > ω0 , and σ̄ω>ω0 (R1 ( j ω)(1 − ( j ωτ1+1 )r )) ≤
σ̄ω>ω0 (R1 ( j ω)) < . Secondly, for ω ∈ [0, ω0 ], (1 − ( j ωτ1+1 ))r can be made as small as
we like by choosing a sufficiently small τ . Hence we can choose τ sufficiently small so that
σ̄ω∈[0,ω0 ] (R1 (1 − ( j ωτ1+1 )r )) <  for any  > 0. Combining these together, we can ensure that
j ωτ r
σ̄ (R1 (1 − ( j ωτ +1
) )) <  for all ω ≥ 0, and therefore, k(R1 − R2 )( j ω)k∞ <  by choosing τ
sufficiently small.

(ii) For any R1 we can set R2 = R1 since R1 = G 1 Q = G 2 ( J Q) ∈ B because J Q has elements in


RH∞ . ♥

Similarly, we can have a parallel version of Lemma 4.8 as follows:

Lemma 4.9 Given two sets of proper, stable transfer matrices, A = {QG 1 : Q is a matrix with
elements in RH∞ } and B = {QG 2 : Q is a matrix with elements in RH∞ }, where J G 2 = G 1 for
some J :
44 Controller Parametrisation for Disturbance Response Decoupling

(i) Suppose G 1 is strictly proper in RH∞ and J ( sτ1+1 )r is a matrix with elements in RH∞ for some
r > 0 and any τ > 0. Then for any R1 ∈ A we can find a R2 ∈ B such that kR1 − R2 k∞ < 
for any  > 0.

(ii) If G 1 and J are proper in RH∞ and then for any R1 ∈ A we can find a R2 ∈ B such that
kR1 − R2 k∞ = 0. ♥

Combining Lemma 4.8 and Lemma 4.9, the following theorem gives our basic result to test the
achievable performance after disturbance response decoupling design.

Theorem 4.5 Given two sets of proper, stable transfer matrices, A = {G 1 Q H1 : Q is a matrix with
elements in RH∞ } and B = {G 2 Q H2 : Q is a matrix with elements in RH∞ } , where G 2 J = G 1 for
some J and K H2 = H1 for some K :

(i) Suppose G 1 Q H1 is strictly proper in RH∞ for any Q which has elements in RH∞ , J Q K ( sτ1+1 )r
is a matrix with elements in RH∞ for some r > 0 and any τ > 0, then for any R1 ∈ A we can
find a R2 ∈ B such that kR1 − R2 k∞ <  for any  > 0.

(ii) If J Q K is a proper matrix for any Q which has elements in RH∞ , then for any R1 ∈ A we can
find a R2 ∈ B such that R1 − R2 = 0.

(proof):

(i) For any R1 ∈ A, we take the following candidate for R2 :

1
R2 = R1 ( )r ,
sτ + 1

for some τ > 0. Note that R2 ∈ B since by definition R1 = G 1 Q H1 for some Q which has
elements RH∞ and so R2 = G 2 ( J Q K ( sτ1+1 )r )H2 , where (J Q K ( sτ1+1 )r )H2 has elements in
RH∞ . Hence
1
kR1 − R2 k∞ = kR1 (1 − ( )r )k∞ . (4.22)
sτ + 1
Then the proof is the same as that of Lemma 4.8.

(ii) If J Q K is a proper matrix for any Q which has elements in RH∞ , then for any R1 ∈ A we can
set R2 = R1 since R1 = G 1 Q H1 = G 2 ( J Q K )H2 ∈ B because J Q K has elements in RH∞ . ♥

4.4 Numerical Example

In this section, we demonstrate the theorems developed in this chapter on two test examples by
discussing their controller structures and achievable performance. In the following chapters these
results will be applied to the active suspension problems.
4.4 Numerical Example 45

Example 4.2 Given a plant P as follows:


 
s 1 1
 s+1 s+2 s+3

P=

1
s+4
0 1 
,
s+2
1 s+5
2
which is partitioned in the obvious way, we want to parametrise all stabilising controllers which leave
(T )1,1 = (P1 )1,1 = s/(s + 1). First of all, we find a lnf of (T2 )1 = (P12 )1 as E = 1/(s + 3) and
V1 = 1, and a rnf of (T3 )1 = (P21 )1 as U1 = [1/(s + 4), 1]0 and F = 1. Then we complete U1 with
e2 as follows:
U2 = [1, 0]0 , and obtain U
h i
e2 = 1 −1 ,
U s+4

so that the parametrisation of all stabilising controllers which leaves (T )1,1 = (T1 )1,1 = s/(s + 1) is
given as (4.14) for Q 1 ∈ RH1×1
∞ .
The next thing we are going to show is that this controller parameterisation does not impose extra
performance limitations on the transmission path (T )2,1 , i.e. its achievable performance remains the
same after disturbance response decoupling. We can reduce the problem to a scalar case and check it
by Lemma 4.7, or directly check the matrix case by Theorem 4.5. In the scalar case approach, we find
the second term T2 QT3 in (4.8) takes the form with Q = [Q α , Q β ] given by:
h i
α +Q β (s+4) Q β (s+2)
T2 QT3 = Q(s+3)(s+4) , (s+3)(s+5) .

After the disturbance response decoupling, it becomes:


h i
e2 T3 = 0, − Q 1 (s+2)
T2 Q 1 U .
(s+3)(s+4)(s+5)

Setting G 1 = (s+2) (s+2)


and G 2 = − (s+3)(s+5)(s+4) e2 T3 )1,2 can approx-
, Lemma 4.7 shows that (T2 Q 1 U
(s+3)(s+5)
imate (T2 QT3 )1,2 to an error of  in the H∞ norm. In the matrix case approach, we have two sets
e2 T3,2 } from Theorem 4.5, which gives
of strictly proper matrices: A = {T2 QT3,2 } and B = {T2 Q 1 U
e2 T3,2 . We find that J = 1 and
G 1 = G 2 = T2 , H1 = T3,2 and H2 = U
" #
0
K = H1 H2−1 = .
−(s + 4)
Therefore, from Theorem 4.5, the achievable performance of these transmission paths is not reduced
in a significant way after the disturbance response decoupling. 2

Example 4.3 Given a plant P as follows:


 s 1 1 1

s+1 s+2 s+2 s+3
 
 1 s+2
1 1 
 s+2 s+1 s+2 
 
P= 1
0 0 1 ,
 s+4 
 0 s+2
2 
 s+5
0 
s+3
1 1 s+6
3
46 Controller Parametrisation for Disturbance Response Decoupling

which is partitioned in the obvious way, we find a lnf of (T2 )1 = (P12 )1 as E = [1/(s + 3), 1/(s + 2)]0
and V1 = 1, and a a rnf of (T3 )1 = (P21 )1 as U1 = [1/(s + 4), 0, 1]0 and F = 1. Then we complete
U1 with U2 = [0, 1; 1, 0; 0, 0], and obtain U e2 as follows:
" #
0 1 0
e2 =
U ,
−1
1 0 s+4

so that the parametrisation of all stabilising controllers which leaves (T )1,1 = (T1 )1,1 = s/(s + 1) is
given as (4.14) for Q 1 ∈ RH1×2
∞ .
Suppose all stabilising controllers are parametrised by (4.6, 4.7) with Q = [Q α , Q β , Q γ ], so that
the second term T2 QT3 of (4.8) is given by:
" Q +Q (s+4) Q β (s+2)+Q γ (s+5) Qγ
#
α γ
(s+3)(s+4) (s+3)(s+5)
T2 QT3 = Q α +Q γ (s+4) Q β (s+2)+Q γ (s+5)
s+6
Q γ (s+3) . (4.23)
(s+2)(s+4) (s+2)(s+5) (s+2)(s+6)

After the disturbance response decoupling, suppose Q 1 = [Q 1,1 , Q 1,2 ], it becomes:


" Q 1,1 (s+4)(s+2)−Q 1,2(s+5) −Q 1,2
#
0
e2 T3 =
T2 Q 1 U (s+3)(s+4)(s+5) (s+4)(s+6)
. (4.24)
Q 1,1 (s+4)(s+2)−Q 1,2(s+5) −Q 1,2 (s+3)
0 (s+2)(s+4)(s+5) (s+2)(s+4)(s+6)

It is noticed that the (2,1) term of (4.24) is also zero, which means (T )2,1 = (T1 )2,1 though in the design
we only try to keep (T )1,1 = (T1 )1,1 . That is, there is no design freedom left in this transmission path,
with the same reason as given in Example 4.1.
Now we shall discuss the achievable responses of this system after performing disturbance response
decoupling. We can compare (4.23) and (4.24) and reduce the problem to a scalar case. That is, by
setting G 1 = 1/(s + 6) and G 2 = 1/(s + 4)(s + 6), Lemma 4.7 shows that (T2 Q 1 U e2 T3 )1,2 can
approximate (T2 QT3 )1,2 to an error of  in the H∞ norm. In the matrix case approach, we use
Theorem 4.5 by setting A = {T2 QT3,2 } and B = {T2 Q 1 U e2 T3,2 }, which gives G 1 = G 2 = T2 ,
H1 = T3,2 and H2 = Ue2 T3,2 so that J = I and
 
0 1
 
K = H1 H2−1 =   1 0 .

0 −(s + 4)

Therefore, from Theorem 4.5 the achievable performance is not reduced in a significant way after the
disturbance response decoupling. 2

4.5 Summary and Comments

This chapter has derived general theorems (Theorem 4.1–4.4) to parametrise all stabilising controllers
which leave some pre-specified closed-loop transfer function fixed. The motivation came from the
vehicle active suspension design problem with particular regard for the potentially conflicting perfor-
mance requirements from two disturbance sources: road irregularities and loads applied to the vehicle
4.5 Summary and Comments 47

body. The controller parametrisation developed in this chapter will allow a feedback controller to be
designed taking account of these disturbances independently. The conditions under which the achiev-
able performance of other transmission paths remains effectively the same were also derived. The
design for the vehicle active suspension control will be investigated in the following chapters.
Chapter 5

Disturbance Response Decoupling for


The Quarter-Car Model

This chapter applies the theorems of Chap. 4 to the standard quarter-car model employing a “Sharp”
actuator with various choices of measured variables. The required controller structures to leave the
road disturbance responses the same as in the passive case are derived. Section 5.1 introduces the
quarter-car model with a “Sharp” actuator, and derives the desired controller structure in the two
measurement case. The controller structure turns out to be similar to one of R.A. Williams et al [40],
but with a slight generalisation. Section 5.2 discusses the same model with three measurements, and
derives the generalised controller structures. Section 5.3 lists the controller structures and the shaped
plants with various choices of measured variables. Section 5.4 shows that the achievable load responses
remain effectively unchanged after disturbance response decoupling design. Section 5.5 presents a
general quarter-car layout and gives the controller structures for disturbance response decoupling.

5.1 The Quarter-Car with Two Measurements

We begin with the quarter-car model of Fig. 5.1 where the sprung and unsprung masses are m s and
m u and the tyre is modelled as a linear spring with constant kt . The suspension consists of a passive
damper of constant cs in parallel with a series combination of an actuator A and a spring of constant ks
(sometimes referred to as a “Sharp” actuator [42]). Following [28] the actuator is modelled so that the
relative displacement across the actuator will be a low-pass filtered version of the actuator’s command
signal, i.e.
ẑ s − ẑ a = γ (s)û. (5.1)

As in [28], we use a second order filter to represent the actuator dynamics:

ωn2
γ (s) = . (5.2)
s 2 + 2δωn s + ωn2

49
50 Disturbance Response Decoupling for The Quarter-Car Model

The external disturbances are taken to be a load Fs and a road displacement zr , and the measurements
are taken to be z̈ s and z s − z u . The dynamic equations of the model are given by:

m s z̈ s = Fs − u p , (5.3)
m u z̈ u = u p + Fr , (5.4)

where

u p = cs (ż s − ż u ) + ks (z a − z u ), (5.5)
Fr = kt (zr − z u ). (5.6)

zs
ms

za
cs A
ks
zu
mu

kt
zr

Figure 5.1: The quarter-car model.

We wish to parametrise all controllers which leave the transmission path from the road disturbance
to z s and z u the same as in the open-loop, i.e. with u = 0. This assumes that ks and cs are chosen to
give satisfactory responses for this transmission path. In effect, this gives the choice of K 0 = 0. We
now write the system in the form of Fig. 4.1 with z 1 = [z s , z u ]0 , w1 = zr , w2 = Fs , y = [z̈ s , z s − z u ]0 ,
u equals the actuator command signal as in (5.1) and z 2 omitted. The corresponding dimensions are
m 1 = m 2 = m 3 = 1, p1 = 2, p2 = 0, p3 = 2. Equation (4.5) then takes the form:

 
ẑ s  
  " # ẑr
   
 ẑ u  P11 P12  F̂s  ,
  =  
 s 2 ẑ s  P21 P22
  û
ẑ s − ẑ u
5.1 The Quarter-Car with Two Measurements 51

with the transfer functions being given by:


" #
1 kt (cs s + ks ) m u s 2 + cs s + ks + kt
P11 = , (5.7)
d(s) kt (m s s 2 + cs s + ks ) cs s + ks
" #
γ (s) ks (m u s 2 + kt )
P12 = , (5.8)
d(s) −ks m s s 2
" #
1 kt (cs s + ks )s 2 (m u s 2 + cs s + ks + kt )s 2
P21 = ,
d(s) −kt (m s s 2 ) m u s 2 + kt
" #
γ (s) ks (m u s 2 + kt )s 2
P22 = ,
d(s) ks ((m u + m s )s 2 + kt )

where
d(s) = (m s m u )s 4 + cs (m s + m u )s 3 + (m s (ks + kt ) + m u ks )s 2 + cs kt s + ks kt . (5.9)
As expected, all roots of d(s) are in left-half plane, which can be confirmed by the Routh-Hurwitz
Criterion.
We now observe that P12,1 = P12 , which has normalrank equal to one, i.e. r2 = m 3 . Since P
is open-loop stable and K 0 = 0, the conditions of Theorem 4.2 are satisfied. We can then apply
e2 which defines the required control structure. Following the
Theorem 4.2(ii) to find the matrix U
definitions in Theorem 4.2(ii) we first find:
" #
kt s 2 cs s + ks
T3,1 = M̃ P21,1 = ,
d(s) −m s
which has normalrank equal to one, i.e. r3 = 1. Hence we can select:
kt s 2 p1 (s)
F = ,
d(s)
" #
1 cs s + ks
U1 = ,
p1 (s) −m s
where p1 (s) is any first order Hurwitz polynomial, to give a rnf of T3,1 . We can choose U2 to complete
a unimodular matrix U as follows:
" #
cs s+ks
p1 (s)
0
U = (U1 , U2 ) = −m s
,
p1 (s)
1
e10 , U
which gives U −1 = [U e20 ]0 and
h i
e2 =
U ms
1 . (5.10)
cs s+ks

Thus, all stabilising controllers which leave Tzr →[zs , zu ]0 the same as in the open-loop can then be
expressed as shown in Fig. 5.2 where
e2 P22 )−1 Q 1 ,
K 1 = −(I − Q 1U (5.11)

for Q 1 ∈ RH1×1 e
∞ or equivalently K 1 is any stabilising controller for U2 P22 (see Theorem 4.2).
52 Disturbance Response Decoupling for The Quarter-Car Model

z̈ s
ms ms
cs s+ks

u +
A K1
cs +
ks

mu zs − zu

kt

Figure 5.2: Controller structure for the quarter-car with two feedbacks.

Example 5.1 We now apply the above result to a specific case in which we make the suspension
stiff to load disturbances but soft to road disturbances. We select the following parameters for the
quarter-car model as in [32]: m s = 250 kg, m u = 35 kg, kt = 150 kN/m. We choose ωn = 100
rad/s and δ = 0.7071 as the parameters for the actuator dynamics. We also choose ks = 12 kN/m,
cs = 4 kNs/m as the spring-damper coefficients which we consider to give a suitable “soft” response
from the road disturbances in the passive implementation. It is now required to design the active
controller to achieve desirable responses from the load disturbances.
A simple approach is to take Q 1 to be constant in (5.11) and to minimise the steady-state response
from load disturbances to sprung mass position. A straightforward calculation shows that TF̂s →ẑs (0) =
(ks + kt − Q 1 kt )/(ks kt ) which can be made to equal zero when Q 1 = (ks + kt )/kt = 1.08. The step
responses for the passive and active suspensions are shown in Fig. 5.3, which clearly illustrates the
zero steady-state response to loads achieved by the active controller.
zr → zs Fs → zs
−4
x 10
1.5 1

0.8
1 0.6

0.4
0.5
0.2

0 0
0 2 4 0 1 2 3 4
z →z −5 F →z
r u x 10 s u
1.5 1
0.8
1
0.6
0.4
0.5
0.2
0 0
0 2 4 0 2 4

Figure 5.3: Passive suspension (Q 1 = 0, solid) and active suspension (Q 1 = 1.08, dashed).
5.1 The Quarter-Car with Two Measurements 53

As a second approach we can employ the H∞ loop shaping design procedure [18, 45] to the plant
e2 P22 . We select a weighting function as follows:
U
10(s + 80)
W1 = ,
(s + 8)
e2 P22 , has a gain crossover frequency at about 44 rad/s, somewhat
so that the open-loop loop shape, W1 U
below the actuator cut-off frequency of 100 rad/s. The use of a lag compensator in W1 allows the gain
to be increased relatively at low frequencies in order to achieve a smaller value of TF̂s →ẑs (0). This
choice of weighting function gives a stability margin of 0.3864. The final controller takes the form
K = K1U e2 (see Fig. 5.2) where

−23.87(s + 25.37)(s + 72.55 ± 75.70 j )


K1 = ,
(s + 8.10)(s + 92.22 ± 108.18 j )
which has been reduced to third order by balanced truncation. For this controller the step response
from Fs to z s is shown in Fig. 5.4, which exhibits an improved transient response in comparison to
Fig. 5.3 but inferior steady-state behaviour.
−4
x 10
Fs → z s
1

0.8

0.6

0.4

0.2

0
0 0.5 1 1.5 2
sec

Figure 5.4: Passive suspension (solid) and active suspension using H∞ loop shaping design (dashed).

At this point it is instructive to compare the control structure shown in Fig. 5.2 with a scheme
presented by Williams, Best and Crawford in [40]. The stated aim of their controller is to provide a
rapid closed-loop levelling system which does not respond to unwanted road disturbances, and this is
achieved “by filtering and summing the sprung mass acceleration and suspension displacement signals
to eliminate the effects of the road inputs”. A block diagram of the scheme in [40] is shown in Fig. 5.5
where T (s) is a phase lead compensator. Although the damper is placed in series with the actuator
this is not an essential difference. It may be observed that the ratio between the two filters F1 and F2
is equal to m s /(cs s + ks ) so the scheme operates in a similar way to that of Fig. 5.2. In fact it can be
shown that, if the denominators in F1 and F2 are both replaced by any first order Hurwitz polynomial,
and T (s) is any stabilising controller, then the scheme parametrises all controllers which leave the
road disturbance responses the same as in the open-loop. Thus the scheme lacks full generality only
54 Disturbance Response Decoupling for The Quarter-Car Model

by virtue of the fact that the filters F1 and F2 have an extra order of roll-off at high frequency, which
is a minor difference since it may be useful to provide some high-frequency roll-off in K 1 in practice.

z̈ s
ms
ms F1
ks cs m s s 2 +cs s+ks


A T (s)

cs s+ks F2
m s s 2 +cs s+ks
mu zs − zu

kt

Figure 5.5: Controller structure of R.A. Williams et al.

Finally, it is useful to comment on the full set of performance requirements that are usually consid-
ered in suspension design. In addition to the sprung mass position as a function of road disturbances,
which can be analysed with regard to driver comfort, there are also issues such as tyre normal loads
(i.e. tyre deflection) and rattle space (i.e. strut deflection). It was shown in [13] that if the transfer
function from zr to z s is determined, then there is no additional freedom left in the road disturbance
transmission path, i.e. the transfer functions Tẑr →ẑr −ẑu and Tẑr →ẑs −ẑu can be deduced directly. A sim-
ilar fact was shown in [31] for the load disturbance transmission path. Thus, in the above approach
to active suspension design, it is assumed that for each disturbance transmission path that is being
dealt with, all the relevant factors (e.g. comfort, tyre loads, suspension deflection) are taken account
of together.

5.2 The Quarter-Car with Three Measurements

We continue to illustrate our basic theory by considering the quarter-car model with the additional
measurement z̈ u . We now write the system in the form of Fig. 4.1 with y = [z̈ s , z s − z u , z̈ u ]0 and all
other variables the same as in Section 5.1. The general plant of equation (4.5) then has P11 , P12 the
5.2 The Quarter-Car with Three Measurements 55

same as (5.7), (5.8) and:


 
kt (cs s + ks )s 2 (m u s 2 + cs s + ks + kt )s 2
1  

,
P21 = −kt (m s s 2 ) (m u s 2 + kt )
d(s)  
kt (m s s 2 + cs s + ks )s 2 (cs s + ks )s 2
 
ks (m u s 2 + kt )s 2
γ (s)  
 ks ((m u + m s )s 2 + kt )  ,
P22 =  
d(s)
−ks m s s 4

where d(s) is given by (5.9).


As before we wish to parametrise all controllers which leave the transmission path from the road
disturbance to z s and z u the same as in the open-loop, i.e. with u = 0, which assumes that ks and cs are
chosen to give satisfactory responses for this transmission path. We can check that the conditions of
Theorem 4.2 again hold, so that we can follow the procedure to obtain the required controller structure.
Following the definitions in Theorem 4.2(ii) we find that
 
cs s + ks
kt s 2 



T3,1 = M̃ P21,1 = −m s
d(s)  
m s s 2 + cs s + ks

which gives r3 = 1. Hence we can select

kt s 2 p2 (s)
F = ,
d(s)
 
cs s + ks
1  

,
U1 = −m s
p2 (s)  
m s s 2 + cs s + ks

where p2 (s) is any second order Hurwitz polynomial, to give a rnf of T3,1 . We can choose U2 =
e10 , U
[I2×2 , 02×1 ]0 to complete a unimodular matrix U to give U −1 = [U e20 ]0 with

" #
1 0 − m s sc2s+c
s+ks
e2 =
U s s+ks . (5.12)
ms
0 1 m s s 2 +cs s+ks

Thus, all stabilising controllers which leave Tẑr →[ẑs , ẑu ]0 the same as in the open-loop can then be
expressed as shown in Fig. 5.6 where

e2 P22 )−1 Q 1 ,
K 1 = −(1 − Q 1 U (5.13)

for any Q 1 ∈ RH1×2 e


∞ or equivalently K 1 is any stabilising controller for U2 P22 (see Theorem 4.2).
56 Disturbance Response Decoupling for The Quarter-Car Model

z̈ s e2
U
+
ms − cs s+ks
m s s 2 +cs s+ks

u
cs A K1

ks ms
+ m s s 2 +cs s+ks
zs − zu +
mu
z̈ u
kt

Figure 5.6: Controller structure for the quarter-car with three feedbacks.

5.2.1 Alternative Controller Structures


e2 in (5.12) is not unique. Let us suppose that we
As pointed out in Lemma 4.6 the exact form of U
prefer a structure with " #
f1 1 0
e2† =
U
0 1 f2
where f 1 , f 2 ∈ RH∞ are strictly proper, motivated by a preference to use low-pass filters for the
e2 given by (5.12) the
acceleration signals z̈ s and z̈ u while keeping the strut deflection unfiltered. For U
e2† = W † U
identity U e2 implies that
" #
ms
1
W† = cs s+ks
,
0 1
and " #
ms
1 0
e2†
U = cs s+ks
.
ms
0 1 m s s 2 +cs s+ks

We can see that W † fails to be unimodular as required by Theorem 4.2(iii). Moreover, it is straightfor-
e2† : Q †1 ∈ RH1×2
ward to show that the set {Q †1U e
∞ } is equal to the set {Q 1 U2 : Q 1 ∈ RH∞ , Q 1,1 (∞) =
1×2

0}, i.e. the full parametrisation but with the first element in Q 1 being strictly proper. Thus a con-
troller parametrisation with Ue2 replaced by U
e2† does not give all possible stabilising controllers which
leave the road disturbance responses the same as in the open-loop (see Lemma 4.6 and Theorem 4.2).
However, the restriction of the Q-parameter amounts only to an increased roll-off requirement of the
controller at high frequency.
Referring to Fig. 5.6, let us consider another possible controller structure:
" #
f1 1 0
Ue2 =

,
1 0 f2
5.3 Quarter-Car Control Structures and Design 57

e2‡ = W ‡ U
where f 1 , f 2 ∈ RH∞ are strictly proper. The identity U e2 now implies that
" #
ms
1
W‡ = cs s+ks
,
1 0

and " #
ms
1 0
e2‡ =
U cs s+ks
.
−(cs s+ks )
1 0 m s s 2 +cs s+ks

e2 can be replaced by U
Since W ‡ is unimodular, then U e2‡ in Fig. 5.6 to give a parametrisation of all
stabilising controllers (Theorem 4.2(iii)).

5.3 Quarter-Car Control Structures and Design

For direct controller design using Theorem 4.2, it is instructive to compute U e2 P22 for the given choice
of measurements. Table 5.1 shows U e2 P22 for three different cases. It is interesting that U
e2 P22 takes a
particularly simple form, which is independent of the sprung and unsprung masses, in the case when
the feedback signals z̈ s and z s − z u are used, which means that the controller design would be rather
simple in this case.

measurements e2
U e2 P22
U
" #
z̈ s h i
ms ks γ (s)
1 cs s+ks
zs − zu cs s+ks

 
z̈ s " # " #
  1 0 − m s sc2s+c
s+ks
s2
 zs − zu  s s+ks ks γ (s)
  0 1 ms m s s 2 +cs s+ks
1
m s s 2 +cs s+ks
z̈ u
 
z̈ s " # " #
  0 1 0 1
 zs − za  γ (s)
  ms
0 1 −cs s
za − zu cs s+ks cs s+ks

e2 structures and the transformed plants of the quarter-car model with various mea-
Table 5.1: The U
surements.

5.4 Achievable Performance

In this section, we will discuss the achievable load responses after the disturbance response decoupling
design.
58 Disturbance Response Decoupling for The Quarter-Car Model

5.4.1 Two Measurement Case

In the two feedback case, all stabilising controllers are parametrised by (4.6, 4.7) with Q = [Q α , Q β ],
so that the load responses are given by:
" # " #!
ẑ s 1 ks (m u s 2 + kt )
= P11,12 − L 1 (s) F̂s , (5.14)
ẑ u d(s) −ks m s s 2

where L 1 (s) = γ (s)((m u s 2 + cs s + ks + kt )s 2 Q α + (m u s 2 + kt )Q β )/d(s) and d(s) is given in


(5.9). After disturbance response decoupling with the controller structure U e2 given in (5.10), the load
responses are given by:
" # " #!
ẑ s 1 ks (m u s 2 + kt )
= P11,12 − L 2 (s) F̂s , (5.15)
ẑ u d(s) −ks m s s 2

where L 2 (s) = γ (s)Q 1 /(cs s + ks ). To compare the achievable performance, set Q 1 = ((m u s 2 + cs s +
ks + kt )s 2 Q α + (m u s 2 + kt )Q β )/d(s) and note that L 2 = L 1 /(cs s + ks ). Therefore, from Lemma 4.7,
L 2 (s) can approximate L 1 (s) to an error of  in the H∞ norm. Hence the freedom in achievable load
responses after disturbance response decoupling is effectively unchanged.

5.4.2 Three Measurement Case

In the three feedback case, all stabilising controllers are parametrised by (4.6, 4.7) with Q =
[Q γ , Q δ , Q ζ ], so that the load responses are given by:
" # " #!
ẑ s 1 ks (m u s 2 + kt )
= P11,12 − L 3 (s) F̂s , (5.16)
ẑ u d(s) −ks m s s 2

where L 3 (s) = γ (s)((m u s 2 +cs s +ks +kt )s 2 Q γ +(m u s 2 +kt )Q δ +(cs s +ks )s 2 Q ζ )/d(s). It is noticed
that any achievable performance by three measurements can also be achieved by two measurement
[z̈ s , z s − z u ]0 in that for any L 3 we can achieve a L 1 = L 3 by setting Q α = Q γ + Q ζ (cs s +
ks )/(m u s 2 + cs s + ks + kt ) and Q β = Q δ in L 1 (s). After disturbance response decoupling with the
controller structure U e2 given in (5.12), and with the parameter Q 1 = [Q 1,1 , Q 1,2 ], the load responses
are given by:
" # " #!
ẑ s 1 ks (m u s 2 + kt )
= P11,12 − L 4 (s) F̂s , (5.17)
ẑ u d(s) −ks m s s 2

where L 4 (s) = γ (s)(s 2 Q 1,1 + Q 1,2 )/(m s s 2 +cs s+ks ). Therefore, for any L 3 we can choose Q 1,1 , Q 1,2
as follows:
(m u s 2 + cs s + ks + kt )(m s s 2 + cs s + ks ) cs s + ks
Q 1,1 = (Q γ + Q ζ ),
d(s) m u s 2 + cs s + ks + kt
(m u s 2 + kt )(m s s 2 + cs s + ks )
Q 1,2 = Qδ,
d(s)
5.5 A General Quarter-Car Layout 59

so that L 4 = L 3 . Hence the achievable load responses are the same after disturbance response
decoupling design.
We can also check this same fact on achievable load performance by directly using the matrix
formulation in Theorem 4.5. The original achievable load responses are T1,2 − T2 QT3,2 with Q ∈
RH1×3
∞ , and after disturbance response decoupling design the achievable load responses are T1,2 −
e2 T3,2 with Q 1 ∈ RH1×2
T2 Q 1 U e
∞ . Therefore, we can set A = {T2 QT3,2 } and B = {T2 Q 1 U2 T3,2 } in
Theorem 4.5 and assign G 1 = G 2 = T2 , H1 = T3,2 and H2 = U e2 T3,2 , so that J = I and K is found
as follows:  
m u s 2 + cs s + ks + kt 0
m s s 2 + cs s + ks 


K =  0 m u s 2 + kt 
,
d(s)
cs s + ks 0
Accordingly, the achievable load responses remain the same after disturbance response decoupling
design (Theorem 4.5(ii)).

5.5 A General Quarter-Car Layout

Fs

zs
ms

za
cs1 k s1 A

cs2 k s2
zu
mu

kt
zr

Figure 5.7: A general quarter-car model.

At the end of this chapter, let us consider a general quarter-car layout in Fig. 5.7, where the
actuator A is modelled the same way as (5.1–5.2). We write the system in the form of Fig. 4.1
with z 1 = [z s , z u ]0 , w1 = zr , w2 = Fs , y = [z̈ s , z s − z u ]0 , u equals the actuator command
signal as in (5.1) and z 2 is omitted. From Theorem 4.2, it is easy to find the controller structure
e2 which leaves the road responses the same as in the passive case. Table 5.2 shows the controller
U
e2 and U
structure U e2 P22 of this general quarter-car model for the following cases: (1) two feedback
y = [z̈ s , z s −z u ]0 , (2) three feedbacks y = [z̈ s , z s −z u , z̈ u ]0 , (3) four feedbacks y = [z̈ s , z s −z u , z̈ u , u p ]0
where u p = (cs1 s + ks1 )(z s − z u ) + (cs2 s + ks2 )(z a − z u ) represents the suspension force. The Maple
code for the first case is given in Appendix C.
60 Disturbance Response Decoupling for The Quarter-Car Model

measurements e2
U e2 P22
U
" #
z̈ s h i
ms (cs2 +ks2 )γ (s)
(cs1 +cs2 )s+(ks1 +ks2 )
1 (cs1 +cs2 )s+(ks1 +ks2 )
zs − zu
 
z̈ s  (c +c )s+(ks1 +ks2 )
 " #
  1 0 − m s s 2 +(c
s1 s2
(cs2 s+ks2 )γ (s) s2
 zs − zu   s +cs 1 2
)s+(ks1 +ks2 ) 
  0 1 ms m s s 2 +(cs1 +cs2 )s+(ks1 +ks2 )
1
m s s 2 +(cs1 +cs2 )s+(ks1 +ks2 )
z̈ u
 
 ((cs1 +cs2 )s+(ks1 +ks2 ))m s
  
z̈ s
  0 0 1 −m s s 2
 z −z   m s s 2 +(cs1 +cs2 )s+(ks1 +ks2 )   
 s a   (cs1 +cs2 )s+(ks1 +ks2 )  (cs2 s+ks2 )γ (s)  
   1 0 − m s s 2 +(c 0   s2 
 z̈ u   s1 +cs2 )s+(ks1 +ks2 )  m s s 2 +(cs1 +cs2 )s+(ks1 +ks2 )
  0 1 ms
0 1
up m s s 2 +(cs1 +cs2 )s+(ks1 +ks2 )

e2 structures and the transformed plants of the general quarter-car model with various
Table 5.2: The U
measurements.

5.6 Summary and Comments

This chapter has applied the disturbance response decoupling techniques to the quarter-car active
suspension design problem. This allowed a feedback controller to be designed taking account of only
the load disturbance path objective, given that the controller structure ensured that the road disturbance
responses remained satisfactory. The approach was illustrated with various choices of measurements,
and the required control structures were derived in parametric form. Furthermore, it was verified that
the achievable load responses remain effectively the same after the disturbance response decoupling
design. It was also noted that the shaped plant sometimes takes a particular simple form, as shown in
Table 5.1, 5.2, so that the controller design would be rather simple. This would be an interesting area
for further investigation.
Chapter 6

Disturbance Response Decoupling for


The Half-Car Model

In this chapter, we shall apply the disturbance response decoupling techniques to the simple half-car
model with acceleration and strut deflection measurements. Section 6.1 derives the control structure
required to keep the road disturbance responses the same as in the passive case. Section 6.2 shows
that the achievable load responses are not reduced in a significant way after disturbance response
decoupling design. Section 6.3 investigates the “simplicity” conditions which allow the design to be
carried out for two separate quarter-cars. Section 6.4 demonstrates the refined design to make further
improvement of the closed-loop responses.

6.1 The Half-Car Model

In this section, we shall apply the controller parametrisation method to the half-car model shown
in Fig. 6.1. As in the quarter-car model, the actuators A1 and A2 are modelled so that the relative
displacement across each is equal to a low-pass filtered version of the actuator’s command signal, i.e.

ẑ s + l1 ẑ ψ − ẑ a1 = γ (s)û 1 , (6.1)
ẑ s − l2 ẑ ψ − ẑ a2 = γ (s)û 2 , (6.2)

where γ (s) is defined as in (5.2). The linearised dynamic equations can be expressed as follows:

m s z̈ s = Fs − u p1 − u p2 , (6.3)
Iψ z̈ ψ = Fψ − u p1 l1 + u p2 l2 , (6.4)
m 1 z̈ u 1 = u p1 + Fr1 , (6.5)
m 2 z̈ u 2 = u p2 + Fr2 , (6.6)

61
62 Disturbance Response Decoupling for The Half-Car Model

where the passive suspension forces u p1 , u p2 , and the tyre forces Fr1 , Fr2 are given by:

u p1 = c1 (ż s + l1 ż ψ − ż u 1 ) + k1 (z a1 − z u 1 ),
u p2 = c2 (ż s − l2 ż ψ − ż u 2 ) + k2 (z a2 − z u 2 ),
Fr1 = kt1 (zr1 − z u 1 ),
Fr2 = kt2 (zr2 − z u 2 ).

Fs

z ψ , Fψ m s , Iψ zs

l1 l2

z a1 z a2
A1 A2
c1 c2
k1 k2
zu1 zu2
m1 m2

k t1 z r1 k t2 z r2

Figure 6.1: The half-car model.

We now write the system in the form of Fig. 4.1 with z 1 = [z s , z ψ , z u 1 , z u 2 ]0 , w1 = [zr1 , zr2 ]0 ,
w2 = [Fs , Fψ ]0 , y = [z̈ s , z̈ ψ , D1 , D2 ]0 where D1 = z s + l1 z ψ − z u1 , D2 = z s − l2 z ψ − z u2 are
strut deflections, u = [u 1 , u 2 ]0 as in (6.1), (6.2) and z 2 omitted. As before we wish to parametrise all
controllers which leave the transmission path from the road disturbances [zr1 , zr2 ]0 to [z s , z ψ , z u 1 , z u 2 ]0
the same as in the open-loop, i.e. with u 1 = u 2 = 0, which assumes that k1 , k2 , c1 and c2 are
chosen to give satisfactory responses for these transmission paths. We can check that the conditions of
Theorem 4.2 again hold, so that we can follow the procedure to obtain the required controller structure.
Following the definitions in Theorem 4.2(ii) we can choose a U1 = T3,1 × p3 (s)/s 2 = P21,1 ×
p3 (s)/s 2 ∈ RH4×2
∞ and F = s / p3 (s) × I2×2 ∈ RH∞ , where p3 (s) is any third order Hurwitz
2 2×2
 0
polynomial, to give a rnf of T3,1 , and complete this U1 to a unimodular matrix with U2 = 02×2 , I2×2
to give
" Iψ
#
m s l2
1 0
e2 =
U (c1 s+k1 )(l1 +l2 ) (c1 s+k1 )(l1 +l2 )
. (6.7)
m s l1 −Iψ
(c2 s+k2 )(l1 +l2 ) (c2 s+k2 )(l1 +l2 )
0 1
6.1 The Half-Car Model 63

The Maple code for generating this controller structure is given in Appendix D. We observe that
e2 “constructs” two combinations of measurements, each of which is a suspension deflection plus a
U
low-pass filtered version of a sum of the two acceleration signals. A block diagram of this control
structure is shown in Fig. 6.2.

D1

+
+ z̈ s
1
c1 s+k1 " #
1 m s l2 Iψ
l1 +l2
m s l1 −Iψ
1 z̈ ψ
+ c2 s+k2
+

D2

e2 ) for the half-car model.


Figure 6.2: Controller structure (U

For direct controller design using the transformed plant P † in Fig. 4.2(b), it is interesting to note
e2 P22 takes a particularly simple form in the half-car case when U
that U e2 is determined by (6.7), namely:
" #
k1
0
e2 P22 = γ (s)
U c1 s+k1
. (6.8)
k2
0 c2 s+k2

This fact will be exploited in the following example.

Example 6.1 We now apply the above result to a specific case in which we make the suspension stiff
to load disturbances but soft to road disturbances. We select the following parameters for the half-car
model: m s = 1600 kg, Iψ = 1000 kg m2 , m 1 = m 2 = 100 kg, k1 = k2 = 40 kN/m, c1 = c2 = 10
kNs/m, kt1 = kt2 = 500 kN/m, l1 = 1.15 m, l2 = 1.35 m. The H∞ loop shaping controller design
e2 is given by (6.7). Setting
will be applied to this half-car model. The essential controller structure U
a weighting function W1 as follows:
" #
s + 80 10 0
W1 = , (6.9)
s+8 0 10

e2 P22 has a bandwidth of about 60 rad/sec and has an increased


means that the weighted plant W1 U
low-frequency gain due to the lag compensator terms. By applying the H∞ loop shaping controller
design procedure a sixth order controller was obtained after balanced truncation as follows:
" #
Kc 0
K1 = , (6.10)
0 Kc
64 Disturbance Response Decoupling for The Half-Car Model

where

−24.81(s + 27.94)(s + 72.56 ± 73.47 j )


Kc = . (6.11)
(s + 8.06)(s + 101.45 ± 114.65 j )

e2 P22 is itself
It is interesting to note that K 1 in (6.10) is a scalar matrix due to the fact that W1 U
scalar (see (6.8)). This controller gives the d.c. gains TF̂s →ẑs (0) and TF̂ψ →ẑψ (0) as 1.32 × 10−6 and
8.39 × 10−7 respectively, compared with 1.36 × 10−5 and 8.64 × 10−6 using passive control. The step
responses using the controllers are shown in Fig. 6.3. 2

−5
x 10
Fs → z s −6
x 10
Fψ → z ψ
1.4 9

8
1.2
7
1
6
0.8 5

0.6 4

3
0.4
2
0.2
1

0 0
0 0.5 1 1.5 2 0 0.5 1 1.5 2
sec sec

Figure 6.3: Step responses of TF̂s →ẑs and TF̂ψ →ẑψ : passive (solid) and active control (dashed).

6.2 Achievable Performance

In this section, we will discuss the achievable load responses after disturbance response decoupling
design. All stabilising controllers are parametrised by (4.6, 4.7) and the load responses are T1,2 −
T2 QT3,2 with Q ∈ RH2×4∞ . After the disturbance response decoupling procedure, the load responses
e e2 is given by (6.7) and Q 1 ∈ RH2×2
become T1,2 − T2 Q 1 U2 T3,2 , where U ∞ . Therefore, we consider two
e2 T3,2 } in Theorem 4.5, which gives
sets of strictly proper matrices: A = {T2 QT3,2 } and B = {T2 Q 1U
G 1 = G 2 = T2 , H1 = T3,2 and H2 = U e2 T3,2 . We find J = I and K as follows:

 
o(s 9 ) o(s 9 )
 
1  9 
 o(s ) o(s ) 
9
K = H1 H2−1 =  , (6.12)
p8 (s)  o(s 7 ) o(s 7 ) 
 
o(s ) o(s )
7 7

where p8 (s) is an eighth order Hurwitz polynomial and o(s i ) indicates an i-th order polynomial.
Thus, from Theorem 4.5, the achievable load responses after disturbance response decoupling can
approximate the original load responses to an error of  in the H∞ norm.
6.3 Decoupling by Simplicity 65

6.3 Decoupling by Simplicity

Under certain conditions, the half-car model can be structurally decoupled into two quarter-cars. For
example, in [32, 37], assumptions such as kl-simplicity were used, in a mechanical network setting, to
perform energy-preserving transformations of the external disturbance variables to achieve decoupling.
In our setting we will need to use a similar transformation on all of the system variables (but will not
necessarily be able to respect the energy-preserving property). For the half-car model shown in Fig. 6.1,
we define it as simple if the following equation holds:

m1 k1 c1 kt l2
= = = 1 = . (6.13)
m2 k2 c2 k t2 l1

We introduce a transformation matrix L h as follows:


" #
1 l2 l1
Lh = , (6.14)
l1 + l2 1 −1

and define
" # " #
(x)b x1
= Lh ,
(x)ρ x2

where x may represent any of the following variables: z u , zr , z a or u, and the subscripts b and ρ

represent the bounce and rotation modes respectively.


Under the assumption of simplicity, we can then rewrite (6.1–6.6) as follows:

ẑ s − (ẑ a )b = γ (s)(û)b , (6.15)


ẑ ψ − (ẑ a )ρ = γ (s)(û)ρ , (6.16)
m s z̈ s = Fs − (c1 + c2 )(ż s − (ż u )b ) − (k1 + k2 )((z a )b − (z u )b ), (6.17)
Iψ z̈ ψ = Fψ − (c1l12 + c2l22 )(ż ψ − (ż u )ρ ) + (k1l12 + k2l22 )((z a )ρ − (z u )ρ ),(6.18)
(m 1 + m 2 )(z̈ u )b = (c1 + c2 )(ż s − (ż u )b ) − (k1 + k2 )((z a )b − (z u )b )
+(kt1 + kt2 )((zr )b − (z u )b ), (6.19)
(m 1l12 + m 2l22 )(z̈ u )ρ = (c1l12 + c2l22 )(ż ψ − (ż u )ρ ) + (k1l12 + k2l22 )((z a )ρ − (z u )ρ )
+(kt1 l12 + kt2 l22 )((zr )ρ − (z u )ρ ). (6.20)

Compared with (5.1), (5.3) and (5.4), we find that (6.15), (6.17) and (6.19) represent a bounce quarter-
car, and (6.16), (6.18) and (6.20) represent a rotation quarter-car, which are decoupled from each other.
The relevant correspondences between variables is summarised in Table 6.1. Furthermore, we can
show that, in order to arrive at a decoupled form for equations (6.17) and (6.18) (e.g. z ψ being absent
from (6.17) etc), then we need both (6.13) to hold and for L h to be defined by (6.14) up to scalar
multiplication of each row.
66 Disturbance Response Decoupling for The Half-Car Model

Quarter-car Half-car (bounce) Half-car (rotation)


ms ms Iψ
mu m1 + m2 m 1l12 + m 2l22
ks k1 + k2 k1l12 + k2l22
cs c1 + c2 c1l12 + c2 l22
kt k t1 + k t2 kt1 l12 + kt2 l22
Fs Fs Fψ
zs zs zψ
z u , z a , zr (z u )b , (z a )b , (zr )b (z u )ρ , (z a )ρ , (zr )ρ
u (u)b (u)ρ

Table 6.1: Decoupled half-car by simplicity.

6.4 Refined Design for The Half-Car Model

In this section, we shall apply Theorem 4.4, to the half-car model. The controller structure shown
in Fig. 6.2 allows us to improve load responses while keeping the road responses the same as in the
passive case. After the controller design, it is possible that we are satisfied with some of the load
responses (e.g. Fs responses) and want to improve others (e.g. Fψ responses). Therefore, we can carry
out the design procedure again using Theorem 4.4. Furthermore, the achievable perfomance will also
be verified.

6.4.1 Controller Structure of Design for Fs

Firstly, we wish to parametrise all controllers which leave the transmission path from the road distur-
bances w1 = [zr1 , zr2 , Fψ ]0 to z 1 = [z s , z ψ , z u 1 , z u 2 ]0 the same as in the open-loop. We can check
that the conditions of Theorem 4.2 hold, so that we can follow the procedure to obtain the required
controller structure.
Following the definitions in Theorem 4.2 we can find a lnf of T3,1 as T3,1 = U1,Fs FFs , where
 
s2 (m 1 s 2 +c1 s+k1 +kt1 )s 2
0
 p3 (s) (l1 +l2 )(c1 s+k1 )kt1 p3 (s) 
 −(m 2 s 2 +c2 s+k2 +kt2 )s 2 
FFs =  0 s2 ,
 p3 (s) (l1 +l2 )(c2 s+k2 )kt2 p3 (s) 
1
0 0 (l1 +l2 )(c1 s+k1 )

in which p3 (s) is any third order Hurwitz polynomial, and complete this U1,Fs to a unimodular matrix
with U2,Fs = [0, 0, 0, 1]0 to give
h i
e2,Fs
U = ms
, 0, c1 s+k1
, 1 , (6.21)
c2 s+k2 c2 s+k2
h i
e2,Fs P22 = γ (s)
U k1
, k2
.
c2 s+k2 c2 s+k2
6.4 Refined Design for The Half-Car Model 67

e2,Fs P22 is independent of the masses, inertias and tyre spring constants,
It is interesting to note that U
as the quarter-car models illustrated in Table 5.1.
The achievable performance after the disturbance response decoupling design is checked by The-
e2,Fs T3,2 }. We define G 1 = G 2 = T2 , H1 = T3,2
orem 4.5, setting A = {T2 QT3,2 } and B = {T2 Q 1 U
e2,Fs T3,2 so that J = I and
and H2 = U

1 h i0
K = o(s 9 ) o(s 8 ) o(s 7 ) o(s 7 ) ,
p8 (s)

where p8 (s) is an eighth order Hurwitz polynomial and o(s i ) indicates an i-th order polynomial. Thus,
from Theorem 4.5, the achievable Fs responses after disturbance response decoupling can approximate
the original load responses to an error of  in the H∞ norm.

6.4.2 Controller Structure of Design for Fψ

Now we wish to parametrise all controllers which leave the transmission path from w1 = [zr1 , zr2 , Fs ]0
to z 1 = [z s , z ψ , z u 1 , z u 2 ]0 the same as in the open-loop. Again we can find a lnf of T3,1 as T3,1 =
U1,Fψ FFψ with FFψ given by
 
s2 (m 1 s 2 +c1 s+k1 +kt1 )l2 s 2
0
 p3 (s) (l1 +l2 )(c1 s+k1 )kt1 p3 (s) 
 (m 2 s 2 +c2 s+k2 +kt2 )l1 s 2 
FFψ =  0 s2 ,
 p3 (s) (l1 +l2 )(c2 s+k2 )kt2 p3 (s) 
l2
0 0 (l1 +l2 )(c1 s+k1 )

in which p3 (s) is any third order Hurwitz polynomial, and complete this U1,Fψ to a unimodular matrix
with U2,Fψ = [0, 0, 0, 1]0 to give
h i
e2,Fψ
U = 0,
−Iψ
, −(c1 s+k1 )l1
, 1 , (6.22)
(c2 s+k2 )l2 (c2 s+k2 )l2
h i
e2,Fψ P22 = γ (s)
U −k1 l1
, k2
.
(c2 s+k2 )l2 c2 s+k2

e2,Fψ P22 is independent of the masses, inertias and tyre spring constants.
Again U
The achievable performance after the disturbance response decoupling design is checked by The-
e2,Fψ T3,2 }. We define G 1 = G 2 = T2 , H1 = T3,2
orem 4.5, setting A = {T2 QT3,2 } and B = {T2 Q 1 U
e2,Fψ T3,2 so that J = I and
and H2 = U

1 h i0
K = o(s 8 ) o(s 9 ) o(s 7 ) o(s 7 ) ,
p8 (s)

where p8 (s) is an eighth order Hurwitz polynomial and o(s i ) indicates an i-th order polynomial. Thus,
from Theorem 4.5, the achievable Fψ responses after disturbance response decoupling can approximate
the original load responses to an error of  in the H∞ norm.
68 Disturbance Response Decoupling for The Half-Car Model

6.4.3 The Relation Between the Controller Structures

It is noticed that there exists a unimodular matrix W as follows:


" #
c1 s+k1
1
W = c2 s+k2
,
− (c 1 s+k1 )l1
(c2 s+k2 )l2
1

e2,Fs and U
such that U e2,Fψ are sub-matrices of Ue2† = W U
e2 , which is, from Lemma 4.6, an equivalent
e2 in (6.7) as follows:
controller structure of U
" #
e
U
Ue2† = W U e2 = 2,Fs
. (6.23)
Ue2,Fψ

e2,Fs y = 0 and U
Moreover, it is also noticed that U e2,Fψ y = 0, where y = [z̈ s , z̈ ψ , D1 , D2 ]0 , corre-
spond to (6.3) and (6.4) respectively with Fs and Fψ absent and u 1 = u 2 = 0 (without active control).
Therefore, (6.23) also provides a physical sense of the decoupling into “bounce” and “rotation” mo-
tions.

6.4.4 Design Example

As a numerical example, we use the bounce/pitch half-car model in Example 6.1 for refined design.
The controller structure which keeps the road responses the same as in the passive case was given in
(6.7). In Example 6.1, a sixth order controller was given by (6.10).
As pointed out in Theorem 4.4, we can make further improvements in some transmission paths
once we have a stabilising controller. For instance, let us say that we are satisfied with the Fs responses
in Example 6.1, but would like to make the suspension stiffer to Fψ . To fulfil this design goal, we first
SU
find the Q-parameter of the closed-loop controller as Q e2 = −K 1 (I − P22 K 1 )−1 , where U e2 is given
by (6.7) and K 1 is given by (6.10). Now we find the parametrisation of all stabilising controllers which
leaves the responses from w1 = [zr1 , zr2 , Fs ]0 to z 1 = [z s , z ψ , z u 1 , z u 2 ]0 the same as this closed-loop
controller as:
SU
Q=Q e2 + Q 1 U
e2,Fψ , (6.24)

where Q 1 ∈ RH2×1 e
∞ and U2,Fψ is given by (6.22). For this second stage design, we apply again H∞
loop shaping using a weighting function:
0.2(s + 40)
W1 = ,
s + 20
e2,Fψ P22 . A second stage controller after model reduction is found as:
for the transformed plant U
" #
(s + 38.96)(s + 69.35 ± 74.05 j ) 0.0356
K2 = .
(s + 23.31)(s + 70.71 ± 76.02 j ) −0.0418

S1 U
The Q-parameter for this second stage controller is Q e2,Fψ = −K 2 (I − P22 K 2 )−1 . The closed-loop
step responses of the system with the first and final controllers are shown in Fig. 6.4.
6.5 Summary and Comments 69

−5
x 10
Fs → z s −6
x 10
Fψ → z ψ
1.4 9

8
1.2
7
1
6
0.8 5

0.6 4

3
0.4
2
0.2
1

0 0
0 0.5 1 1.5 2 0 0.5 1 1.5 2
sec sec

(a) Fs → z s (b) Fψ → z ψ

SU
Figure 6.4: Closed-loop step responses using controllers parametrised by Q e2 (dashed), and Q =
SU
Q e2 + Q e2,Fψ (dotted), compared with the passive responses (solid).
S1 U

From (6.23) the parametrisation of (6.24) can be simplified as follows:


  †
S −1 U
Q = QW e2† + Q 1U S −1 + 02×1 Q 1 )U
e2,Fψ = ( QW e2 , (6.25)

S ∈ RH2×2
where Q ∞ , Q 1 ∈ RH∞ . Therefore, the closed-loop performance with a controller
2×1
 
S†U
parametrised by (6.25) can also be achieved by Q = Q S† = ( QW
e† where Q S −1 + 02×1 Q 1 ).
2

6.5 Summary and Comments

This chapter has considered the half-car active suspension design problem. By applying the distur-
bance response decoupling techniques, the load responses can be improved while the road disturbance
responses remained satisfactory. A parametric control structure was derived for a typical measurement
set: vertical and angular accelerations of the sprung mass and strut deflection measurements. It was
verified that the original load responses can be approximately achieved after the disturbance response
decoupling design. The conditions under which the model structure can be decomposed into two
quarter-cars were investigated. A refined design which allows further improvement of the closed-loop
responses was also discussed. As illustrated in this chapter, this refined procedure does not imply any
further limitation on the achievable performance.
Chapter 7

Disturbance Response Decoupling for


The Full-Car Model

This chapter employs the disturbance response decoupling techniques for the full-car model. Sec-
tion 7.1 introduces a simple symmetric full-car model with a similar suspension strut arrangement
at each wheel-station to the quarter- and half-car cases in Chap. 5, 6. Section 7.2 shows how the
model may be separated into two half-car models under a mild symmetry assumption. Section 7.3
demonstrates a design for the full-car model with acceleration and strut deflection measurements. The
bounce/pitch half-car is treated in a similar way to Chap. 6. The roll and warp modes are each treated
as quarter-cars with the warp mode being handled in a special way. We will highlight the special form
of the warp quarter-car, which has no “sprung mass dynamics”. The controller design is simulated
with a nonlinear vehicle model using the multi-body simulation package AutoSim.

7.1 The Dynamic Equations

In this section we consider a simple symmetric full-car model as in Fig. 7.1, where the actuators
A1 ,…, A4 are again modelled so that the relative displacement of each is equal to a low-pass filtered
version of the actuator’s command signals, i.e.

ẑ s − l f ẑ θ + t f ẑ φ − ẑ a1 = γ (s)û 1 ,
ẑ s − l f ẑ θ − t f ẑ φ − ẑ a2 = γ (s)û 2 ,
ẑ s + lr ẑ θ + tr ẑ φ − ẑ a3 = γ (s)û 3 ,
ẑ s + lr ẑ θ − tr ẑ φ − ẑ a4 = γ (s)û 4 ,

71
72 Disturbance Response Decoupling for The Full-Car Model

tr tr

z a3 z a4
A3 A4
cr cr
kr lr kr
zu3 z s , Fs zu4
mr mr
z θ , Tθ

ktr ktr z r4
z r3 m s , Iφ , Iθ

z φ , Tφ lf

tf tf

z a1 z a2
A1 cf A2
cf
kf kf
zu1 zu2
mf mf

kt f z r1 kt f z r2

Figure 7.1: The full-car model.

in which γ (s) is defined as in (5.2). The linearised dynamics of the full-car can be expressed as:

m s z̈ s = Fs − u p1 − u p2 − u p3 − u p4 , (7.1)
Iθ z̈ θ = Tθ + u p1 l f + u p2 l f − u p3 lr − u p4 lr , (7.2)
Iφ z̈ φ = Tφ − u p1 t f + u p2 t f − u p3 tr + u p4 tr , (7.3)
m f z̈ u 1 = u p1 + Fr1 , (7.4)
m f z̈ u 2 = u p2 + Fr2 , (7.5)
m r z̈ u 3 = u p3 + Fr3 , (7.6)
m r z̈ u 4 = u p4 + Fr4 , (7.7)

where the passive suspension forces u p1 ,…,u p4 and the tyre forces Fr1 ,…,Fr4 are given by:

u pi = c f Ḋi + k f (z ai − z u i ),
u pj = cr Ḋ j + kr (z a j − z u j ),
Fri = kt f (zri − z u i ), (7.8)
Fr j = ktr (zr j − z u j ), (7.9)
7.2 Symmetric Transformation 73

for i = 1, 2, j = 3, 4 and the strut deflections D1 ,…,D4 are

D1 = z s − l f z θ + t f z φ − z u 1 ,
D2 = z s − l f z θ − t f z φ − z u 2 ,
D3 = z s + lr z θ + tr z φ − z u 3 ,
D4 = z s + lr z θ − tr z φ − z u 4 .

7.2 Symmetric Transformation

Since the full-car model is symmetric, we can decouple it into two half-car models. First, we introduce
a transformation matrix L f,1 :
 
1 1 0 0
 
1 0 0 1 1


L f,1 =  , (7.10)
2  1 −1 0 0 
 
0 0 1 −1

such that
h i0 h i0
(x)b f (x)br (x)ρ f (x)ρr = L f,1 x1 x2 x3 x4 , (7.11)

where x may represent any of the following variables: z u , zr , z a , strut deflection D or actuator command
signal u, while the subscripts b f , br represent the front and rear bounce components, and ρ f , ρr represent
the front and rear roll components.

7.2.1 Bounce/Pitch Half-Car

After applying the L f,1 transformation, (7.1), (7.2), and (7.4–7.7) can be rearranged as follows:

m s z̈ s = Fs − 2c f (z˙s − l f z˙θ − (ż u )b f ) − 2k f ((z a )b f − (z u )b f )


−2cr (ż s + lr ż θ − (ż u )br ) − 2kr ((z a )br − (z u )br ),
Iθ z̈ θ = Tθ + {2c f (ż s − l f ż θ − (ż u )b f ) + 2k f ((z a )b f − (z u )b f )}l f
−{2cr (ż s + lr ż θ − (ż u )br ) + 2kr ((z a )br − (z u )br )}lr ,
2m f (z̈ u )b f = 2c f (ż s − l f ż θ − (ż u )b f ) + 2k f ((z a )b f − (z u )b f ) + 2kt f ((zr )b f − (z u )b f ),
2m r (z̈ u )br = 2cr (ż s + lr ż θ − (ż u )br ) + 2kr ((z a )br − (z u )br ) + 2ktr ((zr )br − (z u )br ).

It can be observed that the above equations take the same form as (6.3–6.6) under the transforma-
tions listed in the first column of Table 7.1. To decouple into two quarter-cars requires a simplicity
assumption:
kf cf kt f mf lr
= = = = . (7.12)
kr cr ktr mr lf
74 Disturbance Response Decoupling for The Full-Car Model

7.2.2 Roll/Warp Half-Car

After applying the L f,1 transformation, (7.3–7.7) can be rearranged as follows:

Iφ z̈ φ = Tφ − {2c f (t f ż φ − (ż u )ρ f ) + 2k f ((z a )ρ f − (z u )ρ f )}t f


−{2cr (tr ż φ − (ż u )ρr ) + 2kr ((z a )ρr − (z u )ρr )}tr ,
2m f (z̈ u )ρ f = 2c f (t f ż φ − (ż u )ρ f ) + 2k f ((z a )ρ f − (z u )ρ f ) + 2kt f ((zr )ρ f − (z u )ρ f ),
2m r (z̈ u )ρr = 2cr (tr ż φ − (ż u )ρr ) + 2kr ((z a )ρr − (z u )ρr ) + 2ktr ((zr )ρr − (z u )ρr ).

We observe that one equation is missing in this half-car compared to (6.3–6.6). This is because
the chassis is modelled as being infinitely stiff under torsion, so that there is no dynamic equation
corresponding to warp dynamics of the car body. However the above three equations do take a similar
form to (6.4–6.6) under the transformations listed in the second column of Table 7.1.

Half-car Full-car Full-car


(bounce/pitch) (roll/warp)
ms ms —
Iψ Iθ Iφ
m1 2m f 2m f
m2 2m r 2m r
k1 2k f 2k f
k2 2kr 2kr
c1 2c f 2c f
c2 2cr 2cr
k t1 2kt f 2kt f
k t2 2ktr 2ktr
l1 lf tf
l2 lr tr
Fs Fs —
Fψ −Tθ Tφ
zs zs —
zψ −z θ zφ
zu1 , zu2 (z u )b f , (z u )br (z u )ρ f , −(z u )ρr
z r1 , z r2 (zr )b f , (zr )br (zr )ρ f , −(zr )ρr
z a1 , z a2 (z a )b f , (z a )br (z a )ρ f , −(z a )ρr
u1 , u2 (u)b f , (u)br (u)ρ f , −(u)ρr

Table 7.1: Decoupled (symmetric) full-car.


7.3 A Design Example for the Full-Car Model 75

As in the half-car case, under the assumption of simplicity:

kf cf kt f mf tr
= = = = , (7.13)
kr cr ktr mr tf

and the L f,2 transformation:


" #
1 tr −t f
L f,2 = , (7.14)
t f + tr 1 1

such that " # " #


(x)war p (x)ρ f
= L f,2 , (7.15)
(x)roll (x)ρr

where x can be z u , zr or z a , strut deflection D or actuator command signal u, the roll/warp half-car
can be further decoupled into roll and warp quarter-cars under the mapping illustrated in Table 7.2.

Quarter-car Full-car (Warp) Full-car (Roll)


ms — Iφ
mu 2(m f + m r ) 2(m f t 2f + m r tr2 )
ks 2(k f + kr ) 2(k f t 2f + kr tr2 )
cs 2(c f + cr ) 2(c f t 2f + cr tr2 )
kt 2(kt f + ktr ) 2(kt f t 2f + ktr tr2 )
Fs — Tφ
zs — zφ
zu , za (z u )war p , (z a )war p (z u )roll , (z a )roll
zr , u (zr )war p , (u)war p (zr )roll , (u)roll

Table 7.2: Decoupled roll and warp modes of the full-car by simplicity.

7.3 A Design Example for the Full-Car Model

In this section, we shall synthesise an active controller for a specific full-car model. As in Section 7.2
the model is chosen to be left-right symmetric which allows a decoupling into the bounce/pitch and
roll/warp half-cars. Our design approach for the bounce/pitch half-car will make use of the theory
outlined in Section 6.1. The approach for the roll/warp half-car will make use of a further simplicity
assumption which allows it to be decoupled into the two corresponding quarter-cars, namely the
roll and warp quarter-cars. The roll quarter-car will be treated in the same way as the quarter-car
of Section 5.1. As pointed out in Section 7.2.2 the warp quarter-car is different from the standard
quarter-car in that the “sprung mass” is effectively infinite. Furthermore, in warp motion there is good
reason to use the active controller to make the road disturbance responses even softer than they would
76 Disturbance Response Decoupling for The Full-Car Model

wbp z bp
Pbp ybp
u bp
e2,bp
U
K bp
w wroll zroll z
Proll yroll
(u)roll e2,roll
U
K roll
wwar p z war p
Pwar p
(u)war p ywar p
K war p

Figure 7.2: Control scheme for the full-car model.

be with the default passive parameter settings. Thus the warp mode will be handled in a different way
to the other three modes.

For the controller design the available measurements are assumed to be z̈ s , z̈ θ , z̈ φ , D1 , D2 , D3


and D4 . The control structure will be chosen to have three independent loops, consisting of the
roll quarter-car, the warp quarter-car and bounce/pitch half-car controllers. This scheme is shown in
Fig. 7.2, where the signals are defined as follows:

h i0
w = Fs , Tθ , Tφ , zr1 , zr2 , zr3 , zr4 , (7.16)
h i0
wbp = Fs , Tθ , (zr )b f , (zr )br ,
h i0
wroll = Tφ , (zr )roll ,
h i
wwar p = (zr )war p ,
h i0
z = zs , zθ , zφ , zu1 , zu2 , zu3 , zu4 , (7.17)
h i0
z bp = z s , z θ , (z u )b f , (z u )br ,
h i0
zroll = z φ , (z u )roll ,
h i
z war p = (z u )war p ,
7.3 A Design Example for the Full-Car Model 77

h i0
ybp = z̈ s , z̈ θ , (D)b f , (D)br ,
h i0
yroll = z̈ φ , (D)roll ,
h i
ywar p = (D)war p ,
h i0
u bp = (u)b f , (u)br ,

and the subscripts b f , br , roll and war p are defined as in (7.11) and (7.15).
The following parameters will be used for the full-car model: m s = 1600 kg, Iθ = 1000 kg m2 , Iφ =
450 kg m2 , t f = tr = 0.75 m, l f = 1.15 m, lr = 1.35 m, k f = kr = 20 kN/m, c f = cr =
5 kNs/m, m f = m r = 50 kg, kt f = ktr = 250 kN/m. As in the previous examples, the actuator
dynamics is represented as in (5.2) with ωn = 100 rad/sec and δ = 0.707.

7.3.1 Bounce/Pitch Control

Referring to Table 7.1, the bounce/pitch half-car corresponds to the half-car of Section 6.1 with the
following coefficients: m s = 1600 kg, Iψ = 1000 kg m2 , m 1 = m 2 = 100 kg, k1 = k2 = 40 kN/m,
c1 = c2 = 10 kNs/m, kt1 = kt2 = 500 kN/m, l1 = 1.15 m, l2 = 1.35 m, which is not simple and
cannot be decoupled into two quarter-cars. The H∞ loop shaping controller design for this half-car
model has been carried out in Example 6.1. We will use the results directly. The essential controller
e2,bp is given by (6.7) and Table 7.1 as:
structure U
 
m s lr Iθ
1 0
e2,bp = 
U 2(c f s+k f )(lr +l f ) 2(c f s+k f )(lr +l f ) . (7.18)
ms l f −Iθ
2(cr s+kr )(lr +l f ) 2(cr s+kr )(lr +l f )
0 1

And the H∞ controller was derived in Example 6.1 as:


" #
Kc 0
K bp = , (7.19)
0 Kc

where K c was given in (6.11).

7.3.2 Roll Control

Referring to Table 7.2, the roll mode of the full-car corresponds to a quarter-car with the following
coefficients: m s = 450 kg, m u = 112.5 kg, ks = 45 kN/m, cs = 11.25 kNs/m, kt = 562.5 kN/m. The
e2 takes the following form after using Table 7.2, (5.10) and (7.13):
required structure of U
h i
e2,roll
U =

1 . (7.20)
2(c f s+k f )t f (tr +t f )

Given the weighting function:


10(s + 80)
Wroll = , (7.21)
s+8
78 Disturbance Response Decoupling for The Full-Car Model

e2,roll P22 has a bandwidth of about 60 rad/sec, it is found that the


such that the weighted plant Wroll U
H∞ loop shaping controller after model reduction is given by:

K roll = Kc , (7.22)

where K c is given by (6.11). (This controller is the same as the diagonal terms in K bp since the
e2,roll P22 is the same as the diagonal elements in the scalar matrix Wbp U
weighted plant Wroll U e2,bp P22 ,
see (6.8) and Table 5.1.) This controller gives the steady state gain of TT̂φ →ẑφ as 2.33×10−6 , compared
to the passive suspension with d.c. gain TT̂φ →ẑφ (0) = 2.4 × 10−5 , a similar result to Fig. 5.4.

7.3.3 Warp Control

For the warp quarter-car, we will take a slightly different approach for the design of the active controller.
Since the sprung mass cannot be twisted, i.e. it has no warp motion, there is no corresponding role for
the active controller to make the “sprung mass” stiffer to the loads. On the other hand, even though
the passive road disturbance responses were designed to be relatively soft, there is no reason why
they should not be even softer in the warp mode. We will therefore abandon the goal of keeping the
response to the road warp input (zr )war p invariant under active control. We also note that there is
no acceleration measurement associated with warp and so there is only one feedback signal available
e2 block for
corresponding to the strut deflections: (D)war p = −(z u )war p . For this reason there is no U
the warp quarter-car loop in Fig. 7.2.
Referring to Table 7.2, the warp quarter-car reduces to the form illustrated in Fig. 7.3, with z s = 0
and the coefficients m u = 200 kg, ks = 80 kN/m, cs = 20 kNs/m and kt = 1000 kN/m. The dynamic
equation then takes the form, using (5.4–5.6):

m u s 2 ẑ u = −(cs s + ks )ẑ u + ks ẑ a + kt (ẑr − ẑ u ),

which reduces to, using (5.1–5.2):

(m u s 2 + cs s + ks + kt − ks γ (s)K war p (s))ẑ u = kt ẑr . (7.23)

with the correspondences given in Table 7.2.


We now claim that it is desirable to choose K war p (s) so that the d.c. gain Tẑr →ẑu (0) = 1. We
will now give some reasoning to justify this. If we consider the case where the full-car model is in
equilibrium with Fs = Tθ = Tφ = 0, then the equations (7.1–7.3) are equivalent to:
 
  u p1
1 1 1 1  
  u p2


 lf −lr   = 0.
 lf −lr  up 
(7.24)
−t f tf −tr tr  3 
u p4
7.3 A Design Example for the Full-Car Model 79

(z s = 0)

A za
cs
ks
zu
mu

kt zr

Figure 7.3: The warp quarter-car.

Evidently there is one degree of freedom available in the suspension forces, and indeed we can check
that:
h i0 h i0
u p1 , u p2 , u p3 , u p4 = tr , −tr , −t f , t f κ (7.25)

for some constant κ, completely characterises that freedom. From the point of view of reducing the
amount of "twist" on the vehicle chassis which the suspension forces impose, it would be desirable
to achieve a value of κ = 0 in the steady state. The following result shows that the above mentioned
condition achieves this property.

Proposition 7.1 Suppose the (linearised) full-car model defined in Section 7.1 is in equilibrium with
Fs = Tθ = Tφ = 0 and zr1 , . . . , zr4 arbitrary. Then the following equation

(zr )war p = (z u )war p , (7.26)

holds if and only if u p1 = u p2 = u p3 = u p4 = 0.

(proof) Using (7.11) and (7.15), we notice that the warp variable (x)war p is a combination of variables
at the four wheel-stations:
 
x1
 
h i x 
1  2 
(x)war p = t , −tr , −t f , t f  ,
2(tr + t f ) r  x3 
 
x4

where x can be z u or zr . Using (7.8) and (7.9) we see that (7.26) is equivalent to [tr /kt f , −tr /kt f ,
−t f /ktr , t f /ktr ]· [Fr1 , Fr2 , Fr3 , Fr4 ]0 = 0, which is equivalent to [tr /kt f , −tr /kt f , −t f /ktr , t f /ktr ]·
[u p1 , u p2 , u p3 , u p4 ]0 = 0 by (7.4–7.7), which in turn is equivalent to κ = 0 by (7.25). ♥
It can be observed that the proposition holds if equation (7.26) is replaced by any equation of the
form:
h i h i0
λ, −λ, −µ, µ · z r1 − z u 1 , z r2 − z u 2 , z r3 − z u 3 , z r4 − z u 4 =0
80 Disturbance Response Decoupling for The Full-Car Model

with λµ > 0, i.e. the particular ratios chosen in the definition of the warp variable are not critical to
the result.
Now let us return to the warp quarter-car represented in (7.23). If we choose a simple constant
controller and ignore temporarily the actuator dynamics, i.e. set γ (s) = 1, then the choice of K war p =
7.25 achieves a damping ratio of 1, a natural frequency equal to 50 rad/sec (which is lower than the
bandwidth of the actuator) and a steady-state gain of 2. As shown by Proposition 7.1 we would like
to achieve the condition (7.26) in the steady-state, which is equivalent to the d.c. gain Tẑr →ẑu (0) = 1.
Setting K war p (s) = −0.1036s + 1 achieves in (7.23) a damping ratio of 1, a natural frequency equal
to 70.71 rad/sec (which is lower than the bandwidth of the actuator) and a steady-state gain of 1. In
order that the controller is proper, we can choose:

−0.1036s + 1
K war p = . (7.27)
(300)−1 s + 1

The response does not change significantly with this modification or when the actuator dynamics are
included. The step response with the final controller, with improved warp behaviour compared to the
passive case, is shown in Fig. 7.5.

7.3.4 The Full-Car Control

w z
P

u y

f5 f4 K f3 f2 f1

Figure 7.4: Final controller structure for the full-car model.

As a final step we can redraw Fig. 7.2 in the form of Fig. 7.4 where P is the full-car model
represented by (7.1–7.7). In Fig. 7.4 the measurements y and control signals u are defined as follows:

h i0
y = z̈ s , z̈ θ , z̈ φ , D1 , D2 , D3 , D4 ,
h i0
u = u1, u2, u3, u4 ,

where Di and u i represent the strut deflection and control command signal at each wheel station. The
7.3 A Design Example for the Full-Car Model 81

blocks f 1 , . . . , f 5 are defined as follows:

f 1 = diag(1, 1, 1, L f,1 ),
f 2 = diag(1, −1, 1, 1, 1, L f,2 ),
 
m s lr Iθ
2(c f s+k f )(lr +l f ) 2(c f s+k f )(lr +l f )
0 1 0 0 0
 
 ms l f −Iθ
0 1 0 0 
 2(cr s+kr )(lr +l f ) 2(cr s+kr )(lr +l f )
0 
f3 =  ,
 0 0 0 0 0 1 0 
 

0 0 2(c f s+k f )t f (tr +t f )
0 0 0 1
f 4 = diag(1, 1, L −1
f,2 ),

f 5 = L −1
f,1 ,

where L f,1 is defined in (7.10), L f,2 is defined in (7.14) and f 3 combines U e2,bp defined in (7.18) and
e2,roll defined in (7.20). Note that the third row in f3 reflects the fact that there is only one measurement
U
available for warp control. The controller K is defined as:

K = diag(K bp , K war p , K roll )

where K bp , K war p and K roll are given by (7.19), (7.27) and (7.22) respectively. Compared with the
passive suspension, the benefits of using active controllers is shown in Fig. 7.5. The responses to
“bounce”, “pitch” and “roll” road inputs are not shown since these are the same in the passive and
active cases.

−5
Fs → zs −5
Tθ → zθ
x 10 x 10
1.5 1

0.75
1
0.5
0.5
0.25

0 0
0 0.5 1 1.5 2 0 0.5 1 1.5 2
−5 Tφ → zφ (zr)warp → (zu)warp
x 10
2.5
1
2
0.75
1.5
0.5
1

0.5 0.25

0 0
0 0.5 1 1.5 2 0 0.5 1 1.5 2

Figure 7.5: Step responses of TF̂s →ẑs , TT̂θ →ẑθ , TT̂φ →ẑφ and T(ẑr )war p →(ẑu )war p using active (dashed) and
passive (solid) suspensions.
82 Disturbance Response Decoupling for The Full-Car Model

7.3.5 Vehicle Dynamics Simulations

In this section we present some simulation results for the controller designed in Section 7.3.4 using the
multi-body simulation package AutoSim. A nonlinear dynamical model of the simple full-car shown in
Fig. 7.1 was constructed with the suspension struts constrained to move perpendicularly to the vehicle
body. To model a rolling wheel of inertia 1 kg m2 with tyre the magic formula [2] was employed to
calculate the accelerating and braking forces. The tyres are assumed to provide vertical spring forces
with spring constants kt1 = kt2 = kt3 = kt4 = 250 kN/m. The control law given in Section 7.3.4 was
implemented together with the actuator structure described in Section 7.1.
The model was first tested at zero velocity for various road disturbance inputs and gave similar
results, for small displacements, to a matlab simulation of the linearised model. As expected, the
bounce, pitch and roll responses were the same in the active and passive cases. Fig. 7.6 shows the
effect of applying a step input to the AutoSim model at the right front wheel in both the passive and
active cases. The difference in behaviour is due to the “warp” mode being treated differently in the
active case, as explained in Section 7.3.3.
1.4

1.2

0.8
cm

0.6

0.4

0.2

0
0 0.1 0.2 0.3 0.4 0.5
sec

Figure 7.6: Response of z u 1 to a step input of 1 cm at zr1 for AutoSim model using active (dashed) and
passive (solid) suspensions.

The AutoSim model was then tested under acceleration and braking. For acceleration, a torque was
applied at each front wheel with the opposing reaction torques acting on the vehicle body. A similar
approach was taken for braking but with the braking torques applied to the front and rear wheels in a
60:40 ratio. Fig. 7.7 shows the “squat” and “dive” of the model under acceleration and deceleration,
with the forward velocity given in Fig. 7.7(a) and the pitch angle z θ given in Fig. 7.7(c). The simulation
shows that the active suspension significantly improves the squat and dive performance. The AutoSim
model, the active control and the tyre model are given in Appendix E.

7.4 Summary and Comments

This chapter has considered the application of disturbance response decoupling to the full-car active
suspension design problem. For the full-car model, decomposition into two half-cars was exploited
7.4 Summary and Comments 83

20 1000

15
500

10
m/sec

Nm
0
5

−500
0

−5 −1000
0 5 10 15 0 5 10 15

sec sec

(a) forward velocity (b) Applied torques on front


wheels

0.08 0.05

0.06 0.04

0.04
0.03
0.02
0.02
rad

m
0
0.01
−0.02
0
−0.04

−0.06 −0.01

−0.08 −0.02
0 5 10 15 0 5 10 15

sec sec

(c) z θ (d) z s

Figure 7.7: Anti-dive and anti-squat effect in AutoSim model using active suspension (dashed), com-
pared with passive suspension (solid).

under a mild symmetry assumption. This enabled the bounce/pitch half-car design to be carried out
with the half-car structure previously derived. For the roll/warp half-car a further decomposition into
two quarter-cars was assumed. This allowed the warp quarter-car to be treated in a distinct way, which
is necessary since the load disturbance path is absent here and it is also reasonable to change (i.e. soften)
the road disturbance response from the passive case. A controller was designed and demonstrated on
a nonlinear vehicle dynamics model and showed the effectiveness of the design for reduced squat and
dive under acceleration and braking, improved warp response and invariance of other road disturbance
responses.
Chapter 8

Numerical Calculation of the Controller


Structure

A key step in the disturbance response decoupling designs described in Chap. 4 is the computation of
e2 which determines the required controller structure. Throughout the application of vehicle
the matrix U
e2 symbolically using
active suspension design in Chap. 5–7, it has always been possible to calculate U
Maple. However, for more complicated vehicle models this may not be feasible. In such a case a direct
numerical approach may be possible. In this chapter, we shall demonstrate the numerical calculation of
e2 . Section 8.1 considers the linearised half-car double-wishbone model, and
the controller structure U
e2 . Section 8.2 considers
presents the procedure of numerically calculating the controller structure U
the linearised full-car double-wishbone model. Like the treatment for the linear full-car model, the
full-car model is decomposed into two half-car models and the roll/warp half-car is further decoupled
to two quarter-car models. Moreover, the road warp responses can be softened by the active controller.

8.1 The Half-Car Double-Wishbone Model

In this section, we shall apply Theorem 4.2, 4.4 to a half-car double-wishbone model, as shown in
Fig. 8.1. The left (right) suspension strut consists of a passive damper of constant c1 (c2 ) in parallel
with a series combination of an actuator A and a spring of constant k1 (k2 ) (this is a “Sharp” actuator
as introduced in Section 5.1). The actuators are modelled in such a way that the relative displacement
across each is equal to a low-pass filtered version of the actuator’s command signal, as in (6.1–6.2).
The tyre forces are modelled as always normal to the ground. This model was built and linearised by
AutoSim. We will analyse the linearised model and find the controller structure which improves the
load responses and keeps the road responses the same as in the passive case.
The main purpose of this section is to show the numerical calculation of the desired controller
structure. This will enable us to apply the disturbance response decoupling theorems to some systems
where the exact symbolic equations are unavailable or difficult to derive. For example, this half-car

85
86 Numerical Calculation of the Controller Structure

Fs
R1 R2

B1 Iψ , m s B2
I1 zs I2
m1 C1 z ψ , Fψ C2 m 2
zu1 P1 P2 zu2
S1 Q S2
A1 A2
T1 D1 D2 T2
y
z r1 k t1 :pin joint k t2 z r2
:suspension strut x

Figure 8.1: The half-car double-wishbone model.

double-wishbone model can be linearised about an “operating point” so that we can carry out the
design procedure.
We now write the system in the form of Fig. 4.1 with z 1 = [z s , z ψ , z u 1 , z u 2 ]0 , w1 = [zr1 , zr2 ]0 ,
w2 = [Fs , Fψ ], y = [z̈ s , z̈ ψ , D1 , D2 ]0 where D1 and D2 are the strut deflections and z 2 omitted. The
transfer function T in (4.8) is partitioned conformably with z 1 and (w1 , w2 ), and the sub-blocks are
labelled as (1, 1), (1, 2). The following parameters will be used for the model: m s = 625 kg, Iψ =
170 kg m2 , m 1 = m 2 = 50 kg, I1 = I2 = 0.1 kg m2 , c1 = c2 = 1 kNs/m, k1 = k2 = 4 kN/m, kt1 =
kt2 = 250 kN/m. Those parameters are chosen to give satisfactory (i.e. soft) road responses, so that we
can apply the disturbance response decoupling design for the load responses. The actuator dynamics
are modelled as in (5.2) with ωn = 100 rad/sec and δ = 0.707. The geometric layout of the model
is expressed as the following coordinates: Q = (0, 0), A1 = (0.25, −1), B1 = (−0.05, −0.94),
C1 = (0.15, −1.4), D1 = (0.25, −1.4), R1 = (−0.25, −1.04), S1 = (0.2, −1.4), P1 = (0.2, −1.5),
T1 = (0.35, −1.5), A2 = (0.25, 1), B2 = (−0.05, 0.94), C2 = (0.15, 1.4), D2 = (0.25, 1.4),
R2 = (−0.25, 1.04), S2 = (0.2, 1.4), P2 = (0.2, 1.5), P2 = (0.35, 1.5) in the unit of meters. The
AutoSim code for the linearised model is given in Appendix F.1.
The following procedure is a guideline to carry out the numerical calculation of the controller
structure for disturbance response decoupling:

(1) find a suitable U1 from the lnf of T3,1 = U1 F;

(2) partition U1 = [M 0 , N 0 ]0 where M is square;

(3) find a minimal realisation of L := N M −1 ;

e−1 N
(4) find a left coprime factorisation L = M e and set U
e2 = [− N
e, M]
e (e.g. see [45, Theorem 12.19]).
8.1 The Half-Car Double-Wishbone Model 87

e2 without
We note that steps (2)–(4) of the above procedure provide a method of finding a matrix U
the need to complete U1 to a unimodular matrix followed by inversion. We also observe that, in the
case that F is square, we may in principle set F = I (so that U1 = T3,1 is not necessarily part of a
unimodular matrix) and then directly calculate L as in (3). However, if it is desired to carry out the
calculation numerically in state space then it is desirable that M(∞) is non-singular. Accordingly, we
can simply seek an F so that this property holds without needing to ensure that T3,1 = U2 F is formally
a lnf. Finally we note the connection with Theorem 4.3 that Ue2 constructed in (4) is a left annihilator
of T3,1 and is a part of a unimodular matrix.
From Theorem 4.2, for a stabilising controller which keeps the road disturbances the same as the
e2 ,
passive suspension and improves the load disturbances responses, we find the controller structure U
after model reduction, as:
" #
2.54×10−1 4.56×10−2 8.7×10−3
−1
e2 =
U s+3.58 s+3.65 s+3.58
. (8.1)
2.54×10−1 −4.56×10−2 8.7×10−3
s+3.58 s+3.65 s+3.58
−1

Using H∞ loop shaping method with the following weighting function:


" #
8(s + 80) 1 0
W1 = ,
s+2 0 1

we have a H∞ loop shaping controller K 1 , which gives the desirable responses, as shown in Fig. 8.2,
which reduce TF̂s →ẑs (0) from 9.70×10−5 to 1.8×10−6 and TF̂ψ →ẑψ (0) from 4.31×10−5 to 8.31×10−7 .

1.2
−4
x 10 Fs → z s 4.5
−5
x 10 Fψ → z ψ
4
1
3.5

0.8 3

2.5
0.6
2

0.4 1.5

1
0.2
0.5

0 0
0 1 2 3 4 5 0 1 2 3 4 5
sec sec

Figure 8.2: Step responses for linearised model of TF̂s →ẑs and TF̂ψ →ẑψ : passive (solid) and active
control (dashed).

As pointed out in Theorem 4.4, it is always possible to make further improvement for the closed-
loop transfer responses. For instance, we can improve the responses to Fs or Fψ of Fig. 8.2 without
e2,Fs and U
changing the other. To perform it, firstly we need to derive the controller structures U e2,Fψ ,
which keep the responses to [zr1 , zr2 , Fψ ] and [zr1 , zr2 , Fs ] fixed respectively, as follows (after model
88 Numerical Calculation of the Controller Structure

reduction):
h i
e2,Fs
U = 3.59×10−1
, 0, −0.7071, −0.7071 . (8.2)
s+3.58
h i
e2,Fψ
U = 0, −6.45×10−2
, 0.7071, −0.7071 , (8.3)
s+3.65

Now we apply H∞ loop shaping method for the designs. Suppose we want to improve the response
of T e2,Fs P22 ,
in Fig. 8.2 further, we choose a weighting function W1,Fs for the shaped plant U
F̂s →ẑ s
and find a suitable controller K 1,Fs . Or if we want to improve the response of TF̂ψ →ẑψ , we choose
a weighting function W1,Fψ for the shaped plant U e2,Fψ P22 , and find a suitable controller K 1,Fψ . The
following weighting functions:
8.3 × 10−2 (s + 40) 9.9 × 10−2 (s + 40)
W1,Fs = , W1,Fψ = ,
s + 20 s + 20
are used for this model. Now we derive the following parameters from the controllers:
S = −(I − K 1 P22 )−1 K 1 ,
Q
SFs
Q = −(I − K 1,Fs P22 )−1 K 1,Fs ,
SFψ
Q = −(I − K 1,Fψ P22 )−1 K 1,ψ .

Fig. 8.3 shows the closed-loop step responses with controller K = (I − Q P22 )−1 Q in the following
S the first stage design and (3) Q = Q
three cases: (1) Q = 0, i.e. passive system, (2) Q = Q, S+ QSFs +
SFψ , the refined design. The final controller reduces the d.c. gains of T
Q F̂s →ẑ s and TF̂ψ →ẑ ψ further down
to 6.12 × 10−7 and 9.88 × 10−8 respectively.
−4
x 10
Fs → z s −5
x 10
Fψ → z ψ
1.2 4.5

4
1
3.5

0.8 3

2.5
0.6
2

0.4 1.5

1
0.2
0.5

0 0
0 1 2 3 4 5 0 1 2 3 4 5
sec sec

Figure 8.3: Step responses for the linearised model of TF̂s →ẑs and TF̂ψ →ẑψ with controller K =
(I − Q P22 )−1 Q with: Q = 0 passive (solid), Q = QS (dashed) and Q = Q S+ Q SFs + QSFψ (dash-
dotted).

It is also interesting to compare the controllers structures Ue2 , U


e2,Fs and U
e2,Fψ in (8.1–8.3). We
notice that Ue2,Fs and Ue2,Fψ are close to sub-matrices of an equivalent structure of U
e2 as follows:
" # " #
Ue2,Fs 0.7071 0.7071
≈ e2 ,
U
e2,Fψ
U −0.7071 0.7071
where the small differences may result from numerical process.
8.2 The Full-Car Double-Wishbone Model 89

8.2 The Full-Car Double-Wishbone Model

In this section, we will demonstrate again the numerical calculation of the controller structure (i.e.
e2 ) using the full-car double-wishbone model. A full-car double-wishbone model is given in Fig. 8.4,
U
where (1), (2), (3), (4) represent each correspondong wheel station, and the front and rear half-car have
the same geometric arrangement as the half-car double-wishbone model given in Section 8.1. The fol-
lowing parameters will be used for the model: m s = 625 kg, Iφ = 170 kg m2 , Iθ = 260 kg m2 , m 1 =
m 2 = 46 kg, m 3 = m 4 = 60 kg, I1 = I2 = I3 = I4 = 0.1 kg m2 , c1 = c2 = c3 = c4 =
500 Ns/m, k1 = k2 = k3 = k4 = 2 kN/m, kt1 = kt2 = kt3 = kt4 = 250 kN/m, l f = lr = 1.5m.
Those parameters are chosen to give satisfactory (i.e. soft) road responses, so that we can apply the
disturbance response decoupling design for the load responses.

the rear half-car

(3) (4)
lr
z s ,Fs
z θ ,Tθ
m s ,Iθ ,Iφ
z φ ,Tφ lf y

z
x
(1) the front half-car (2)

Figure 8.4: The full-car double-wishbone model.

We now write the system in the form of Fig. 4.1 with z 1 = [z s , z θ , z φ , z u 1 , z u 2 , z u 3 , z u 4 ]0 ,


w1 = [zr1 , zr2 , zr3 , zr4 ]0 , w2 = [Fs , Tθ , Tφ ]0 , y = [z̈ s , z̈ θ , z̈ φ , D1 , D2 , D3 , D4 ]0 where D1 , . . . , D4
are the strut deflections and z 2 omitted. Using L f,1 , L f,2 given in (7.10) and (7.14), we define the
“bounce/pitch”, “warp” and “roll” modes of the full-car model as follows:
h i0 h i0
(x)b f , (x)br , (x)ρ f , (x)ρr = L f,1 x1 , x2 , x3 , x4 ,
h i0 h i0
(x)war p , (x)roll = L f,2 (x)ρ f , (x)ρr ,

where x may represent any of the following variables: z u , zr , z a , strut deflection D or actuator
command signal u, while the subscripts bf , br represent the front and rear bounce components, and
ρ f , ρr represent the front and rear roll components. These transformation matrices come from our
experience in dealing with the linear full-car model. For this double-wishbone model, it is difficult to
symbolically decouple the full-car model into the corresponding half-car and quarter-car models, due
90 Numerical Calculation of the Controller Structure

to the complexity of the dynamics. However, we will use these transformation matrices directly as a
starting point to simplify the controller design procedure.
The controller scheme is similar to Fig. 7.2. That is, the desirable controller will be derived from
different modes, and then integrated and applied to the full-car model directly, as the design procedure
in Section 7.3. Firstly, we apply Theorem 4.2 to find a controller which improves the load responses
while keeping the road responses the same as for the passive system. Since the warp model is different
from all the others, at this moment we will leave the road warp responses the same as in the passive
case. That is, we temporarily set the warp controller K war p = 0, such that

(u)war p = K war p (D)war p = 0,

and design the controller for “bounce/pitch” and “roll” modes so that it will not change the road
responses.
A full-car double-wishbone model was built and linearised by AutoSim, as given in Appendix F.2,
which is used for the controller design. Now we apply the H∞ loop shaping design for Pbp and Proll .

Bounce/Pitch Control

For the bounce/pitch half-car, a controller structure which leaves the road responses unchanged is
found as follows (after model reduction):
" #
2.39×10−1 −6.85×10−2 8×10−3
−1
Ue2,bp = d1 (s)
−1
d1 (s) d1 (s)
, (8.4)
6.73×10−2 8×10−3
2.34×10
d2 (s) d2 (s) d2 (s)
−1

where d1 (s) = s + 3.2671, d2 (s) = s + 3.1728. Applying a weighting function Wbp as:
" #
Wc 0
Wbp = ,
0 Wc

in which
8(s + 80)
Wc = , (8.5)
s+2
the controller K bp after model reduction is found as:
" #
−29.70(s+16.47)(s+40.96±50.04 j )
(s+1.92)(s+56.46±92.79 j )
0
K bp = −29.71(s+15.98)(s+40.79±46.39 j )
. (8.6)
0 (s+1.92)(s+54.94±89.42 j )

The controller layout is shown as in Fig. 7.2.

Roll Control

For the roll quarter-car, a controller structure which leaves the road responses unchanged is found as
follows (after model reduction):
h i
e2,roll
U = 4.23×10−2
, −1 . (8.7)
s+3.31
8.2 The Full-Car Double-Wishbone Model 91

Applying a weighting function Wroll = Wc where Wc is given in (8.5), the controller K roll after model
reduction is found as:

−28.46(s + 16.50)(s + 41.88 ± 52.25 j )


K roll = . (8.8)
(s + 1.92)(s + 57.49 ± 94.43 j )

The controller layout is shown as in Fig. 7.2.

The Full-Car Control

Now we integrate the final controller layout as in Fig. 7.4, where f 3 is the overall controller structure:
 
2.39×10−1 −6.85×10−2 8×10−3
0 −1 0 0
 d1 (s) −1 d1 (s) d1 (s) 
 2.34×10 6.73×10−2 8×10−3
−1 0 0 
 d2 (s) d2 (s)
0 d2 (s) 
f3 =  ,
 0 0 0 0 0 1 0 
 
4.23×10−2
0 0 s+3.31
0 0 0 −1

in which d1 (s) = s + 3.2671, d2 (s) = s + 3.1728, and the controller K is defined as:

K = diag(K bp , K war p , K roll ), (8.9)

where K bp and K roll are given in (8.6) and (8.8) respectively. At this moment, with the road warp
response remaining the same as in the passive case, i.e. K war p = 0, we obtain an active controller
which improves the load responses while keeping the road responses unchanged. Compared with a
passive suspension, TF̂s →ẑs (0) was stiffened from 9.70 × 10−5 to 2.09 × 10−6 while TT̂θ →ẑθ (0) was
stiffened from 4.31×10−5 to 9.28×10−7 and TT̂φ →ẑφ (0) was stiffened from 4.31×10−5 to 9.20×10−7 .

8.2.1 Special Treatment for the Warp Mode

As mentioned in Proposition 7.1, there will be a “twist” on the vehicle chassis which the suspension
forces impose if T(ẑr )war p →(ẑu )war p (0) is not equal to 1. Because the sprung mass has no warp motion,
the twisting effect is always present in the passive system. Therefore, a special treatment for the warp
mode is necessary. Unlike the simple full-car model introduced in Section 7.1, it is not so easy to
derive the warp quarter-car symbolically for this double-wishbone model. Therefore, we will assume
that there are some similarities between the simple full-car and the linearised full-car double-wishbone
models, in order to treat the warp mode. Firstly, we notice that the d.c. gain of each wheel station is
as follows:
Tẑri →ẑu i (0) = 0.9974,

where i =1,…,4. Therefore, our goal is to set this gain to be one. Let us begin with the control
scheme of Fig. 7.2, from which we can check that in bounce/pitch and roll modes T(ẑr )b f →(ẑu )b f (0) =
T(ẑr )br →(ẑu )br (0) = T(ẑr )roll →(ẑu )roll (0) = 1. Therefore, the twist comes from the warp quarter-car Pwar p ,
92 Numerical Calculation of the Controller Structure

which can be expressed as:


" # " #
(ẑ u )war p (ẑr )war p
= Pwar p ,
( D̂)war p (û)war p

where Pwar p (0) is found as:


" #
0.9897 −0.0090
Pwar p (0) = .
1.1295 −0.0103

Therefore, the problem can be simplified as:

find a warp controller K war p such that Fu (Pwar p (0), K war p (0)) = 1,

where Fu is an upper LFT [45, Chap. 10]. For this warp quarter-car, we find K war p (0) = −1 gives
the desired result, i.e. the d.c. gain: T(ẑr )war p →(ẑu )war p (0) = 1. Hence we can change K war p in (8.9) to
be −1. As a consequence, the d.c. gain of each wheel station becomes:

Tẑri →ẑu i (0) = 1,

where i =1,…,4. As for further improvements to the transient states of the road warp responses, we
can always use a higher order transfer function for warp control, but the constant term should be the
same: K war p (0) = −1.

8.2.2 Nonlinear Simulation Results

Now we present some simulation results for the full-car double-wishbone model with the active
controller designed in this section. A nonlinear dynamic model of the model shown in Fig. 8.4 was
constructed using AutoSim with the active controller written in a C-code. The nonlinear simulation
results of the load responses are illustrated in Fig. 8.5.
−4
x 10
Fs → z s −5
x 10
Tθ → z θ −5
x 10
Tφ → z φ
1.2 4.5 4.5

4 4
1
3.5 3.5

0.8 3 3

2.5 2.5
0.6
2 2

0.4 1.5 1.5

1 1
0.2
0.5 0.5

0 0 0
0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3
sec sec sec

Figure 8.5: AutoSim nonlinear simulations: step responses of TF̂s →ẑs , TT̂θ →ẑθ and TT̂φ →ẑφ with passive
(solid) and active control (dashed).
8.3 Summary and Comments 93

8.3 Summary and Comments


e2 ),
In this chapter, we developed the procedure to numerically calculate the controller structure (U
which is especially useful when the symbolic solution is not available for complex systems. Then we
applied the procedure to the linearised half-car and full-car double-wishbone models. Furthermore,
the nonlinear simulations were obtained after implementing the active controller to the AutoSim model.
The results were very promising.
It is noticed that all the factorisations we have completed in the numerical models were based on
our experience, and a trial-and-error task because sometimes it had singularity problems in finding a
suitable factorisation. At this stage we still have no particular formula for the normalrank factorisation.
Algorithms for the calculation of the normalrank factorisations would be a very interesting topic for
further work.
Chapter 9

Active Suspension Design for the


Trailing-Arm Model

In Chap. 3, we discussed the half-car trailing-arm model, and showed the necessity of employing active
suspension to satisfy the performance requirements. In this chapter, we shall apply Theorem 4.2 to
design an active controller for this model. The design is similar to that of the simple half-car in Chap. 6.
A soft passive suspension is chosen to give satisfactory road responses. Then the disturbance response
decoupling method is applied to improve load responses while keeping the road responses unchanged.
Section 9.1 employs the method developed in Chap. 8 to numerically calculate the controller structure.
Section 9.2 shows the passivity analysis of this trailing-arm model with active suspensions. Section 9.3
illustrates the nonlinear simulation results using AutoSim.

9.1 Controller Design for Disturbance Response Decoupling

In this section, we shall apply Theorem 4.2 to design an active controller for the half-car trailing-arm
model. This trailing-arm model is like Fig. 3.1 with the suspension struts replaced by “Sharp” actuators
introduced in Section 5.1. We will use the coefficients in Example 3.2, with the perfect anti-squat
geometry (A = (0.15, 0.6126) m and B = (0.15, −1.0008) m), and compare the responses of the
active and passive systems.
As the numerical design examples in Chap. 8, we first set up a trailing-arm model in AutoSim,
and obtain a linearised model for controller design. For disturbance responses decoupling design,
a soft passive suspension with k1 = k2 = 40 kN/m, c1 = c2 = 10 kNs/m was chosen to give
satisfactory responses to road disturbances, and the active controller is designed to stiffen the responses
to load disturbances and braking torques without changing the road responses. We write the system
in the form of Fig. 4.1 with z 1 = [z s , φ3 , z u 1 , z u 2 ]0 w1 = [zr1 , zr2 ]0 , w2 = [Fs , Ts , T1 , T2 ]0 ,
y = [z̈ s , φ̈3 , D1 , D2 ]0 , where D1 and D2 are strut deflections, u = [u 1 , u 2 ]0 equals the actuator
command signal and z 2 omitted. The corresponding dimensions are m 1 = m 3 = 2, m 2 = 4, p1 = 4,

95
96 Active Suspension Design for the Trailing-Arm Model

e2
p2 = 0, p3 = 4. Following the computational procedure in Section 8.1, the controller structure U
after model reduction is found as:
" #
−0.0385(s+3.7307)
0.0788(s+3.8402)
−1 0
e2 = (s+3.9793)(s+3.7744)
U (s+3.9793)(s+3.7744)
. (9.1)
0.0766(s+4.0033)
(s+3.9793)(s+3.7744)
0.0356(s+3.9341)
(s+3.9793)(s+3.7744)
0 −1

Choose a weighting function as follows:


" #
8(s + 80) 1 0
W1 = ,
s+2 0 1

an H∞ loop-shaping controller after model reduction can be obtained as:


" −1.1576(s+4.8769×103)(s+33.6659±17.0618 j ) −5.3166(s−0.5734)(s+40.1281±35.7700 j )
#
(s+2.1332)(s+152.81±109.84 j ) (s+2.1332)(s+152.81±109.84 j )
K1 = −4.9241(s−3.0241)(s−11.3602±76.1179 j ) −22.6155(s+29.3460)(s+86.8755±20.1755 j )
, (9.2)
(s+2.0724)(s+104.77±114.45 j ) (s+2.0724)(s+104.77±114.45 j )

with the controller layout as shown in Fig. 4.2(b).

9.2 Network Analysis of the Active Trailing-Arm Models

In this section, we perform the passivity analysis of the half-car trailing-arm model with the active
suspension control derived in the previous section. Two linearised models, representing acceleration
(or inboard braking) and outboard braking scenarios, are obtained from AutoSim. The active suspension
e2 from (9.1) and (9.2) are then implemented to get the closed-loop responses.
control K 1 and U

5 5
x 10 x 10
2 2

1.5
1.5
1
1
0.5
Eigenvalues (Ns/m)
Eigenvalues (Ns/m)

0.5
0

−0.5 0

−1
−0.5
−1.5
−1
−2
−1.5
−2.5

−3 0 1 2 3 4 5
−2 0 1 2 3 4 5
10 10 10 10 10 10 10 10 10 10 10 10
Frequency (rad/sec) Frequency (rad/sec)

(a) Eigenvalues of (Y + Y ∗ ). (b) Eigenvalues of (Y + Y ∗ ).

Figure 9.1: The passivity analyses for (a): acceleration (or inboard braking); (b): outboard braking.

The analysis results are shown in Fig. 9.1, where Y is defined as:
h i0 h i0
F̂s , T̂s , T̂1 , T̂2 , − N̂1 , − N̂2 = Y s ẑ s , s φ̂3 , s(φ̂1 − φ̂3 ), s(φ̂2 − φ̂3 ), s ẑr1 , s ẑr2
9.3 Simulation Results 97

for acceleration (or inboard braking) in Fig. 9.1(a), or


h i0 h i0
F̂s , T̂s , T̂1 , T̂2 , − N̂1 , − N̂2 = Y s ẑ s , s φ̂3 , s(φ̂1 − φ̂4 ), s(φ̂2 − φ̂5 ), s ẑr1 , s ẑr2

for outboard braking in Fig. 9.1(b). It confirms that these systems cannot be implemented passively.

9.3 Simulation Results

The nonlinear half-car trailing-arm model was built in AutoSim with the active controller written in a
C-code. The nonlinear AutoSim model is illustrated in Appendix G.1. The active suspension control
is given in Appendix G.2. The model was first tested at zero velocity with various load inputs. The
closed-loop responses of the active systems reduced the d.c. gain of TF̂s →ẑs from 1.35 × 10−5 to
1.12 × 10−6 , TT̂s →φ̂3 from 7.99 × 10−6 to 6.60 × 10−7 , TT̂1 →ẑs from −2.66 × 10−5 to −2.47 × 10−7 ,
TT̂2 →ẑs from 5.33 × 10−5 to 4.94 × 10−7 , TT̂1 →φ̂3 from −9.83 × 10−6 to −1.84 × 10−6 , TT̂2 →φ̂3 from
1.44 × 10−5 to −1.61 × 10−6 . As expected, the active controller significantly reduces the load and
torque responses without changing the road responses.

1000 20
torques (Nm)

800
ẏ3 (m/sec)

600
15
400

200
10
0

−200
5
−400

−600

−800 0
0 2 4 6 8 10 12 0 2 4 6 8 10 12

sec sec

(a) applied torques: T1 (b) forward velocity


(solid), T2 (dash dotted)

0.035 0.04

0.03 0.035

0.03
0.025
φ3 (rad)

φ3 (rad)

0.025
0.02
0.02
0.015
0.015
0.01
0.01
0.005
0.005
0 0

−0.005 −0.005
0 2 4 6 8 10 12 0 2 4 6 8 10 12

sec sec

(c) kt1 = kt2 = ∞, with (d) kt1 = kt2 = 500 kN/m,


no-slip constraints with magic formula tyre
model

Figure 9.2: (a) applied torques (b) velocity; (c) and (d) the pitch motion of the active (dashed) and
passive (solid) systems without and with tyre springs.
98 Active Suspension Design for the Trailing-Arm Model

The active controller was implemented in AutoSim for accelerating and braking scenarios. Fig. 9.2(a)
and 9.2(b) show the applied torques and forward velocity respectively. To model a rolling wheel with
tyre, we can employ the same method as used in Example 3.1 for a no-slip assumption between the
tyre and road contact points. Alternatively, we can use the magic formula [2] to calculate the acceler-
ating and braking forces and assume that the tyres provide vertical spring forces with spring constants
kt1 = kt2 = 500 kN/m, as discussed in Section 7.3.5. Fig. 9.2(c), 9.2(d) show the pitching motions of
the vehicle body using these two tyre models.

9.4 Summary and Comments

In this chapter, we used the half-car trailing-arm model for the disturbance responses decoupling
controller design. Through network analysis, it was shown that the performance requirements can
not be achieved passively. The disturbance response decoupling controller design was performed
numerically using its linearised model. The controller was then successfully implemented on the
nonlinear model in AutoSim.
Chapter 10

Concluding Remarks

10.1 Main Contributions

Here we summarise the main contributions of this dissertation:

• A classical network theorem was employed to show that an active suspension is necessary in half-
and full-car vehicle models in certain situations. Typically, these situations involved specifying
a soft response from road disturbances as when a soft suspension is implemented, and a stiff
response from load disturbances as when a stiff suspension is implemented.

• In Chap. 4, a general theorem for disturbance response decoupling was developed, which
parametrises the set of all stabilising controllers that leaves some pre-specified transfer function
unchanged. For some special systems, like the vehicle models demonstrated throughout this
dissertation, a simplified theorem was given so that the existing controller synthesis methods
could be directly applied to the controller design. We also developed an extended theorem which
allows the closed-loop responses to be further improved. Moreover, we also obtained condi-
tions for the achievable performance of the remaining transmission paths to be left essentially
unchanged after disturbance response decoupling.

• In Chap. 5 we applied the theorems developed in Chap. 4 to the linear quarter-car model. The
controller structures for various measurements were derived. The achievable load responses
were verified and proved to be effectively the same as before the disturbance response decoupling
design. In Chap. 6 we discussed the linear half-car model, and simplicity conditions which
allow the design to be carried out for two separate quarter-cars. Furthermore, the achievable
load responses of the half-car model were also verified to be effectively the same as before the
disturbance response decoupling design. In Chap. 7 we also discussed the symmetry conditions
to decompose a full-car model into two half-car models, in order to simplify the controller
design. In addition, a special treatment for the warp mode was illustrated to reduce the twist of
the chassis.

99
100 Concluding Remarks

• In Chap. 8 we developed an algorithm for the numerical calculation of the controller structure.
Hence it is possible to apply the disturbance response decoupling controller design to complex
systems .

• In Chap. 3 we demonstrated the conventional solutions to the squat and dive problems of vehicles,
using trailing arms. We derived the generalised trailing arm geometry for perfect anti-squat and
anti-dive designs. In Chap. 9 an active suspension controller was derived numerically to decouple
the road and load responses, and implemented in AutoSim.

• Throughout this dissertation, AutoSim was used for simulation of vehicle models in combination
with the theoretical work. This approach should be very useful for the treatment of complicated
models in the future.

10.2 Direction for Future Research

• In this dissertation, the left and right normalised factorisation (lnf and rnf) were defined to
perform the controller parametrisation. For the vehicle models, this factorisation is in a rather
simple form, and we did not encounter much difficulty in obtaining a suitable one. However,
an algorithm to find a lnf and rnf would be particularly beneficial in applying the theorems to
further applications.

• As shown in Table 5.1, 5.2, it is noted that the shaped plant sometimes takes a particular simple
form, so that the controller design would be rather simple. This would also be an interesting
area for further investigation.

• So far, the disturbance response decoupling techniques have been developed by Youla parametri-
sation, and were discussed from the transfer functions of the plant. It would be very useful to
find the similar direct techniques expressed in state space form.

• The disturbance response decoupling techniques developed in this dissertation focused on linear
systems. It is interesting to ask if we could develop similar decoupling methods for nonlinear
systems. This idea was initially explored in Chap. 4 by representing the essential controller
e2 as a left annihilator of the open-loop system (Theorem 4.3). It is an open area for
structure U
investigation.
Appendix A

Appendix to Chapter 2

A.1 The AutoSim Linearised Quarter-Car Model


;; generate a linearised quarter-car model

(reset) (si) ;(add-gravity) ;(setsym *stiff-integrator* t)

(add-point ptQ :body n :coordinates (Qx 0 0) )


(add-point ptA :body n :coordinates (Ax 0 0) )
(add-point ptB :body n :coordinates (Bx 0 0) )

;;; add sprung mass


(add-body smass :name "sprung mass"
:joint-coordinates ptQ :cm-coordinates ptQ
:translate [nx] :mass "ms")
(add-point smass_A :body smass :coordinates ptA)

;;; add unsprung mass


(add-body umass :name "unsprung mass"
:joint-coordinates ptB :cm-coordinates ptB
:translate ([nx]) :mass "mu")

;;; first add the external variables


(add-variables dyvars real Fs Zr)

;;; add suspension force


(add-strut u :name "suspension strut"
:point1 smass_A :point2 umasscm :magnitude "-ks*(x-x0) -cs*v")

;;; add tyre force


(add-line-force Fr :name "tyre force"
:point1 umasscm :direction [nx]
:magnitude "kt*(Zr- dot([nx],pos(umasscm,ptB)))" )

(add-line-force FFs :name "force acting on sprung mass"


:point1 smasscm :direction [nx]
:magnitude "Fs" )

;(add-standard-output)
(add-out "dot([nx],pos(smasscm,ptQ))" "Zs")
(add-out "fm(Fr)" "Fr")

(linear :u (Fs Zr))

(set-defaults mu 35 ms 250 Is 15
cs 4000 ks 12000 ;; soft settings
; cs 40000 ks 120000 ;; hard settings
kt 150000 zr 0 Qx 0 Ax 0.5 Bx 0.7)
(write-to-file write-matlab "w:\\PhD\\programs\\matlab_thesis\\qcar_lin_soft.m") ;; soft settings
;(write-to-file write-matlab "w:\\PhD\\programs\\matlab_thesis\\qcar_lin_hard.m") ;; hard settings

101
102 Appendix to Chapter 2

A.2 The Passivity Analysis Based on AutoSim Models


clear;
%%%%%%%%% 1. load the hard suspension setteings %%%%%%%%%%%%%%%%%
qcar_lin_hard; % AutoSim linearised model with hard suspension settings
sys_hard = pck(MatrixA,MatrixB,MatrixC,MatrixD);
%%%%%%%%%%%% end of step 1 %%%%%%%%%%%%%%%%%%%%

%%%%%%%%% 2. load the soft suspension settings %%%%%%%%%%%%%%%%%%%


qcar_lin_soft; % AutoSim linearised model with soft suspension settings
sys_soft = pck(MatrixA,MatrixB,MatrixC,MatrixD);
%%%%%%%%%%% end of step 2 %%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%% 3. combine soft and hard settings %%%%%%%%%%%%%%


% we want the system to be (1). soft to road inputs Zr
% (2). hard to braking force Fs
G_hard = sel(sys_hard, 1:2 , 1);
G_soft = sel(sys_soft, 1:2 , 2);
G_mix = sbs(G_hard, G_soft);
%%%%%%%%%%% end of step 3 %%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%% 4. find the eigen values of (Z+conj(Z)) %%%%%%%%%%


w = logspace(-2,3,100);
G_v = frsp(G_mix,w);

G11_v = vunpck(sel(G_v,1,1)).*j.*w’;
G12_v = vunpck(sel(G_v,1,2));
G21_v = vunpck(sel(G_v,2,1));
G22_v = vunpck(sel(G_v,2,2))./j./w’;
%% thasnform admitance matrix G to admittance matrix Y
%% [Fs, Fr]’ = Y[Zsdot, Zrdot]’
Y11_v = vpck(1./G11_v,w);
Y12_v = vpck(-G12_v./G11_v,w);
Y21_v = vpck(G21_v./G11_v,w);
Y22_v = vpck(vunpck(vdet(G_v))./G11_v,w);
Y_v = sbs(abv(Y11_v,Y21_v),abv(Y12_v,Y22_v));
G_v = vpck(sbs(abv(G11_v,G21_v),abv(G12_v,G22_v)),w);

sys = madd(Y_v , vcjt(Y_v));


sys_E = veig(sys);

re1 = real(vunpck(sel(sys_E,1,1)));
re2 = real(vunpck(sel(sys_E,2,1)));
tt = sort([re1,re2]’);
figure(3);
semilogx(w,tt(1,:),w,tt(2,:)); grid;
xlabel(’Frequency (rad/sec)’); ylabel(’Eigenvalues (Ns/m)’)
Appendix B

Appendix to Chapter 3

B.1 Appendix to Anti-Squat Geometry

y
b a
z
x Is φ̈3
T2 Q T1
m s ÿ

Bx Ax
By B m s ẍ Ay

l5 By Ay l4
φ5 Bx Ax φ4
C1 y
C2 y
C 2x C 1x

C 2x C 1x
I2 φ̈2
m 2 ÿ2 + C2 y T2 m 1 ÿ1 + C1 y T1 I1 φ̈1

F2 F1
N2 N1

Figure B.1: Free-body diagram for the anti-squat design.

Referring to Fig. B.1, let Q = x −



x + y−

y in the fixed coordinate system, where −

x and −

y are unit
vectors parallel to the coordinate axes. We first write down the coordinates of the following points:

A = (x + (h − x1,0 ) cos φ3 − a sin φ3 )−



x + (y + (h − x1,0 ) sin φ3 + a cos φ3 )−

y,


B = (x + (h − x ) cos φ + b sin φ ) x + (y + (h − x ) sin φ − b cos φ ) y , →

2,0 3 3 2,0 3 3

C1 = (x + (h − x1,0 ) cos φ3 − a sin φ3 + l4 cos φ4 )−



x + (y + (h − x1,0 ) sin φ3 + a cos φ3 + l4 sin φ4 )−

y,
C = (x + (h − x ) cos φ + b sin φ + l cos φ )−
2 2,0

x + (y + (h − x ) sin φ − b cos φ − l sin φ )−
3 3 5 5

y. 2,0 3 3 5 5

103
104 Appendix to Chapter 3

Now we derive the equations of motion for each element of the system:

the sprung mass:

m s ẍ + Ax + Bx = 0, (B.1)
m y ÿ + A y + B y + m s ÿ = 0, (B.2)
−Is φ̈3 − T1 − T2
+ Ax ((h − x1,0 ) sin φ3 + a cos φ3 ) − A y ((h − x1,0 ) cos φ3 − a sin φ3 )
+Bx ((h − x2,0 ) sin φ3 − b cos φ3 ) − B y ((h − x2,0 ) cos φ3 + b sin φ3 ) = 0; (B.3)

the front trailing-arm

A x + C 1x = 0, (B.4)
A y + C1 y = 0, (B.5)
−C1x l4 sin φ4 + C1 y l4 cos φ4 = 0; (B.6)

the rear trailing-arm

B x + C 2x = 0, (B.7)
B y + C2 y = 0, (B.8)
C2x l5 sin φ5 + C2 y l5 cos φ5 = 0; (B.9)

the front wheel

C1x + N1 = 0, (B.10)
C1 y + m 1 ÿ1 − F1 = 0, (B.11)
T1 + F1r1 − I1 φ̈1 = 0; (B.12)

the rear wheel

C2x + N2 = 0, (B.13)
C2 y + m 2 ÿ2 − F2 = 0, (B.14)
T2 + F2 r2 − I2 φ̈2 = 0. (B.15)

In addition there are the no-slip conditions:

y1 = −r1 φ1 , (B.16)
y2 = −r2 φ2 . (B.17)
B.1 Appendix to Anti-Squat Geometry 105

Geometrical constraints can also be derived from the coordinates of C1 , C2 as follows:

x + (h − x1,0 ) cos φ3 − a sin φ3 + l4 cos φ4 = h − r1 , (B.18)


y + (h − x1,0 ) sin φ3 + a cos φ3 + l4 sin φ4 = y1 + a + y1,0 , (B.19)
x + (h − x2,0 ) cos φ3 + b sin φ3 + l5 cos φ5 = h − r2 , (B.20)
y + (h − x2,0 ) sin φ3 − b cos φ3 − l5 sin φ5 = y2 − b − y2,0 . (B.21)

From (B.4 – B.5, B.7 – B.8, B.10 – B.11, B.13 – B.14) we can determine the forces acting on the
trailing arms, and from (B.12, B.15, B.16 – B.17) we can determine the torques as:

C 1x = −Ax = −N1 ,
C 2x = −Bx = −N2 ,
C1 y = −A y = F1 − m 1 ÿ1 ,
= −B y = F2 − m 2 ÿ2 ,
C2 y
I1
T1 = −F1r1 − ÿ1 ,
r1
I2
T2 = −F2r2 − ÿ2 . (B.22)
r2
Therefore, we have nine equations (B.1–B.3, B.6, B.9, B.18–B.21) left for nine unknowns: φ3 , φ4 , φ5 ,
N1 , N2 , x, y, y1 and y2 . These equations determine completely the time evolution of the trailing-arm
model. It is well-known that these equations have a unique solution for given initial conditions. We
now check that this unique solution corresponds to perfect anti-squat if the two anti-squat conditions
(3.6), (3.8) hold:

( pMx − m 1 )(x1,0 − r1 ) − M y y1,0 = 0,


((1 − p)Mx − m 2 )(x1,0 − r2 ) − M y y2,0 = 0,

where x1,0 = r1 + l4 cos φ4 (0), y1,0 = l4 sin φ4 (0), x2,0 = r2 + l5 cos φ5 (0), y2,0 = l5 sin φ5 (0).
Namely, we check that the following solution:

x(t) ≡ 0,
y(t) ≡ y1 (t) ≡ y2 (t),
φ3 (t) ≡ 0,
φ4 (t) ≡ φ4 (0),
φ5 (t) ≡ φ5 (0),

satisfies all the equations (B.1–B.3, B.6, B.9, B.18–B.21). We substitute F1 (t) = pF(t) and F1 (t) =
(1 − p)F(t) in to those equations. (B.2) gives F(t) = (m s + m 1 + m 2 ) ÿ. From (3.6) and (3.8), (B.6)
and (B.9) give N1 = −M y ÿ and N2 = M y ÿ respectively, which satisfies (B.1). Substituting N1 , N2
into ((B.3) + (3.6) +(3.8)) verifies (B.3). Finally, the verification of (B.18–B.21) is obvious by the
expression of x1,0 , y1,0 , x2,0 ,y2,0 given above.
106 Appendix to Chapter 3

B.2 Appendix to Anti-Dive Geometry (Outboard Braking)

The derivation of the anti-dive case for the outboard braking system is similar to the anti-squat case
given in the previous section. The dynamic equations are the same as (B.1–B.21) except (B.3), (B.6)
and (B.9) replaced by:

−Is φ̈3 + Ax ((h − x1,0 ) sin φ3 + a cos φ3 ) − A y ((h − x1,0 ) cos φ3 − a sin φ3 )
+Bx ((h − x2,0 ) sin φ3 − b cos φ3 ) − B y ((h − x2,0 ) cos φ3 + b sin φ3 ) = 0; (B.23)
−C1x l4 sin φ4 + C1 y l4 cos φ4 − T1 = 0; (B.24)
C2x l5 sin φ5 + C2 y l5 cos φ5 − T2 = 0, (B.25)

respectively. And the forces Ax , A y , Bx , B y , C1,x , C1,y , C2,x , C2,y and torques T1 , T2 are the same
as (B.22). The proof follows the same track as in the previous section. That is, the following solutions:
x(t) ≡ 0, y(t) ≡ y1 (t) ≡ y2 (t), φ3 (t) ≡ 0, φ4 (t) ≡ φ4 (0), φ5 (t) ≡ φ5 (0) satisfy all the dynamic
equations. Suppose the braking forces F1 (t) = q F(t) and F2 (t) = (1 − q)F(t). From (3.10) and
(3.11), (B.24) and (B.25) give N1 = −M y ÿ and N2 = M y ÿ respectively. Substituting N1 , N2 into
((B.23) + (3.10) +(3.11)) verifies (B.23).

B.3 AutoSim Code of the Linearised Trailing-Arm Model


;;; linearised half-car trailing-arm model

(reset) (si) (setsym *stiff-integrator* nil) ;; (add-gravity)

(add-point ptQ :coordinates (Qx Qy 0))


(add-point ptA :coordinates (Ax Ay 0)) (add-point ptB :coordinates (Bx By 0))
(add-point ptC1 :coordinates (C1x C1y 0)) (add-point ptC2 :coordinates (C2x C2y 0))
(add-point ptD :coordinates (Dx Dy 0)) (add-point ptE :coordinates (Ex Ey 0))
(add-point ptG :coordinates (Gx Gy 0)) (add-point ptH :coordinates (Hx Hy 0))

;; add sprung mass


(add-body smass :name "spurng mass" :parent n
:joint-coordinates ptQ :cm-coordinates ptQ :translate (x y)
:body-rotation-axes z :parent-rotation-axis z :reference-axis [nx]
:inertia-matrix (0 0 "Is") :mass "ms")
(add-point smassA :body smass :coordinates ptA)
(add-point smassB :body smass :coordinates ptB)

;;; add trailing arms


(add-body lead :name "lead trailing arm" :parent smass
:joint-coordinates smassA :body-rotation-axes z :parent-rotation-axis z
:reference-axis x :inertia-matrix (0 0 "Ilead") :mass "Mlead")
(add-body tail :name "tail trailing arm" :parent smass
:joint-coordinates smassB :body-rotation-axes z :parent-rotation-axis z
:reference-axis x :inertia-matrix (0 0 "Itail") :mass "Mtail")
(add-point smassD :body smass :coordinates ptD)
(add-point smassE :body smass :coordinates ptE)
(add-point leadG :body lead :coordinates ptG)
(add-point tailH :body tail :coordinates ptH)

;;; add wheels


(add-body fwheel :name "front wheel" :parent lead
:joint-coordinates ptC1 :body-rotation-axes z :parent-rotation-axis z
:reference-axis x :inertia-matrix (0 0 "I1") :mass "m1")
(add-body rwheel :name "rear wheel" :parent tail
B.3 AutoSim Code of the Linearised Trailing-Arm Model 107

:joint-coordinates ptC2 :body-rotation-axes z :parent-rotation-axis z


:reference-axis x :inertia-matrix (0 0 "I2") :mass "m2")

;; no slide between road and tyres


(add-position-constraint "(rq(smass)+rq(lead)+rq(fwheel))*r1+dot([ny],pos(fwheel0,ptC1))" :q "rq(fwheel)")
(add-speed-constraint "dot([nz],rot(fwheel))*r1+dot([ny],vel(fwheel0))" :u "ru(fwheel)" ) ;; front tyre
(add-position-constraint "(rq(smass)+rq(tail)+rq(rwheel))*r2+dot([ny],pos(rwheel0,ptC2))" :q "rq(rwheel)")
(add-speed-constraint "dot([nz],rot(rwheel))*r1+dot([ny],vel(rwheel0))" :u "ru(rwheel)" ) ;; rear tyre

;; add virtual roads


(setsym vroad_f "dot([nx],pos(fwheel0,ptC1))")
(setsym vroad_r "dot([nx],pos(rwheel0,ptC2))")

;;; 3. assign inputs ;;;


(add-variables dyvars real FFs TT3 TT1 TT2 Zr1 Zr2)

;;; 4. add loads ;;;;;;;;;;;;;;;;;


(add-line-force Fload :name "vertical load force" :point1 smasscm
:direction [nx] :magnitude "FFs" )
(add-moment Fmom :name "rotational load torque" :body1 smass
:direction [nz] :magnitude "TT3")

;; apply the torques to both tyres


(add-moment ftorque :name "applied torque on front wheel"
:direction [nz] :magnitude "TT1"
:body1 fwheel :body2 lead) ;;; for inboard ‘‘:body2 smass’’
(add-moment rtorque :name "applied torque on rear wheel"
:direction [nz] :magnitude "TT2"
:body1 rwheel :body2 tail) ;;; for inboard ‘‘:body2 smass’’

;; add passive suspensions


(add-strut f_susp :point1 smassD
:point2 leadG :magnitude "-k1*(x-x0) -c1*v")
(add-strut r_susp :point1 smassE
:point2 tailH :magnitude "-k2*(x-x0) -c2*v")

;;; 5. add tyre force ;;;;;;;;;;


(add-line-force Fr1 :name "front tyre force"
:point1 fwheelcm :direction [nx]
:magnitude "kt1*( Zr1 - @vroad_f ) " )
(add-line-force Fr2 :name "rear tyre force"
:point1 rwheelcm :direction [nx]
:magnitude "kt2*( Zr2 - @vroad_r ) " )

;;; define outputs


(add-out "dot([nx],pos(smasscm,ptQ))" "zs" :body "smass" :units L)
(add-out "rq(smass)" "phi3" :body "smass" :units "rad")
(add-out "rq(lead)+rq(fwheel)" "phi14" :body "fwheel" :units "rad") ;;; for outboard ‘‘rq(fwheel)’’
(add-out "rq(tail)+rq(rwheel)" "phi25" :body "fwheel" :units "rad") ;;; for outboard ‘‘rq(rwheel)’’
(add-out "fm(Fr1)" "Fr1" :units F)
(add-out "fm(Fr2)" "Fr2" :units F)

(set-defaults m1 100 r1 0.15 m2 100 r2 0.15 I1 1 I2 1


Mlead 0 Ilead 0 Mtail 0 Itail 0
ms 1600 Is 1000 v0 30
"tu(smass,2)" 15
Qx 0 Qy 0
Ax 0.1183 Ay 0.5035 Bx 0.6909 By -1.8099
C1x 0.35 C1y 1.3 C2x 0.35 C2y -1.3 Dx 0.1 Dy 1.3
Ex 0.1 Ey -1.3 Gx 0.35 Gy 1.3 Hx 0.35 Hy -1.3
k1 4000 k2 4000 c1 1000 c2 1000 ;; soft settings
; k1 400000 k2 400000 c1 100000 c2 100000 ;; hard settings
kt1 500000 kt2 500000 STOPT 10 STEP 0.0001 iprint 1000)

(linear :u ( FFs TT3 TT1 TT2 Zr1 Zr2))

(write-to-file write-matlab "w:\\PhD\\programs\\matlab_thesis\\trailing_out4_soft.m")


;(write-to-file write-matlab "w:\\PhD\\programs\\matlab_thesis\\trailing_out4_hard.m")
Appendix C

Appendix to Chapter 5

### the general quarter-car model: with two measurement ##############


with(linalg):

exp1 := ms*sˆ2*zs-Fs+up:
exp2 := mu*sˆ2*zu-Fr-up:
exp1 := subs(up=(cs1*s+ks1)*(zs-zu)+(cs2*s+ks2)*(za-zu),exp1):
exp2 := subs(up=(cs1*s+ks1)*(zs-zu)+(cs2*s+ks2)*(za-zu),exp2):
exp1 := subs(Fr=kt*(zr-zu),exp1):
exp2 := subs(Fr=kt*(zr-zu),exp2):
exp1 := subs(za=zs - r*u,exp1):
exp2 := subs(za=zs - r*u,exp2):
exp1 := expand(exp1):
exp2 := expand(exp2):

L := matrix(2,2,0):
R := matrix(2,3,0):
L[1,1] := coeff(exp1,zs): L[1,2] := coeff(exp1,zu):
R[1,1] := coeff(exp1,zr): R[1,2] := coeff(exp1,Fs):
R[1,3] := coeff(exp1,u):
L[2,1] := coeff(exp2,zs): L[2,2] := coeff(exp2,zu):
R[2,1] := coeff(exp2,zr): R[2,2] := coeff(exp2,Fs):
R[2,3] := coeff(exp2,u):

G := multiply(inverse(L),-R):
d(s) := collect(det(L),s):

P := matrix(4,3,0):
P[1,1] := simplify(G[1,1]): P[1,2] := simplify(G[1,2]):
P[1,3] := simplify(G[1,3]):
P[2,1] := simplify(G[2,1]): P[2,2] := simplify(G[2,2]):
P[2,3] := simplify(G[2,3]):
P[3,1] := simplify(P[1,1]*sˆ2): P[3,2] := simplify(P[1,2]*sˆ2):
P[3,3] := simplify(P[1,3]*sˆ2):
P[4,1] := simplify(P[1,1]-P[2,1]): P[4,2] := simplify(P[1,2]-P[2,2]):
P[4,3] := simplify(P[1,3]-P[2,3]):

P11 := matrix(2,2,[P[1,1],P[1,2],P[2,1],P[2,2]]):
P12 := matrix(2,1,[P[1,3],P[2,3]]):
P21 := matrix(2,2,[P[3,1],P[3,2],P[4,1],P[4,2]]):
P22 := matrix(2,1,[P[3,3],P[4,3]]):
#### calculate U2 ####
T31 := submatrix(P21,1..2,1..1):
U1 := evalm(simplify(T31/sˆ2/kt/p1*d(s))):
U2 := matrix(2,1,[0,1]):
U := concat(U1,U2):

Ut := simplify(inverse(U)):
U2t := submatrix(Ut,2..2,1..2);
#### show U2P22 ###
U2P22:= simplify(multiply(U2t,P22));

108
Appendix D

Appendix to Chapter 6

### half-car model with four feedbacks

with(linalg):

exp1 := ms*sˆ2*zs-Fs+up1+up2:
exp2 := Ip*sˆ2*zp-Fp+up1*l1-up2*l2:
exp3 := m1*sˆ2*zu1-up1-Fr1:
exp4 := m2*sˆ2*zu2-up2-Fr2:
exp1 := subs(up1=c1*s*(zs+l1*zp-zu1)+k1*(za1-zu1),exp1):
exp2 := subs(up1=c1*s*(zs+l1*zp-zu1)+k1*(za1-zu1),exp2):
exp3 := subs(up1=c1*s*(zs+l1*zp-zu1)+k1*(za1-zu1),exp3):
exp4 := subs(up1=c1*s*(zs+l1*zp-zu1)+k1*(za1-zu1),exp4):
exp1 := subs(up2=c2*s*(zs-l2*zp-zu2)+k2*(za2-zu2),exp1):
exp2 := subs(up2=c2*s*(zs-l2*zp-zu2)+k2*(za2-zu2),exp2):
exp3 := subs(up2=c2*s*(zs-l2*zp-zu2)+k2*(za2-zu2),exp3):
exp4 := subs(up2=c2*s*(zs-l2*zp-zu2)+k2*(za2-zu2),exp4):
exp1 := subs(Fr1=kt1*(zr1-zu1),Fr2=kt2*(zr2-zu2),exp1):
exp2 := subs(Fr1=kt1*(zr1-zu1),Fr2=kt2*(zr2-zu2),exp2):
exp3 := subs(Fr1=kt1*(zr1-zu1),Fr2=kt2*(zr2-zu2),exp3):
exp4 := subs(Fr1=kt1*(zr1-zu1),Fr2=kt2*(zr2-zu2),exp4):
exp1 := subs(za1=zs+l1*zp-r*u1,za2=zs-l2*zp-r*u2,exp1):
exp2 := subs(za1=zs+l1*zp-r*u1,za2=zs-l2*zp-r*u2,exp2):
exp3 := subs(za1=zs+l1*zp-r*u1,za2=zs-l2*zp-r*u2,exp3):
exp4 := subs(za1=zs+l1*zp-r*u1,za2=zs-l2*zp-r*u2,exp4):

L := matrix(4,4,0):
R := matrix(4,6,0):
L[1,1] := coeff(exp1,zs):
L[1,2] := coeff(exp1,zp):
L[1,3] := coeff(exp1,zu1):
L[1,4] := coeff(exp1,zu2):
R[1,1] := coeff(exp1,zr1):
R[1,2] := coeff(exp1,zr2):
R[1,3] := coeff(exp1,Fs):
R[1,4] := coeff(exp1,Fp):
R[1,5] := coeff(exp1,u1):
R[1,6] := coeff(exp1,u2):
L[2,1] := coeff(exp2,zs):
L[2,2] := coeff(exp2,zp):
L[2,3] := coeff(exp2,zu1):
L[2,4] := coeff(exp2,zu2):
R[2,1] := coeff(exp2,zr1):
R[2,2] := coeff(exp2,zr2):
R[2,3] := coeff(exp2,Fs):
R[2,4] := coeff(exp2,Fp):
R[2,5] := coeff(exp2,u1):
R[2,6] := coeff(exp2,u2):
L[3,1] := coeff(exp3,zs):
L[3,2] := coeff(exp3,zp):
L[3,3] := coeff(exp3,zu1):

109
110 Appendix to Chapter 6

L[3,4] := coeff(exp3,zu2):
R[3,1] := coeff(exp3,zr1):
R[3,2] := coeff(exp3,zr2):
R[3,3] := coeff(exp3,Fs):
R[3,4] := coeff(exp3,Fp):
R[3,5] := coeff(exp3,u1):
R[3,6] := coeff(exp3,u2):
L[4,1] := coeff(exp4,zs):
L[4,2] := coeff(exp4,zp):
L[4,3] := coeff(exp4,zu1):
L[4,4] := coeff(exp4,zu2):
R[4,1] := coeff(exp4,zr1):
R[4,2] := coeff(exp4,zr2):
R[4,3] := coeff(exp4,Fs):
R[4,4] := coeff(exp4,Fp):
R[4,5] := coeff(exp4,u1):
R[4,6] := coeff(exp4,u2):

G := simplify(multiply(inverse(L),-R)):
d(s) := collect(det(L),s):

P := matrix(8,6,0):
row1 := submatrix(G,1..1,1..6):
row2 := submatrix(G,2..2,1..6):
row3 := submatrix(G,3..3,1..6):
row4 := submatrix(G,4..4,1..6):
row5 := row1*sˆ2:
row6 := row2*sˆ2:
row7 := row1+l1*row2-row3:
row8 := row1-l2*row2-row4:
P := stackmatrix(row1,row2,row3,row4,row5,row6,row7,row8):

P11 := submatrix(P,1..4,1..4):
P12 := submatrix(P,1..4,5..6):
P21 := submatrix(P,5..8,1..4):
P22 := submatrix(P,5..8,5..6):

#### calculate U2 ####

T31 := submatrix(P21,1..4,1..2):
F := matrix(2,2,[sˆ2/p3, 0, 0, sˆ2/p3]):
U1 := evalm(simplify(multiply(T31,inverse(F)))):
U2 := matrix(4,2,[0,0,0,0,1,0,0,1]):

U := concat(U1,U2):
Ut := simplify(inverse(U)):
U1t := submatrix(Ut,1..2,1..4):
U2t := submatrix(Ut,3..4,1..4);

U2tP22 := simplify(multiply(U2t,P22));

#### note:
#### (1). T31 has common factor of sˆ2, and degree 1
#### (2). T31 = U1 x F, where F = sˆ2/p3 * I_2
#### (3). U is unimodular by checking U1t in RH_\infty, (U2t in RH_\infty).
####
Appendix E

Appendix to Chapter 7

E.1 AutoSim Code of the Nonlinear Full-Car Model


(reset) (si) (add-gravity :direction [nx]) (setsym *stiff-integrator* nil)

(add-point ptQ :coordinates ( 0 0 0)) (add-point ptA1 :coordinates (0.5 -tf Lf))
(add-point ptA2 :coordinates (0.5 tf Lf)) (add-point ptA3 :coordinates (0.5 -tr -Lr))
(add-point ptA4 :coordinates (0.5 tr -Lr)) (add-point ptB1 :coordinates (0.7 -tf Lf))
(add-point ptB2 :coordinates (0.7 tf Lf)) (add-point ptB3 :coordinates (0.7 -tr -Lr))
(add-point ptB4 :coordinates (0.7 tr -Lr))

;;; 1. add sprung mass ;;;;;;;;;;;


(add-body smass :name "sprung mass" :joint-coordinates ptQ
:cm-coordinates ptQ :translate ([nx] [ny] [nz]) :small-translations (N T N)
:body-rotation-axes (y z) :parent-rotation-axis [ny] :reference-axis [nz]
:mass "ms" :inertia-matrix ("1000" "It" "Ip"))
(add-point smass_A1 :body smass :coordinates ptA1) (add-point smass_A2 :body smass :coordinates ptA2)
(add-point smass_A3 :body smass :coordinates ptA3) (add-point smass_A4 :body smass :coordinates ptA4)
;;; 2. add unsprung masses ;;;;;;;;;;;
(add-body umass1 :name "front right unsprung mass" :parent smass
:joint-coordinates ptB1 :cm-coordinates ptB1 :translate (x )
:small-translations (N ) :mass "m1")
(add-body umass2 :name "front left unsprung mass" :parent smass
:joint-coordinates ptB2 :cm-coordinates ptB2 :translate (x )
:small-translations (N) :mass "m2")
(add-body umass3 :name "rear right unsprung mass" :parent smass
:joint-coordinates ptB3 :cm-coordinates ptB3 :translate (x)
:small-translations (N) :mass "m3")
(add-body umass4 :name "rear left unsprung mass" :parent smass
:joint-coordinates ptB4 :cm-coordinates ptB4 :translate (x)
:small-translations ( N) :mass "m4")

;;; add wheels


(add-body wheel1 :name "front right wheel" :parent umass1
:joint-coordinates umass10 :body-rotation-axes y :parent-rotation-axis y
:reference-axis z :inertia-matrix (0 "Iwheel" 0) :mass "Mwheel")
(add-body wheel2 :name "front left wheel" :parent umass2
:joint-coordinates umass20 :body-rotation-axes y :parent-rotation-axis y
:reference-axis z :inertia-matrix (0 "Iwheel" 0) :mass "Mwheel")
(add-body wheel3 :name "rear right wheel" :parent umass3
:joint-coordinates umass30 :body-rotation-axes y :parent-rotation-axis y
:reference-axis z :inertia-matrix (0 "Iwheel" 0) :mass "Mwheel")
(add-body wheel4 :name "rear left wheel" :parent umass4
:joint-coordinates umass40 :body-rotation-axes y :parent-rotation-axis y
:reference-axis z :inertia-matrix (0 "Iwheel" 0) :mass "Mwheel")

;;; 3. manipulate inputs ;;;


(install-table road "input profile([ny] vs. time)" :table-function tabf
:npts 1000 :deriv rp :xunits t :yunits l :keyword Road-profile
:values ((0 0) (1 0) (1 1) (2 1) (2 0)))

111
112 Appendix to Chapter 7

;;; 4. call subroutine to calculate active controls ;;;;;;;;;


(setsym zsddot "dxdt(dot([nx],vel(smass0)))") (setsym ztddot "dxdt(ru(smass,1))")
(setsym zpddot "dxdt(ru(smass,2))")
(setsym D1 "dot([nx],pos(smass_A1,umass1cm)) +0.2") (setsym D2 "dot([nx],pos(smass_A2,umass2cm)) +0.2")
(setsym D3 "dot([nx],pos(smass_A3,umass3cm)) +0.2") (setsym D4 "dot([nx],pos(smass_A4,umass4cm)) +0.2")

(add-variables dyvars real z1R z1pR z1p2R Ub1R Ub1d1R Ub1d2R E1R E1d1R Db1pR U1pR
z2R z2pR z2p2R Ub2R Ub2d1R Ub2d2R E2R E2d1R Db2pR U2pR
z3R z3pR z3p2R Uw3R Uw3d1R Uw3d2R E3R E3d1R Dw3pR U3pR
z4R z4pR z4p2R Ur4R Ur4d1R Ur4d2R E4R E4d1R Dr4pR U4pR)
(add-equation init &z1R "0") (add-equation init &z1pR "0")
(add-equation init &z1p2R "0") (add-equation init &Ub1R "0")
(add-equation init &Ub1d1R "0") (add-equation init &Ub1d2R "0")
(add-equation init &E1R "0") (add-equation init &E1d1R "0")
(add-equation init &Db1pR "0") (add-equation init &U1pR "0")

(add-equation init &z2R "0") (add-equation init &z2pR "0")


(add-equation init &z2p2R "0") (add-equation init &Ub2R "0")
(add-equation init &Ub2d1R "0") (add-equation init &Ub2d2R "0")
(add-equation init &E2R "0") (add-equation init &E2d1R "0")
(add-equation init &Db2pR "0") (add-equation init &U2pR "0")

(add-equation init &z3R "0") (add-equation init &z3pR "0")


(add-equation init &z3p2R "0") (add-equation init &Uw3R "0")
(add-equation init &Uw3d1R "0") (add-equation init &Uw3d2R "0")
(add-equation init &E3R "0") (add-equation init &E3d1R "0")
(add-equation init &Dw3pR "0") (add-equation init &U3pR "0")

(add-equation init &z4R "0") (add-equation init &z4pR "0")


(add-equation init &z4p2R "0") (add-equation init &Ur4R "0")
(add-equation init &Ur4d1R "0") (add-equation init &Ur4d2R "0")
(add-equation init &E4R "0") (add-equation init &E4d1R "0")
(add-equation init &Dr4pR "0") (add-equation init &U4pR "0")

(add-subroutine update fcontr2("@zsddot" "@ztddot" "@zpddot" "@D1" "@D2" "@D3" "@D4"


&z1R &z1pR &z1p2R &Ub1R &Ub1d1R &Ub1d2R &E1R &E1d1R &Db1pR &U1pR
&z2R &z2pR &z2p2R &Ub2R &Ub2d1R &Ub2d2R &E2R &E2d1R &Db2pR &U2pR
&z3R &z3pR &z3p2R &Uw3R &Uw3d1R &Uw3d2R &E3R &E3d1R &Dw3pR &U3pR
&z4R &z4pR &z4p2R &Ur4R &Ur4d1R &Ur4d2R &E4R &E4d1R &Dr4pR &U4pR
dh))

;;; 4. add suspension force ;;;;;;;;


(setsym sf1 "ms*g*Lr/(Lf+Lr)/2") (setsym sf2 "ms*g*Lr/(Lf+Lr)/2")
(setsym sf3 "ms*g*Lf/(Lf+Lr)/2") (setsym sf4 "ms*g*Lf/(Lf+Lr)/2") ;; static suspension forces

(setsym tyf1 "ms*g*Lr/(Lf+Lr)/2 +(m1+Mwheel)*g") (setsym tyf2 "ms*g*Lr/(Lf+Lr)/2 +(m2+Mwheel)*g")


(setsym tyf3 "ms*g*Lf/(Lf+Lr)/2 +(m3+Mwheel)*g") (setsym tyf4 "ms*g*Lf/(Lf+Lr)/2 +(m4+Mwheel)*g") ;; static vertical tyre forces

(add-strut up1 :name "front right suspension strut" :point1 wheel1cm :point2 smass_A1
:magnitude "@sf1 -k1*(x-x0) -c1*v ")
; :magnitude "@sf1 -k1*(x-x0+E1R) -c1*v ")
(add-strut up2 :name "front right suspension strut" :point1 wheel2cm :point2 smass_A2
:magnitude "@sf2 -k2*(x-x0) -c2*v ")
; :magnitude "@sf2 -k2*(x-x0+E2R) -c2*v ")
(add-strut up3 :name "rear right suspension strut" :point1 wheel3cm :point2 smass_A3
:magnitude "@sf3 -k3*(x-x0) -c3*v ")
; :magnitude "@sf3 -k3*(x-x0+E3R) -c3*v ")
(add-strut up4 :name " rear left suspension strut" :point1 wheel4cm :point2 smass_A4
:magnitude "@sf4 -k4*(x-x0) -c4*v ")
; :magnitude "@sf4 -k4*(x-x0+E4R) -c4*v ")

;;; 5. add tyre force ;;;;;;;;;;


(add-line-force Fr1 :name "front right tyre force" :point1 wheel1cm
:direction [nx] :magnitude "-@tyf1 + kt1*( -dot([nx],pos(umass1cm,ptB1)) ) " )
(add-line-force Fr2 :name "front left tyre force" :point1 wheel2cm
:direction [nx] :magnitude "-@tyf2 + kt2*( -dot([nx],pos(umass2cm,ptB2)) ) " )
(add-line-force Fr3 :name "rear right tyre force" :point1 wheel3cm
:direction [nx] :magnitude "-@tyf3 + kt3*( -dot([nx],pos(umass3cm,ptB3)) ) " )
(add-line-force Fr4 :name "front rear tyre force" :point1 wheel4cm
:direction [nx] :magnitude "-@tyf4 + kt4*( -dot([nx],pos(umass4cm,ptB4)) ) " )
E.1 AutoSim Code of the Nonlinear Full-Car Model 113

;;; 6. add loads ;;;;;;;;;;;;;;;;;


(add-line-force Fs :name "vertical load force" :point1 smasscm
:direction [nx] :magnitude "0" )
(add-moment Ttheta :name "pitch torque" :body1 smass
:direction [ny] :magnitude "0")
(add-moment Tphi :name "roll torque" :body1 smass
:direction [nz] :magnitude "0")

;;
;; apply the torques to both tyres
;;
(install-table accetor "acceleration torque" :npts 1000
:xunits "T" :yunits "F*L" :values ((0 0) (1 1) (6 1) (6 0)) )
(install-table braking "braking torque" :npts 1000
:xunits "T" :yunits "F*L" :values ((0 0) (8 0) (9 -1) (10 -1) (11 -1)) )

(setsym z1dot "dot([nz],vel(umass10))") ;; absolute forward speed of the front right wheel
(setsym z2dot "dot([nz],vel(umass20))") ;; absolute forward speed of the front left wheel
(setsym z3dot "dot([nz],vel(umass30))") ;; absolute forward speed of the rear right wheel
(setsym z4dot "dot([nz],vel(umass40))") ;; absolute forward speed of the rear left wheel
(setsym t1dot "ru(wheel1)") ;; absolute forward rotational speed of the front right wheel
(setsym t2dot "ru(wheel2)") ;; absolute forward rotational speed of the front left wheel
(setsym t3dot "ru(wheel3)") ;; absolute forward rotational speed of the rear right wheel
(setsym t4dot "ru(wheel4)") ;; absolute forward rotational speed of the rear left wheel

(install-table TB "input profile(forward speed vs. braking torque)"


:table-function tabf
:npts 1000 :deriv TBp
:xunits "l/t" :yunits "f*l"
:keyword "braking torque-profile"
:values ( (0 0) (0 1) (2 1) ))

(install-table dz "dead zone"


:npts 1000
:xunits "T"
:yunits "F*L"
:values ((0 0) (0 1) (0.01 1) (1 1)))

(setsym T1 "0.2*braking(t,1,1)*TB(@t1dot,1,1)*Tbrake1*dz(abs(@t1dot),1,1)" ) ;; applied torque; 0 when the forward speed equals to 0


(setsym T2 "0.2*braking(t,1,1)*TB(@t2dot,1,1)*Tbrake2*dz(abs(@t2dot),1,1)" ) ;; applied torque; 0 when the forward speed equals to 0
(setsym T3 "0.2*braking(t,1,1)*TB(@t3dot,1,1)*Tbrake3*dz(abs(@t3dot),1,1)" ) ;; applied torque; 0 when the forward speed equals to 0
(setsym T4 "0.2*braking(t,1,1)*TB(@t4dot,1,1)*Tbrake4*dz(abs(@t4dot),1,1)" ) ;; applied torque; 0 when the forward speed equals to 0

(add-moment T1accel :name "applied torque on front right wheel" :direction [umass1y]
:magnitude "Taccel*accetor(t,1,1)" :body1 wheel1 :body2 smass)
(add-moment T2accel :name "applied torque on front left wheel" :direction [umass2y]
:magnitude "Taccel*accetor(t,1,1)" :body1 wheel2 :body2 smass)

(add-moment Tbr1 :name "applied torque on front right wheel" :direction [umass1y]
:magnitude "@T1" :body1 wheel1 :body2 smass)
(add-moment Tbr2 :name "applied torque on front left wheel" :direction [umass2y]
:magnitude "@T2" :body1 wheel2 :body2 smass)
(add-moment Tbr3 :name "applied torque on rear right wheel" :direction [umass3y]
:magnitude "@T3" :body1 wheel3 :body2 smass)
(add-moment Tbr4 :name "applied torque on rear left wheel" :direction [umass4y]
:magnitude "@T4" :body1 wheel4 :body2 smass)

;;; add the tyre model


(setsym tyv1 "dot([nz],vel(wheel10))") ;;; tyre forward velocity
(setsym tyv2 "dot([nz],vel(wheel20))")
(setsym tyv3 "dot([nz],vel(wheel30))")
(setsym tyv4 "dot([nz],vel(wheel40))")

(setsym kappa1 "-(@tyv1-rwheel*ru(wheel1))/abs(@tyv1)*100") ;;; kappa for each tyre


(setsym kappa2 "-(@tyv2-rwheel*ru(wheel2))/abs(@tyv2)*100")
(setsym kappa3 "-(@tyv3-rwheel*ru(wheel3))/abs(@tyv3)*100")
(setsym kappa4 "-(@tyv4-rwheel*ru(wheel4))/abs(@tyv4)*100")

(add-variables dyvars real tys1 tys2 tys3 tys4) ;;; braking and accelerating tyre forces
(add-equation init &tys1 "0") (add-equation init &tys2 "0")
(add-equation init &tys3 "0") (add-equation init &tys4 "0")
114 Appendix to Chapter 7

(add-subroutine update tyre("-fm(Fr1)" @kappa1 &tys1)) ;;; call subroutines to generate slip force
(add-subroutine update tyre("-fm(Fr2)" @kappa2 &tys2))
(add-subroutine update tyre("-fm(Fr3)" @kappa3 &tys3))
(add-subroutine update tyre("-fm(Fr4)" @kappa4 &tys4))

(install-table FB "input profile(forward speed vs. braking forces)"


:table-function tabf :npts 1000 :deriv FBp
:xunits "l/t" :yunits "f*l" :keyword "braking torque-profile"
:values ((0 0) (0 1) (20 1) ))

(add-line-force slip_f1 :name "front right tyre slip" :direction [nz]


:point1 wheel10 :magnitude "tys1*FB(@z1dot,1,1)")
(add-line-force slip_f2 :name "front left tyre slip" :direction [nz]
:point1 wheel20 :magnitude "tys2*FB(@z2dot,1,1)")
(add-line-force slip_f3 :name "rear right tyre slip" :direction [nz]
:point1 wheel30 :magnitude "tys3*FB(@z3dot,1,1)")
(add-line-force slip_f4 :name "rear left tyre slip" :direction [nz]
:point1 wheel40 :magnitude "tys4*FB(@z4dot,1,1)")
(add-moment slip_m1 :name "tyre slip torque on front right wheel"
:direction [wheel1y] :body1 wheel1 :magnitude "-tys1*rwheel*FB(@z1dot,1,1)")
(add-moment slip_m2 :name "tyre slip torque on front left wheel"
:direction [wheel2y] :body1 wheel2 :magnitude "-tys2*rwheel*FB(@z2dot,1,1)")
(add-moment slip_m3 :name "tyre slip torque on rear right wheel"
:direction [wheel3y] :body1 wheel3 :magnitude "-tys3*rwheel*FB(@z3dot,1,1)");
(add-moment slip_m4 :name "tyre slip torque on rear left wheel"
:direction [wheel4y] :body1 wheel4 :magnitude "-tys4*rwheel*FB(@z4dot,1,1)")

;;; 7. measure outputs ;;;;;;;;;;;


(add-out "1000*dot([nx],pos(smass0))" "1000zs")
(add-out "1000*rq(smass,1)" "1000zt")
(add-out "1000*rq(smass,2)" "1000zp")
(add-out "1000*dot([nx],pos(umass1cm,ptB1))" "1000zu1")
(add-out "1000*dot([nx],pos(umass2cm,ptB2))" "1000zu2")
(add-out "1000*dot([nx],pos(umass3cm,ptB3))" "1000zu3")
(add-out "1000*dot([nx],pos(umass4cm,ptB4))" "1000zu4")
(add-standard-output)
(add-out "fm(T1accel)+fm(Tbr1)" "T1")
(add-out "fm(T2accel)+fm(Tbr2)" "T2")
(add-out "fm(Tbr3)" "T3")
(add-out "fm(Tbr4)" "T4")

(finish)

(setsym *h-file-names* ("sim.h" "fcontr2.h" "tyre.h"))

(set-defaults ms 1600 It 1000 Ip 450 m1 25 m2 25 m3 25 m4 25


c1 5000 c2 5000 c3 5000 c4 5000
k1 20000 k2 20000 k3 20000 k4 20000
Lf 1.15 Lr 1.35 tf 0.75 tr 0.75
kt1 250000 kt2 250000 kt3 250000 kt4 250000
Taccel 1000 Tbrake1 4200 Tbrake2 4200 Tbrake3 2800 Tbrake4 2800
"tu(smass,3)" 15e-4
"ru(wheel1,1)" 50e-4 "ru(wheel2,1)" 50e-4
"ru(wheel3,1)" 50e-4 "ru(wheel4,1)" 50e-4
rwheel 0.3 Mwheel 25 Iwheel 1
dh 0.00001 STOPT 15 STEP 0.00001 iprint 10000)

(write-to-file write-c "w:\\PhD\\programs\\autosim_thesis\\c_programs\\fcar.c")


(write-to-file write-h "w:\\PhD\\programs\\autosim_thesis\\c_programs\\sim.h") ;;; *always* call it sim.h!!

E.2 C-Code for the Active Controller


#include <stdio.h>
#include <math.h>
#include "deftypes.h"
#include "simlib.h"
#include "fcontr2.h"
/* ----------------------------------------------------------------------------
write a subroutine in C code; calculate active control in the sharp scheme
E.2 C-Code for the Active Controller 115

---------------------------------------------------------------------------- */
void fcontr2(real_as zsddot, real_as ztddot, real_as zpddot,
real_as D1, real_as D2, real_as D3, real_as D4,
real_as *z1R, real_as *z1pR, real_as *z1p2R, real_as *Ub1R, real_as *Ub1d1R, real_as *Ub1d2R,
real_as *E1R, real_as *E1d1R, real_as *Db1pR, real_as *U1pR,
real_as *z2R, real_as *z2pR, real_as *z2p2R, real_as *Ub2R, real_as *Ub2d1R, real_as *Ub2d2R,
real_as *E2R, real_as *E2d1R, real_as *Db2pR, real_as *U2pR,
real_as *z3R, real_as *z3pR, real_as *z3p2R, real_as *Uw3R, real_as *Uw3d1R, real_as *Uw3d2R,
real_as *E3R, real_as *E3d1R, real_as *Dw3pR, real_as *U3pR,
real_as *z4R, real_as *z4pR, real_as *z4p2R, real_as *Ur4R, real_as *Ur4d1R, real_as *Ur4d2R,
real_as *E4R, real_as *E4d1R, real_as *Dr4pR, real_as *U4pR,
real_as h)
{
real_as b3_11, b2_11, b1_11, b0_11, a2_11, a1_11, a0_11, delta, wn;
real_as b3_22, b2_22, b1_22, b0_22, a2_22, a1_22, a0_22;
real_as b3_33, b2_33, b1_33, b0_33, a2_33, a1_33, a0_33;
real_as b3_44, b2_44, b1_44, b0_44, a2_44, a1_44, a0_44;
real_as tr, tf, lr, lf;
real_as z1[2], z1p, z1p2, Ub1[2], Ub1d1[2], Ub1d2[2], Ub1d3[1],E1[2], E1d1[2], E1d2[1];
real_as z2[2], z2p, z2p2, Ub2[2], Ub2d1[2], Ub2d2[2], Ub2d3[1],E2[2], E2d1[2], E2d2[1];
real_as z3[2], z3p, z3p2, Uw3[2], Uw3d1[2], Uw3d2[2], Uw3d3[1],E3[2], E3d1[2], E3d2[1];
real_as z4[2], z4p, z4p2, Ur4[2], Ur4d1[2], Ur4d2[2], Ur4d3[1],E4[2], E4d1[2], E4d2[1];
real_as Db1[2], Db2[2], Dr1[2], Dr2[2], Dw3[2], Dr4[2];
real_as Db1d1[1], Db2d1[1], Dr4d1[1];
real_as z1d1[1], z1d2[1], z1d3[1], z2d1[1], z2d2[1], z2d3[1];
real_as z3d1[1], z3d2[1], z3d3[1], z4d1[1], z4d2[1], z4d3[1];
real_as Ur1[2], Ur2[2], U1[2], U2[2], U3[2], U4[2];

/* initialise variables */
tr = 0.75;
tf = 0.75;
lf = 1.15;
lr = 1.35;

b3_11 = -24.8061; b2_11 = -4.2929e3; b1_11 = -3.6509e5; b0_11 = -7.3904e6;


a2_11 = 210.9647; a1_11 = 2.5073e4; a0_11 = 1.8891e5;

b3_22 = -24.8061; b2_22 = -4.2929e3; b1_22 = -3.6509e5; b0_22 = -7.3904e6;


a2_22 = 210.9647; a1_22 = 2.5073e4; a0_22 = 1.8891e5;

b1_33 = -0.1036*300; b0_33 = 300; a0_33 = 300;

b3_44 = -24.8061; b2_44 = -4.2929e3; b1_44 = -3.6509e5; b0_44 = -7.3904e6;


a2_44 = 210.9647; a1_44 = 2.5073e4; a0_44 = 1.8891e5;

wn = 100; delta = 1/sqrt(2);

/* initialise states */
z1[0] = *z1R; z1p = *z1pR; z1p2 = *z1p2R;
Ub1[0] = *Ub1R; Ub1d1[0]= *Ub1d1R; Ub1d2[0]= *Ub1d2R;
E1[0] = *E1R; E1d1[0] = *E1d1R; Db1[0] = *Db1pR; U1[0] = *U1pR;

z2[0] = *z2R; z2p = *z2pR; z2p2 = *z2p2R;


Ub2[0] = *Ub2R; Ub2d1[0]= *Ub2d1R; Ub2d2[0]= *Ub2d2R;
E2[0] = *E2R; E2d1[0] = *E2d1R; Db2[0] = *Db2pR; U2[0] = *U2pR;

z3[0] = *z3R; z3p = *z3pR; z3p2 = *z3p2R;


Uw3[0] = *Uw3R; Uw3d1[0]= *Uw3d1R; Uw3d2[0]= *Uw3d2R;
E3[0] = *E3R; E3d1[0] = *E3d1R; Dw3[0] = *Dw3pR; U3[0] = *U3pR;

z4[0] = *z4R; z4p = *z4pR; z4p2 = *z4p2R;


Ur4[0] = *Ur4R; Ur4d1[0]= *Ur4d1R; Ur4d2[0]= *Ur4d2R;
E4[0] = *E4R; E4d1[0] = *E4d1R; Dr4[0] = *Dr4pR; U4[0] = *U4pR;

/* use Euler method to solve the differential equations */


Db1[1] = (D1+D2)/2; Db2[1] = (D3+D4)/2;
Dr1[1] = (D1-D2)/2; Dr2[1] = (D3-D4)/2;
Dw3[1] = (tr*Dr1[1] -tf*Dr2[1])/(tf+tr);
Dr4[1] = (Dr1[1]+Dr2[1])/(tf+tr);

/* step1: essential controller structure (U2) */


Db1d1[0] = (Db1[1] - Db1[0])/h;
116 Appendix to Chapter 7

z1[1] = (ms*lr*zsddot +It*ztddot +2*c1*(lr+lf)*Db1d1[0] +2*k1*(lr+lf)*Db1[0]


-2*k1*(lr+lf)*z1[0])*h/(2*c1*(lr+lf)) +z1[0];
z1d1[0] = (z1[1] - z1[0])/h;
z1d2[0] = (z1[1] - 2*z1[0]+z1p)/(h*h);
z1d3[0] = (z1[1] - 3*z1[0] + 3*z1p -z1p2)/(h*h*h);

Db2d1[0] = (Db2[1] - Db2[0])/h;


z2[1] = (ms*lf*zsddot -It*ztddot +2*c3*(lr+lf)*Db2d1[0] +2*k3*(lr+lf)*Db2[0]
-2*k3*(lr+lf)*z2[0])*h/(2*c3*(lr+lf)) +z2[0];
z2d1[0] = (z2[1] - z2[0])/h;
z2d2[0] = (z2[1] - 2*z2[0]+z2p)/(h*h);
z2d3[0] = (z2[1] - 3*z2[0] + 3*z2p -z2p2)/(h*h*h);

z3[1] = Dw3[1];
z3d1[0] = (z3[1] - z3[0])/h;
z3d2[0] = (z3[1] - 2*z3[0] + z3p)/(h*h);
z3d3[0] = (z3[1] - 3*z3[0] + 3*z3p -z3p2)/(h*h*h);

Dr4d1[0] = (Dr4[1] - Dr4[0])/h;


z4[1] = (Ip*zpddot +2*c1*tf*(tr+tf)*Dr4d1[0] +2*k1*tf*(tr+tf)*Dr4[0]
-2*k1*tf*(tr+tf)*z4[0])*h/(2*c1*tf*(tr+tf)) +z4[0];
z4d1[0] = (z4[1] - z4[0])/h;
z4d2[0] = (z4[1]-2*z4[0]+z4p)/(h*h);
z4d3[0] = (z4[1] - 3*z4[0] + 3*z4p -z4p2)/(h*h*h);

/* step2: H_infinity controller design */

Ub1d3[0] = b3_11*(z1d3[0]) + b2_11*(z1d2[0]) + b1_11*(z1d1[0]) + b0_11*(z1[0]) -a2_11*Ub1d2[0] - a1_11*Ub1d1[0] - a0_11*Ub1[0];


Ub1d2[1] = Ub1d2[0] + h*Ub1d3[0];
Ub1d1[1] = Ub1d1[0] + h*Ub1d2[0];
Ub1[1] = Ub1[0] + h*Ub1d1[0];

Ub2d3[0] = b3_22*(z2d3[0]) + b2_22*(z2d2[0]) + b1_22*(z2d1[0]) + b0_22*(z2[0]) -a2_22*Ub2d2[0] - a1_22*Ub2d1[0] - a0_22*Ub2[0];


Ub2d2[1] = Ub2d2[0] + h*Ub2d3[0];
Ub2d1[1] = Ub2d1[0] + h*Ub2d2[0];
Ub2[1] = Ub2[0] + h*Ub2d1[0];

Uw3d1[0] = b1_33*(z3d1[0]) + b0_33*(z3[0]) - a0_33*Uw3[0];


Uw3[1] = Uw3[0] + h*Uw3d1[0];

/* Uw3[1] = z3[0]; */

Ur4d3[0] = b3_44*(z4d3[0]) + b2_44*(z4d2[0]) + b1_44*(z4d1[0]) + b0_44*(z4[0]) -a2_44*Ur4d2[0] - a1_44*Ur4d1[0] - a0_44*Ur4[0];


Ur4d2[1] = Ur4d2[0] + h*Ur4d3[0];
Ur4d1[1] = Ur4d1[0] + h*Ur4d2[0];
Ur4[1] = Ur4[0] + h*Ur4d1[0];

Ur1[1] = Uw3[1] + tf*Ur4[1]; Ur2[1] = -Uw3[1] + tr*Ur4[1];

U1[1] = Ub1[1] + Ur1[1]; U2[1] = Ub1[1] - Ur1[1];


U3[1] = Ub2[1] + Ur2[1]; U4[1] = Ub2[1] - Ur2[1];

/* step3: including dynamics of the actuator */


E1d2[0] = wn*wn*U1[0] -2*delta*wn*E1d1[0] -wn*wn*E1[0];
E1d1[1] = E1d1[0] + h*E1d2[0];
E1[1] = E1[0] + h*E1d1[0];

E2d2[0] = wn*wn*U2[0] -2*delta*wn*E2d1[0] -wn*wn*E2[0];


E2d1[1] = E2d1[0] + h*E2d2[0];
E2[1] = E2[0] + h*E2d1[0];

E3d2[0] = wn*wn*U3[0] -2*delta*wn*E3d1[0] -wn*wn*E3[0];


E3d1[1] = E3d1[0] + h*E3d2[0];
E3[1] = E3[0] + h*E3d1[0];

E4d2[0] = wn*wn*U4[0] -2*delta*wn*E4d1[0] -wn*wn*E4[0];


E4d1[1] = E4d1[0] + h*E4d2[0];
E4[1] = E4[0] + h*E4d1[0];

/* step4: update states */


*z1R = z1[1]; *z1pR = z1[0]; *z1p2R = z1p;
*Ub1R = Ub1[1]; *Ub1d1R = Ub1d1[1]; *Ub1d2R = Ub1d2[1];
E.3 C-Code for the Tyre Model 117

*E1R = E1[1]; *E1d1R = E1d1[1]; *Db1pR = Db1[1]; *U1pR = U1[1];

*z2R = z2[1]; *z2pR = z2[0]; *z2p2R = z2p;


*Ub2R = Ub2[1]; *Ub2d1R = Ub2d1[1]; *Ub2d2R = Ub2d2[1];
*E2R = E2[1]; *E2d1R = E2d1[1]; *Db2pR = Db2[1]; *U2pR = U2[1];

*z3R = z3[1]; *z3pR = z3[0]; *z3p2R = z3p;


*Uw3R = Uw3[1]; *Uw3d1R = Uw3d1[1]; *Uw3d2R = Uw3d2[1];
*E3R = E3[1]; *E3d1R = E3d1[1]; *Dw3pR = Dw3[1]; *U3pR = U3[1];

*z4R = z4[1]; *z4pR = z4[0]; *z4p2R = z4p;


*Ur4R = Ur4[1]; *Ur4d1R = Ur4d1[1]; *Ur4d2R = Ur4d2[1];
*E4R = E4[1]; *E4d1R = E4d1[1]; *Dr4pR = Dr4[1]; *U4pR = U4[1];
}

E.3 C-Code for the Tyre Model


#include <stdio.h>
#include <math.h>
#include "deftypes.h"
#include "simlib.h"
#include "tyre.h"
/* ----------------------------------------------------------------------------
write a subroutine in C code; calculate the accelerating and braking forces using magic formula
---------------------------------------------------------------------------- */
void tyre(real_as Fz, real_as kappa, real_as *Fx)
{
real_as a1, a2, a3, a4, a5, a6, a7, a8;
real_as B, C, D, E, phi, temp;

/* initialise variables */
a1 = -21.3; a2 = 1144; a3 = 49.6; a4 = 226;
a5 = 0.069; a6 = -0.006; a7 = 0.056; a8 = 0.486;

/* use magic formula from the paper */


D = a1*pow(Fz/1000,2) + a2*Fz/1000;
C = 1.65;
temp = a5*Fz/1000;
B = (a3*pow(Fz/1000,2)+a4*Fz/1000)/(C*D*exp(temp));
E = a6*pow(Fz/1000,2) + a7*Fz/1000 + a8;

phi = (1-E)*kappa +(E/B)*atan(B*kappa);


*Fx = D*sin(C*atan(B*phi));
}
Appendix F

Appendix to Chapter 8

F.1 The Linearised Half-Car Double-Wishbone Model


;;; sharp scheme applied to a half-car double wishbone model -

(reset) (si) (setsym *stiff-integrator* nil) ;(add-gravity)

(add-point ptQ :coordinates (Qx Qy 0))


(add-point ptrA :coordinates (rAx rAy 0)) (add-point ptlA :coordinates (lAx lAy 0))
(add-point ptrB :coordinates (rBx rBy 0)) (add-point ptlB :coordinates (lBx lBy 0))
(add-point ptrC :coordinates (rCx rCy 0)) (add-point ptlC :coordinates (lCx lCy 0))
(add-point ptrD :coordinates (rDx rDy 0)) (add-point ptlD :coordinates (lDx lDy 0))
(add-point ptrP :coordinates (rPx rPy 0)) (add-point ptlP :coordinates (lPx lPy 0))
(add-point ptrR :coordinates (rRx rRy 0)) (add-point ptlR :coordinates (lRx lRy 0))
(add-point ptrS :coordinates (rSx rSy 0)) (add-point ptlS :coordinates (lSx lSy 0))
(add-point ptrT :coordinates (rTx rTy 0)) (add-point ptlT :coordinates (lTx lTy 0))

;;; add the sprung mass


(add-body smass :name "sprung mass"
:joint-coordinates ptQ :cm-coordinates ptQ
:translate ([nx] [ny]) :body-rotation-axes z
:parent-rotation-axis [nz] :reference-axis [nx]
:mass "ms" :inertia-matrix (0 0 "Ip"))
(add-point smass_rA :body smass :coordinates ptrA) (add-point smass_lA :body smass :coordinates ptlA)
(add-point smass_rB :body smass :coordinates ptrB) (add-point smass_lB :body smass :coordinates ptlB)
(add-point smass_rR :body smass :coordinates ptrR) (add-point smass_lR :body smass :coordinates ptlR)

;;; add the double-wishbone structure


(add-body rlink3 :name "right upper wishbone link3"
:parent smass :joint-coordinates ptrB
:cm-coordinates ptrB :body-rotation-axes z
:parent-rotation-axis [smassz] :reference-axis [smassx]
:mass "rm3" :inertia-matrix (0 0 "rI3"))
(add-body rlink4 :name "right lower wishbone link4"
:parent smass :joint-coordinates ptrA
:cm-coordinates ptrA :body-rotation-axes z
:parent-rotation-axis [smassz] :reference-axis [smassx]
:mass "rm4" :inertia-matrix (0 0 "rI4"))
(add-body llink3 :name "left upper wishbone link3"
:parent smass :joint-coordinates ptlB
:cm-coordinates ptlB :body-rotation-axes z
:parent-rotation-axis [smassz] :reference-axis [smassx]
:mass "lm3" :inertia-matrix (0 0 "lI3"))
(add-body llink4 :name "left lower wishbone link4"
:parent smass :joint-coordinates ptlA
:cm-coordinates ptlA :body-rotation-axes z
:parent-rotation-axis [smassz] :reference-axis [smassx]
:mass "lm4" :inertia-matrix (0 0 "lI4"))
(add-point rlink3_rC :body rlink3 :coordinates ptrC) (add-point llink3_lC :body llink3 :coordinates ptlC)
(add-point rlink4_rD :body rlink4 :coordinates ptrD) (add-point llink4_lD :body llink4 :coordinates ptlD)

118
F.1 The Linearised Half-Car Double-Wishbone Model 119

;;; add the unsprung masses


(add-body rumass :name "right unsprung mass"
:parent rlink3 :joint-coordinates ptrC
:cm-coordinates ptrP :body-rotation-axes z
:parent-rotation-axis [rlink3z] :reference-axis [rlink3x]
:mass "rmu" :inertia-matrix (0 0 "rIu"))
(add-body lumass :name "left unsprung mass"
:parent llink3 :joint-coordinates ptlC
:cm-coordinates ptlP :body-rotation-axes z
:parent-rotation-axis [llink3z] :reference-axis [llink3x]
:mass "lmu" :inertia-matrix (0 0 "lIu"))
(add-point rumass_C :body rumass :coordinates ptrC) (add-point lumass_C :body lumass :coordinates ptlC)
(add-point rumass_D :body rumass :coordinates ptrD) (add-point lumass_D :body lumass :coordinates ptlD)
(add-point rumass_P :body rumass :coordinates ptrP) (add-point lumass_P :body lumass :coordinates ptlP)
(add-point rumass_S :body rumass :coordinates ptrS) (add-point lumass_S :body lumass :coordinates ptlS)
(add-point rumass_T :body rumass :coordinates ptrT) (add-point lumass_T :body lumass :coordinates ptlT)

;;; ------------------ Given the constraints of the 4-bar linkage -------------------


(no-movement rlink4_rD rumass_D [ny] :q "rq(rlink3)" :u "ru(rlink3)")
(no-movement rlink4_rD rumass_D [nx] :q "rq(rlink4)" :u "ru(rlink4)")
(no-movement llink4_lD lumass_D [ny] :q "rq(llink3)" :u "ru(llink3)")
(no-movement llink4_lD lumass_D [nx] :q "rq(llink4)" :u "ru(llink4)")

;;; define the exogenous and controlled inputs


(add-variables dyvars real Zr1 Zr2 FFs FFp E1 E2)

;;; add active suspension forces


(add-strut rsstrut :name "right suspension strut" :point1 smass_rR :point2 rumass_S
:magnitude "-k2*(x-x0+E2) -c2*v")
(add-strut lsstrut :name "left suspension strut" :point1 smass_lR :point2 lumass_S
:magnitude "-k1*(x-x0+E1) -c1*v")

;;; add tyre forces


(add-line-force rFr :name "right tyre force" :point1 rumass_T :direction [nx]
:magnitude "kt2*( Zr2 - dot([nx],pos(rumass_T,ptrT)))" )
(add-line-force lFr :name "left tyre force" :point1 lumass_T :direction [nx]
:magnitude "kt1*( Zr1 - dot([nx],pos(lumass_T,ptlT)))" )

;;; add loads


(add-line-force Fs :name "load input" :point1 smasscm :direction [nx] :magnitude "FFs")
(add-moment Ts :name "moment input" :body1 smass :direction [nz] :magnitude "FFp")

;;; define the outputs


(add-out "dot([nx],pos(smasscm,ptQ))" "zs")
(add-out "rq(smass)" "zsphi")
(add-out "dot([nx], pos(lumass_P, ptlP))" "zu1")
(add-out "dot([nx], pos(rumass_P, ptrP))" "zu2")

;;; define the measurement


(add-out "dxdt(dot([nx],vel(smasscm,ptQ)))" "zsddot")
(add-out "dxdt(ru(smass))" "zsphiddot")
(add-out "mag(pos(lumass_S, smass_lR)) -sqrt((lSx-lRx)**2+(lSy-lRy)**2)" "D1")
(add-out "mag(pos(rumass_S, smass_rR)) -sqrt((rSx-rRx)**2+(rSy-rRy)**2)" "D2")

(linear :u (Zr1 Zr2 FFs FFp E1 E2))

(set-defaults ms 625 Ip 170 m1 50 m2 50 c1 1000 c2 1000


k1 4000 k2 4000 kt1 500000 kt2 500000 l1 1.15 l2 1.35
rAx 0.25 rAy 1 rBx -0.05 rBy 0.94 rCx 0.15 rCy 1.4 rDx 0.25 rDy 1.4
rPx 0.2 rPy 1.5 Qx 0 Qy 0 rRx -0.25 rRy 1.04 rSx 0.2 rSy 1.4
rTx 0.35 rTy 1.5
rm3 0 rm4 0 rI3 0 rI4 0 rIu 0.1 rmu 50
lAx 0.25 lAy -1 lBx -0.05 lBy -0.94 lCx 0.15 lCy -1.4 lDx 0.25 lDy -1.4
lPx 0.2 lPy -1.5 lRx -0.25 lRy -1.04 lSx 0.2 lSy -1.4
lTx 0.35 lTy -1.5
lm3 0 lm4 0 lI3 0 lI4 0 lIu 0.1 lmu 50
hh 0.0001 STOPT 5 STEP 0.0001 iprint 1000)

;;; output the linearised model for analysis and controller design
(write-to-file write-matlab "w:\\PhD\\programs\\matlab_thesis\\wb_hcar_lin4.m")
120 Appendix to Chapter 8

F.2 The Linearised Full-Car Double-Wishbone Model


;;; sharp scheme applied to double full-car wishbone model

(reset) (si) (setsym *stiff-integrator* nil) ;(add-gravity)

(add-point ptQ :coordinates (Qx Qy Qz))


(add-point ptA1 :coordinates (A1x A1y A1z)) (add-point ptA2 :coordinates (A2x A2y A2z))
(add-point ptB1 :coordinates (B1x B1y B1z)) (add-point ptB2 :coordinates (B2x B2y B2z))
(add-point ptC1 :coordinates (C1x C1y C1z)) (add-point ptC2 :coordinates (C2x C2y C2z))
(add-point ptD1 :coordinates (D1x D1y D1z)) (add-point ptD2 :coordinates (D2x D2y D2z))
(add-point ptP1 :coordinates (P1x P1y P1z)) (add-point ptP2 :coordinates (P2x P2y P2z))
(add-point ptR1 :coordinates (R1x R1y R1z)) (add-point ptR2 :coordinates (R2x R2y R2z))
(add-point ptS1 :coordinates (S1x S1y S1z)) (add-point ptS2 :coordinates (S2x S2y S2z))
(add-point ptT1 :coordinates (T1x T1y T1z)) (add-point ptT2 :coordinates (T2x T2y T2z))
(add-point ptA3 :coordinates (A3x A3y A3z)) (add-point ptA4 :coordinates (A4x A4y A4z))
(add-point ptB3 :coordinates (B3x B3y B3z)) (add-point ptB4 :coordinates (B4x B4y B4z))
(add-point ptC3 :coordinates (C3x C3y C3z)) (add-point ptC4 :coordinates (C4x C4y C4z))
(add-point ptD3 :coordinates (D3x D3y D3z)) (add-point ptD4 :coordinates (D4x D4y D4z))
(add-point ptP3 :coordinates (P3x P3y P3z)) (add-point ptP4 :coordinates (P4x P4y P4z))
(add-point ptR3 :coordinates (R3x R3y R3z)) (add-point ptR4 :coordinates (R4x R4y R4z))
(add-point ptS3 :coordinates (S3x S3y S3z)) (add-point ptS4 :coordinates (S4x S4y S4z))
(add-point ptT3 :coordinates (T3x T3y T3z)) (add-point ptT4 :coordinates (T4x T4y T4z))

;;; add the sprung mass


(add-body smass :name "sprung mass"
:joint-coordinates ptQ :cm-coordinates ptQ
:translate ([nx]) :body-rotation-axes (y z)
:parent-rotation-axis [ny] :reference-axis [nz]
:mass "ms" :inertia-matrix ("Iyaw" "Ipitch" "Iroll"))
(add-point smass_A1 :body smass :coordinates ptA1) (add-point smass_A2 :body smass :coordinates ptA2)
(add-point smass_B1 :body smass :coordinates ptB1) (add-point smass_B2 :body smass :coordinates ptB2)
(add-point smass_R1 :body smass :coordinates ptR1) (add-point smass_R2 :body smass :coordinates ptR2)
(add-point smass_A3 :body smass :coordinates ptA3) (add-point smass_A4 :body smass :coordinates ptA4)
(add-point smass_B3 :body smass :coordinates ptB3) (add-point smass_B4 :body smass :coordinates ptB4)
(add-point smass_R3 :body smass :coordinates ptR3) (add-point smass_R4 :body smass :coordinates ptR4)

;;; add the double-wishbone structure


(add-body link3_1 :name "right front upper wishbone link3"
:parent smass :joint-coordinates ptB1
:cm-coordinates ptB1 :body-rotation-axes z
:parent-rotation-axis [smassz] :reference-axis [smassx]
:mass "lm3" :inertia-matrix (0 0 "lI3"))
(add-body link4_1 :name "right front lower wishbone link4"
:parent smass :joint-coordinates ptA1
:cm-coordinates ptA1 :body-rotation-axes z
:parent-rotation-axis [smassz] :reference-axis [smassx]
:mass "lm4" :inertia-matrix (0 0 "lI4"))
(add-body link3_2 :name "left front upper wishbone link3"
:parent smass :joint-coordinates ptB2
:cm-coordinates ptB2 :body-rotation-axes z
:parent-rotation-axis [smassz] :reference-axis [smassx]
:mass "lm3" :inertia-matrix (0 0 "lI3"))
(add-body link4_2 :name "left front lower wishbone link4"
:parent smass :joint-coordinates ptA2
:cm-coordinates ptA2 :body-rotation-axes z
:parent-rotation-axis [smassz] :reference-axis [smassx]
:mass "lm4" :inertia-matrix (0 0 "lI4"))
(add-body link3_3 :name "right rear upper wishbone link3"
:parent smass :joint-coordinates ptB3
:cm-coordinates ptB3 :body-rotation-axes z
:parent-rotation-axis [smassz] :reference-axis [smassx]
:mass "lm3" :inertia-matrix (0 0 "lI3"))
(add-body link4_3 :name "right rear lower wishbone link4"
:parent smass :joint-coordinates ptA3
:cm-coordinates ptA3 :body-rotation-axes z
:parent-rotation-axis [smassz] :reference-axis [smassx]
:mass "lm4" :inertia-matrix (0 0 "lI4"))
(add-body link3_4 :name "left rear upper wishbone link3"
:parent smass :joint-coordinates ptB4
:cm-coordinates ptB4 :body-rotation-axes z
F.2 The Linearised Full-Car Double-Wishbone Model 121

:parent-rotation-axis [smassz] :reference-axis [smassx]


:mass "lm3" :inertia-matrix (0 0 "lI3"))
(add-body link4_4 :name "left rear lower wishbone link4"
:parent smass :joint-coordinates ptA4
:cm-coordinates ptA4 :body-rotation-axes z
:parent-rotation-axis [smassz] :reference-axis [smassx]
:mass "lm4" :inertia-matrix (0 0 "lI4"))
(add-point link3_1C :body link3_1 :coordinates ptC1) (add-point link3_2C :body link3_2 :coordinates ptC2)
(add-point link4_1D :body link4_1 :coordinates ptD1) (add-point link4_2D :body link4_2 :coordinates ptD2)
(add-point link3_3C :body link3_3 :coordinates ptC3) (add-point link3_4C :body link3_4 :coordinates ptC4)
(add-point link4_3D :body link4_3 :coordinates ptD3) (add-point link4_4D :body link4_4 :coordinates ptD4)

;;; add the unsprung masses


(add-body umass1 :name "right front unsprung mass"
:parent link3_1 :joint-coordinates ptC1
:cm-coordinates ptP1 :body-rotation-axes z
:parent-rotation-axis [link3_1z] :reference-axis [link3_1x]
:mass "m1" :inertia-matrix (0 0 "I1"))
(add-body umass2 :name "left front unsprung mass"
:parent link3_2 :joint-coordinates ptC2
:cm-coordinates ptP2 :body-rotation-axes z
:parent-rotation-axis [link3_2z] :reference-axis [link3_2x]
:mass "m2" :inertia-matrix (0 0 "I2"))
(add-body umass3 :name "right rear unsprung mass"
:parent link3_3 :joint-coordinates ptC3
:cm-coordinates ptP3 :body-rotation-axes z
:parent-rotation-axis [link3_3z] :reference-axis [link3_3x]
:mass "m3" :inertia-matrix (0 0 "I3"))
(add-body umass4 :name "left rear unsprung mass"
:parent link3_4 :joint-coordinates ptC4
:cm-coordinates ptP4 :body-rotation-axes z
:parent-rotation-axis [link3_4z] :reference-axis [link3_4x]
:mass "m4" :inertia-matrix (0 0 "I4"))
(add-point umass1C :body umass1 :coordinates ptC1) (add-point umass2C :body umass2 :coordinates ptC2)
(add-point umass1D :body umass1 :coordinates ptD1) (add-point umass2D :body umass2 :coordinates ptD2)
(add-point umass1P :body umass1 :coordinates ptP1) (add-point umass2P :body umass2 :coordinates ptP2)
(add-point umass1S :body umass1 :coordinates ptS1) (add-point umass2S :body umass2 :coordinates ptS2)
(add-point umass1T :body umass1 :coordinates ptT1) (add-point umass2T :body umass2 :coordinates ptT2)
(add-point umass3C :body umass3 :coordinates ptC3) (add-point umass4C :body umass4 :coordinates ptC4)
(add-point umass3D :body umass3 :coordinates ptD3) (add-point umass4D :body umass4 :coordinates ptD4)
(add-point umass3P :body umass3 :coordinates ptP3) (add-point umass4P :body umass4 :coordinates ptP4)
(add-point umass3S :body umass3 :coordinates ptS3) (add-point umass4S :body umass4 :coordinates ptS4)
(add-point umass3T :body umass3 :coordinates ptT3) (add-point umass4T :body umass4 :coordinates ptT4)

;;; ------------------ Given the constraints of the 4-bar linkage -------------------


(no-movement link4_1D umass1D [umass1y] :q "rq(umass1)" :u "ru(umass1)")
(no-movement link4_1D umass1D [umass1x] :q "rq(link4_1)" :u "ru(link4_1)")
(no-movement link4_2D umass2D [umass2y] :q "rq(umass2)" :u "ru(umass2)")
(no-movement link4_2D umass2D [umass2x] :q "rq(link4_2)" :u "ru(link4_2)")
(no-movement link4_3D umass3D [umass3y] :q "rq(umass3)" :u "ru(umass3)")
(no-movement link4_3D umass3D [umass3x] :q "rq(link4_3)" :u "ru(link4_3)")
(no-movement link4_4D umass4D [umass4y] :q "rq(umass4)" :u "ru(umass4)")
(no-movement link4_4D umass4D [umass4x] :q "rq(link4_4)" :u "ru(link4_4)")

;;; define the exogenous and controlled inputs


(add-variables dyvars real Zr1 Zr2 Zr3 Zr4 FFs FFpitch FFroll E1 E2 E3 E4)

;;; define active suspension forces


(add-strut strut1 :name "right front suspension strut" :point1 smass_R1 :point2 umass1S
:magnitude " -k1*(x-x0+E1) -c1*v ")
(add-strut strut2 :name "left front suspension strut" :point1 smass_R2 :point2 umass2S
:magnitude " -k2*(x-x0+E2) -c2*v ")
(add-strut strut3 :name "right rear suspension strut" :point1 smass_R3 :point2 umass3S
:magnitude " -k3*(x-x0+E3) -c3*v ")
(add-strut strut4 :name "left rear suspension strut" :point1 smass_R4 :point2 umass4S
:magnitude " -k4*(x-x0+E4) -c4*v ")

;;; define the tyre forces


(add-line-force Fr1 :name "right front tyre force" :point1 umass1T :direction [nx]
:magnitude "kt1*( Zr1 - dot([nx],pos(umass1T,ptT1)))" )
(add-line-force Fr2 :name "left front tyre force" :point1 umass2T :direction [nx]
:magnitude "kt2*( Zr2 - dot([nx],pos(umass2T,ptT2)))" )
122 Appendix to Chapter 8

(add-line-force Fr3 :name "right rear tyre force" :point1 umass3T :direction [nx]
:magnitude "kt3*( Zr3 - dot([nx],pos(umass3T,ptT3)))" )
(add-line-force Fr4 :name "left rear tyre force" :point1 umass4T :direction [nx]
:magnitude "kt4*( Zr4 - dot([nx],pos(umass4T,ptT4)))" )

;;; define the loads


(add-line-force Fs :name "vertical load input" :point1 smasscm :direction [nx] :magnitude "FFs")
(add-moment Tp :name "pitch moment input" :body1 smass :direction [ny] :magnitude "FFpitch")
(add-moment Tr :name "roll moment input" :body1 smass :direction [nz] :magnitude "FFroll")

;;; define the outputs


(add-out "dot([nx],pos(smasscm,ptQ))" "zs")
(add-out "rq(smass,1)" "zpitch")
(add-out "rq(smass,2)" "zroll")
(add-out "dot([nx], pos(umass1P, ptP1))" "zu1")
(add-out "dot([nx], pos(umass2P, ptP2))" "zu2")
(add-out "dot([nx], pos(umass3P, ptP3))" "zu3")
(add-out "dot([nx], pos(umass4P, ptP4))" "zu4")

;;; define the measurements


(add-out "dxdt(dot([nx],vel(smasscm)))" "zsddot")
(add-out "dxdt(ru(smass,1))" "zpddot")
(add-out "dxdt(ru(smass,2))" "zrddot")
(add-out "sqrt( (dot([nx], pos(umass1S, smass_R1)))**2 +(dot([ny], pos(umass1S, smass_R1)))**2
+(dot([nz], pos(umass1S, smass_R1)))**2) -sqrt((S1x-R1x)**2+(S1y-R1y)**2+(S1z-R1z)**2)" "D1")
(add-out "sqrt( (dot([nx], pos(umass2S, smass_R2)))**2 +(dot([ny], pos(umass2S, smass_R2)))**2
+(dot([nz], pos(umass2S, smass_R2)))**2) -sqrt((S2x-R2x)**2+(S2y-R2y)**2+(S2z-R2z)**2)" "D2")
(add-out "sqrt( (dot([nx], pos(umass3S, smass_R3)))**2 +(dot([ny], pos(umass3S, smass_R3)))**2
+(dot([nz], pos(umass3S, smass_R3)))**2) -sqrt((S3x-R3x)**2+(S3y-R3y)**2+(S3z-R3z)**2)" "D3")
(add-out "sqrt( (dot([nx], pos(umass4S, smass_R4)))**2 +(dot([ny], pos(umass4S, smass_R4)))**2
+(dot([nz], pos(umass4S, smass_R4)))**2) -sqrt((S4x-R4x)**2+(S4y-R4y)**2+(S4z-R4z)**2)" "D4")

(linear :u (Zr1 Zr2 Zr3 Zr4 FFs FFpitch FFroll E1 E2 E3 E4))

(set-defaults ms 625 Ipitch 260 Iroll 170 Iyaw 2000


lm3 0 lm4 0 lI3 0 lI4 0
c1 500 k1 2000 kt1 250000 m1 46 I1 0.1
c2 500 k2 2000 kt2 250000 m2 46 I2 0.1
c3 500 k3 2000 kt3 250000 m3 60 I3 0.1
c4 500 k4 2000 kt4 250000 m4 60 I4 0.1
Qx 0 Qy 0 Qz 0
A1x 0.25 A1y -1 A1z 1.5 B1x -0.05 B1y -0.94 B1z 1.5
C1x 0.15 C1y -1.4 C1z 1.5 D1x 0.25 D1y -1.4 D1z 1.5
P1x 0.2 P1y -1.5 P1z 1.5 R1x -0.25 R1y -1.04 R1z 1.5
S1x 0.2 S1y -1.4 S1z 1.5 T1x 0.35 T1y -1.5 T1z 1.5
A2x 0.25 A2y 1 A2z 1.5 B2x -0.05 B2y 0.94 B2z 1.5
C2x 0.15 C2y 1.4 C2z 1.5 D2x 0.25 D2y 1.4 D2z 1.5
P2x 0.2 P2y 1.5 P2z 1.5 R2x -0.25 R2y 1.04 R2z 1.5
S2x 0.2 S2y 1.4 S2z 1.5 T2x 0.35 T2y 1.5 T2z 1.5
A3x 0.25 A3y -1 A3z -1.5 B3x -0.05 B3y -0.94 B3z -1.5
C3x 0.15 C3y -1.4 C3z -1.5 D3x 0.25 D3y -1.4 D3z -1.5
P3x 0.2 P3y -1.5 P3z -1.5 R3x -0.25 R3y -1.04 R3z -1.5
S3x 0.2 S3y -1.4 S3z -1.5 T3x 0.35 T3y -1.5 T3z -1.5
A4x 0.25 A4y 1 A4z -1.5 B4x -0.05 B4y 0.94 B4z -1.5
C4x 0.15 C4y 1.4 C4z -1.5 D4x 0.25 D4y 1.4 D4z -1.5
P4x 0.2 P4y 1.5 P4z -1.5 R4x -0.25 R4y 1.04 R4z -1.5
S4x 0.2 S4y 1.4 S4z -1.5 T4x 0.35 T4y 1.5 T4z -1.5
dh 0.0001 STOPT 2.5 STEP 0.0001 iprint 100)

;;; output the linearised model for analysis and controller design
(write-to-file write-matlab "w:\\PhD\\programs\\matlab_thesis\\Auto_fcar_lin3.m")
Appendix G

Appendix to Chapter 9

G.1 AutoSim Code of the Nonlinear Trailing-Arm Model

(reset) (si) ;; (add-gravity) (setsym *stiff-integrator* nil)

(add-point ptQ :coordinates (Qx Qy 0)) (add-point ptA :coordinates (Ax Ay 0))
(add-point ptB :coordinates (Bx By 0)) (add-point ptC1 :coordinates (C1x C1y 0))
(add-point ptC2 :coordinates (C2x C2y 0)) (add-point ptD :coordinates (Dx Dy 0))
(add-point ptE :coordinates (Ex Ey 0)) (add-point ptG :coordinates (Gx Gy 0))
(add-point ptH :coordinates (Hx Hy 0))

;; add sprung mass


(add-body smass :name "spurng mass" :parent n
:joint-coordinates ptQ :cm-coordinates ptQ :translate (x y)
:body-rotation-axes z :parent-rotation-axis z :reference-axis [nx]
:inertia-matrix (0 0 "Is") :mass "ms")
(add-point smassA :body smass :coordinates ptA) (add-point smassB :body smass :coordinates ptB)
(add-point smassD :body smass :coordinates ptD) (add-point smassE :body smass :coordinates ptE)

;;; add trailing arms


(add-body lead :name "lead trailing arm" :parent smass
:joint-coordinates smassA :body-rotation-axes z :parent-rotation-axis z
:reference-axis x :inertia-matrix (0 0 "Ilead") :mass "Mlead")
(add-body tail :name "tail trailing arm" :parent smass
:joint-coordinates smassB :body-rotation-axes z :parent-rotation-axis z
:reference-axis x :inertia-matrix (0 0 "Itail") :mass "Mtail")

;;; add wheels


(add-body fwheel :name "front wheel" :parent lead
:joint-coordinates ptC1 :body-rotation-axes z :parent-rotation-axis z
:reference-axis x :inertia-matrix (0 0 "I1") :mass "m1")
(add-body rwheel :name "rear wheel" :parent tail
:joint-coordinates ptC2 :body-rotation-axes z :parent-rotation-axis z
:reference-axis x :inertia-matrix (0 0 "I2") :mass "m2")

(add-point leadG :body fwheel :coordinates ptG) (add-point tailH :body rwheel :coordinates ptH)
(add-point leadend :body lead :coordinates ptC1) (add-point tailend :body tail :coordinates ptC2)

;; no slide between road and tyres


(add-speed-constraint "dot([nz],rot(fwheel))*r1+dot([ny],vel(fwheel0))" :u "ru(fwheel)" ) ;; front tyre
(add-speed-constraint "dot([nz],rot(rwheel))*r1+dot([ny],vel(rwheel0))" :u "ru(rwheel)" ) ;; rear tyre

(setsym zsddot "dxdt(dot([nx],vel(smass0)))") (setsym ztddot "dxdt(ru(smass))")


(setsym D1 "sqrt(dot(pos(smassD,leadG),pos(smassD,leadG)))-sqrt(dot(pos(ptD,ptG),pos(ptD,ptG)))")
(setsym D2 "sqrt(dot(pos(smassE,tailH),pos(smassE,tailH)))-sqrt(dot(pos(ptE,ptH),pos(ptE,ptH)))")

(add-variables dyvars real zsR phi3R w1R w1pR w1p2R w2R w2pR w2p2R
z1pR z1p2R z1R z1d1R z1d2R U1R U1d1R U1d2R E1R E1d1R
z2pR z2p2R z2R z2d1R z2d2R U2R U2d1R U2d2R E2R E2d1R)

123
124 Appendix to Chapter 9

(add-equation init &E1R "0") (add-equation init &E2R "0")


(add-equation init &zsR "0") (add-equation init &ztR "0")
(add-equation init &phi3R "0") (add-equation init &w1R "0")
(add-equation init &w1pR "0") (add-equation init &w1p2R "0")
(add-equation init &w2R "0") (add-equation init &w2pR "0")
(add-equation init &w2p2R "0")

(add-equation init &z1pR "0") (add-equation init &z1p2R "0")


(add-equation init &z1R "0") (add-equation init &z1d1R "0")
(add-equation init &z1d2R "0") (add-equation init &U1R "0")
(add-equation init &U1d1R "0") (add-equation init &U1d2R "0")
(add-equation init &E1R "0") (add-equation init &E1d1R "0")
(add-equation init &z2pR "0") (add-equation init &z2p2R "0")
(add-equation init &z2R "0") (add-equation init &z2d1R "0")
(add-equation init &z2d2R "0") (add-equation init &U2R "0")
(add-equation init &U2d1R "0") (add-equation init &U2d2R "0")
(add-equation init &E2R "0") (add-equation init &E2d1R "0")

(add-subroutine update tcontr2("@zsddot" "@ztddot" "@D1" "@D2"


&zsR &ztR &w1R &w1pR &w1p2R &w2R &w2pR &w2p2R
&z1pR &z1p2R &z1R &z1d1R &z1d2R &U1R &U1d1R &U1d2R &E1R &E1d1R
&z2pR &z2p2R &z2R &z2d1R &z2d2R &U2R &U2d1R &U2d2R &E2R &E2d1R
dh))

;; add the conventional suspension


;;
(add-strut f_susp :point1 smassD :point2 leadG
:magnitude "-k1*(x-x0) -c1*v ")
; :magnitude " -k1*(x-x0+E1R) -c1*v")
(add-strut r_susp :point1 smassE :point2 tailH
:magnitude "-k2*(x-x0) -c2*v ")
; :magnitude " -k2*(x-x0+E2R) -c2*v ")

;;; 5. add tyre force ;;;;;;;;;;


(add-line-force Fr1 :name "front right tyre force" :point1 fwheelcm
:direction [nx] :magnitude "kt1*( -dot([nx],pos(fwheel0,ptC1)) ) " )
(add-line-force Fr2 :name "front left tyre force" :point1 rwheelcm
:direction [nx] :magnitude "kt2*( -dot([nx],pos(rwheel0,ptC2)) ) " )

;;; add load


(add-line-force Fs :name "vertical load" :point1 smasscm
:direction [nx] :magnitude "0" )

;;
;; apply the torques to both tyres
;;
(install-table accetor "acceleration torque" :npts 1000
:xunits "T" :yunits "F*L" :values ((0 0) (1 1) (5 1) (5 0) (6 0)) )
(install-table braking "braking torque" :npts 1000
:xunits "T" :yunits "F*L" :values ((0 0) (6 0) (6 1) (14 1) (16 1)) )

(install-table TB "input profile(forward speed vs. braking torque)"


:table-function tabf :npts 1000 :deriv TBp :xunits "l/t" :yunits "f*l"
:keyword "braking torque-profile" :values ((0 0) (0 1) (2 1) (3 1) (4 1)))

(setsym t1dot "-dot([nz],rot(fwheel))") ;; absolute forward speed of the front wheel


(setsym fwtor "braking(t,1,1)*TB(@t1dot,1,1)*(1146.66667)" ) ;; applied torque; 0 when the forward speed equals to 0
(setsym t2dot "-dot([nz],rot(rwheel))") ;; absolute forward speed of the rear wheel
(setsym rwtor "braking(t,1,1)*TB(@t2dot,1,1)*(1686.66667)" ) ;; applied torque; 0 when the forward speed equals to 0

(add-moment T2accel :name "applied torque on rear wheel" :direction [rwheelz]


:magnitude "-400*accetor(t,1,1)" :body1 rwheel :body2 smass)
(add-moment T1accel :name "applied torque on rear wheel" :direction [fwheelz]
:magnitude "-800*accetor(t,1,1)" :body1 fwheel :body2 smass)

(add-moment ftorque :name "applied torque on front wheel" :direction [nz]


:magnitude "0.5*@fwtor" :body1 fwheel :body2 lead)
(add-moment rtorque :name "applied torque on rear wheel" :direction [nz]
:magnitude "0.5*@rwtor" :body1 rwheel :body2 tail)

(add-standard-output)
G.2 C-Code for the Active Controller 125

(add-out "fm(t1accel)+fm(ftorque)" "T1")


(add-out "fm(t2accel)+fm(rtorque)" "T2")

(finish)

(setsym *h-file-names* ("sim.h" "tcontr2.h"))

(set-defaults m1 100 r1 0.15 m2 100 r2 0.15 I1 1 I2 1


Mlead 0 Ilead 0 Mtail 0 Itail 0
ms 1600 Is 1000 v0 30
"tu(smass,2)" 15e-4
Qx 0 Qy 0
Ax 0.15 Ay 0.6126 Bx 0.15 By -1.0008
C1x 0.35 C1y 1.3 C2x 0.35 C2y -1.3 Dx 0.1 Dy 1.3
Ex 0.1 Ey -1.3 Gx 0.35 Gy 1.3 Hx 0.35 Hy -1.3
k1 40000 k2 40000 c1 10000 c2 10000 kt1 500000 kt2 500000
STOPT 12 STEP 0.0001 iprint 500 dh 0.0001)

(write-to-file write-c "w:\\PhD\\programs\\autosim_thesis\\c_programs\\trailing.c")


(write-to-file write-h "w:\\PhD\\programs\\autosim_thesis\\c_programs\\sim.h") ;;; *always* call it sim.h!!

G.2 C-Code for the Active Controller


#include <stdio.h>
#include <math.h>
#include "deftypes.h"
#include "simlib.h"
#include "tcontr2.h"

/* ----------------------------------------------------------------------------
write a subroutine in C code; calculate active control in the sharp scheme
---------------------------------------------------------------------------- */
void tcontr2(real_as zsddot, real_as ztddot, real_as D1, real_as D2,
real_as *zsR, real_as *ztR, real_as *w1R, real_as *w1pR, real_as *w1p2R,
real_as *w2R, real_as *w2pR, real_as *w2p2R,
real_as *z1pR, real_as *z1p2R, real_as *z1R, real_as *z1d1R, real_as *z1d2R,
real_as *U1R, real_as *U1d1R, real_as *U1d2R, real_as *E1R, real_as *E1d1R,
real_as *z2pR, real_as *z2p2R, real_as *z2R, real_as *z2d1R, real_as *z2d2R,
real_as *U2R, real_as *U2d1R, real_as *U2d2R, real_as *E2R,
real_as *E2d1R, real_as h)
{
real_as b3_11, b2_11, b1_11, b0_11, b3_12, b2_12, b1_12, b0_12;
real_as a2_11, a1_11, a0_11, delta, wn;
real_as b3_21, b2_21, b1_21, b0_21, b3_22, b2_22, b1_22, b0_22;
real_as a2_22, a1_22, a0_22;
real_as zs[2], p3[2];
real_as y1d1, y2d1, w1d1[1], w1d2[1], w1d3[1], w2d1[1], w2d2[1], w2d3[1];
real_as w1[2], w1p, w1p2, w2[2], w2p, w2p2;
real_as z1p, z1p2, z1[2], z1d1[2], z1d2[2], z1d3[1];
real_as z2p, z2p2, z2[2], z2d1[2], z2d2[2], z2d3[1];
real_as U1[2], U1d1[2], U1d2[2], U1d3[1], E1[2], E1d1[2], E1d2[1];
real_as U2[2], U2d1[2], U2d2[2], U2d3[1], E2[2], E2d1[2], E2d2[1];

/* initialise variables */
b3_11 = -1.1576; b2_11 = -5.7234e3; b1_11 = -3.8177e5; b0_11 = -8.0420e6;
b3_12 = -5.3166; b2_12 = -423.6377; b1_12 = -1.5119e4; b0_12 = 8.8098e3;
a2_11 = 307.7456; a1_11 = 3.6067e4; a0_11 = 7.5547e4;

b3_21 = -4.9241; b2_21 = 126.7700; b1_21 = -2.9504e4; b0_21 = 8.8200e4;


b3_22 = -22.6155; b2_22 = -4.5931e3; b1_22 = -2.9521e5; b0_22 = -5.2791e6;
a2_22 = 211.6167;a1_22 = 2.4511e4; a0_22 = 4.9896e4;
wn = 100; delta = 0.5;

/* initialise states */
zs[0] = *zsR; zs[1] = zsddot; p3[0] = *ztR; p3[1] = ztddot;
w1[0] = *w1R; w1p = *w1pR; w1p2 = *w1p2R; w2[0] = *w2R;
w2p = *w2pR; w2p2 = *w2p2R; z1p = *z1pR; z1p2 = *z1p2R;
z1[0] = *z1R; z1d1[0] = *z1d1R; U1[0] = *U1R; U1d1[0] = *U1d1R;
U1d2[0] = *U1d2R; E1[0] = *E1R; E1d1[0] = *E1d1R; z2p = *z2pR;
126 Appendix to Chapter 9

z2p2 = *z2p2R; z2[0] = *z2R; z2d1[0] = *z2d1R; U2[0] = *U2R;


U2d1[0] = *U2d1R; U2d2[0] = *U2d2R; E2[0] = *E2R; E2d1[0] = *E2d1R;

/* use Euler method to solve the differential equations */


/* step1: essential controller structure (U2) (W = U2* Y) */
y1d1 = (zsddot-zs[0])/h; y2d1 = (ztddot-*ztR)/h;
z1d2[0] = 0.0788*y1d1 + 0.3026*zs[0] -0.0385*y2d1 -0.1437*p3[0] -7.7537*z1d1[0] -15.0193*z1[0];
z2d2[0] = 0.0766*y1d1 + 0.3068*zs[0] +0.0356*y2d1 +0.1401*p3[0] -7.7537*z2d1[0] -15.0193*z2[0];

z1d1[1] = z1d1[0] +z1d2[0]*h; z1[1] = z1[0] +z1d1[0]*h;


z2d1[1] = z2d1[0] +z2d2[0]*h; z2[1] = z2[0] +z2d1[0]*h;

w1[1] = z1[1] - D1; w2[1] = z2[1] - D2;

w1d1[0] = (w1[1]-w1[0])/h; w1d2[0] = (w1[1]-2*w1[0]+w1p)/(h*h);


w1d3[0] = (w1[1]-3*w1[0]+3*w1p-w1p2)/(h*h*h);
w2d1[0] = (w2[1]-w2[0])/h; w2d2[0] = (w2[1]-2*w2[0]+w2p)/(h*h);
w2d3[0] = (w2[1]-3*w2[0]+3*w2p-w2p2)/(h*h*h);

/* step2: H_infinity controller design */


U1d3[0] = b3_11*w1d3[0] + b2_11*w1d2[0] + b1_11*w1d1[0] + b0_11*w1[0]
+b3_12*w2d3[0] + b2_12*w2d2[0] + b1_12*w2d1[0] + b0_12*w2[0]
-a2_11*U1d2[0] - a1_11*U1d1[0] - a0_11*U1[0];
U1d2[1] = U1d2[0] + h*U1d3[0];
U1d1[1] = U1d1[0] + h*U1d2[0];
U1[1] = U1[0] + h*U1d1[0];

U2d3[0] = b3_21*w1d3[0] + b2_21*w1d2[0] + b1_21*w1d1[0] + b0_21*w1[0]


+b3_22*w2d3[0] + b2_22*w2d2[0] + b1_22*w2d1[0] + b0_22*w2[0]
-a2_22*U2d2[0] - a1_22*U2d1[0] - a0_22*U2[0];
U2d2[1] = U2d2[0] + h*U2d3[0];
U2d1[1] = U2d1[0] + h*U2d2[0];
U2[1] = U2[0] + h*U2d1[0];

/* step3: including dynamics of the actuator */


E1d2[0] = wn*wn*U1[0] -2*delta*wn*E1d1[0] -wn*wn*E1[0];
E1d1[1] = E1d1[0] + h*E1d2[0];
E1[1] = E1[0] + h*E1d1[0];

E2d2[0] = wn*wn*U2[0] -2*delta*wn*E2d1[0] -wn*wn*E2[0];


E2d1[1] = E2d1[0] + h*E2d2[0];
E2[1] = E2[0] + h*E2d1[0];

/* step4: update states */


*zsR = zsddot; *ztR = ztddot; *w1R = w1[1]; *w1pR = w1[0];
*w1p2R = w1p; *w2R = w2[1]; *w2pR = w2[0]; *w2p2R = w2p;
*z1p2R = z1p; *z1pR = z1[0]; *z1R = z1[1]; *z1d1R = z1d1[1];
*U1R = U1[1]; *U1d1R = U1d1[1];*U1d2R = U1d2[1];*E1R = E1[1];
*E1d1R = E1d1[1];*z2p2R = z2p; *z2pR = z2[0];
*z2R = z2[1]; *z2d1R = z2d1[1];*U2R = U2[1]; *U2d1R = U2d1[1];
*U2d2R = U2d2[1];*E2R = E2[1]; *E2d1R = E2d1[1]; *z1d2R = ztddot;
*z2d2R = p3[0];
}
Bibliography

[1] R. Ayres. Thrust ssc environmental testing. Environmental Engineering, 9(2):28–30, June, 1996.

[2] E. Bakker, L. Nyborg, and H.B. Pacejka. Tyre modelling for use in vehicle dynamics studies.
Society of Automotive Engineerings Transactions, 96(2):190–204, 1988.

[3] D. Bastow. Car Suspension and Handling. Pentech Press, 1980.

[4] R.K. Brayton. Nonlinear reciprocal networks in mathematical aspects of electrical network
analysis. SIAM-AMS Proceedings, pages 1–15, 1971.

[5] C. Campbell. Automobile Suspensions. Chapman and Hall, 1981.

[6] W.C. Char et al. First Leaves: A Tutorial Introduction to Maple V. Springer-Verlag, 1992.

[7] D.A. Crolla and A.M.A. Aboul Nour. Theoretical comparisons of various active suspension
systems in terms of performance and power requirements. Proceedings of IMecE Conference on
Advanced Suspensions, C420/88:1–9, 24–25 October 1988.

[8] J.C. Dixon. Tyres, Suspension and Handling. Cambridge University Press, first edition, 1991.

[9] R.J. Dorling. Integrated Control of Road Vehicle Dynamics. PhD thesis, Cambridge University,
April 1996.

[10] B.A. Francis. A Course in H∞ Control Theory. Lecture Notes in Control and Information
Sciences, Springer-Verlag Berlin, Heidelberg, 1987.

[11] W. Harman and D. Lytle. Electrical and Mechanical Networks. McGraw-Hill, 1962.

[12] K. Hayakawa, K. Matsumoto, M. Yamashita, Y. Suzuki, K. Fujimori, and H. Kimura. Robust


h∞ feedback control of decoupled automobile active suspension systems. IEEE Transactions on
Automat. Contr., 44(2):392–396, 1999.

[13] J.K. Hedrick and T. Butsuen. Invariant properties of automotive suspensions. Proc. Instn. Mech.
Engrs. part D: Journal of automobile engineering, 204:21–27, 1990.

[14] D. Hrovat. A class of active lqg optimal actuators. Automatica, 18:117–119, 1982.

127
128 BIBLIOGRAPHY

[15] D. Hrovat and M. Hubbard. Optimal vehicle suspensions minimizing rms rattlespace, sprung-
mass acceleration and jerk. Trans. of the ASME, 103:228–236, 1981.

[16] D. Karnopp. Theoretical limitations in active suspension. Vehicle system Dynamics, 15:41–54,
1986.

[17] K.M. Malek and J.K. Hedrick. Decoupled active suspension design for improved automotive
ride quality/handling performance. Supplement to Vehicle System Dynamics, 15:383–398, 1986.

[18] D.C. McFarlane and K. Glover. Robust Control Design Using Normalized Coprime Factor
Plant Descriptions. Lecture Notes in Control and Information Sciences, Springer-Verlag Berlin,
Heidelberg, 1987.

[19] T. Meller. Self-energising, hydropneumatic levelling systems. SAE papers 780052, 1978.

[20] P.E. Mercier. Vehicle suspensions - a theory and analysis that accord with experiment. The
Automobile Engineer, 32:405–410, 1942.

[21] N.M. Morris. Electrical Circuit Analysis and Design. MacMillan Press, first edition, 1993.

[22] R.W. Newcomb. Linear Multiport synthesis. McGraw-Hill, 1966.

[23] K. Park and J.J. Bongiorno, Jr. Wiener-hopf design of servo-regulator-type multivariable control
systems including feedforward compensation. International Journal of Control, 52(5):1189–
1216, 1990.

[24] R. Pitcher, H. Hillel, and C.H. Curtis. Hydraulic suspensions with particular reference to public
service vehicles. In Public Service Vehicles Conference. Mechanical Engineering Publications,
1977.

[25] R.S. Sharp. The application of multi-body computer codes to road vehicle dynamics modelling
problems. Proc. Instn. Mech. Engrs., Part D: Journal of Automobile Engineering, 208(1):55–61,
1994.

[26] R.S. Sharp. Influences of suspension kinematics on pitching dynamics of cars in longitudinal
manoeuvring. Vehicle System Dynamics Supplement, 33:23–36, 1999.

[27] R.S. Sharp and S.A. Hassan. The relative performance capabilities of passive, active and semi-
active car suspension systems. Proc. Instn. Mech. Engrs., 200:219–228, 1986.

[28] R.S. Sharp and S.A. Hassan. On the performance capabilities of active automobile suspension
systems of limited bandwidth. Vehicle System Dynamics, 16:213–225, 1987.

[29] J.L. Shearer, A.T. Murphy, and H.H. Richardson. Introduction to system dynamics. Addison-
Wesley, 1967.
BIBLIOGRAPHY 129

[30] K.C.A. Smith and R.E. Alley. Electrical Circuits. Cambridge University Press, first edition,
1992.

[31] M.C. Smith. Achievable dynamic response for automotive active suspension. Vehicle System
Dynamics, 24:1–33, 1995.

[32] M.C. Smith and G.W. Walker. Performance limitations and constraints for active and passive
suspension: a mechanical multi-port approach. Vehicle System Dynamics, 33:137–168, 2000.

[33] M.C. Smith and F-C. Wang. Controller parametrisation for disturbance response decoupling:
Application to vehicle active suspension control. Proceedings of the 40th IEEE Conference on
Decision and Control, Orlando, Florida, 2001.

[34] M.C. Smith and F-C. Wang. Controller parametrisation for disturbance response decoupling:
Application to vehicle active suspension control. IEEE Transactions on Control Systems Tech-
nology, to be published, 2001.

[35] A.G. Thompson. Design of active suspensions. Proc. Instn. Mech. Engrs., 185:553–563, 1970–
1971.

[36] M. Vidyasagar. Control System Synthesis: A Factorisation Approach. The MIT Press, 1985.

[37] G.W. Walker. Constraints upon the Achievable Performance of Vehicle Suspension Systems. PhD
thesis, Cambridge University, December 1997.

[38] F-C. Wang and M.C. Smith. Active and passive suspension control for vehicle dive and squat.
Automotive Control Workshop, Lund, Sweden, May 18-19, 2001.

[39] R.A. Williams and A. Best. Control of a low frequency active suspension. IEE Control ’94,
Conference Publication, 1(389):338–343, 1994.

[40] R.A. Williams, A. Best, and I.L. Crawford. Refined low frequency active suspension. Int. Conf.
on Vehicle Ride and Handling, Proc. ImechE, C466/028:285–300, 1993.

[41] P.G. Wright and D.A. Williams. The application of active suspension to high performance road
vehicles. Proceedings of IMecE Conference on Microprocessors in fluid power engineering,
Mechanical Engineering Publications, London, C239/84:23–28, 1984.

[42] P.G. Wright and D.A. Williams. The case for an irreversible active suspension system. SAE
Transactions, J. of Passenger Cars, Sect. 6,, pages 83–90, 1989.

[43] D.C. Youla and J.J. Bongiorno, Jr. A feedback theory of two-degree-of-freedom optimal wiener-
hopf design. IEEE Transactions, Automat. Contr., AC-30:652–665, 1985.
130 BIBLIOGRAPHY

[44] D.C. Youla, H.A. Jabr, and J.J. Bongiorno, Jr. Modern wiener-hopf design of optimal controllers
– part ii: The multivariable case. IEEE Transactions, Automat. Contr., AC-21:319–338, 1976.

[45] K. Zhou, J.C. Doyle, and K. Glover. Robust and Optimal Control. Prentice-Hall, 1996.

You might also like