APPLICATION OF THE MATRIX APPROACH TO THE KINEMATIC

advertisement
APPLICATION OF THE MATRIX APPROACH TO
THE KINEMATIC MODELING AND ANALYSIS
OF SPATIAL MECHANISMS
by
KRISHNA PRASAD SURYANARAYAN, B.S.Engr.
A THESIS
IN
MECHANICAL ENGINEERING
Submitted to the Graduate Faculty
of Texas Tech University in
Partial Fulfillment of
the Requirements for
the Degree of
MASTER OF SCIENCE
IN
MECHANICAL ENGINEERING
May, 1995
f^l.
a
J
l^
I f^ Q 5
ACKNOWLEDGMENTS
I would like to thank Dr. Jaime F. Cardenas Garcia, for his guidance
and his advice regarding my thesis. The strong foundation which I got from
his course in Advanced Dynamics greatly helped in understanding many
concepts and eased my work towards completing my thesis. I also learned a
lot from his methodical planning and systematic approach to problem
solving and am forever indebted to him for his patience and understanding
during my research. I would also like to sincerely thank
Dr. C.V.G Vallabhan and Dr. Alan Barhorst for being on my committee.
I am also grateful to my parents Mr. K. Suryanarayan and
Mrs. Meena Suryanarayan, and my sister Shuba Kuila who always stood by
me and encouraged me to pursue my passion—the study of the science of
robotics.
n
TABLE OF CONTENTS
ACKNOWLEDGMENTS
ii
ABSTRACT
vi
LIST OF FIGURES
vii
CHAPTER
I. INTRODUCTION
1
Introduction
1
Literature Review
2
Statement of Problem
6
Summary
8
II. POSITION ANALYSIS OF SPATIAL
MECHANISMS
10
Introduction
10
General Analysis
12
Matrix Transformations
12
Position Analysis of Mechanisms
17
III. VELOCITY ANALYSIS OF SPATIAL
MECHANISMS
Introduction
31
31
iii
General Analysis
31
Velocity Matrices
31
Velocity Analysis of Mechanisms
39
IV. ACCELERATION ANALYSIS OF SPATIAL
MECHANISMS
54
Introduction
54
General Analysis
54
Acceleration Matrices
54
Acceleration Analysis of Mechanisms
65
V. APPLICATIONS
78
Introduction
78
Automotive Alignment Mechanisms
78
Introduction
78
Single Nut Mechanism
81
Dual Disc Mechanism
89
Hyper-redundant Mechanisms
97
Introduction
97
Position Analysis of Hyper-redundant
Manipulator
98
IV
^^
Velocity Analysis of Hyper-redundant
Manipulator
117
Acceleration Analysis of Hyper-redundant
Manipulator
127
Applications
138
VI. SUMMARY, CONCLUSIONS AND AREAS
FOR FUTURE RESEARCH
142
REFERENCES
144
APPENDIX
A. PROGRAM DESCRIPTION
146
B. PROGRAM LISTINGS
151
C. LIST OF COMBINATIONS FOR THE
DUAL DISC MECHANISM
224
^
ABSTRACT
The purpose of this thesis is to apply the homogeneous matrix
transformation approach to the design of automotive alignment
mechanisms and to briefly review its application to the kinematic analysis
of a hyper-redundant manipulator. The homogeneous matrix transformation
approach allows the determination of the position, velocity and acceleration
of any point on the mechanism, defined in local coordinates, with respect to
the world coordinate system, from a knowledge of the joint and link
parameters. This homogeneous matrix method presents itself as a unique
tool in the analysis of automotive alignment mechanisms as currently, these
mechanisms are designed using geometric methods which involve tedious
calculations. By the application of this matrix approach to their analysis,
the design process is greatly simplified and it enables the design of these
mechanisms to be easily implemented by breaking the design into smaller
modules which are then solved individually to yield the final solution.
Additionally, an investigation is performed to show the use of this matrix
approach in the study of the kinematics of a hyper-redundant manipulator
which is composed of wedge shaped discs.
VI
LIST OF FIGURES
2.1 Illustration of the Coordinate Systems
11
2.2 Translation
13
2.3 Rotation about the X-axis
15
2.4 Rotation about the Y-axis
16
2.5 Rotation about the Z-axis
16
2.6 Example Illustrating Translation
19
2.7 Example Illustrating a Rotation Followed by a Translation
22
2.8 Example Illustrating the Position Analysis for a Simple
Two-link Mechanism
25
2.9 Six Degree of Freedom PUMA Robot
(simplified by neglecting 13)
28
3.1 Linear Velocity along the X-axis
33
3.2 Linear Velocity along the Y-axis
34
3.3 Linear Velocity along the Z-axis
34
3.4 Angular Velocity about the X-axis
37
3.5 Angular Velocity about the Y-axis
38
3.6 Angular Velocity about the Z-axis
38
3.7 Example Illustrating Linear Velocity
42
vii
3.8 Example Illustrating Angular Velocity
45
3.9 Example ~ Two-link mechanism
47
3.10 Mini-mover 5 Arm
51
4.1 Linear Acceleration along the X-axis
56
4.2 Linear Acceleration along the Y-axis
57
4.3 Linear Acceleration along the Z-axis
57
4.4 Angular Acceleration about the X-axis
60
4.5 Angular Acceleration about the Y-axis
63
4.6 Angular Acceleration about the Z-axis
63
4.7 Example Illustrating Linear Acceleration
68
4.8 Example Illustrating Angular Acceleration
71
4.9 Illustration of the Acceleration Analysis
74
5.1 Camber
80
5.2 Toe-in
80
5.3 Single-nut Mechanism
82
5.4 Parameters for the Single-nut Mechanism
83
5.5 Dual Disc Mechanism
90
5.6 Parameters for the Dual Disc Mechanism
93
5.7 Illustration of Redundancy
99
viii
5.8 Example Illustrating Position Analysis for a Simple Hyperredundant Manipulator
101
5.9 Conventions Followed for the Transformations
104
5.10 Illustration of the Local Coordinate Systems and the
Sequence of Transformations.
107
5.11 Example 1
111
5.12 Example 2
112
5.13 Example 3
113
5.14 Example 4
5.15 Illustration of the Velocity Analysis for the Simple
Hyper-redundant Manipulator
114
118
5.16 Illustration of Velocity Analysis for the Hyper-redundant
Manipulator
125
5.17 Example Illustrating the Acceleration Analysis in the Case of
the Simple Hyper-redundant Manipulator.
128
5.18 Example to Illustrate Acceleration Analysis for the Hyperredundant Manipulator
135
5.19 Application 1
139
5.20 Application 2
140
5.21 Application 3
141
IX
t/^
CHAPTER I
INTRODUCTION
Introduction
The purpose of this thesis is to apply the homogeneous
transformation matrix approach to the design of automotive alignment
mechanisms and to briefly review the kinematic analysis of a hyperredundant manipulator. Currently, the automotive alignment mechanisms
are designed using geometric methods which are very cumbersome. The
use of homogeneous transformation matrices greatly simplifies the design
process and presents itself as a unique method for the analysis of these
mechanisms by breaking the design problem into smaller problem modules
which are solved individually to obtain the final solution. So far, no work
has been done in the application of homogeneous matrices to the analysis of
automotive alignment mechanisms and so the following literature survey
presents work done on the theory and application of homogeneous matrices
in other areas, mostly in the field of robotics, and presents the analysis of
automotive alignment mechanisms as a new application of these matrices.
%r
Literature Review
The first researchers who came up with the concept of homogeneous
transformation matrices were Denavit and Hartenberg (1955). They
developed a matrix notation to represent joint or link transformations by a
set of 4x4 transformation matrices called homogeneous transformation
matrices. The elements of the matrices are trigonometric functions that help
to relate the various local link coordinate systems with the world coordinate
system. Roberts (1965) and Pieper (1968) have pioneered the use of these
homogeneous matrices to robotics. These matrices represent a rotation
matrix and a column position vector to describe the orientation between
coordinate systems. The use of homogeneous matrices have become very
common in the field of robotics and its application was generally restricted
to it.
McKerrow (1993) details the history behind homogeneous
transformation matrices in his book. Introduction to Robotics. These
matrices were introduced by Forest (1969) into computer graphics to
overcome a number of problems involved in matrix calculations. Initially,
for a two-dimensional transformation, a 2x2 matrix was introduced to define
the various relationships between coordinate systems. But only rotations
.^i»aitfMaaH^
could be defined using this matrix and an additional column was introduced
to take translations into account resulting in a 2x3 matrix. Since the 2x3
matrix was not square, a third row had to be added so as to be able to obtain
the inverse of the matrix. In robotics, the general interest is to locate objects
in three-dimensional space. Thus, by introducing an extra row and a
column, the matrix can be extended to include transformations in three
dimensions. The term, homogeneous, is applied because the representation
for a clan of objects involves no explicit constants. The general 4x4
homogeneous transformation matrices can be represented as follows:
3
*
rotation
translation
perspective
scaling
T =
1*1
Now, the use of homogeneous transformation matrices, in the case of
robotics, involves the correct assignment of coordinate frames to the various
joints and links of the manipulator. Koivo (1989), in his book
Fundamentals for Control of Robotic Manipulators, oudines the
convention for the assignment of coordinate frames proposed by Denavit
and Hartenberg. By means of an example, he presented the assignment of
coordinate frames and the parameters involved in the analysis. However,
this is just a convention and other choices of coordinate frames that agree
with the right hand rule are also possible (the right hand rule says that, if
on the right hand, the index finger and the middle finger point in the
direction of the X and Y axes, respectively, then the thumb indicates the
direction of the Z-axis). This convention was also used earlier by Paul,
Shimano and Mayer (1981) who analyzed a serial link manipulator using
homogeneous matrix transformations by employing the method developed
by Denavit and Hartenberg.
Due to the simplicity of homogeneous transformation matrices and
their vast application in robotics, several programs have been written
employing these matrices. Shimano, Geschke and Spalding III (1984)
developed a robot control system and programming language called VAL-II
which employed the homogeneous transformations to compute the
kinematics of the manipulator. The design of VAL-II allows the
development of applications programs that are complex in nature, thereby
simplifying the user interface and controls the real time motion of the
manipulator. In their book Advanced Mechanism Design: Analysis and
Synthesis, Sandor and Erdman (1984) analyzed a spatial slider crank
mechanism using the homogeneous transformation matrices by employing a
program called 'SAM' which stands for Spatial Analysis of Mechanisms.
This program can be used for the analysis of any spatial mechanism in
general and allows for 'stick figure' graphical representation of the
mechanism. Driels (1986) wrote a BASIC program called 'MATMAN' for
the kinematic analysis of robotic manipulators. This program determines
the transformation matrices and the forward kinematic solution as well as
the jacobian matrix. These are but a few examples of the many problems
that have been solved by this matrix approach.
Although robotics have been the main area where these homogeneous
transformation matrices have been analyzed, there have been applications in
other areas of engineering. For example, Koivo (1994) analyzed the
forward and inverse kinematics of excavators. A systematic procedure was
presented to assign the coordinate frames for the joints and links and then
homogeneous transformation matrices were employed to relate two adjacent
coordinate frames. Kin (1994) presented a mathematical model for the
reconstruction of gear tooth surface features based on the manufacturing
process deviations. This model employs the homogeneous transformation
matrices to establish the spatial relation between the machine and the part.
1^
The developed model is used to estimate the tooth-to-tooth transmission
errors of parallel axis gears. It can also be used to determine bearing
contact and contact stresses. Liu and Yan (1994) used these homogeneous
transformation matrices to define the complete profile of the variable pitch
cylindrical cam, by the coordinate transformation of the contact lines. They
presented mathematical expressions for the surface geometry of the variable
pitch cylindrical cams with four conical meshing elements based on the
theory of conjugate surfaces. Thus, there is a great potential for the
application of these homogeneous transformation matrices to different
disciplines in engineering. One unique application of these homogeneous
transformation matrices is in the analysis of automotive alignment
mechanisms.
Statement of the Problem
A survey of literature shows that the design of automotive alignment
mechanisms relies on a geometric approach. Thus, a method needs to be
developed to simplify the analysis of these mechanisms and eliminate all the
cumbersome calculations involved. Now since these homogeneous
transformation matrices were used more exclusively for robot kinematics.
this matrix approach presents a new tool for the design and analysis of these
alignment mechanisms which include the Single Nut Mechanism and the
Dual Disc Mechanism. By using the program written for the analysis
of the dual disc mechanism, it is possible to determine all the possible
camber and toe-in configurations and greatly reduce the time taken to
calculate these values. To show the applicability of these homogeneous
transformation matrices, a hyper-redundant manipulator is analyzed. The
discs of this manipulator are similar to the discs of the Dual Disc
Mechanism and the analysis used in the case of the the Dual Disc
Mechanism is extended to analyze the manipulator. Thus, by analyzing this
manipulator, we are able to establish a parallel between the application of
homogeneous transformation matrices to robotics and to automotive
alignment mechanisms, thereby applying the principles of one discipline,
i.e., robotics, into another, and realizing their benefits. Thus, this thesis can
be split into three basic parts. The first part involves the theory and
principles involved in the application of homogeneous transformation
matrices to position, velocity and acceleration analyses of spatial
mechanisms. The second part involves the application of these matrices to
7
the design of automotive alignment mechanisms. The third part involves the
kinematic analysis of a hyper-redundant manipulator.
Summary
From the above literature survey, we saw the areas of application of
these homogeneous matrices. Given below is a chapter-wise summary of
this thesis which highlights the important principles discussed in each of
them. Chapters II to IV review the basic principles of this matrix
approach and it constitutes the first part which elaborates the fundamental
theory involved in the use of homogeneous transformation matrices.
Chapter II deals with the position analysis. Here the homogeneous
transformation matrices are defined for translation and rotation and a
general matrix equation is established for determining the position of any
point on a mechanism with respect to the world coordinate system. Some
simple mechanisms are studied initially, and finally a simplified version of a
PUMA robot is analyzed to illustrate this position analysis.
Chapter III covers the velocity analysis. Velocity matrices are
initially defined and the general velocity equation is derived based on these
matrices to determine the velocity of any point on a mechanism with respect
8
to the world coordinate system. A Mini Mover-5 Arm is studied to illustrate
the velocity analysis.
Chapter IV focuses on the acceleration analysis. Here again,
acceleration matrices are defined first and the general acceleration equation
is developed to determine the acceleration of a point on a mechanism with
respect to the world coordinate system. A few examples are studied to
illustrate the acceleration analysis.
Chapter V covers certain applications for this matrix approach.
Initially, two automotive alignment mechanisms are analyzed using this
matrix approach to calculate the camber and toe-in for different
configurations of the mechanisms. Currently, these mechanisms are
analyzed using geometric methods. This matrix method presents a new tool
for the design and analysis of these alignment mechanisms and greatly
simplifies the design process by breaking the problem into smaller problem
modules which are then solved to yield the final solution. This application
of this matrix method is very unique, as the use of these matrices was
generally restricted to robotics. Next, a brief review of the application of
this matrix approach to the analysis of hyper-redundant manipulators is
done and position, velocity and acceleration equations are derived.
CHAPTER II
POSITION ANALYSIS OF MECHANISMS
Introduction
This chapter deals with the position analysis using homogeneous
transformation matrices. By this approach it is possible to determine the
position of a point, identified in local coordinates on any mechanism with
respect to the world coordinate system.
There are two coordinate systems which are employed in the analysis
of mechanisms:
a.
Local link coordinate system, and
b.
World coordinate system.
As illustrated in Figure 2.1, the coordinate systems [xl, yl, zl] and
[x2, y2, z2] are the local link coordinate axes for the links 1 and 2. The
world coordinate system is represented by the axes [X, Y, Z]. In the
position analysis, if the point 'P' is to be represented with respect to the
world coordinate system, a series of transformations and rotations are
performed on the origin 'O' of the world coordinate system and it is
10
Figure 2.1. Illustration of the Coordinate Systems.
11
"moved" along the links to the point 'P', the world coordinates of which
need to be determined.
The following sections outline the methodology for this position
analysis. The general analysis defines the transformation matrices and
establishes the general position equation which will be subsequently used in
the velocity and acceleration analyses.
General Analysis
Matrix Transformation
The position analysis of a point with respect to the world coordinate
system can be determined from the local link coordinates of the point by
using homogeneous transformation matrices.
There are two types of transformation matrix operators, namely
a. Translation matrix operator, and
b. Rotation matrix operator.
Translation Matrix Operator
Consider point P(xl, yl, zl) in Figure 2.2. Let it be displaced by a
length T to point Q(x2, y2, z2). The increase in length with respect to each
12
-•Q(x2,y2,z2)
y
X
Figure 2.2. Translation
13
axes can be represented by,
x = (x2-xl)
y = (y2-yl)
z = (z2-zl).
This can be conveniently represented as a 4x4 homogeneous transformation
matrix as given below.
1
0
0
0
0
1
0
0
0 X
0 y
1 z
0 1
where 'T' represents the translation matrix and x, y and z represent the
increments in lengths along the corresponding axes.
Rotation Matrix Operator
Figure 2.3 represents rotation about the X-axis in the Y-Z plane by an
angle '<^^\ This can be represented by a matrix given by.
1
0
0
0 COS((|)J -sin((t)x)
Rx((|)x)
0
sin((t)x)
0
0
0
0
cos((t)J 0
0
1
Similarly rotations about the Y-axis and Z-axis (Figures 2.4, 2.5) can be
14
Figure 2.3. Rotation about the X-axis
15
X
Figure 2.4. Rotation about the Y-axis
higure 2.5. Rotation about the Z-axis
16
written as.
Ry«t)y)
COS((|)y )
0
sin((t)y)
0
0
1
0
0
-sin((t)y)
0
0 cos((t)y) 0
0
0
cos((t),) -sin((t),)
sin((t)J cos((t)2)
Rz((t)z)
1
0 0"
0 0
0
0
1 0
0
0
0
1
where '(|)x', '(|)y' and '(|)z' represent the angles of rotation about the X, Y and
Z axes, respectively.
Position Analvsis of Mechanisms
Let us consider a point 'P' on any mechanism, the coordinates of
which are to be determined with respect to the world coordinate system.
Let this point be traced from the origin by a series of transformations using
the constant and variable link parameters. If the first matrix transforming
from the origin is To and the subsequent transformations are Tj, T2, etc.
then the transforming position equation can be written as,
17
x^
'0"
To . T, . T2. T3.
7
T
1
0
0
1
where Xw, Y^, Zw are the global coordinates of the point under
consideration. Here 'Tn' represents the translation (or rotation) leading to
the point under consideration 'P'.
Thus, the transformation data is entered by visualizing the "moving"
of the origin of the world coordinate system to the point under
consideration by employing a series of transformation matrices, thereby
determining the world coordinates of the point.
Here the transformations proceed from the left to the right as
"the concept of post-multiplying a transformation represents that translation
and/or rotation is made with respect to the current reference coordinate
frame due to the preceding transformation" [1].
Let us consider some examples to illustrate this position analysis
First let us study the translation and rotation separately. Consider the link
illustrated in Figure 2.6. The link is capable of extending along the X-axis.
Let the length of the link for this position be '1'. Then the coordinates of the
point 'P' can be written as,
18
Y
O
c>
X
Figure 2.6. Example Illustrating Translation.
19
P(x,y,z)
=
li + 0 j +0k,
where i, j , k represent the unit vectors in the X, Y and Z directions
respectively. If 1=10 mm, then
P(x,y,z)
=
10 i
.
Let us solve this problem using the program which employs the matrix
approach. The equation for the position can be written as,
P(x,y,z)
=
Tx(l). {000 1}''
If 1 = 10 mm, then
P(x,y,z)
=
Tx(lO). {0 0 0 1}'^.
The data entry for this example will be as follows.
On running the '.EXE' file the screen displays,
0
General Position Analysis
1
General Velocity Analysis
2
General Acceleration Analysis
3
Analysis of Hyper-redundant Manipulator
4
Quit
On entering '0', the screen displays the prompt,
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
20
ENTER MOVEMENTS AND ITS VALUE
TXIO
The X coordinate of the point is
10.0000
The Y coordinate of the point is
0.0000
The Z coordinate of the point is
0.0000.
Thus the point 'P' is represented by,
P(x,y,z)
=
101,
which agrees with the solution obtained in the analytical method.
The text in italics represents the text displayed on the screen and the
italicized text that is underlined represents the data that is entered by
the user. This notation will be used throughout the remainder of the
text.
Now let us study an example to illustrate rotation followed by a
translation (Figure 2.7). From Figure 2.7, the X-coordinates of the point
can be written as,
Xw
=
lcos(e)
Similarly the Y-coordinates can be written as,
Yw
=
Isin(e)
If 1 = 25 mm and 9 = 45°, then
21
Figure 2.7. Example Illustrating a Rotation Followed by a Translation.
01
Xw
=
25cos(45) =
17.68 mm,
Yw
=
25sin(45)
17.68 mm.
=
Thus the point 'P' is given by,
P(x,y,z)
=
17.68 i-h 17.68 j .
Let us use the program to analyze this mechanism. The position equation
for this case will be,
P(x,y,z)
=
Rz(e).Tx(l). {000 1}^
If 1 = 25 mm and 6 = 45°, then
P(x, y, z)
=
Rz(45°). Tx(25). {0 0 0 1}''
.
The '.EXE' file is executed and '0' is entered at the prompt.
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
ENTER MOVEMENT #1 AND ITS VALUE
RZ45
ENTER MOVEMENTS AND ITS VALUE
TX25
The X coordinate of the point is
17.6800
The Y coordinate of the point is
17.6800
The Z coordinate of the point is
0.0000.
23
Thus the point 'P' is represented by.
P(x,y,z)
=
17.681 + 17.68 j ,
which agrees with the analytical solution.
Next, a simple two link mechanism is studied (Figure 2.8). As shown
in Figure 2.8 (a), let the lengths of the links be 11 and 12, respectively, and
let the angular displacements of each link from the horizontal be 91 and 92,
respectively- Firstly, let us solve for the world coordinates of the point T'
by the analytical method. From Figure 2.8 (a), the X-coordinates of the
point is given by,
Xw
=
11 cos(91) + 12 cos(91 - 92)
.
Similarly the Y-coordinates of the point 'P' is given by,
Yw
=
11 sin(91) + 12sin(91 -92)
.
If 11 = 10 mm, 12 = 20 mm, 91 = 30° and 92 = 20°, then
Xw
=
10cos(30°) + 20cos(30°-20°)
=
28.36 mm,
Yw
=
10sin(30°) + 20 sin(30° - 20°)
=
8.47 mm.
Thus the point can be represented by,
P(x,y,z)
=
28.361 + 8.47 j
.
Let us now solve this problem by using the program which employs a
24
'^ ^
Y
12
12 sin(02)
Z
11 cos(91)
(a)
12 cos(92)
(b)
Figure 2.8. Example Illustrating the Position Analysis for a Simple
Two-link Mechanism.
(a) Two-link Mechanism
(b) Illustration of the Local Coordinate Systems.
25
matrix approach. As shown in Figure 2.8 (b), the equation for this
mechanism can be written as,
P(x, y, z)
=
Rz(91). Tx(ll). Rz(92) . Tx(12) .{0 0 0 1}"^.
If 11 = 10 mm, 12 = 20 mm, 91 = 30° and 92 = -20°, then
P(x,y,z)
=
Rz(30).Tx(10).Rz(-20).Tx(20). {OOOl}"^
The '.EXE' file is executed and '0' is entered at the prompt.
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
ENTER MOVEMENTS AND ITS VALUE
RZ30
ENTER MOVEMENT #2 AND ITS VALUE
TXIO
ENTER MOVEMENTS AND ITS VALUE
RZ-20
ENTER MOVEMENT M AND ITS VALUE
TX20
The X coordinate of the point is
28.3600
The Y coordinate of the point is
8.4700
The Z coordinate of the point is
0.0000.
26
Thus the point 'P' can be represented by,
P(x,y,z)
=
28.361 + 8.47 j ,
which agrees with the analytical solution.
Next, a simplified PUMA robot which is detailed in Figure 2.9 (a) is
analyzed. Let the origin of the world coordinate system coincide with the
base of the robot. Let the transformations proceed from the base to the endeffector as shown in Figure 2.9 (b). The matrix equation for the PUMA robot
for a position, where for simphcity the angles 91, 94, 95 and the arm offset 13
are neglected, can be written as,
Tz(dl). Ty(-d2). Ry(92). Tx(12). Ry(93). Tx(d4). Rx(0). Ry(95) .Tx(d6).
This matrix equation is finally multiplied by {0 0 0 1 }^ to yield the world
coordinates of the end-effector. For the case when 92 = 30°, 93 = 20°,
95 = 45°, the position of the end-effector can be determined as follows.
The '.EXE' file is executed and '0' is entered at the prompt.
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
ENTER MOVEMENT m AND ITS VALUE
TZ660.4
ENTER MOVEMENT ^2 AND ITS VALUE
27
d 1 = 660.4 mm
d2= 149.5 mm
d4 = 432.0 mm
d6 = 56.5 mm
12 = 432.0 mm
13 = 0 (Assumed zero for simplicity)
(a)
z3\e2
zl
22
o2
y2,y3
yl
ol
dl
zO
^ y6, y7
yo
(b)
Figure 2.9. Six Degree of Freedom PUMA Robot
(simplified by neglecting 13).
(a) Puma Manipulator. Taken from McKerrow, Philip John [1].
(b) Illustrating the Local Link Coordinates of the Manipulator.
28
TY-I49.5
ENTER MOVEMENT ^3 AND ITS VALUE
RY30
ENTER MOVEMENT #4 AND ITS VALUE
TX432.0
ENTER MOVEMENT^5 AND ITS VALUE
RY20
ENTER MOVEMENTS
AND ITS VALUE
TX432
ENTER MOVEMENT ^7 AND ITS VALUE
RXO
ENTER MOVEMENT #8 AND ITS VALUE
RY45
ENTER MOVEMENT #9 AND ITS VALUE
TX56.5
The X coordinate of the point is
646.9000
The Y coordinate of the point is
-149.5000
The Z coordinate of the point is
57.2000.
29
Thus, the point 'P' can be represented by,
P(x,y,z)
=
646.91 - 149.5 j + 57.2 k
Thus, using this method various mechanisms can be analyzed and the
position of any point on the mechanism with respect to the world
coordinate system can be determined.
30
•iffii I I'.iii-ii'aBM
CHAPTER III
VELOCITY ANALYSIS OF SPATIAL
MECHANISMS
Introduction
The velocity analysis uses a matrix approach to determine the first
time derivative of the matrix equation that was obtained from the position
analysis. The general analysis as outlined below defines the velocity
matrices and establishes the general velocity equation. The velocity
matrices are expressed as a product of the original transformation matrix
operator and the corresponding coefficient velocity matrix.
General Analvsis
Velocitv Matrices
To determine the velocity of the point with respect to the global
coordinate system the first time derivative of the matrix equation obtained
in the position analysis is determined.
First, let us define the derivative of each transfomiation matrix
operator. The translation matrix operator is given by,
31
1
0
0
0
0
1
0
0
0 X
0 y
1 z
0 1
Let us refer to Figure 3.1. The first time derivative for a Unear motion along
the X-axis is given by,
dJJdi
0 0 0 X
0 0 0 0
0 0 0 0
0 0 0 0
Similarly Unear velocities along the Y-axis (Figure 3.2) and along the
Z-axis (Figure 3.3) is given by,
"0 0 0 0
0 0 0 y
Ty / at
0 0 0 0
0 0 0 0
32
Y
X
Figure 3.1. Linear Velocity along the X-axis
33
Y
•
^
X
Figure 3.2. Linear Velocity along the Y-axis
.y
Figure 3.3. Linear Velocity along the Z-axis
34
^
^*
0 0 0 0'
0 0 0 0
aT,/at =
0 0 0 z
0 0 0 0
We can express these derivatives as matrix products as follows:
a Tx / at =
1 0 0 X "0 0 0 1
0 1 0 y 0 0 0 0
0 0 1 z 0 0 0 0
0 0 0 1 0 0 0 0
"1 0 0
a Ty / at =
dTJdt
=
X
0
"0 0 0 0
1 0 y
0 0 1 z
0 0 0 0
0 0 0
1
0 0 0 0
^1 0 0
X
"0 0 0 0
1 0 y
0 0 1 z
0 0 0 0
0 0 0
0 0 0
0 0 0 0
0
1
0 0 0
1
1
Now let us derive the velocity matrices for the rotation operators.
The rotation operator for the angular displacement about the X-axis
is given by.
35
1
0
0 cos((t)J
Rx((t)x)
0
sin((t)^)
0
0
0
0
-sin((t)J
0
COS((|)J
0
0
1
Taking the first time derivative (Figure 3.4) of the above we have,
Rx((|)x) =
0
0
0
0
0 -sin((t)J -cos((t)J 0
0 cos((t)J -sin((|)J 0 <t>x
0
0
0
0
We can express this derivative as a product of the rotation operator for the
X-axis and the coefficient matrix representing the derivative as,
Rx((t)x) =
1 0
0
0" "0 0 0 0
0 cos((t)J -sin((t)J 0 0 0 - 1 0
0 sin((t)J
0 0
cos((t)x) 0
0
1
1
0
0
0 0
0
0
0
0>
Similarly we can determine the velocity matrices for rotations about the
Y-axis (Figure 3.5) and about the Z-axis (Figure 3.6) as follows:
Ry((t)y) =
COS((|)y )
0
sin((t)y)
0
1
0
0
0
-sin((t)y)
0
0" "0
0
1 0
0
0 COS((t)y) 0
0
-1
0 0 0
<t>>
0 0 0
1
0
0 0 0
36
A \/
e
X
(j).
Figure 3.4. Angular Velocity about the X-axis.
37
Y
X
Figure 3.5. Angular Velocity about the Y-axis.
Figure 3.6. Angular Velocity about the Z-axis.
38
COS((|)J -sin((t),) 0 0" "0 - 1 0 0
sin((t),) cos((t)2) 0 0 1 0 0 0
0
0
1 0 0 0 0 0
0
0
0 1 0 0 0 0
Rz«t>z) =
where
^.
(t)^, (t)y, <\fz are the angular displacements,
<l>x, <t>y, <t>z are the angular velocities.
Let us write a general expression for these matrix products.
aT(q)/aq = T(q) Q q
where
q
is the variable parameter in the matrix,
Q
is the coefficient velocity matrix corresponding to that
transformation,
T(q) represents the matrix to be differentiated,
q
represents the first time derivative of the variable parameter
which in the case of translation, represents the linear
velocity, and in the case of rotation it represents the angular
velocity.
Velocity Analvsis of Mechanisms
Using the velocity matrices discussed earlier, we can take the first
time derivative of the matrix equation obtained in the position analysis.
39
The matrix equation is given by.
Xw
w
0'
0
0 . 1 1 . I 2 • A3 . . . Ir
'w
0
1
where X^ , Y^ and Z ^ are the world coordinates of the point. Here Tn'
represents the translation (or rotation) of the point under consideration.
Thus, the derivative of this matrix equation is given by.
[(T0Q0q0).Tl.T2..
Tn]
+ [ T0.(TlQlql).T2.
Tn]
•f[ T0.Tl.(T2Q2q2).
Tn]
(Tn Qn qn) ]
+ [ T0.T1.T2
} . { 0 0 0 1}
where Qn - represents the coefficient velocity matrix,
qn - represents the derivative of the variable parameter for that
40
transformation.
In the velocity analysis, as in the position analysis, the transformation
data is entered from the origin of the world coordinate system to the point
under consideration by a series of transformations and the principle of post
multiplication is again employed here.
Let us refer to the examples studied in the position analysis and
modify them to illustrate the velocity analysis. First let us illustrate the
linear velocity by the following example (Figure 3.7). Let this link be
capable of extending its length along the X-axis. Let it increase its length
with a uniform velocity of 'x' mm/sec. Now the velocity of the point 'P'
can be written as,
Vp
=
xi
If
X = 5 mm /sec, then
Vp
=
51
.
mm/sec.
Let us use the program to analyze this link. The velocity equation can be
written as,
Vp
=
Tx(l,x).{000ir
If
X = 5 mm/sec, and 1 = 10 mm, then from the program,
Vp
=
Tx(10mm, 5 mm/sec). {000 1}'^
41
X
o
Figure 3.7. Example Illustrating Linear Velocity.
42
On executing the '.EXE' file, the screen displays,
0
General Position Analysis
1
General Velocity Analysis
2
General Acceleration Analysis
3
Analysis of Hyper-redundant Manipulator
4
Quit
On entering T at the prompt, the screen displays
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
ENTER THE NUMBER OF VARIABLES IN THE MATRIX EQUATION
ENTER MOVEMENT ^I AND ITS VALUE AND VALUE FOR VARIABLE
TXIO 5
The velocity of the point is given by
5i + Oj + Ok.
Thus the velocity of the point T ' is given by,
Vp
=
51
mm/sec,
which agrees with the analytical solution.
43
Let us consider another example to illustrate the velocity analysis for
the case when the link has an angular velocity. A single link mechanism is
studied below (Figure 3.8). Let the link rotate with an angular velocity '([)'
and let the length of the hnk be T. The velocity of the point 'P' will then
be,
(t)k X [lcos(e)i + lsin(e)j]
J
0
0
0
lcos(e)
Isin(e)
0
(0 - (t). 1 sin(e)) 1 - ( 0 - 0 . 1 cos(e)) j
=
- (j). 1 sin(0) 1 + 0 .1 cos(9) j
If 1 = 10 mm, 0 = 30° and (j) = 20 rad/sec, then
Vp
=
- (20). (10). sin(30) 1 + (20). (10). cos(30) j
- 1001 + 173.2 j mm/sec.
Let us now use the program to analyze this link. The velocity equation can
be written as,
Vp
=
Rz((|),(t)).Tx(l).{OOOir
If 1 = 10 mm, (t) = 30° and (j) = 20 rad/sec, then
44
Figure 3.8. Example Illustrating Angular Vele)cily
45
r • -1 - n — — "
Vp
=
Rz(30°,20rad/sec).Tx(10mm). {000 1}'^
The '.EXE' file is executed and T is entered at the prompt.
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
ENTER THE NUMBER OF VARIABLES IN THE MATRIX EQUATION
I
ENTER MOVEMENT ^1 AND ITS VALUE AND VALUE FOR VARIABLE
RZ30 20
ENTER MOVEMENTS AND ITS VALUE AND VALUE FOR VARIABLE
TXlOO
The velocity of the point is
-lOOi + 173.2 j + Ok.
Thus the velocity of the point 'P' is given by,
Vp
=
-1001 + 173.2 j
which tallies with the analytical solution.
Next let us analyze the two-link mechanism discussed earlier in the
position analysis (Figure 3.9). Let the length of the links be 11 and 12,
respectively. Let the initial angular displacements from the horizontal be 01
and 92, respectively. The angular velocity of the first link is 91. Let the
46
Figure 3.9. Example — Two-link Mechanism.
47
second link be capable of extending its length, with a uniform velocity
c mm/sec. The velocity of the point 'P' is given by,
Vp
=
91k X [llcos(91)l +12cos(92)l +llsin(91)j +
12 sin(92) j ] + c mm/sec
J
0
0
llcos(91)
lsin(91)
+
-h
12cos(92)
12sin(92)
91
0
= - 91 { [ 11 sin(91) -\- 12 sin(92) ] 1 - [ 11 cos(91) + 12 cos(92)] j }
+
c [ cos(92) 1 + sin(92) j ]
If 91 = 20°, 92 = 10°, 91 = 10 rad/sec, 11 = 10 mm, 12 = 20 mm,
and c = 25 mm/sec, then
Vp
=
- 10 { [ 10 sin(20) + 20 sin(lO) ] 1 [10cos(20) + 20cos(10)]j} + 25[cos(10)l +sin(10)j]
-44.31 + 295.3 j
mm/sec.
Let us analyze the problem by using the program. The velocity equation
can be written as,
Vp
=
Rz(91, 91). Tx(ll). Rz(92). Tx(12. c). {0 0 0 1 )^ .
48
If 91 = 20°, 92 = -10°, 91 = 10 rad/sec, 11 = 10 mm, 12 = 20 mm,
c = 25 mm/sec, then
Vp
=
Rz(20°, 10 rad/sec). Tx(10 mm). Rz(-10°).
Tx(20 mm, 25 mm/sec) .{0001}'^
.
The '.EXE' file is executed and ' 1 ' is entered at the prompt.
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
ENTER THE NUMBER OF VARIABLES IN THE MATRTX EQUATION
ENTER MOVEMENT ^I AND ITS VALUE AND VALUE FOR VARIABLE
RZ20 10
ENTER MOVEMENT ^2 AND ITS VALUE AND VALUE FOR VARIABLE
TXlOO
ENTER MOVEMENT ^3 AND ITS VALUE AND VALUE FOR VARIABLE
RZ-10 0
ENTER MOVEMENTS AND ITS VALUE AND VALUE FOR VARIABLE
TX20 25
The velocity of the point is
49
-44.3i + 295.3 j + Ok.
Thus the velocity of the point 'P' is given by,
Vp
=
-44.31 + 295.3 j
which agrees with the analytical solution.
As we can see from the above example, the cumbersome calculations
that were made in the analytical method is eliminated using this program,
and many complex mechanisms which would otherwise be difficult to
analyze using the analytical method can be easily solved using the program,
which employs a matrix approach.
Let us consider another example to illustrate the velocity analysis.
Let us study the Mini-mover 5 arm which is detailed in the following page
(Figure 3.10 (a)). The axes details are given in Figure 3.10 (b).
The velocity equation for the Mini-mover 5 arm for a position, where
the angles 91 and 93 are zero, is given by,
Tz(al). Ry(92, 92). Tx(a2). Tx(a3). Ry(94, 94). Rz(95, 95). Tz(a4).
This equation is finally multiplied by {0 0 0 1 }^ to yield the velocity of the
end-effector with respect to the world coordinate system.
Let 92 = 45°, 92 = 10 rad/sec, 94 = 20°, 94 = 15 rad/sec, 95 = 30° and
95 = 20 rad/sec. The '.EXE' file is executed and T is entered at the
50
v(^ y.O
th
Pilch
H,
Koll
liasc
al
a2
a4
195 mm
a3 = 177.8 mm
96.5 mm
(a)
Figure 3.10. Mini-mover 5 Arm. Taken from Mckerrow, Philip John [2]
(a) Manipulator.
(b) Illustration of the Local Link Coordinate Axes.
51
prompt.
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
7
ENTER THE NUMBER OF VARIABLES IN THE MATRTX EQUATION
ENTER MOVEMENT ^1 AND ITS VALUE AND VALUE FOR VARIABLE
TZI95 0
ENTER MOVEMENT ^2 AND ITS VALUE AND VALUE FOR VARIABLE
RY45 10
ENTER MOVEMENT #3 AND ITS VALUE AND VALUE FOR VARIABLE
TX177.8 0
ENTER MOVEMENTS AND ITS VALUE AND VALUE FOR VARIABLE
TX177.8 0
ENTER MOVEMENT ^5 AND ITS VALUE AND VALUE FOR VARIABLE
RY20 15
ENTER MOVEMENT #6 AND ITS VALUE AND VALUE FOR VARIABLE
RZ30 20
ENTER MOVEMENT ^7 AND ITS VALUE AND VALUE FOR VARIABLE
TZ96.5 0
.xuEKaaa
The velocity of the point is
-1494.77i - Oj + 4700.96k.
Thus, the velocity of the point 'P' is given by,
Vp
=
- 1494.77 1 - 4700.96 k mm/sec.
Thus, employing this matrix method various mechanisms can be
analyzed and the velocities of different points on these mechanisms can
be determined with respect to the world coordinate system.
53
CHAPTER IV
ACCELERATION ANALYSIS OF
SPATIAL MECHANISMS
Introduction
The acceleration analysis employs this homogeneous matrix
transformation approach to determine the second time derivative of the
matrix equation that was obtained from the position analysis. The general
analysis as detailed below defines the acceleration matrices and establishes
the general acceleration equation. The acceleration matrices are expressed
as a product of the original transformation matrix operator and the
corresponding coefficient acceleration matrix.
General Analvsis
Acceleration Matrices
To determine the acceleration of the point with respect to the world
coordinate system, the second time derivative of the matrix equation
obtained in the position analysis is determined.
54
First, let us define the second derivative of each transformation
matrix operator. The translation matrix operator is given by,
1
0
0
0
0
1
0
0
0
0
1
0
X
y
z
1
Let us refer to Figure 4.1. The first time derivative for a linear motion
along the X-axis is given by.
0 0 0 X
a T. / at
0 0 0 0
0 0 0 0
0 0 0 0
Taking the second time derivative of the above we can get the acceleration
matrix for a linear motion along the X-axis and it is given by.
"0 0 0 x'
a'T /at' =
0 0 0 0
0 0 0 0
0 0 0 0
The hnear accelerations along the Y-axis (Figure 4.2) and the Z-axis
(Figure 4.3) can be written as.
55
h
X
x
Figure 4.1. Linear Acceleration along the X-axis
56
^^:sMk
\
- y
X
Figure 4.2. Linear Acceleration along the Y-axis.
Y
I'igure 4.3. Linear Acceleration along the '/-axis.
57
" 0 0 0 0
0 0 0 y
d^Ty/dr
=
0 0 0 0
0 0 0 0
"0 0 0 0"
0 0 0 0
a'T,/at' =
0 0 0 z
0 0 0 0
We can express these derivatives as matrix products as given below.
a'T,/at' =
"1 0
0 1
0 0
0 0
0 X
0 y
1 z
0 1
"0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
a'Ty/at' =
'1
0
0
0
0 X
0 y
1 z
0 1
'0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
58
a'T./at' =
1 0 0 X
0 1 0 y
0 0 1 z
0 0 0 0
0 0 0
0 0 0 0
1
0 0 0 0
0 0 0
1
where
X, y, z are the linear displacements,
X, y, z are the linear velocities,
X, y, z are the linear accelerations.
Now let us derive the acceleration matrices for the rotation operators.
The rotation operator for an angular displacement about the X-axis
(Figure 4.4) can be written as.
1
0
0
0 cos((|)x) -sin((|)x)
Rx((t)x)
0
sin((|)J
0
0
0
0
cos((t)x)
0
0
1
The first time derivative of the above operator is given by.
0
0
0 -sin((l)J
Rx«t>x)
0
0
cos((t)J
-cos((t)x)
-sin((t)/)
0
0
0
0
0
0
^y
0
Taking the second time derivative of the above operator will yield.
59
X
<\K
Figure 4.4. Angular Acceleration about the X-axis.
60
0
0
0 -COS((|)J
Rx((t)x)
0
C
) •
sin((t)J1
C)
c)
c)
0
0
-sin((t)J
0
0
-cos((t)x )
0
0
0
0
^
0 -sin((t)J -cos((t)J 0
<t>.
^x
0
cos((t)J
-sin((t)J
0
0
0
0
0
1
0
0
)
(t)x'
0] "0
0 cos((t)J -sin((t)J 0
0
0
0
0 -1
0
0
0
sin((t)J
cos((t)J
0
0
0
-1 0
0
0
0
ij
0
0
0
1
0
0
0] "0
0
0
COS((t)x )
0
sin((t)x)
0
0
-sin((t)J 0
cos((t)x)
0
61
0
0
0
0"
0 0 -1 0
0 1
0
0
1 0 0
0
0
1
0
0
0
cos((t)J -sin((t)J 0
0 sin((t)J cos((t)J 0
0
0
0
0
1
0
0
0
0"
0
0
0
0
0
-0,
0
0
0
0
-0,
0
0
0
ct),
0
0
0_
0
0
0
0
+
•
0 - 0K'
0
0
0
0
Simplifying this and expressing it as a product of the rotation matrix
operator and the coefficient acceleration matrix we have.
0
0
0
0
0
cos((t)x)
-sin((t)x)
0
0 -(t)^
0
sin((t)x)
cos((t)x)
0
0
0
0
0
0
0
0
0
-^x
0
ct),
-(t),^
0
0
0
0
Rx((t)J =
Similarly, taking the second derivative for the rotation matrices for the
angular accelerations about the Y-axis (Figure 4.5) and Z-axis (Figure 4.6),
and simplifying we get.
62
<l>v
-s
X
Figure 4.5. Angular Acceleration about the Y-axis.
Figure 4.6. Angular Acceleration about the /-axis.
63
cos((t) )
0
sin((t)J
0
-^y^
0
(l)y
0
0
1
0
0
0
0
0
0
0 cos((t)J
0
•^y
0
-0/
0
0
1
0
0
0
0
Ry((t)y)
-sin((t) )
0
0
cos((t)J
-sin((t)J
0 0
-0z
-0z
0 0
sin((t)J
cos((t)J
0 0
ct)z
-^z
0 0
0
0
1 0
0
0
0 0
0
0
0 1
0
0
0 0
Rz((t)z)
where
(j) is the angular displacement,
(j) is the angular velocity,
(j) is the angular acceleration .
Let us write a general expression for these matrix products.
a2T(q)/a^t = [ T(q) A ]
where
T(q) represents the matrix to be differentiated,
64
A
is the coefficient acceleration matrix corresponding to that
transformation,
q
represents the variable parameter which, in the case of
translation represents the linear displacement and in the case
of rotation represents the angular displacement.
Acceleration Analvsis of Mechanisms
Using the acceleration matrices discussed in the previous section we
can take the second derivative of the matrix equation.
a
{ [ (TO AO). Tl . T2 . .. Tn]
+ [T0.(T1 A l ) . T 2 . . . T n ]
-K [ TO . Tl . (T2 A2). . . Tn]
-H[T0.T1 . T 2 . T 3 . . . ( T n An)]}. {0 0 01}'
65
•^~~-—
+
2{ [ ( T O . Q O . q O ) . ( T l . Q l . q l ) . T 2 . . . T n ]
+ [ (TO . QO . qO) . Tl . (T2 . Q2 . q2) . . . Tn ]
}.{0 0 0 1}'^
where An represents the coefficient acceleration matrix,
Tn represents the transformation matrix.
The second part of the above matrix equation represents a product of
the combination of the velocity matrices along with the remaining
components of the matrix equation taken two at a time. The number of
combinations is given by,
CI
=
(number of variables)! / [2 . (number of variables - 2)!]
C2
=
(number of variables)! / 2
C3
=
0
where CI for the case when there are more than two variables,
C2 for the case when there are two variables,
C3 for the case when there is one variable.
In the acceleration analysis, the transformation data is entered from
the origin of the global coordinate system to the point under consideration
66
and the principle of post-multiplication is employed here. The
instantaneous velocity of each link is entered as the input parameter along
with the local link acceleration.
Let us illustrate the acceleration analysis by studying the extension of
the examples analyzed in the position and velocity analysis. Initially, an
example for linear acceleration is analyzed (Figure 4.7). Let the length of
the link '1' extend along the X-axis with a uniform acceleration of
'd' mm/sec . The acceleration of the point 'P' with respect to the world
coordinate system is given by,
Ap
=
di
mm/sec^.
If d = 10 mm/sec^, then
Ap
=
10 i mm/sec^.
We can use the program to analyze this link. The acceleration equation will
then be,
Ap
=
Tx(l,d).{00 0 i r
If d = 10 mm/sec"^, then
Ap
=
Tx(10mm, lOmm/sec^). {00 0 1}"^
When the \EXE' file is executed the screen displays,
0
General Position Analysis
67
1
d
o
1
1
-
Figure 4.7. Example Illustrating Linear Acceleration.
68
p
1
General Velocity Analysis
2
General Acceleration Analysis
3
Analysis of Hyper-redundant Manipulator
4
Quit
On entering '2', the screen displays,
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
ENTER THE NUMBER OF VARIABLES IN THE MATRTX EQUATION
ENTER MOVEMENT #1 AND ITS VALUE AND VALUES FOR VELOCITY
AND ACCELERATION
TXIO 0 10
The acceleration of the point is
lOi + Oj + Ok.
Thus the acceleration of the point is given by,
Ap= 101
mm/sec^
which agrees with the analytical solution.
Let us study another example to illustrate angular acceleration
(Figure 4.8). Let the length of the link be T, the initial angular
69
displacement from the X-axis ,'(j)', the angular velocity '([)' and the angular
acceleration '(j)'. The angular acceleration of the point 'P' with respect to
the world coordinate system is then given by.
(|)x r + (t)x ((|)x r).
Now,
J
(|)x r =
0
0
(j)
1 cos((t))
1 sin((t))
0
- (j) 1 sin((t)) i + (j) 1 cos((t)) j
J
(j)x r =
0
0
1 cos((t))
(t)
1 sin((t)) 0_
- (]) 1 sin((t)) i + (j) 1 cos((t)) j
(j) X ((j) X r)
=
0
0
(t)
-(j)l sin((l))
(1)1 cos((t))
0
70
Figure 4.8. Example Illustrating Angular Acceleration.
71
- (t)M cos((t)) i + (t)^ 1 sin((t)) j
"
Ap
=
••
- (t> 1 sin((|)) i -K (|) 1 cos((t)) j - (t)M cos((t)) i + (t)M sin((t)) j
"
=
•
•
.
.
.
1 { [- ([) sin((t)) - (t)^ cos((t))] i + [ (t) cos((t)) + (j)^ sin((t))] j }.
If 1 = 10 mm, (t) = 45°, (j) = 20 rad/sec, (j) = 20 rad/sec^ then
Ap
= - 10{ [ 20 sin(45) -h (20)^ cos(45) ] 1
- [20 cos(45) - (20)^ sin(45) ] j }
- 2969.8 i - 2687.0 j
mm/secl
Let us analyze this example using the program. The acceleration equation is
given by,
Ap
=
Rz((t),(t),(|)).Tx(l).{0 00 1}'^
If ([) = 45°, (]) = 20 rad/sec, ([) = 20 rad/sec^ and 1 = 10 mm, then
Ap
=
Rz(45°, 20 rad/sec, 20 rad/sec^). Tx(lO) .{0001}'^
The *.EXE' file is executed and '2' is entered at the prompt.
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
ENTER THE NUMBER OF VARIABLES IN THE MATRDC EQUATION
I
ENTER MOVEMENT ^1 AND ITS VALUE AND VALUES FOR VELOCITY
72
AND A CCELERA TION
RZ45 20 20
ENTER MOVEMENT ^2 AND ITS VALUE AND VALUES FOR VELOCITY
AND ACCELERATION
TXIO 0 0
The acceleration of the point is
-2969.8i - 2687.0j + Ok.
Thus the acceleration of the point 'P' is given by,
Ap
=
- 2969.8 i - 2687.0 j mm/sec^
which agrees with the analytical solution.
Let us consider another example to illustrate this acceleration
analysis. A robot detailed in Figure 4.9 is analyzed. The local link
coordinates are illustrated in Figure 4.9 (b). As shown in Figure 4.9 (a), let
the origin of the world coordinate system coincide with the base of the
robot. Let the lengths of link 1 and 2 be 11 and 12, respectively. Let the
angular accelerations corresponding to each joint be a l , a2, a3, a4 and a5.
The transformations will proceed from the left to the right, to the endeffector as follows:
73
a2co2
xO xl
(b)
(b)
Figure 4.9. Illustration of the Acceleration Analysis
(a) Details of a Robot. Taken from Meriam J.L., Kraige L.G [3].
(b) Illustration of the Local Link Coordinates.
74
Rz(col, a l ) . Rx(e,co2, a 2 ) . Ty(ll). Ry(co3, a 3). Rx(p). Ry(co5, a 5 ) .
Ty(12).
The resulting matrix will then be multiplied by {0 0 0 1 }'^ to yield the
acceleration of the end effector with respect to the world coordinate system.
If e = 45°, p = 30°, 11 = 20 mm, 12 = 20 mm
col = 10 rad/sec
a l = 10 rad/sec^
co2
20 rad/sec
a2
20 rad/sec^
(o3
15 rad/sec,
a3
15 rad/sec^
0 rad/sec
a4
0 rad/sec^
co5 5 rad/sec.
a5 = 5 rad/sec
then.
Ap
=
Rz(10 rad/sec, 10 rad/sec^). Rx(45°, 20 rad/sec, 20 rad/sec^)
. Ty(20 mm). Ry(15 rad/sec, 15 rad/sec^). Rx(30°)
. Ry(5 rad/sec, 5 rad/sec^). Ty( 20 mm) .{0001}'^.
The \EXE' file is executed and '2' is entered at the prompt.
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
7
ENTER THE NUMBER OF VARIABLES IN THE MATRTX EQUATION
75
ENTER MOVEMENT #1 AND ITS VALUE AND VALUES FOR VELOCITY
AND A CCELERA TION
RZO 10 10
ENTER MOVEMENT #2 AND ITS VALUE AND VALUES FOR VELOCITY
AND ACCELERATION
RX45 20 20
ENTER MOVEMENT #5 AND ITS VALUE AND VALUES FOR VELOCITY
AND ACCELERATION
TY20 0 0
ENTER MOVEMENT #4 AND ITS VALUE AND VALUES FOR VELOCITY
AND ACCELERATION
RYO 15 15
ENTER MOVEMENT #5 AND ITS VALUE AND VALUES FOR VELOCITY
AND A CCELERA TION
RX30 0 0
ENTER MOVEMENT #6 AND ITS VALUE AND VALUES FOR VELOCITY
AND A CCELERA TION
RY055
ENTER MOVEMENT #7 AND ITS VALUE AND VALUES FOR VELOCITY
AND A CCELERA TION
TY20 0 0
76
The acceleration of the point is
13341.1 i - 8737.5j - 14588.9k.
Thus, the acceleration of the point 'P' is given by,
Ap
=
13341.1 i - 8737.5 j - 14588.9 k mm/sec^
which agrees with the analytical solution.
Thus, this matrix method can be utilized to perform the position,
velocity and acceleration analyses on any mechanism from a knowledge of
the joint and link parameters.
77
CHAPTER V
APPLICATIONS
Introduction
This chapter covers the applications of the matrix approach principles
studied in the previous chapters. Initially, the homogeneous matrix
approach is utilized to study automotive alignment mechanisms. Two
automotive alignment mechanisms—the Single Nut Mechanism and the Dual
Disc Mechanism, will be discussed and the sub-sections explain the use of
this matrix approach in the design and analysis of these mechanisms. Next,
the analysis of the Dual Disc Mechanism is extended to study the
kinematics of a hyper-redundant manipulator [4] and it includes the
position, velocity and acceleration analyses.
Automotive Alignment Mechanisms
Introduction
The purpose of this section to show the applicability of this matrix
approach by employing it in the design and analysis of automotive
alignment mechanisms. Initially, a single nut mechanism is analyzed and
78
the various combinations of camber and toe-in are determined. Next a dual
disc mechanism is analyzed and the various configurations are determined.
Currendy, these mechanisms are designed and analyzed using geometric
methods which involve tedious calculations. Now, this matrix method
presents itself as a new method that eliminates all these lengthy calculations
and greatly simplifies the task of analyzing these mechanisms by providing
a general method that allows the design process to be broken into smaller
and simpler problem segments that can be solved individually to give the
final solution.
These mechanisms are used to set the camber and toe-in angles of the
wheels in automobiles and the alignment angles can be defined as follows.
"The angle of inclination of the wheel out of the vertical due to inclining the
spindle downward out of horizontal is called camber" [5] (Figure 5.1).
"The inward inclination of the front wheels is called toe-in" [5]
(Figure 5.2). There are various mechanisms used for alignment and two of
these will be discussed.
79
CAMDCR ANGLE
^SflNOU (NCUNtO nO*<ny<>'F0
/ '
,-MORi;0NlAL WIS
SPiNOU WIS
CCNTCR LINt Of WH(tL
Figure 5.1. Camber. Taken from Graham, Frank D [5].
TOE IN
I
-WHEELS INCLINED INWARO-
Figure 5.2. Toe-in. Taken from Graham, Frank D. [5].
A - Distance at Front.
B - Distance at Rear.
80
«f^
Single Nut Mechanism
In the mechanism discussed here, the required setting of camber and
toe-in is achieved by the rotation of a nut which has a tapered surface so as
to achieve the necessary inclination. This nut (Figure 5.3) is similar to the
individual discs of the Dual Disc Mechanism (which we will study later in
this text) except that the former has one inclined surface, while the latter has
two inclined surfaces. But the same basic analysis can be applied to both
these mechanisms and the camber angle can be computed as a function of
the angular rotation of the nut.
Procedure
This method outlines a general procedure to determine the camber
and toe-in angles for a given rotation of the nut of the single nut mechanism.
This presents a method to analyze the mechanism irrespective of it's design
or configuration. However, the nut is assumed to be a disc with one of the
two surfaces inclined at an angle, while the other surface is flat and is flush
with the body of the mechanism.
Referring to Figure 5.3 and Figure 5.4, we can determine the
camber and toe-in from the following parameters:
81
n
yO-
y!
-••—•-
XOQ
xl
(b)
Figure 5.3. Single Nut Mechanism [6].
(a) Input Parameters for the Mechanism.
(b) Local Coordinate Axes.
82
^ .
A
S(\.\\\/?.)
z
(a)
a^"
S(x2,y2,z2)
P(xl,yl,zl)
(b)
c
Figure 5.4. Parameters for the Single Nut Mechanism.
(a) View from the Top, Perpendicular to the Surface.
(b) View from Section along A-A'
83
1. diameter of the disc '2c',
2. taper angle of the disc 'p',
3. angle of rotation of the disc 'a'.
Since the program cannot direcdy measure the angles during position
analysis, an indirect means of calculating the alignment angles is employed
here. The steps can be outlined as follows.
Let the points be defined as P(xO, yO, zO), Q(xl, yl, zl), R(x2, y2, z2),
S(x3, y3, z3), T(x4, y4, z4) (Figure 5.4).
1. Obtain the thickness at the center of the nut as follows (Figure 5.4).
The minimum thickness is 'b' which is an input parameter.
a = b/tan(p)
.
(1)
Applying the principle of similar triangles we get,
b / d = a/(a + c)
d = b (a -I- c) / a
= b + be / a
= b + c tan(p) (from equation 1)
where *d' is the central thickness of the nut.
From Figure 5.4,
e = d + c tan(P)
84
(2)
X = d / sin(P)
also X + y = e / sin(P)
y = (e-d) / sin(p)
2. Go to point R from Q by translating along the Y-axis by the distance 'd'
and get its world coordinates.
3. Rotate by the angle '- P' about the Z-axis.
4. Rotate by the angle 'a' about the Y-axis.
5. Go to S and get its world coordinates by translating a distance '-y'
along the X-axis.
6. Obtain the magnitude of the vertical distance along the y-axis between
points R and S which is given as,
el = ly2-y3l.
7. The camber angle is then given by,
camber = tan' (el / c).
8. Repeat steps 3 to 5. Obtain the coordinates of the point 'T' by
translating along the Z-axis by a distance 'y'.
9. Obtain the magnitude of the vertical distance along the Y-axis between
points 'R' and T ' which is given by,
e2 = I y3 - y4l.
85
/. toe-in = tan'^(e2/c).
Let us study some configurations of the single nut mechanism.
Referring to Figure 5.4, let the angle of rotation, 'a', be zero and let the
nut coincide with the zero position. Now, by observation, the camber angle
will be equal to the taper angle of the disc.
camber
=
P,
toe-in
=
0°.
If p = 20°, then
camber
=
20°,
toe-in
=
0°.
Let us use the program to determine the camber and toe-in. The second
'.EXE' file is executed and the screen displays the following.
1
Camber
2
Quit
Now, ' 1' is entered at the prompt and we get the following menu.
Input
Output
Enter
Angle of rotation of nut
Camber/toe-in
1
Angle of rotation of discs
Camber/toe-in
2
86
Angle of rotation of discs
Output file
Now, T is entered at the prompt.
ENTER THE DIAMETER OF THE SURFACE OF THE NUT THAT IS
FLUSH WITH THE FLANGE SURFACE.
ENTER THE TAPER ANGLE OF CAMBER ADJUSTING NUT
20
ENTER THE ROTATION OF CAMBER ADJUSTING NUT
0
ENTER THE MINIMUM THICKNESS OF NUT
05
ENTER THE NUMBER OF MOVEMENTS TO DEFINE SINGLE NUT
MECHANISM
ENTER MOVEMENTS AND ITS VALUE
TX3
ENTER MOVEMENT #2 AND ITS VALUE
TY3
ENTER MOVEMENT ^3 AND ITS VALUE
Enter '0'for the value. The program will calculate the correct value.
87
TYO
ENTER MOVEMENT #4 AND ITS VALUE
RZ-20
ENTER MOVEMENT #5 AND ITS VALUE
RYO
ENTER MOVEMENT #6 AND ITS VALUE
Enter '0' for the value. The program will calculate the correct value.
TXO
Camber
^z
20 degrees
toe-in
=
0 degrees
camber
=
20"",
toe-in
_
0°.
Similarly, if the nut is rotated by ninety degrees clock-wise, then, by
observation.
camber
0°,
toe-in
20°.
From the program, by inputting the same values for the parameters, we get
camber
0°,
toe-in
20°
88
which agrees with the solution obtained from the analytical method. For a
rotation of one hundred and eighty degrees, the program yields
camber
=
- 20°,
toe-in
=
0°
which agrees with the solution obtained from observation.
Thus, this matrix approach has been utilized to analyze the single nut
alignment mechanism and the camber and toe-in angles for different
configurations of the mechanism can be determined. Another mechanism,
the dual disc mechanism, is also discussed to show the applicability of this
matrix approach.
Dual Disc Mechanism
The matrix method is employed to determine the camber and toe-in
for different configurations of the dual disc mechanism. In the mechanism
discussed below, the required setting is achieved by the relative angular
displacement between the two wedge shaped discs so as to achieve the
necessary inclination. These discs are similar to the discs used in the hyperredundant manipulator. Each disc (Figure 5.5) has fourteen slots running
through the thickness of the discs. Each end of the slots are numbered from
89
^<»^^
^i/^-'
^
\
\
\
\
33r/7'7"
Wc. '-i db'C>T5Lr I CM HIGH IX^INT/.QW
, •' .-INT CE.MTER ut^C
(b5m')
' :^n '/i, DihTANCH Br.TWF-tN WOV >• I -I
I
\
\
o'
-i-^'-^z'ss^
\
5iV!) .'O'
li
zei' 51' 2>r
/.
77*6'5fe'
• "fo5 R'vD'Ui- TO
w-i
••V
257*6'52"
D
»OZ*5J'40"
\k K^
\
l2e*34'E6''
^
205 •42'61-
/
I
15^* IT 11"
' I60*
y 1
VI
.06Z
t
Figure 5.5. Dual Disc Mechanism. Taken from Ingalls Product
Drawing [6].
90
one to fourteen on one side and fifteen to twenty-eight on the other side.
The center of slot number eight is offset from the zero position by an angle
equal to 8° 34' 28" which is one-third of the distance between hole centers.
There are four different combinations by which the surfaces can be matched
as each disc has two surfaces. Since each disc has fourteen slots, the total
number of alignment combinations can be written as,
n= 1 4 x 1 4 x 4 = 784
Among these, some combinations are repeated and the actual number of
combinations will be equal to four hundred eighty-five [6].
Procedure
Referring to the Figure 5.5, we can determine the camber and toe-in
from the following parameters.
(1) Diameter of the discs.
(2) Taper angle of the discs.
(3) Minimum thickness of the discs.
(4) Slot numbers of the two discs coinciding with the zero position, from
the angles of rotation of the discs are determined.
Since the program cannot directly measure the angles, just like in the single
91
nut mechanism, an indirect means of calculating the alignment angles is
employed. The steps can be outlined as follows.
Let the points be defined as P(xO, yO, zO), Q(xl, yl, zl),
R(x2, y2, z2), S(x3, y3, z3), T(x4, y4, z4), U(x5, y5, z5) (Figure 5.6).
(1) Obtain the thickness of the discs at the center as follows:
The minimum thickness of the discs is 'b' which is an input parameter.
Now,
a = (b/2) / tan(p/2)
X = (d/2) sin (p/2)
b/d = a/(a+x)
d = b(a+x)/a.
(2) Let the point 'P' be defined as P(0, 0, 0) coinciding with the origin of
the world coordinate system.
Go to the point 'Q' by translating along the X-axis by a distance equal to
the radius of the disc 'c'.
Rotate by an angle equal to '- a l ' about the new y-axis.
(3) Rotate by an angle equal to '- p/2' about the new z-axis and translate
along the new y-axis by a distance equal to 'd' to reach point 'R'.
(4) Rotate by an angle equal to '- p/2' about the new z-axis.
92
I' 1
z
y X
Figure 5.6. Parameters for the Dual Disc Mechanism.
(a) View from the Top, Perpendicular to Disc Surface.
(b) View from Section along A-A'.
93
(5) Rotate by an angle equal to - Ia2 - all about the new y-axis.
(6) Translate by a distance 'd' along the new y-axis to reach point 'S' and
get its world coordinates.
(7) Repeat steps 1 to 6.
Rotate by an angle equal to '-p/2' about the new z-axis.
(8) Rotate by an angle equal to Ia2 - all about the new y-axis to assume the
zero position.
(9) Translate by a distance equal to '- c' along the new x-axis and get the
coordinates of the point 'T'.
(10) Obtain the magnitude of the vertical distance along the new y-axis
between points 'S' and 'T', which is given by,
el = |y4-yll.
The camber angle is then given by,
y= sin"'(el/c).
(11) Repeat steps 1 to 7.
Rotate by an angle equal to Ia2 - all + nil.
(12) Translate by a distance '- c' along the new x-axis to reach point 'U' and
get its world coordinates. The vertical distance between points 'S' and
'U' is,
94
e2 = Iy5 - y3l.
The toe-in for the particular configuration is given by,
toe-in = sin"Ve2/c).
Let us study some configurations of the dual disc mechanism to test the
accuracy of the matrix method, by comparing it with the analytical solution.
Let us refer to Figure 5.6 to illustrate this method. For simplicity, let us
discount the slots and assume that the discs can be oriented for any rotation.
Then, for the zero position of both the discs, the camber and toe-in, by
observation, will be,
camber
=
2p
toe-in
=
0
where 'P' is the taper angle of each disc. If the taper angle is 1.5°, then,
camber
=
3°
toe-in
=
0°.
Let us now solve the problem using the program. The second '.EXE' file is
executed and ' 1 ' is entered at the prompt followed by '2' at the second
prompt.
ENTER THE DIAMETER OF THE CAMBER ADJUSTING DISCS
3.125
95
ENTER THE TAPER ANGLE OF CAMBER ADJUSTING DISCS
LA
ENTER THE MINIMUM THICKNESS OF THE DISCS
0.062
ENTER THE ROTATION OF DISC #7
0
ENTER THE ROTATION OF DISC #2
0
Camber
=
3 degrees
toe-in
-
0 degrees
which agrees with the analytical solution. If the first disc is in the zero
position and the second disc is rotated by a hundred eighty degrees,
then, by observation,
camber
=
0°
toe-in
=
0°
which is the same as that obtained from the program. For a rotation of
ninety degrees for both discs, by observation,
camber
=
0°
toe-in
=
3°
96
which tallies with the solution obtained by using the program.
Thus, this matrix approach has been utilized to analyze the dual disc
alignment mechanism and the camber and toe-in angles for different
configurations of the mechanism can be determined. A hst of all possible
combinations of camber and toe-in is included in Appendix C.
Hvper-redundant Mechanisms
Introduction
The purpose of this section is to review the application of this matrix
approach to the kinematic analysis of hyper-redundant mechanisms.
If in a manipulator work envelope, a point can be reached by the endeffector, by more than one configuration of the manipulator, the manipulator
is said to be kinematically redundant [2]. Or alternatively, if more than one
solution exists for the inverse kinematic transform for a point on the
manipulator work envelope, the manipulator is said to be kinematically
redundant [2].
By inducing such redundancies in manipulators, the flexibility of the
robot can be greatly enhanced and the "bUnd areas" in the robot work
envelope can be significandy reduced. Let us illustrate this principle of
97
redundancy by an example (Figure 5.7). In the first case the manipulator
has just one link. This link can access point 'P' in only one way. In the
second case, the manipulator of the same length is broken up into three
links, each capable of rotating relative to each other and the end-effector, in
this case the end of link 3, can reach the same point 'P' in more than one
way. Also the manipulator studied in the second case can access points
such as 'Q' while the first one cannot. Thus, this enhanced reach can be
imparted to manipulators by providing them with redundant degrees of
freedom. The position, velocity and acceleration analyses are performed on
hyper-redundant manipulators which are detailed below.
Position Analvsis of Hvper-redundant Manipulator
First let us study a simple case of a hyper-redundant manipulator
(Figure 5.8). Let the four links, each of length T, be initially displaced by
an angle '(|)' as shown in Figure 5.8. We can determine the position of
the point 'P' with respect to the world coordinate system as follows.
The X-coordinate and the Y-coordinate are given by,
Xp
=
1 sin((t))
Yp
=
4.(1 cosm.
98
1 I
1^
/
/
/
/
/
/
/
Q
/
/
/
/
r"
/
1/
Figure 5.7. Illuslralion of Redundancy.
99
Thus the point 'P' can be defined as,
P(x, y)
=
1 sin((|)) i + 4 1 cos((t)) j
.
If (j) = 30° and 1 = 50 mm, then
P(x, y)
=
50 sin(30°) i + (4)(50) cos(30°) j
25 i + 173.2 j
Now let us analyze this mechanism using the program that employs a matrix
approach. The angle '(j)' assumes a positive or a negative sign depending on
the position of the links (Figure 5.8). The matrix equation for position is
given by,
P(x, y)
=
Tx( 1 sin((t))). Rz((t)). Ty(l). Rz(2(t)). Ty(l). Rz(2(t))
.Ty(l).Rz(2(t)).Ty(l).{000ir
If 1 = 50 mm and (|) = 30°, then
P(x, y)
=
Tx(50 sin(30°)). Rz(30°). Ty(50 mm). Rz(-60°).
Ty(50 mm). Rz(60°). Ty(50 mm). Rz(-60°).
Ty(50 mm). Rz(-60°). Ty(50 mm) .{0001}'^
On executing the \EXE' file, the screen displays the following menu.
0
General Position Analysis
1
General Velocity Analysis
100
.
1 sin((t))
Figure 5.8. Example Illustrating Position Analysis in a Simple
Hyper-redundant Manipulator.
101
2
General Acceleration Analysis
3
Analysis of Hyper-redundant Manipulator
4
Quit
For this example '0' is entered.
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
11
ENTER MOVEMENTS AND ITS VALUE
TX25
ENTER MOVEMENT #2 AND ITS VALUE
RZ30
ENTER MOVEMENT ^3 AND ITS VALUE
TY50
ENTER MOVEMENT #4 AND ITS VALUE
RZ-60
ENTER MOVEMENT #5 AND ITS VALUE
TY50
ENTER MOVEMENT #6 AND ITS VALUE
RZ60
ENTER MOVEMENT ^7 AND ITS VALUE
102
TY50
ENTER MOVEMENT m AND ITS VALUE
RZ-60
ENTER MOVEMENT#9 AND ITS VALUE
TY50
ENTER MOVEMENT mo AND ITS VALUE
RZ-60
ENTER MOVEMENT ^11 AND ITS VALUE
TY50
The X coordinate of the point is
25.0000
The Y coordinate of the point is
173.2000
The Z coordinate of the point is
0.0000.
Thus the point 'P' can be represented by,
P(x,y)
=
25 i + 173.2 j
which agrees with the analytical solution.
Let us consider another case of a hyper redundant manipulator. Let
this manipulator be composed of wedge shaped discs as shown in
Figure 5.9. It is analogous to the human spine which is also composed of
disc shaped structures called vertebrae. The behavior of this manipulator
103
X
Z T
Y A
(b)
Fit^ure 5.9. Convention Followed for the Transformations.
(a) Top view.
(b) Front view.
104
can be compared to that of the human spine. Each set of two discs can be
approximated to be a spherical joint and the manipulator, therefore,
possesses a high degree of flexibility.
The position analysis of this hyper-redundant manipulator follows the
same basic procedure followed in the general position analysis which was
discussed in Chapter III. To avoid tedious data entry for all the discs of
this hyper-redundant manipulator, only certain basic data are utilized for the
function to determine the global coordinates of the point under
consideration. The convendon followed for the data entry can be outlined
as follows (Figure 5.9):
(1) The bottom most disc (0^*^ disc) assumes the position shown in
Figure 5.3.
(2) This disc is stationary and is taken as a reference for the rotations of
other discs.
(3) This posidon assumes an angle of rotadon equal to zero.
(4) Angles are measured clock-wise from this position and the difference in
angles between two successive discs hence determined.
The parameters that remain constant and that are independent of the
disc rotation are (Figure 5.9),
105
(a) The diameter of the disc 'd'.
(b) The line joining the centers of the two faces of the disc 'a'.
(c) The taper angle of the discs 'P'.
These constant parameters along with the variable parameter, which is the
disc rotation 'a', is utilized to determine the position of the point with
respect to the world coordinate system.
The sequence of transformations starting from the origin of the world
coordinate system can be outlined as follows (Figure 5.10).
(1) Translation along the X-axis by a displacement equal to the radius of the
disc.
(2) Clock-wise rotation by an angle equal to the half-taper angle of the disc
about the Z-axis.
(3) Translation along the y2-axis by a distance equal to the length 'a'
(Figure 5.3 b).
(4) Clock-wise rotation by an angle equal to the half taper angle of the disc
about the new z-axis.
(5) Clock-wise rotation by an angle equal to the relative rotation of the
(n+1)'^ disc about the y4-axis ('n' is the current disc and it varies from
zero to the number of discs minus one).
106
Figure 5.10. Illustration of the Local Coordinate Systems and
the Sequence of Transformations.
107
(6) Clockwise rotadon by an angle equal to the half-taper angle of the discs
about the new z-axis.
(7) Translation by a displacement 'a' along the y6-axis.
(8) Clock-wise rotation by an angle equal to the half-taper angle of the disc
about the new z-axis.
(9) Repeat steps 4 to 8 for (n-1) discs.
For the last disc.
Rotation by the prescribed angle about the new y-axis.
Translation along the new x-axis or the z-axis by the prescribed
displacement to coincide with the point under consideration.
The general matrix equation is,
Xw
Yw
'w
0'
T
fI^
rIs
rwi
T^
0 . 1 i . l 2 - t 3 - - - - l n -
0
0
1
From the above equation, we can write the position equation for the hyperredundant manipulator as follows:
108
7
TxO . Rzl . Ty2 . [ ( Rz31 . Ry41 . Rz51 . Ty61).
. . . (Rz3n . Ry4n . Rz5n . Ty6n )].
R z . R p . T p . {0 0 0 1}'^
where
T represents translation,
R represents rotadon,
X, y, z represents the transformation about the corresponding
axes,
1,2, . . . the first digit represents the transformation matrix
number, and the second digit represents the disc
number.
The difference in the angles of rotation between two successive discs is
given by,
a
=
b[i]-b[i-l] .
By convention (4), since the differences are measured clock-wise, the angle
used in the transformation is given by,
c
=
-a
=
-{b[i]-b[i-l]}
109
where 'i' represents the number of the current disc, the bottom disc being
the 0'^ disc.
Let us determine the position of the point on the hyper-redundant
manipulator for certain configurations of the discs (Figures 5.11, 5.12, 5.13
and 5.14).
Example 1 (Figure 5.11)
Let the prescribed rotation be zero degrees and the prescribed
transladon be four centimeters. The '.EXE' file is executed and the screen
displays the following menu.
0
General Position Analysis
1
General Velocity^ Analysis
2
General Acceleration Analysis
3
Analysis of Hyper-redundant Manipulator
4
Quit
For this example ' 3 ' is entered at the prompt.
ENTER THE NUMBER OF DISCS
ENTER THE DIAMETER OF THE DISCS
110
Number of discs = 4
Diameter = 8 cm
Taper angle = 20°
0°
aO =
0°
al
=
180°
a2 =
180°
a3 =
(2, 5.2, 0)
RyO, Tx4
Ry 0, Tx-4 (10.1,5.2,0)
(6, 5.2, 4)
Ry 0, TxO
Figure 5.11. Example 1
111
Number of discs = 4
Diameter = 8 cm
Taper angle = 20°
0°
aO =
180°
al
=
180°
a2 =
180°
a3 =
RyO, Tx-4 : (6.7, 7.9, 0)
Ry 0, Tx4 : (0.5, 2.8, 0)
Ry 90, Tx4 : (3.6, 5.3, 4)
Figure 5.12. Example 2.
112
4^
o
Number of discs = 4
Diameter = 8 cm
Taper angle = 20°
aO =
0°
al
=
180°
a2 =
0°
a3
=
180°
RyO, Tx4
(1,5.4,0)
Ry 90, Tx-4 (9, 5.4, 0)
Ry 90, Tx4 (5, 5.4, 4)
Figure 5.13. Example 3.
113
X
Number of discs = 4
Diameter = 8 cm
Taper angle = 20°
aO =
0°
0°
al
=
0°
a2 =
0°
a3 =
Ry 0, Tx-4 : (6.7, 7.8, 0)
Ry 0, Tx4 : (8, 0, 0)
Figure 5.14. Example 4.
114
8
ENTER THE TAPER ANGLE OF THE DISCS
20
Next the screen displays,
POSITION ANALYSIS
-
P
VELOCITY ANALYSIS
-
V
ACCELERATION ANALYSIS
-
A
Now 'P' is entered at the prompt.
ENTER THE LAST MOVEMENT
TX4
ENTER THE LAST BUT ONE MOVEMENT
RYO
The bottom most disc is disc #0
ENTER THE ANGLE OF ROTATION OF DISC #7
0
ENTER THE ANGLE OF ROTATION OF DISC #2
180
ENTER THE ANGLE OF ROTATION OF DISC #3
180
115
The X coordinate of the point is
2.0000
The Y coordinate of the point is
5.2000
The Z coordinate of the point is
0.0000.
Thus the point can be represented by,
P(x,y,z)
=
21 -h 5.2 j cm
which agrees with the soludon obtained from geometric construction. For a
prescribed rotadon of zero degrees along the y-axis and a translation of
minus four centimeters along the x-axis, the point described in terms of the
world coordinates is determined to be
P(x,y,z)
=
10.1 i + 5.2 j
cm.
Similarly for a prescribed rotadon of zero degrees along the y-axis, and a
prescribed translation of zero centimeters along the x-axis, the point is
determined to be
P(x,y, z)
=
6i + 5.2j + 4 k cm.
Other configurations are illustrated in Figures 5.12, 5.13 and 5.14, and the
soludon obtained using the program tallies with the solution obtained from
geometric construcdon.
Thus, with the given data the program determines the posidon of the
point on the hyper-redundant manipulator with respect to the world
116
coordinate system.
Velocitv Analvsis of Hvper-redundant Manipulator
Let us study the simple hyper-redundant manipulator discussed
earlier in the previous secdon. Let us extend this example to illustrate the
velocity analysis (Figure 5.15). The velocity of the point 'P' is given by
(t) X [ 1 cos(90 - 0) i -h 1 sin(90 -(}))]]
0
0
1 sin((t)) 1 cos((t))
=
-(t)
0
([) 1 cos((|)) i + ([) 1 sin((t)) j
If (|) = 20 rad/sec, (j) = 30°, 1=10 mm, then
Vp
=
(20) (10) cos(30°) i - (20) (10) sin(30°) j
173.2! + 100 j mm/sec.
Let us use the program to determine the soludon for the above problem.
The velocity equadon can be written as.
117
\
-*-
o
Figure 5.15. Illustradon of the Velocity Analysis for the Simple
Hyper-redundant Manipulator.
118
Vp
=
Rz((t)). Ty(l). Rz(2(t)). Ty(l). Rz(2(t)). Ty(l) . Rz(2(t)).
Rz((t)).Ty(l).{OOOir.
Let (|) = 30°, (t) = 20 rad/sec and 1 = 10 mm. The '.EXE' fde is executed and
T is entered at the prompt. Next the screen displays,
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
ENTER THE NUMBER OF VARIABLES IN THE MATRTX EQUATION
ENTER MOVEMENTS! AND ITS VALUE AND VALUE FOR VARIABLE
RZ-30 0
ENTER MOVEMENTS AND ITS VALUE AND VALUE FOR VARIABLE
TYIOO
ENTER MOVEMENT ^3 AND ITS VALUE AND VALUE FOR VARIABLE
RZ60 0
ENTER MOVEMENT ^4 AND ITS VALUE AND VALUE FOR VARIABLE
TYIOO
ENTER MOVEMENT #5 AND ITS VALUE AND VALUE FOR VARIABLE
RZ-60 0
ENTER MOVEMENT #6 AND ITS VALUE AND VALUE FOR VARIABLE
119
TYIOO
ENTER MOVEMENT ^7 AND ITS VALUE AND VALUE FOR VARIABLE
RZ60 0
ENTER MOVEMENT ^8 AND ITS VALUE AND VALUE FOR VARIABLE
RZ0200
ENTER MOVEMENT #9 AND ITS VALUE AND VALUE FOR VARIABLE
TYIOOO
The velocity of the point is
173.2 i + 100.0 j + 0.0 k.
Thus the velocity of the point 'P' is given by,
Vp
=
173.2 i + 100 j mm/sec
which agrees with the analydcal soludon.
Now let us study the hyper-redundant manipulator that is composed
of numerous wedge shaped discs. The variable parameters of the hyperredundant manipulator will be the angular velocides, and the angular
acceleradons of the discs. The matrix equadon for the manipulator is given
by.
120
x^
7
TxO . Rzl . Ty2. [ (Rz31 . Ry41 . Ry51 . Ty61).
(Rz3n . Ry4n . Rz5n . Ty6n) ] . Rz. Rp . Tp . { 0 0 0 1 }^
where
T represents translation,
R represents rotadon,
X, y, z represents the transformation about the corresponding
axes,
1,2, .. .
the first digit represents the transformation matrix
number,
the second digit represents the disc number.
Taking the first dme derivadve of this equadon, we have
121
Xw
Vw
Yw
'w
TxO . Rzl . Ty2 . {( [ Rz31 . (Ry41 Q41 q41) . Rz51 . Ty61]
[Rz3n . Ry4n . Rz5n . Ty6n] )
+
(
[Rz31.Ry41.Rz51.TY61].
[ Rz31 . (Ry41 Q42 q42). Rz52 .Ty62]
[ Rz3n . Ry4n . Rz5n . Ty6n]
+
+
[Rz31 .Ry41 .Rz51 . Ty61]
[Rz3n . (Ry4n Q4n q4n) . Rz5n . Ty6n] )}
. Rz . Rp . Tp . { 0 0 0 1 f
122
where
TxO ~ transladon by a distance equal to the radius of the disc
along the X-axis,
Rzl - clock-wise rotadon by the half taper angle about the
new z-axis,
Ty2 - transladon by a distance equal to the thickness of the
disc along the new y-axis,
Rz3n - clock-wise rotadon by the half-taper angle about the
new z-axis,
Ry4n ~ clock-wise rotadon by an angle equal to that rotated by
the (n+l)^*" disc reladve to the n'*" disc about the new
y-axis, where 'n' is the current disc,
Rz5n — clock-wise rotadon by the half taper angle about the
new z-axis,
Ty6n — translation by a distance equal to the thickness of the
disc along the new y-axis,
Rz
— clock-wise rotation by the half taper angle about the
new z-axis,
Rp
— prescribed rotation,
Tp
— prescribed translation.
123
Thus the velocity of the point with respect to the world coordinate
system is determined.
Now let us consider an example to illustrate the velocity analysis for
diis hyper-redundant manipulator (Figure 5.16). If the bottom disc is
stationary and the upper disc rotates with an angular velocity 'co', dien the
velocity of the point 'P' is given by.
cox r
i
j
k
(0,
(Oy
CD,
r
r
r
*x
*y
*z
where cOx, cOy, cOz are the X, Y, Z components of the angular velocity vector
'co' and rx, ry, r^ are the X, Y and Z components of the radius vector 'r'.
If CO = 10 rad/sec, diameter = 8 cm, taper angle = 20°, then
cox r
i
j
k
10 sin(20°) 10 cos(20°) 0
4 cos(20°) - 4 sin(20°) 0
- 40 k cm/sec.
Now let us use the program to determine the velocity of the point 'P'. Let
CO = 10 rad/sec, diameter = 8 cm, taper angle = 20°, minimum thickness = 0
124
Y
O
Figure 5.16. Illustration of Velocity Analysis for the
Hyper-redundant Manipulator.
125
(for simphcity). The '.EXE' file is executed and '3' is entered at the
prompt.
ENTER THE NUMBER OF DISCS
ENTER THE DIAMETER OF THE DISCS
8
ENTER THE TAPER ANGLE OF THE DISCS
20
Next the screen displays,
POSITION ANALYSIS
-
P
VELOCITY ANALYSIS
-
V
ACCELERATION ANALYSIS
-
A
Now ' V is entered at the prompt.
The bottom most disc is disc #0
ENTER THE ROTATION OF DISC #7 AND ITS ANGULAR VELOCITY
010
The velocity of the point on the hyper-redundant manipulator is
0.0 i + 0.0j - 40 k.
Thus the velocity of the point 'P' is given by,
126
Vp
=
- 40 k cm/sec
which agrees with the analydcal soludon.
Acceleration Analvsis of Hvper-redundant
Manipulator
Let us study the simple hyper-redundant manipulator studied in the
previous section and extend it to illustrate acceleration analysis
(Figure 5.17). The acceleration of the point 'P' is given by,
Ap
=
(t) k X [ 1 cos(90 - ([)) i + 1 sin(90 - ([)) j ]
+
(t)k x { (t)k x [ 1 cos(90 - ([)) i -H 1 sin(90 - (|)) j ] }
J
0
0
1 sin((t)) 1 cos((|))
0
^
J
J
0
-(])
-()) 1 sin((t)) (j) 1 cos((t))
0
0
- [ (j) 1 cos((t)) + (t)^ 1 sin((t)) ] i + [ (t) 1 sin((t)) - c])^ 1 cos((t))] j
If ([) = 30°, (]) = 20 rad/sec, (|) = 20 rad/sec^ and 1 = 20 mm, then
Ap
=
- [ (20) (10) cos(30°) + (20)' (10) sin(30°) ] i
+[ (20) (10) sin(30°) - (20)' (10) cos(30°) ] j
2173.211 - 3364.10 j
mm/secl
127
Y
-0
O
X
Figure 5.17. Example Illustrating the Acceleration Analysis
in the Case of the Simple Hyper-redundant Manipulator.
128
Now let us solve the above problem using the program. The '.EXE' file is
executed and '2' is entered at the prompt. The same parameters used in the
above problem is also employed here.
ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS
ENTER THE NUMBER OF VARIABLES IN THE MATRIX EQUATION
ENTER MOVEMENT #1 AND ITS VALUE AND VALUES FOR VELOCITY
AND A CCELERA TION
RZ-30 0 0
ENTER MOVEMENT ^2 AND ITS VALUE AND VALUES FOR VELOCITY
AND A CCELERA TION
TY20 0 0
ENTER MOVEMENT ^3 AND ITS VALUE AND VALUES FOR VELOCITY
AND ACCELERATION
RZ-60 0 0
ENTER MOVEMENTS AND ITS VALUE AND VALUES FOR VELOCITY
AND ACCELERATION
TY20 0 0
ENTER MOVEMENT ^5 AND ITS VALUE AND VALUES FOR VELOCITY
AND ACCELERATION
129
RZ-60 0 0
ENTER MOVEMENTS AND ITS VALUE AND VALUES FOR VELOCITY
AND ACCELERATION
TY20 0 0
ENTER MOVEMENT ^7 AND ITS VALUE AND VALUES FOR VELOCITY
AND ACCELERATION
RZ60 0 0
ENTER MOVEMENT #8 AND ITS VALUE AND VALUES FOR VELOCITY
AND A CCELERA TION
RZO 20 20
ENTER MOVEMENT #9 AND ITS VALUE AND VALUES FOR VELOCITY
AND ACCELERATION
TY20 0 0
The acceleration of the point is
2173.0 i - 3364.1 j + 0.0k.
Thus the acceleration of the point 'P' is given by,
Ap
=
2173.21 - 3364.10 j mm/sec',
which agrees with the analytical solution.
Now let us consider the case of the hyper-redundant manipulator
which is composed of wedge shaped discs. The variable parameters
will be the instantaneous angular velocities of the discs and their angular
130
Xw
Yw
7
^w
TxO . Rzl . Ty2 . [ (Rz31 . Ry41 . Ry51 . Ty61)
(Rz3n . Ry4n . Rz5n . Ty6n) ] . Rz . Rp . Tp . { 0 0 01 }'^
where
T represents translation,
R represents rotation,
X, y, z represents the transformation about the corresponding
axes,
1,2, . . . the first digit represents the transformation matrix
number,
the second digit represents the disc number.
Taking the second derivative of the matrix equation, we have
131
^w
TxO . Rzl . Ty2 . { ( [ Rz31 . (Ry41 A41). Rz51 . Ty61]
[Rz3n . Ry4n . Rz5n . Ty6n] )
+
( [Rz31 .Ry41 .Rz51 . TY61 ] .
[ Rz32 . (Ry42 A42) . Rz52 . Ty62]
[ Rz3n . Ry4n . Rz5n . Ty6n]
+
[Rz31 .Ry41 .Rz51 . Ty61] .
132
[ Rz3n . (Ry4n A4n). Rz5n . Ty6n] ) }
. Rz . Rp . Tp . { 0 0 0 1 f
+
2{ TxO.Rzl .Ty2. { ( [ Rz31 . (Ry41 Q41 q41) . Rz51 . Ty61]
[ Rz32 . (Ry42 Q42 q42) . Rz52 . Ty62].
+(
[ Rz31 .(Ry41Q41 q41).Rz51 .Ty61]
[ Rz32.Ry42.Rz52.Ty62
]
[ Rz33 . (Ry43 Q43 q43). Rz53 . Ty63]
}..{ 0 0 0 1 f
.
The second part of the above equation represents a combination of velocity
matrices which was discussed in the general acceleration analysis.
Here TxO ~ translation by a distance equal to the radius of the disc along
the X-axis,
Rzl ~ clockwise rotation by the half taper angle about the Z-axis,
Ty2 - translation by a distance equal to the thickness of the disc
along the new y-axis,
133
Rz3n - clockwise rotation by the half-taper angle about the Z-axis,
Ry4n - clockwise rotation about the new y-axis by an angle equal to
that rotated by the (n+1)'^ disc relative to the n'^ where 'n' is
the current disc,
Rz5n - clockwise rotation by the half taper angle about the new
z-axis,
Ty6n - translation by a distance equal to the thickness of the disc
along the new y-axis,
Rz
- clockwise rotation by the half taper angle about the new
z-axis,
Rp
- prescribed rotation about the new y-axis,
Tp
- prescribed translation about the new x-axis or z-axis to
coincide with the point under consideration.
Thus the acceleration of the point on the hyper-redundant manipulator
with respect to the world coordinate system is determined.
Let us consider one configuration of the manipulator to illustrate
acceleration analysis (Figure 5.18). If the diameter of the discs are 'd' and
the angular velocity and angular acceleration of the upper disc are 'co' and
'co', respectively, then the acceleration of the point on the manipulator is
134
Y
Figure 5.18. Example to Illustrate Acceleration Analysis in the
Hyper-redundant Manipulator.
135
given by,
coxr + cox(coxr)
where 'r' is the radius vector for the rotation.
If the taper angle is 20°, diameter = 8 cm, co = 10 rad/sec, co = 10 rad/sec',
then.
i
j
k
10 sin(20°) 10 cos(20°) 0
4 cos(20°) -4 sin(20°) 0
cox r
40 k cm/sec .
J
J
k
10 sin(20°) 10 cos(20°) 0
4 cos(20°) -4 sin(20°) 0
cox r
- 40 k cm/sec.
CO x (co x r) =
i
j
k
10 sin(20°) 10 cos(20°) 0
0
0 - 4 0
- 375.8 i + 136.8 jmm/secl
Ap
=
- 375.8 i + 136.8 j - 40 k mm/secl
We can analyze the above problem by using the program. The '.EXE' file is
executed and '3' is entered at the prompt.
136
ENTER THE NUMBER OF DISCS
ENTER THE DIAMETER OF THE DISCS
8
ENTER THE TAPER ANGLE OF THE DISCS
20
Now, the screen displays,
POSITION ANALYSIS
-
P
VELOCITY ANALYSIS
-
V
A CCELERA TION ANALYSIS
-
A.
Now, 'A' is entered at the prompt.
ENTER THE LAST MOVEMENT
TX4
ENTER THE LAST BUT ONE MOVEMENT
RYO
THE BOTTOM DISC IS DISC #0
ENTER THE ROTATION OF DISC #7 AND ITS ANGULAR VELOCITY
AND ANGULAR ACCELERATION
01010
137
The acceleration of the point on the hyper-redundant manipulator is
- 375.9 i -h 136.8J - 40 k.
Thus the acceleration of the point 'P' with respect to the world coordinate
system is given by,
Ap
=
- 375.9 i + 136.8 j - 40 k
which agrees with the solution obtained from the analytical method.
Applications
Hyper-redundant manipulators have numerous potential applications.
They can be used to add dexterity and flexibility to the manipulator arm and
thus enhance the robot's ability to perform numerous tasks which involve
reaching hard to access places for operations such as welding and
machining. This principle can also be utilized in mobile robots and "be
used to implement novel means of worm or snake-like locomotion and
tentacle like grasping" [4]. A few illustrations given in Figures 5.19, 5.20
and 5.21 demonstrate the use of such hyper-redundant manipulators.
Thus, this matrix approach can be used to analyze various
mechanisms and can be efficiendy used in the design of automoti\ e
alignment mechanisms.
138
Number of discs
Diameter of discs
Taper Angle of discs
= 20
= 50 mm
= 20°
Figure 5.19. Application 1
139
Number of discs
Diameter of discs
Taper Angle of discs
= 17
= 50 mm
= 20°
Figure 5.20. Application 2.
140
7T77 TJ 77 7171TTTJJTTTTTTTT
Number of discs
Diameter of discs
Taper Angle of discs
= 13
= 50 mm
= 20°
Figure 5.21. Application 3.
141
CHAPTER VI
SUMMARY, CONCLUSIONS AND AREAS
FOR FUTURE RESEARCH
We have studied the design and analysis of automotive alignment
mechanisms and the forward kinematics of a hyper-redundant manipulator.
This approach is very simple and is ideally suited for programming on a
computer and eliminates tedious manual calculations. This program can be
used as a tool for the design and analysis of a wide range of spatial
mechanisms, by enabling the prediction of their kinematic properties which
include position, velocity and acceleration with respect to the world
coordinate system. The automotive alignment mechanisms discussed
earlier had so far been analyzed using geometric methods, which are very
cumbersome involving lengthy calculations. This matrix method presents
itself as a new tool in the design of these mechanisms as it gready simplifies
the analysis. Furthermore, this application of the homogeneous
transformation matrix approach is unique, as their use was generally
restricted to robotics.
142
There is scope for future research on the extension of this program to
include the inverse kinematics of these spatial mechanisms. A general
program can be written to determine the joint and link configurations for a
given position of the end-effector. A separate analysis can also be made for
the inverse kinematics of the hyper-redundant manipulator which was
studied in the previous chapter. Further, the program can also be extended
to include the dynamic analysis of mechanisms and determine the forces
involved at any point on the mechanism.
143
REFERENCES
(1
Ho, C.Y. and Sriwattanathamma, Jen; Robot Kinematics; New Jersey:
Ablex PubHshing Corporation, 1990, p. 18.
(2
Mckerrow, Philip John; Introduction to Robotics; Sydney:
Prentice Hall, 1992, p.205.
(3
Meriam, J.L. and Kraige, L.G.; Engineering Mechanics (Vol. 2)\
New York: John Wiley and Sons, Inc., 1992.
(4
Chirikjian, Gregory S. and Burdick, Joel W. ; A Modal Approach to
Hyper-redundant Manipulator Kinematics; IEEE Transactions on
Automation and Robotics (Vol. 10, No. 3), 1994, p.343-354.
(5
Graham, Frank D.; Audel's New Automobile Guide for Mechanics,
Operators, and Servicemen; New York: Theo. Audel and Co., 1947.
(6
Ingalls Company Product Manual; Longmont: Ingalls Engineering
Company, Inc., 1987.
(7
Sandor, George N. and Erdman, Arthur G.; Advanced Mechanism
Design; New York: Prentice Hall, 1984.
(8
Denavit, J. and Hartenberg R.S.; A Kinematic Notation for Lower Pair
Mechanisms; Journal of Applied Mechanics, 1955, p.215-221.
(9
Roberts L.G.; Homogeneous Matrix representation and Manipulation
of n-Dimensional Constructs; Document No. MS 1045,
Lincoln Laboratory, MIT, 1965.
(10) Pieper, D.L.; The Kinematics of Manipulators Under Control;
AIM- 72, Stanford University Artificial Intelligence Laboratory,
Stanford, 1968.
144
(11) Koivo A.J.; Fundamentals for Control of Robotic Manipulators;
New York: John Wiley and Sons, Inc., 1989.
(12) Paul, R.P., Shimano , B.E. and Mayer, G.E.; Kinematic Control
Equations for Simple Manipulators; IEEE Transactions on Systems,
Man and Cybernetics, SMC-11, 1981.
(13) Shimano, B.E., Geschke, C.C. and Spalding III, C.H.; Val II: A Robot
Programming Language and Control System; Robotics Research;
Cambridge: MIT Press, 1984.
(14) Driels, M.R.; MATMAN: Symbolic Matrix Manipulation; Cambridge:
Kern International Inc., 1986.
(15) Koivo A.J.; Kinematics of Excavators (back-hoes) for Transferring
Surface Material; Journal of Aerospace Engineering (Vol. 7, No. 1),
1994,p.l7-32.
(16) Kin, v.; Computerized Analysis of Gear Meshing Based on
Coordinate Measurements Data; ASME Journal of Mechanical
Design; September 1994, p.738-744.
(17) Liu, Jen-Yu and Yan, Hong Sen; Surface Geometry of Variable Pitch
Cylindrical Cams with Conical Meshing Elements; ASME Journal of
Mechanical Design; September 1994, p.862-866.
145
APPENDIX A
PROGRAM DESCRIPTION
146
This program implements the homogeneous matrix transformation
approach to determine the position, velocity and acceleration of any point
on a mechanism with respect to the world coordinate system. This program
is broken into two independent programs. The first, performs the kinematic
analysis on any mechanism including the hyper-redundant manipulator.
The second program determines the alignment angles for the Single Nut
Mechanism and the Dual Disc Mechanism.
This program has been coded in the ' C language and follows the
structured approach and utilizes functions to break down the problem into
different parts which are solved individually to obtain the final solution.
The functions used in the programs are,
1. Rotate,
2. Translate,
3. Multiply,
4. Velocity,
5. Accelerate,
6. Flexible - to analyze the hyper-redundant manipulator,
7. Camber.
147
The 'rotate' function performs the task of determining the rotation
matrix for a particular rotation transformation, given the angle and the axis
about which the rotation takes place. Similarly, the 'translate' function
determines the translation matrix after the displacement and the axis have
been specified.
The 'multiply' function is of the static type which retains the value of
the previous matrix multiplication which occurs each time this function is
called. After the final transformation has taken place the resulting matrix is
then multiplied by the matrix [ 0 0 01]^ to yield the coordinates of the
point with respect to the world coordinate system.
The 'velocity' function determines the velocity of the point under
consideration with respect to the world coordinate system from the data for
the transformation, which are the angles of rotation or the displacement
along the axis about which the transformation takes place. Along with this
data the derivative of the variable parameter for each transformation is also
entered and the program utilizes these inputs to determine the velocity with
respect to the world coordinate system.
The 'accelerate' function determines the acceleration of the point
under consideration with respect to the world coordinate system from the
148
first time derivative, the second time derivative and the linear or angular
displacement of each transformation and the axis about which it takes place.
As discussed in the general analysis for acceleration, this function takes the
acceleration equation as a sum of two parts. The second part represents a
combination of velocity matrices which was discussed in Chapter IV.
The 'flexible' function is used to determine the position, velocity and
acceleration of any point on the hyper-redundant manipulator with respect
to the world coordinate system. The data to be entered are the number of
discs, the diameter of the discs, the taper angle of the discs, the angles of
rotation of the discs, and in the case of velocity or acceleration analysis the
angular velocity or angular acceleration of each disc.
The 'camber' function analyzes two different alignment mechanisms.
The first one is the single nut mechanism for which the camber and the toein are calculated for different rotations of the nut. The second mechanism is
the dual disc mechanism for which the camber and the toe-in are computed
for different rotations of the discs. It also determines seven hundred eightyfour combinations of camber and toe-in and stores the result in an output
file. From this output file, the repeated values are eliminated and the
remaining four hundred and eighty-five values are sorted and printed out as
149
a table for the different camber and toe-in combinations for all the
configurations of the discs.
150
APPENDIX B
PROGRAM LISTINGS
151
#include <stdio.h>
#include <math.h>
main(void)
{
voidrotate(double,char,int,int,double,double,double,double,double);
void trans]ate(double,char,int,int,double,double,double,double,double);
void multiply(double,double,double,double,double,doubIe,double,double,
double,double,double,double,double,double,double,double,int,
int,double,double,double,double,doub]e);
void flexible(int,double,double,double);
void velocity(void);
void accelerate(void);
void camber(void);
int factorial(int);
void dore(void);
int dof,links,n,i,p,k,ndiscs,vel,count;
double val[100],sl,s2,s3,s4,s5,dia,tap,thick,eeta;
charM[100],C[100],flex;
DATA ENTRY
*/
clrscrO;
printfCKINEMATIC MODELING OF SPATIAL MECHANISMS\n");
printfC
\n\n\n");
printfC'MENU \n");
printfC—-\n");
sound(lOOO);
delay(500);
nosoundO;
printfC'OGENERAL POSITION ANALYSIS \n");
printfC 1 GENERAL VELOCITY ANALYSIS\n");
printfC2GENERAL ACCELERATION ANALYSIS\n");
printfCS ANALYSIS OF HYPER-REDUNDANT MANIPULATOR\n");
printfC4 CAMBER
\n");
printfC5QUmn\n\n");
printfCPLEASE ENTER YOUR SELECTION NOW.\n");
scanfC%d",&vel);
if(vel<0 II vel>5)
{
do
{
printfC YOUR SELECTION SHOULD BE EITHER 0,1,2,3,4 or 5\n");
for(i=500;i<= 1000;i=i+100)
{
sound(i);
delay(lOO);
}
for(i=1000;i>=500;i=i-100)
{
sound(i);
delay(lOO);
}
152
nosoundO;
printfCPLEASE RE-ENTER SELECTIONXn");
scanfC%d",&vel);
} while(vel<0 II vel>5);
}
if(vel=5) exitO;
if(vel==0)
{
clrscrO;
printfCGENERAL POSITION ANALYSIS\n");
printfC\n");
sound(lOOO);
delay(500);
nosoundO;
printfCENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS\n");
scanfC%d",&n);
si =0.0;
s2=10.0; /*To avoid divide error in MULTIPLY*/
s3=0.0;
s4=1.0;
s5=0;
k=l;
for(i=n-l;i>-l;i")
{
printfCENTER MOVEMENT # %d AND ITS VALUE\n",k);
scanfC%*c%c%c%ir,&M[i],&C[i],&val[i]);
k=k+l;
}
if(vel=l)
{ clrscrO;
printfCGENERAL VELOCITY ANALYSIS\n");
printfC
\n");
sound(lOOO);
delay(500);
nosoundO;
velocityO;
}
if(vel==2)
{
clrscrO;
printfCGENERAL ACCELERATION ANALYSIS\n");
printfC
\n");
sound(lOOO);
delay(500);
153
nosoundO;
accelerateO:
}
if(vel==3)
{
clrscrO;
printfC ANALYSIS OF HYPER-REDUNDANT MANIPULATORVn');
printfC
\n");
sound(lOOO);
delay(500);
nosoundO;
printfCENTER THE NUMBER OF DISCSVn");
scanfC%d",&ndiscs);
printfCENTER THE DIAMETER OF THE DISCSVn");
scanfC%ir,&dia);
printfCENTER THE TAPER ANGLE OF THE DISCSVn");
scanfC%ir,&tap);
eeta=3.1415*tap/360.0;
thick=sin(eeta)*dia;
flexible(ndiscs,dia,tap,thick);
}
if(vel==4) camberO;
i=0;
s4=1.0;
p=0;
count=0;
s5=0;
there:
if(p==0)s5=l;
else s5=0;
if(M[p]=='R' II M[p]=='r')
{ count=count-i-l;
s3=count;
rotate(val[p],C[p],p,n,sl,s2,s3,s4,s5);
if(p!=n-l){p=p-t-l;
goto there;
}
}
if(M[p]==T II M[p]=='t')
{
count=count-i-l;
s3=count;
translate(val[p],C[p],p,n,sl.s2.s3,s4.s5);
if(p!=n-l){p=p-Hl;
goto there;
}
}
} /*END OF MAIN FUNCTION */
154
ROTATION
void rotate(double theta.char xyz,int inc.int n,double si,
double s2,double s3,double s4,double s5)
{
double rll,rl2,rl3,rl4,r21,r22,r23,r24,r3Lr32,r33,r34,r41,r42,r43,r44;
voidmultiply(double,doubIe,double,double,double,double,double,double,
double,double,double,double,double,double,double,
double,int,int,double,double,double,double,doubIe);
theta=theta*3.1415926537/180.0;
if(xyz=='X' II xyz=='x')
{
r l l = l;
rl2=0;
rl3=0;
rl4=0;
r21=0;
r22=cos(theta);
r23=(-sin(theta));
r24=0;
r31=0;
r32=sin(theta);
r33=cos(theta);
r34=0;
r41=0
r42=0
r43=0
r44=l
multiply(rl 1 .r 12,rl 3,rl4,r21 .r22,r23,r24,r31 ,r32,r33,r34,r41 ,r42.r43,
r44,n,inc.sl,s2,s3,s4,s5);
return;
if(xyz==T' II xyz=='y')
{
rl l=cos(theta);
rl2=0;
rl3=sin(theta);
rl4=0;
r21=0;
r22=l;
r23=0;
r24=0;
r31=(-sin(theta));
r32=0;
r33=cos(theta);
r34=0;
r41=0
r42=0
r43=0
155
r44=l;
multiply(rll,rl2,rl3,rl4,r21,r22.r23.r24,r31.r32,r33,r34,r41,r42,r43,
r44,n,inc,sl,s2,s3,s4,s5),
return;
}
if(xyz=='Z' II xyz='z')
{
rll=cos(theta);
rl2=(-sin(theta));
rl3=0;
rl4=0;
r21=sin(theta);
r22=cos(theta);
r23=0;
r24=0;
r31=0;
r32=0;
r33=l;
r34=0;
r41=0;
r42=0;
r43=0;
r44=l;
multiplyCr 11 ,r 12,rl 3,r 14,r21 ,r22,r23,r24,r31 ,r32,r33,r34,r41 ,r42,r43,
r44,n,inc,sl,s2,s3,s4,s5);
return;
}
}/*END OF ROTATE FUNCTION
TRANSLATION
-
-
*/
void translate(double disp.char xyz,int inc,int n,double si,
double s2,double s3,double s4,double s5)
{
double rl 1 ,r 12,r 13,r 14,r21 ,r22,r23,r24,r31 ,r32,r33,r34,r41 ,r42,r43,r44;
void multiply(double,double,double,double,double,double,double,double,
double,double,double,double,double,double,double,double,int,int,
double,double,double,double,double);
if(xyz=='X' II xyz=='x")
{
r l l = l;
rl2=0;
rl3=0;
rl4=disp;
r21=0;
r22=l;
r23=0;
r24=0;
r31=0;
156
r32=0;
r33=l;
r34=0;
r41=0;
r42=0;
r43=0;
r44=l;
multiply(rl 1 ,rl 2,rl 3,rl4,r21 ,r22,r23,r24,r31 ,r32,r33,r34,r41 ,r42,r43,
r44,n,inc,sl,s2,s3,s4,s5);
return;
}
if(xyz=T' II xyz==y)
{
rll=l;
rl2=0;
rl3=0;
rl4=0;
r21=0;
r22=l;
r23=0;
r24=disp;
r31=0;
r32=0;
r33=l;
r34=0;
r41=0;
r42=0;
r43=0;
r44=l;
multiply(rll,rl2,rl3,rl4,r21,r22.r23,r24,r31,r32.r33,r34,r41,r42j43.
r44,n,inc,sl ,s2.s3,s4,s5):
return;
}
if(xyz='Z* II xyz=='z')
{
rll=l;
rl2=0;
rl3=0;
rl4=0;
r21=0;
r22=l;
r23=0;
r24=0;
r31=0;
r32=0;
r33=l;
r34=disp;
r41=0;
r42=0;
157
r43=0;
r44=l;
multiply(r 11 ,r 12,r 13,r 14,r21 ,r22.r23,r24,r31 ,r32,r33,r34,r41 ,r42,r43,
r44,n,inc,sl ,s2,s3,s4,s5);
return;
}
}/*END OF TRANSLATION
MULTIPLY
void multiplyCdouble rl l,double rl2,double rl3,double rl4,
double r21,double r22,double r23,double r24.
double r31,double r32,double r33,double r34,
double r41,double r42,double r43,double r44,
int x,int inc,double si,double s2,double s3,
double s4,double s5)
{
static double b[4][4],o[4][4],z2[4][4];
double p[4][4],q[4][4],r[4][4],c[4][4],checkl,check2;
int m,n,ij,Alint,A2int,A3int,A4int,xint,checkint,f,facto_n,facto_r,combi;
double Al,A2,A3,A4,A5,a[4][4],s[4][4],divy,anu,rashm,sapn,check,combi2;
double z3[4][4],el,c01,cll.cl2,cl3,al.bl,camber;
int factorial(int);
void dore(void);
Al=sl /•value of no. of variables passed on to Al */
A2=s2
A3=s3
A4=s4
A5=s5;
for(i=0;i<4;i-i"(-)
fora=0;j<4;j++)a[i][j]=p[i][j]=q[i][j]=0-0;
for(i=0;i<4;i-i-+)
for(j=0;j<4;j-h-h) r[i]|j]=s[i][j]=z3[i][j]=0.0;
a[0][0 ]=rll
a[0][l ]=rl2
a[0][2 ]=rl3
a[0][3 ]=rl4
a[l][0]=r21
a[l][l ]=r22
a[l][2 ]=r23
a[l][3 ]=r24
a[2][0 ]=r31
a[2][l ]=r32
a[2][2 ]=r33
a[2][3 ]=r34
a[3][0 ]=r41
a[3][l ]=r42
a[3][2 ]=r43
a[3][3 ]=r44
sl=0.0;/*restoring the value of si which is 0.0*/
158
s2=0.0
s3=0.0 /•restoring the value of s2 which is 0.0*/
s4=1.0
s5=0;
s[0][0]=sl;
s[0][l]=s2;
s[0][2]=s3;
s[0][3]=s4;
if(inc==0&&A5=l)
{
b[0][0]=l
b[0][l]=0
b[0][2]=0
b[0][3]=0
b[l][0]=0
b[l][l]=l
b[l][2]=0
b[l][31=0
b[2][0]=0
b[2][l]=0
b[2][2]=l
b[2][3]=0
b[3][0]=0
b[3][l]=0
b[3][2]=0
b[3][3]=l;
}
/* ARRAY MULTIPLICATION
]*b[l 0]+a[0 2]*b[2 0]+a[0][3]*b[3][0];
]*b[l l]+a[0 2]*b[2 l]+a[0][3]*b[3][l];
]*b[l 2]+a[0 2]*b[2 2]+a[0][3]*b[3][2];
]*b[l 3]-Ha[0 2]*b[2 3]+a[0][3]*b[3][3];
q[0][0 =a[0][0]*b[0]
q[0][l =a[0][0]*b[0]
q[0][2 =a[0][0]*b[0]
q[0][3 =a[0][0]*b[0]
0]-»-a[0]
l]+a[0]
2]-t-a[0]
3Ha[0]
q[l][0 =a[l][0]*b[0]
q[llll =a[l][0]*b[0]
=a[l][0]*b[Oj
q[n[3 =a[l][0]*b[0]
0]+a[l] ]*b[l
ll+atH ]*b[l
2Ka[l] I*b[l
3I+a[l] ]*b[l
q[2][0
q[2][l
q[2][2
ql2][3
=a[2][0]*b[0]
=a[2][0]*bIO]
=a[2][0]*b[0]
=a[2][0]*b[0]
q[3][0 =a[3][0]*b[0]
q[3][l =a[3][0]*b[0]
q[3][2 =a[3][0]*b[0]
q[3][3 =a[3][0]*b[0]
0]+a[l
l]+a[l
2]+a[l
3]+a[l
2]*b[2
2]*b[2
2]*b[2
2]*b[2
0]+a[l][3]*b[3][0];
l]+a[l][3]*b[3][l];
2]+a[l][3]*b[3][2]:
3]+a[l][3]*b[3][3];
0]-Ha[2] *b[l 0]+a[2 2]*b[2 0]-Ha[2][3]*b[3][0];
l]+a[2] *b[l l]-ha[2 2]*b[2 l]+a[2][3]*b[3][l];
2]+a[2] *b[l 2]+a[2 2]*b[2 2]+a[2][3]*b[3][2];
3]+a[2] ]*b[l 3]+a[2 2]*b[2 3]+a[2][3]*b[3][3];
0]-»-a[3]
l]+a[3]
2]+a[3]
3]+a[3]
]*b[l 0]-Ha[3 2]*b[2 0]+a[3][3]*b[3][0];
]*b[l l]+a[3 2]*b[2 l]+a[3][3]*b[3][l];
]*b[l 2]-t-a[3 2]*b[2 2]+a[3][3]*b[3][2];
]*b[l 3]+a[3 2]*b[2 3Ka[3][3]*b[3][3];
for(i=0;i<4;i-H+)
for(j=0;j<4;j-(-+)
159
{
b[i]U]=q[i]U];
}
if(A4==20001)
{
z2[0][0]=q[0][0]*s[0][0]-hq[0][l]*s[0][i]-.q[0][2]*s[0][2]+q[0][3]*s[0][3]
z2[0][l]=q[l][0]*s[0][0]-hq[l][l]*s[0][lHq[l][2]*s[0][2]+q[l][3]*s[0][3]
z2[0][2]=q[2][0]*s[0][0]-hq[2][l]*s[0][l]+q[2][2]*s[0][2Hq[2][3]*s[0][3]
return;
}
if(A4==20002)
{
z3[0][0]=q[0][0]*s[0][0]+q[0][l]*s[0][l]+q[0][2]*s[0][2Hq[0][3]*s[0][3]
z3[0][l]=q[l][0]*s[0][0]-Hq[l][l]*s[0][l]+q[l][2]*s[0][2]-hq[l][3]*s[0][3]
z3[0][2]=q[2][0]*s[0][0]+q[2][l]*s[0][l]-Hq[2][2]*s[0][2Hq[2][3]*s[0][3]
cll=(z2[0][0]-z3[0][0]);
cl2=(z2[0][l]-z3[0][l]);
cl3=(z2[0][2]-z3[0][2]);
el=fabs(cl2);
camber=atan(2*el/A2);
camber=camber* 180.0/3.1415;
if(A3>90 && (A3<270 II A3<-90)) camber=(-camber);
printfCTHE CAMBER ANGLE FOR A ROTATION OF %lf IS %lf\n",A3,camber);
exitO;
}
sapn=A2/10.0;
Alint=Al;
A2int=sapn;
A3int=A3;
xint=x:
A4int=A4:
checkint=A3int/(A2int*(xint+l));
if(A2>=10 && A2< 10000 && checkint==l && A4<20000)
{
for(i=0;i<4;i++)
{
for(j=0;j<4;j-h+)
{
o[i][j]=o[i]|j]+q[i]U];
}
}
}
divy=(Al*10.0);/*passing the "no.of variables" value through si*/
160
sapn=A4/10.0;
if(A2>=10 && A2<5000 && A4<5000 && A2==divy && A3==(A4-hl)*A])
r[0][0]=o[0][0]*s[0][0]+o[0][l]*sI0][l]-Ho[0][2]*s[0][2]-ho[0][3]*s[0]r3]
r[0][l]=o[l][0]*s[0][0]+o[l][l]*s[0][l]-Ho[lj[2]*s[0][2]+o[l]r3]*sf01f31
rI0][2]=o[2][0]*s[0][0]+o[2][l]*s[0][l]-.o[2][2]*s[0][2]+o[2][3]*s[0][3
printfCTHE VELOCITY OF THE POINT IS \n");
printfC
~
~
~\n");
printfC%.llf i -^ %.llf j + %.llf k\n",r[0][0],r[0][l],r[0][2]);
doreO;
exitO;
}
check 1 =A3/(sapn*(x-(-2));
if(A2>=10000 && checkl==l && A4<20000)/* II (Alint==l && A3int==(xint-H)))*/
for(i=0;i<=3;i-h+)
{
for(j=0;j<=3;j-h+)
{
c[i]U]=q[i]Ij]*2;
}
)
for(i=0;i<=3;i-(-h)
{
for(j=0;j<=3;j-i-h)
{
o[i]U]=o[i]U]+c[i][j];
}
}
if(Alint>2)
{
facto_n=factorial(A 1);
facto_r=factorial(A 1 -2);
combi=facto_n/(2*facto_r);
}
if(Alint==2)
{ f=l;
facto_n=factorial(A 1);
facto_r=factoriaI (f);
combi=facto_n/(2*facto_r);
}
if(Alint=l II Alint==0)combi=l;
combi2=combi;
}
if(A4<20000 && ((A2>= 10000 && A3==(x+2)*combi2) II (A2>=10 && Alint==l &&
A3int=xint+1)))
{
r[0][0]=o[0][0]*s[0][0]-ho[0][l]*s[0][l]+o[0][2]*s[0][2]+o[0][3]*s[0][3];
r[0][l]=o[l][0]*s[0][0]-ho[l][l]*s[0][l]+o[l][2]*s[0][2]+o[l][3]*s[0][3]:
161
r[0][2]=o[2][0]*s[0][0]-Ho[2][l]*s[0][l]-Ho[2][2]*s[0][2]-ho[2][3]*s[0][3]printfCTHE ACCELERATION OF THE POINT IS \n");
printfC
~
~\n");
printfC%.llf i -h %.llf j + %.llf k \n",r[0][0],r[0][l],r[0][2]);
dore();
exitO;
}
A2int=A2/(-10);
checkint=A3int/(A2int*(xint+l));
if(A2<=-10 && A2>-10000 && checkint==l)
/*10 is a dummy number to indicate velocity
analysis*/
{
for(i=0;i<4;i-(-+)
{
for(j=0;j<4;j-t-(-)
{
o[i](j]=o[i]|j]+q[i]|j]:
}
}
}
anu=Al*(-10);
rashm=(-(A2/10));
if(A2<=-10 && A2>-5000 && A4>=-5000 && A2==anu && A3int==(xint-t-l)*Almt)
{
r[0][0]=o[0][0]*s[0][0]+o[0][l]*s[0][l]-»-o[0][2]*s[0][2]+o[0][3]*s[0][3];
r[0][l]=o[l][0]*s[0][0]+o[l][l]*s[0][l]+o[l][2]*s[0][2]+o[l][3]*s[0][3];
r[0][2]=o[2][0]*s[0][0]+o[2][l]*s[0][l]+o[2][2]*s[0][2]-ho[2][3]*s[0][3];
printfCTHE VELOCITY OF THE POINT ON THE HYPER-REDUNDANT MANIPULATOR IS\n'):
printfC
~
~
~\n");
printf("%.llfi + %.llfj + 9'r.llfk\n",r[0][0],r[0][l],r[0][2]);
doreO;
exitO;
}
if(A4>=10 II A4<=-10) A4int=A4/(-10);
A4=A4int;
check2=A3/(A4*(x-(-2));
if(A2<=-10000 && check2==l)
{
for(i=0;i<=3;i-(-f-)
I
for(j=0;j<=3;j-i-+)
{
c[i]U]=q[i]U]*2;
}
}
for(i=0;i<=3;i+-i-)
{
for(j=0;j<=3;j-h+)
162
{
o[i]U]=o[i]lj]+c[i][j];
}
}
}
if(Alint>2)
{
facto_n=factorial(A 1);
facto_r=factorial( A1-2);
combi=facto_n/(2*facto_r);
}
if(Alint=2)
{ f=i;
facto_n=factorial(Al);
facto_r^factorial (f);
combi=facto_n/(2*facto_r);
}
if(Alint==l II Alint==0)combi=l:
combi2=combi;
if((A2<=-10000 && A3int==(xint+2)*combi2) II (Alint==l && A3int==xint+1))
{
r[0][0]=o[0][0]*s[0][0]+o[0][l]*s[0][l]-t-o[0][2]*s[0][2]+o[0][3]*s[0][3];
r[0][l]=o[l][0]*s[0][0]+o[l][l]*s[0][l]+o[l][2]*s[0][2Ko[l][3]*s[0][3];
r[0][2]=o[2][0]*s[0][0]-Ko[2][l]*s[0][l]+o[2][2]*s[0][2]-Ho[2][3]*s[0][3];
printfCTHE ACCELERATION OF THE POINT ON THE MANIPULATOR IS \n");
printfC
~
~\n");
printfC%.llfi + %.llfj + %.llfk\n",r[0][0],r[0][l],r[0][2]);
doreO;
exitO;
}
if(A2>=10&&x>l &&inc!=x-l && (A2!=divy II A3!=Al*(x+l)))
{
return;
}
if(A2<=-10&&inc!=x-l&&(A2!=divyllA3!=(A4-Hl)*Al))
{
return;
}
if(Al>=l llinc!=x-l II A4>=20000)
{
return;
}
else
163
r[0][0]=q[0][0]*s[0][0]-hq[0][l]*s[0][l]-^q[0][2]*s[0][2]-hq[0][3]*s[0][3]
r[0][l]=q[l][0]*s[0][0]-^q[l][l]*s[0][lHq[l][2]*s[0][2]-hq[l][3]*s[0][3]
r[0][2]=q[2][0]*s[0][0]+q[2][l]*s[0][l]+q[2][2]*s[0][2]+q[2][3]*s[0][3]
printfCTHE GLOBAL X CO-ORDINATE IS %lf\n",r[0][0]);
printfCTHE GLOBAL Y CO-ORDINATE IS %lAn",r[0][l]);
printfCTHE GLOBAL Z CO-ORDINATE IS %.llf\n",r[0][2]);
doreO;
exitO;
}
FLEXIBLE
void flexible(int ndiscs,double dia,double tap,
double thick)
{
int p,n,i,k,j,vars,pass,alk,array[500],zzz,var_pass,facto_n,facto_r,combi,f;
int count,ap,accpass[100],init;
double rll,rl2,rl3,rl4,r21,r22,r23,r24,r31.r32,r33,r34,r41,r42,r43,r44;
double angvel[100],beta,gam,val[500],var[500],acc[500],angacc[500];
double Sl,s2,s3,s4,s5,half,valul,valu2,ang[500],alpha[500],combi2;
char x,y,z,xyzl,xyz2,movtl,movt2,M[500],C[500],vel;
void translate(double,char,int,int,double,double,double,
double,double);
void rotate(double,char,int,int,double,double,double,
double,double);
zzz=6+(ndiscs-1 )*4;
for(i=0;i<=100;i-h+)
{
ang[i]=alpha[i]=acc[i]=angacc[i]=val[i]=var[i]=angvel[i]=ang[i]=alpha[i]=0.0;
array [i]=0.0;
}
sl=0;
s2=0;
s3=0;
s4=l;
half=(dia/2);
x='X';
y='Y';
z=Z';
printfCPOSITION ANALYSIS - P\n");
printfC'VELOCITY ANALYSIS - V\n");
printfC ACCELERATION ANALYSIS - A\n\n");
printfCPLEASE ENTER YOUR SELECTION P/V/A\n"):
scanfC%*c%c",&vel);
if(vel=='FII vel=='p')
{
/•POSITION ANALYSIS
s2=10.0;/*To avoid divide error in MULTIPLY*/
164
printfCENTER THE LAST MOVEMENTVn");
scanf("%*c%c%c%lf',&movtl,&xyzl,&valul);
p=0;
n=ndiscs;
count=s3=l;/*for first multiplication to use b[][] as identity matrix*/
s5=l;
translate(valul,xyzl,p,n,sl,s2,s3,s4,s5);
s5=0;
printfCENTER LAST BUT ONE MOVEMENTVn");
scanf("%*c%c%c%ir,&movt2,&xyz2,&valu2);
p=ndiscs+5;
n=ndiscs;
rotate(valu2,xyz2,p,n,sl,s2,s3,s4,s5);
for(i= 1 ;i<=ndiscs-1 ;i-i"t-)
{
printf("THE BOTTOM DISC IS DISC #0\n");
printf("ENTER THE ANGLE OF ROTATION OF DISC #%d\n",i);
scanf("%ir,&ang[i]);
}
for(i=ndiscs-1 ;i>=l ;i~)
{k=i-l;
alpha[i]=(-(ang[i]-ang[k])):
}
p=ndiscs+6;
n=ndiscs;
/*ANGLE beta*/
beta=(-tap/2);
p=ndiscs+7;
rotate(beta,z,p,n,sl,s2,s3,s4,s5);
for(i=ndiscs-1 ;i>=l ;i-)
{
k=ndiscs-l;
translate(thick,y,p,n,s 1 ,s2,s3,s4,s5);
rotate(beta,z,p,n,sl,s2,s3,s4,s5);
rotate(alpha[i],y ,p,n,s 1 ,s2,s3,s4,s5);
rotate(beta,z,p,n,sl,s2,s3,s4,s5):
translate(thick.y,p,n,sl,s2,s3.s4,s5);
rotate(beta,z,p,n,s 1 ,s2,s3,s4,s5);
p=ndiscs-l;
n=ndiscs;
translate(half,x,p,n,s 1 ,s2,s3,s4,s5);
165
/•VELOCITY ANALYSIS FOR FLEXIBLE MANIPULATOR
if(vel='v' II vel=='V')
{
beta=(-tap/2);
printf("ENTER THE LAST MOVEMEN'Rn");
scanfC%*c%c%c%ir,&movtl,&xyzl,&valul);
printf("ENTER LAST BUT ONE MOVEMEN'Rn");
scanf("%*c%c%c%lf',&movt2,&xyz2,&valu2);
for(i=l ;i<=ndiscs-1 ;i-t-+)
{if(i=l)
printf("THE BOTTOM DISC IS DISC #0\n");
printf("ENTER THE ANGLE OF ROTATION OF DISC #%d AND ITS ANG.
VELOCITY\n",i);
scanf("%lf%ir,&ang[i],&angvel[i]);
}
for(i=ndiscs-1 ;i>= 1 ;i-)
{k=i-l;
alpha[i]=(-(ang[i]-ang[k]));
}
M[0]=movtl;
C[OI=xyzl;
val[0]=valul;
var[0]=0;
M[ll=movt2;
C[l]=xyz2;
val[l]=valu2;
var[l]=0;
M[2]=R';
C[2]='Z';
val[21=beta;
var(2}=0;
for(i=3;i<=2+(ndiscs-1 )*4;i-n-)
{
M[i]=T;
C[i]='Y';
val[i]=thick;
var[i]=0;
i=i+l;
M[i]=R';
C[i]=Z';
val[i]=beta;
var[i]=0;
i=i+l;
M[i]='R';
166
C[i]=T';
val[i]=alpha[j];
var[i]=angvel|j];
i=i+l;
M[i]='R';
C[i]='Z*;
val[i]=beta;
var[i]=0;
}
Mli]=T:
C[i]=T';
val[i]=thick;
var[i]=0;
i=i+l:
M[i]='R';
C[i]='Z';
val[i]=beta;
var[i]=0;
i=i+l;
M[i]=T;
C[il='X';
val[i]=half;
var[i]=0;
printf("ENTER THE NUMBER OF VARIABLES IN THE MATRIX EQUATION\n");
scanf("%d",&vars);
n=zzz;
sl=vars;
s2=0.0;
s3=0.0;
s4=zzz;
count=0;
pass=0;
p=0;
alk=l;
upp:
if(array[p]!=l)/*to make sure there is no 2nd pass for the same matrix*/
if(pass==0) /*to show if the variable matrix for that pass is taken*/
if(var[p]!=0)
{
init=init+l:
if(p==0)s5=l;
else s5=0;
count=count+l;/*to indicate no. of matrices multiplied*/
s3=count;
pass=l; /*to avoid future passes for the CURRENT matrix chain*/
array[p]=l;/*is a switch to mark the inclusion of vel matrix*/
s2=alk*(-10);
167
if(M[p]=='R' II M[p]=='r')
{
if(C[p]=='X' II C[p]=='x')
{
rl 1=0.0;
r 12=0.0;
r 13=0.0;
rl4=0.0;
r21=0.0;
r22=0.0;
r23=(-var[p]);
r24=0.0;
r31=0.0;
r32=var[p];
r33=0.0:
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiply(rll,rl2,rl3,r]4,r21,r22,r23,r24.r31,r32,r33,r34,r41,r42,r43,
r44,n,p,s 1 ,s2,s3,s4,s5);
}
if(C[p]=='Y' II C[p]==y')
{
rl 1=0.0;
r 12=0.0;
rl3=var[p];
rl4=0.0;
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=(-var[p]);
r32=0.0;
r33=0.0;
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCr Il,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,
r44,n,p,sl ,s2,s3,s4,s5);
}
if(C[p]=='Z' II C[p]=='z')
{
rl 1=0.0;
rl2=(-var[p]);
r 13=0.0;
rl4=0.0;
r21=var[p];
r22=0.0;
168
r23=0.0;
r24=0.0;
r31=0.0;
r32=0.0;
r33=0.0;
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiply(rll,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
)
if(M[p]==T II M[p]=='t')
{
if(C[p]=='X' II C[pl== x')
{
rl 1=0.0;
rl 2=0.0:
r 13=0,0;
rl4=var[p];
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=0.0;
r32=0.0;
r33=0.0;
r34=0.0:
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiply(rll,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,
r44,n,p,s 1 ,s2,s3,s4,s5);
}
if(C[p]=='Y' II C[p]=='y')
{
r 11=0.0;
r 12=0.0;
r 13=0.0;
r 14=0.0;
r21=0.0;
r22=0.0;
r23=0.0;
r24=var[p];
r31=0.0;
r32=0.0;
r33=0.0;
r34=0.0;
169
r41=0.0;
r42=0.0.
r43=0.0:
r44=0.0;
multiply(rll,rl2,rl3,rl4,r21,r22.r23,r24,r31j32,r33,r34,r41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
if(C[p]=='Z' II C[p]='z')
{
rl 1=0.0;
rl 2=0.0;
r 13=0.0;
rl4=0.0;
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=0,0;
r32=0.0:
r33=0.0;
r34=var[p];
r41=0.0;
r42=0.0:
r43=0.0:
r44=0.0;
multiplyCr Il,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34,r4],r42,r43,
r44,n,p,s 1 ,s2,s3,s4,s5);
}
ifCM[p]=='R' II M[p]=='r')
{
init=init+l;
ifCp==0&&init==l)s5=l;
else s5=0;
count=count-i-l;
s2=Calk)*C-10);
s3=count;
rotateCval[p],C[p],p,n,sl,s2,s3,s4,s5);
}
ifCM[p]==T II M[p]=='t')
{init=init+l;
ifCp==0&&init==l)s5=l;
else s5=0;
count=count+1;
s2=Calk)*C-10);
s3=count;
translateCval[p],C[p],p,n,sLs2.s3.s4.s5);
}
170
p=p+l;
if(p<=zzz-1) goto upp;
/•end of loop*/
pass=0; /*to switch off pass to zero for the next scan*/
alk=alk+l;
p=0;
/*Resetting counter p*/
init=0;
if(alk<=vars) goto upp;
}/*end of velocity analysis*/
/* ACCELERATION ANALYSIS FOR THE HYPER-REDUNDANT MANIPULATOR
:(c 4 : :|c :tc :|c :)c lit 4 : :(c 4 : * * * * >tc * * * * * * * 3|c * * * * 3tc :(c 4 : : ) ( : « : :(t :<c 4 : >|c * :tc * It: i(c:(: :1c lie * i|t * * ^ :tc * :tc * * :4i * *
/
if(vcl='a' II vel=='A')
{
beta=(-tap/2);
printfC"ENTER THE LAST MOVEMENTVn");
scanfC"%*c%c%c7clf',&movtl,&xyzl,&valul);
pnntfC"ENTER LAST BUT ONE MOVEMEN'Rn");
scanfC"%*c%c%c%ir,«femovt2,&xyz2.&valu2);
forCi=l ;i<=ndiscs-l ;i-t">-)
{
ifCi==l)
printfC"THE BOTTOM DISC IS DISC #0\n");
printfC"ENTER THE ANGLE OF ROTATION OF DISC #%d AND IT'S ANG.
VELOCITY AND ANG. ACCN.\n' ,i);
scanfC"%lf9'clf%lf',&ang[i],c&;angvel[i],&angacc[i]);
}
forCi=ndiscs-l;i>=l:i--)
{k=i-l;
alpha[i]=C-Cang[ij-ang[k]));
}
M[0]=mo^'tl;
Q©ii=xyzl;
val[0]=valul;
var{0]=0;
acc[0]=0;
M[ll=movt2;
Clll=xyz2;
vaJ[l]=valu2;
var[l]=0;
acc[l]=0;
1^121=11';
C12}='Z';
val[2]=beta;
var(2]=0;
acc[2]=0;
171
forCi=3;i<=2-(-Cndiscs-1 )*4;\++)
{
M[i]=T;
C[i]=T';
val[i]=thick;
var[i]=0;
acc[i]=0;
i=i+l;
M[i]='R';
C[i]='Z';
val[i]=beta;
var[i]=0;
acc[i]=0;
i=i+l;
M[i]=R';
C[i]=T';
val[i]=alpha[j];
var[i]=angvel|j];
acc[i]=angacc[j];
i=i-hl;
j=j+i;
M[i]=R';
C[i]=Z';
val[i]=beta;
var[i]=0;
acc[i]=0;
}
M[i]=T;
C[i]=Y';
val[i]=thick;
var[i]=0;
acc[i]=0;
i=i-»-l;
M[i]=R';
C[i]='Z';
val[i]=beta;
var[i]=0;
acc[i]=0;
i=i-(-l;
M[i]=T;
C[i]=X';
val[i]=half;
var[i]=0;
acc[i]=0;
printfC"ENTER THE NUMBER OF VARIABLES IN THE MATRIX EQUATION\n");
scanfC"%d",&vars);
ifCvars>2)
{
facto_n=factorialCvars);
facto_r=factorialCvars-2);
combi=facto_n/C2*facto_r);
172
ifCvars==2)
{ f=i;
facto_n=factorialCvars);
facto_r=factorialCf);
combi=facto_n/C2*facto_r);
}
ifCvars== 1) combi=0;
combi2=combi;
n=zzz;
sl=vars;
s2=0.0;
s3=0.0
s4=zzz
count=0;
pass=0;
p=0;
alk=l;
shwet:
ifCarray[p]!=l)/*to make sure there is no 2nd pass for the same matrix*/
ifCpass==0) /*to show if the variable matrix for that pass is taken*/
ifCvar[p]!=Ollacc[p]!=0)
{
init=init-t-l;
ifCp==0)s5=l;
else s5=0;
s2=alk*C-10);
count=count-(-l ;/*to indicate no. of matrices multiplied*/
pass=l; /*to avoid future passes for the CURRENT matrix chain*/
array [p]=l;/*is a switch to mark the inclusion of vel matrix*/
s3=count;
ifCM[p]=='R' II M[p]=='r')
{
ifCC[p]=='X' II C[p]=='x')
{
rl 1=0.0;
r 12=0.0;
r 13=0.0;
r 14=0.0;
r21=0.0;
r22=Cvar[p]*var[p]);
r23=C-acc[p]);
r24=0.0:
r31=0.0;
r32=acc[p]:
r33=C-var[p]*var[p]);
r34=0.0;
r41=0.0
r42=0.0
r43=0.0
r44=0.0
173
multiplyCrll,rl2,rl3,rl4,r21,r22,r23,r24,r31.r32,r33,r34,r41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
ifCC[p]=T' II C[p]==y)
{
rll=C-var[p]*var[p]):
r 12=0.0;
rl3=acc[p];
rl4=0.0;
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=(-acc[p]);
r32=0.0;
r33=C-var[p]*var[p]);
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCr 11 ,r 12,r 13,r 14,r21 ,r22,r23,r24,r31 ,r32,r33,r34,r41 ,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
ifCC[p]=='Z' II C[p]==z')
{
rl l=C-var[p]*var[p]);
rl2=C-acc[p]);
r 13=0.0;
rl4=0.0;
r21=acc[p];
r22=C-var[p]*var[p]);
r23=0.0;
r24=0.0
r31=0.0
r32=0.0
r33=0.0
r34=0.0
r41=0.0
r42=0.0
r43=0.0
r44=0.0
multiplyCrll,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
/*
goto non_var;to transfer control to the non-variable matrix chain */
}
ifCM[p]==T II M[p]=='t')
{
ifCC[p]==X' II C[p]=='x')
174
{
rl 1=0.0;
r 12=0.0;
r 13=0.0;
rl4=acc[p];
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=0.0;
r32=0.0;
r33=0.0;
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrll,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34,r41.r42,r43,
r44,n,p,sl.s2,s3,s4,s5);
}
ifCC[p]==T' II C[p]==y')
{
rl 1=0.0
rl2=0.0
r 13=0.0
r 14=0.0
r21=0.0
r22=0.0
r23=0.0
r24=acc[p];
r31=0.0
r32=0.0
r33=0.0
r34=0.0
r41=0.0
r42=0.0
r43=0.0
r44=0.0
multiplyCrll,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34j41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
ifCC[p]=='Z' II C[p]='z')
{
rl 1=0.0;
r 12=0.0;
r 13=0.0;
r 14=0.0;
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
175
r31=0.0;
r32=0.0;
r33=0.0;
r34=acc[p];
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrll,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32.r33,r34,r41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
/*
goto non_var; */
}
}
ifCM[p]=='R' II M[p]==V)
{
init=init-(-l;
ifCp==0&&init==l)s5=l:
else s5=0;
count=count-i-1;
s2=alk*C-10);
/*alk indicates number of passes*/
s3=count;
s4=C-6000);
rotateCval[p],C[p],p,n,sl,s2,s3.s4,s5);
ifCM[p]==T II M[p]=='t')
{
init=init-»-l;
ifCp==0&&init==l)s5=l:
else s5=0;
count=count-(-l;
s2=alk*C-10);/*alk indicates number of passes*/
s3=count;
s4=C-6000);
translateCval[p],C[p],p,n,s 1 ,s2,s3,s4,s5);
}
P=p+1;
ifCp<=zzz-1) goto shwet;
/*end of loop*/
pass=0; /*to switch off pass to zero for the next scan*/
alk=alk-Hl;
p=0;
/*Resetting counter p*/
176
init=0;
/*count=0;resetting count*/
ifCalk<=vars) goto shwet;
k=0;
forCi=0;i<=n-1 ;i+-i-)
{
ifCvar[i]!=0)
{
accpass[k]=i;
k=k+l;
}
}
ifCvars>2)
{
facto_n=factorialCvars);
facto_r=factorialCvars-2);
combi=facto_n/C2*facto_r);
}
ifCvars==2)
{ f=l;
facto_n
=factorialCvars);
facto_r=factorialCf);
combi=facto_n/C2*facto_r);
}
ifCvars==l II vars==0) combi=l;
combi2=combi;
count=0;
forCi=0;i<=100;i-(-h) array[i]=0.0;
pass=0;
p=0;
alk=l;
s2=C-10000);
s3=0.0;
s4=0.0;
ap=0;
alish:
ifCarray[p]!=l)/*to make sure there is no 2nd pass for the same matrix
ifCp==n-l) sl=vars;*/
if(pass=0 II pass==l) /*to show if the variable matrix for that pass is taken*/
ifCvar[p]!=0)
{
init=init+l;
ifCp==0)s5=l;
else s5=0;
s4=aIk*C-10);
var_pass=var_pass+1;
ifCp!=accpass[ap])
177
{
array[p]=l;
}
pass=pass+1;
/*to avoid future passes for the CURRENT matrix chain*/
ifCpass=2) array[p]=l;/*is a switch to mark the inclusion of 2nd vel matrix*/
count=count+l;
s3=count;
ifCM[p]=='R' II M[p]=='r')
{
ifCC[p]=='X' II C[p]=='x')
{
r 11=0.0;
r 12=0.0;
rl 3=0.0;
rl4=0.0;
r21=0.0:
r22=0.0;
r23=C-var[p]);
r24=0.0:
r31=0.0;
r32=var[p];
r33=0.0;
r34=0,0:
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCr 11 ,r 12,r 13.r 14,r21 ,r22.r23,r24.r31 ,r32,r33,r34,r41 ,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
ifCC[p]=='Y' II C[p]=='y')
{
rl 1=0.0;
r 12=0.0;
rl3=var[p];
r 14=0.0;
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=Cvar[p]);
r32=0.0;
r33=0.0;
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrll.rl2,rl3,rl4.r21.r22,r23,r24.r31,r32.r33.r34.r4Lr42.r43.
r44,n,p,sl.s2.s3,s4,s5):
178
}
ifCC[p]=='Z' II C[p]==z')
{
r 11=0.0;
rl2=C-var[p]);
r 13=0.0;
rl4=0.0;
r21=var[p];
r22=0.0;
r23=0.0
r24=0.0
r31=0.0
r32=0.0
r33=0.0
r34=0.0
r41=0.0
r42=0.0
r43=0.0
r44=0.0
multiplyCr 11 ,r 12,r 13,r 14.r21 ,r22,r23,r24,r31 ,r32,r33.r34.r41 ,r42,r43,
r44,n,p,sl,s2.s3.s4.s5),
}
/*
goto non_var;to transfer control to the non-variable matrix chain */
}
ifCM[p]==T II M[p]=='t')
{
ifCC[p]=='X' II C[p]=='x')
{
rl 1=0.0;
r 12=0.0;
rl 3=0.0;
rl4=var[p];
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=0.0;
r32=0.0;
r33=0.0;
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrll.rl2,rl3.rl4,r21,r22,r23.r24,r3].r32,r33.r34.r41,r42.r43,
r44,n,p,sl,s2,s3,s4,s5);
}
179
ifCC[p]=T' II C[p]==y)
{
r l l =:0.0;
rl2= :0.0;
rl3= :0.0;
rl4= :0,0,
r21 =:0.0;
r22= :0,0;
r23= ^0.0;
r24= :var[p];
r31= ^0.0;
r32= :0.0
r33= :0.0
r34= :0.0
r41 =:0.0
r42= :0.0
r43= :0.0
r44= :0.0
multiplyCrll,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33.r34,r41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
ifCC[p]=='Z' II C[p]== z )
{
rl 1=0.0;
rl2=0.0;
r 13=0.0;
rl4=0.0;
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=0.0;
r32=0.0;
r33=0.0;
r34=var[p];
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multipIyCrll,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
}
ifCM[p]=="R' II M[p]==r)
{
mit=init=l;
180
ifCp=0&&init==l)s5=l;
else s5=0;
count=count-Hl;
/*alk indicates number of passes*/
s4=alk*C-10);
s3=count;
s2=(-10000);
rotateCval[p],C[p],p,n,sl,s2,s3,s4,s5);
}
ifCM[p]==T' II M[p]=='f)
{
init=init-)-l;
ifCp==0&&init==l)s5=l;
else s5=0;
count=count-(-l;
/*alk indicates number of passes*/
s2=C-10000);
s3=count;
s4=alk*C-10);
translateCval[p],C[p],p,n,sl,s2.s3,s4,s5);
}
P=P+1;
ifCp<=zzz-1) goto alish;
pass=0; /*to switch off pass to zero for the next scan*/
p=0;
/*Resetting counter p resetting count*/
init=0;
ifCalk>=vars-Cap-»-1))
{
ap=ap-»-l;
forCi=0;i<=100;i-i~(-) array[i]=0.0;
forCi=0;i<=ap-1 ;i-(-»-) array[accpass[i]]=l;
}
alk=alk+l;
ifCcount!=combi2*Czzz-)-2)) goto alish;
/*ifCcount!=Cvars*Cn-i-l))) goto lower;*/
}
}/*THE END OF FLEXIBLE FUNCTION
--
*/
81
VELOCITY
:ti:ti^i***}lf:itf ********
f
void velocityCvoid)
{
int n,k,i,p,pass,array[100],init:
double val[ 100],var[ 100],s 1 ,s2,s3,s4,s5,r 11 ,r 12,r 13,rl4,r21 ,r22,r23,r24,r31 ,r32;
double r33,r34,r41 ,r42,r43,r44,vars,count,alk;
char M[100],C[ 100];
voidrotateCdouble,char,int,int,double,double.double,
double,doubIe);
voidtranslateCdouble,char,int,int,double,double,doubIe,
double,double);
void multiplyCdouble,double,double,double,double,
double,double,double,double,double,
double,double,double,double,double.
double,int,int,double,double,double,
double,double);
forCi=0;i<=100:i++)
array[i]=val[i]=var[i]=0;
printfC"ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTS\n");
scanfC"%d",&n);
printfC'ENTER THE NUMBER OF VARIABLES IN THE MATRIX EQUATIONXn");
scanfC"9'clf,&vars);
k=l;
forCi=n-l;i>-l;i-)
{
printfC"ENTER MOVEMENT # ^rd AND ITS VALUE AND VALUE FOR \ARIABLE\n",k);
scanfC"%*c9'rc7fc'7flf%lf',&M[i],&C[i],&val[i],&var[i]);
k=k+l:
}
sl=vars;
s2=0.0;
s3=0.0;
s4=n;
s5=0;
count=0;
pass=0;
p=0;
alk=l;
init=0;
up:
ifCarray[p]!=l)/*to make sure there is no 2nd pass for the same matrix
ifCp==n-l) sl=vars:*/
ifCpass==0) /*to show if the variable matrix for that pass is taken*/
ifCvar[p]!=0)
{
if(p==0)s5=l:
182
else s5=0;
init=init+l;
pass=l; /*to avoid future passes for the CURRENT matrix chain*/
array[p]=l;/*is a switch to mark the inclusion of vel matrix*/
count=count-t-l;
s2=alk*10:
s3=count;
ifCM[p]=='R' II M [ p ] = y )
(
ifCC[p]==X' II C[p]=='x')
{
rl 1=0.0;
r 12=0.0;
rl 3=0.0;
rl4=0.0;
r21=0.0;
r22=0.0;
r23=(-var[p]);
r24=0.0;
r31=0.0,
r32=var[p];
r33=0.0;
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrll,rl2,rl3,rl4,r21,r22,r23,r24.r31,r32,r33,r34,r41,r42,r43.
r44,n,p.sl,s2,s3,s4,s5);
}
ifcc[p]=='Y' II c[p]==y)
{
r 11=0.0;
r 12=0.0;
rl3=var[p];
r 14=0.0;
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=C-var[p]);
r32=0.0;
r33=0.0;
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyrr 11 ,rl 2,r 13,r 14,r21 ,r22,r23,r24.r31 .r32,r33.r34.r41 .r42.r43.
r44,n,p,sl.s2.s3.s4,s5);
183
}
ifCC[p]=='Z' II C[p]=="z')
{
rl 1=0.0;
rl2=(-var[p]);
rl 3=0.0;
rl4=0.0;
r21=var[p];
r22=0.0;
r23=0.0
r24=0.0
r31=0.0
r32=0.0
r33=0.0
r34=0.0
r41=0.0
r42=0.0
r43=0.0
r44=0.0
multiplyCrll,rl2,rl3,rl4,r21,r22,r23,r24.r31,r32j33,r34,r41,r42,r43,
r44,n,p,sl,s2,s3.s4,s5);
}
/*
goto non_var;to transfer control to the non-variable matrix chain */
}
ifCM[p]==T II M[p]=='t')
{
ifCC[p]==X' II C[p]==x')
{
rl 1=0.0;
rl 2=0.0;
r 13=0.0;
rl4=var[p];
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=0.0;
r32=0.0;
r33=0.0;
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrll,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34j41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
if(C[p]==Y'iic[p]==y)
{
184
r l l = 0 0;
rl2=0.0;
r 13=0.0;
rl4=0.0;
r21=0.0;
r22=0.0;
r23=0.0;
r24=var[p]:
r31=0.0;
r32=0.0;
r33=0.0;
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrll,rl2,rl3,rl4,r21,r22,r23,r24.r31,r32j33,r34j41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
if(C[p]=='Z'IIC[p]=='z')
{
rl 1=0.0;
r 12=0,0;
rl 3=0.0;
r 14=0.0;
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=0.0;
r32=0.0;
r33=0.0;
r34=var[p];
r41=0.0;
r42=0.0;
r43=0.0:
r44=0.0;
multiplyCrl 1 ,r 12,r 13,r 14,r21 ,r22,r23,r24,r31 ,r32,r33,r34j41 j42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
/*
goto non_var; */
}
}
ifCM[p]=='R' II M[p]=='r')
{ init=init-i-l;
ifCp==0&&init==l)s5=l
else s5=0;
count=count-»-1;
85
s2=alk* 10;
/*alk indicates number of passes*/
s3=count;
rotateCval[p],C[p],p,n,sl,s2,s3,s4,s5):
ifCM[p]==T' II M[p]=='t')
{ init=init+l;
ifCp=0&&init==l)s5=l;
else s5=0;
count=count-i-l;
s2=alk*10;/*alk indicates number of passes*/
s3=count;
translateCval[p],C[p],p,n,sl,s2,s3,s4,s5);
}
p=p+l;
ifCp<=n-l) goto up;/*end of for loop*/
pass=0; /*to switch off pass to zero for the next scan*/
alk=alk-t-l:
p=0;
/*Resetting counter p resetting count*/
init=0;
ifCalk!=vars+l) goto up;
ifCcount!=Cvars*Cn-i-l))) goto up;
}/*END OF VELOCITY FUNCTION*/
void doreCvoid)
{
soundC125);
delayC200);
nosoundO;
delayClOO);
soundC150);
delayC300);
soundC300);
delayC300);
nosoundO;
delayClOO);
soundC200);
delayC300);
soundC300);
delayC300);
nosoundO;
sound(275);
delayC300);
!86
soundC300);
/************************:^^::t,^^^^
I
delayC300);
nosoundO;
delayC200);
soundC300);
delayC400);
nosoundO;
delayClOO);
soundC325);
delayC200);
soundC350);
delayC200);
nosoundO;
delayC5);
soundC350);
delayC200);
nosoundO;
delay(5),
soundC325);
delayC200):
nosoundC);
delayCS);
soundC300);
delayC200);
soundC350);
delayC400);
nosoundO;
return;
)
j*******************
ACCELERATE
******************* *i
void accelerateCvoid)
{
int n,k,i,j,p,f,pass,array[100],init,x;
double val[ 100],var[ 100],s 1 ,s2,s3,s4,s5,r 11 ,r 12,r 13,r 14,r21 ,r22,r23,r24,r31 ,r32;
double r33,r34,r41,r42,r43,r44,vars,alk,acc[lCX)],newcount,combi2;
int facto_n,facto_r,var_pass,combi,count,ap,accpass[lCX)];
char M[100],C[ 100];
void rotateCdouble,char,int,int,double,double,double,double,double);
void translateCdouble,char,int,int,double,double,doubIe,double,double);
void multiplyCdouble,double,double,double,double,double,double,double,double,
double,double,double,double,double,double,double,int,int,double.
doubIe,double,double,double);
int factorialCint);
forCi=0;i<=100;i+-t-)
array [i]=val[i]=var[i]=acc[i]=0.0;
187
prmtfC"ENTER THE NUMBER OF INDEPENDENT JOINT/LINK MOVEMENTSVn");
scanfC"%d",&n);
printfC"ENTER THE NUMBER OF VARIABLES IN THE MATRIX EQUATION^");
scanfC"%lf',&vars);
k=l;
forCi=n-l;i>-l;i-)
{
printfC"ENTER MOVEMENT # %d AND IT'S VALUE AND VALUE FOR VELOCITY AND\n",k);
printfC"ACCELERATION\n");
scanfC"%*c%c%c%lf%lf%lf',&M[i],&C[i],&val[i],&var[i],&acc[i]);
k=k-hl;
}
forCi=0;i<=n-l;i-i-(-)
ifCvars>2)
{
facto_n=factorialCvars);
facto_r=factorialCvars-2);
combi=facto_n/C2*facto_r);
}
ifCvars==2)
{ f=i;
facto_n=factorialCvars);
facto_r=factorialCf);
combi=facto_n/C2*facto_r);
}
ifCvars==l) combi=0;
combi2=combi;
sl=vars;
s2=0.0;
s3=0.0;
s4=n;
s5=0;
count=0;
pass=0;
p=0;
alk=l;
init=0;
upper:
ifCarray[p]!=l)/*to make sure there is no 2nd pass for the same matrix
ifCp==n-l)sl=vars;*/
ifCpass==0) /*to show if the variable matrix for that pass is taken*/
ifCvar[p]!=Ollacc[p]!=0)
{
init=init-(-l;
ifCp==0)s5=l;
else s5=0;
s2=alk*10;
pass=l; /*to avoid future passes for the CURRENT matrix chain*/
188
array[p]=l;/*is a switch to mark the inclusion of vel matrix*/
count=count-)-1;
s3=count;
ifCM[p]=='R'IIM[p]==r)
I
ifCC[p]==X' II C[p]==x')
{
rl 1=0.0;
r 12=0.0;
r 13=0.0;
rl4=0.0;
r21=0.0;
r22=C-var[p]*var[p]);
r23=C-acc[p]);
r24=0.0;
r31=0.0;
r32=acc[p];
r33=(-var[p]*var[p]);
r34=0.0;
r41=0.0,
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrl I,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43.
r44,n,p,sl,s2,s3,s4.s5):
}
ifCC[p]==Y'IIC[p]=='y')
{
rll=C-var[p]*var[p]);
r 12=0.0;
rl3=acc[p]:
r 14=0.0;
r21=0.0:
r22=0.0;
r23=0.0;
r24=0.0:
r31=C-acc[p]);
r32=0.0:
r33=C-var[p]*var[p]);
r34=0.0;
r41=0.0,
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrll,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42.r43,
r44,n,p,sl,s2,s3,s4,s5);
}
ifCC[p]=='Z' II C[p]=='z')
{
rll=C-var[p]*var[p]);
189
rl2=C-acc[p]),
r 13=0.0:
rl4=0.0;
r21=acc[p];
r22=C-var[p]*var[p]);
r23=0.0;
r24=0.0
r31=0.0
r32=0.0
r33=0.0
r34=0.0
r41=0.0
r42=0.0
r43=0.0
r44=0.0
multiplyCrl 1 ,r 12,r 13,r 14,r21 ,r22,r23,r24,r31 ,r32,r33,r34,r41 ,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
/*
goto non_var;to transfer control to the non-variable matrix chain */
}
ifCM[p]==T II M[p]=='t')
I
ifCC[p]==X II C[p]=='x')
{
rl 1=0.0;
r 12=0.0;
rl3=0,0;
rl4=acc[p]:
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=0.0;
r32=0.0;
r33=0.0;
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrl 1 ,r 12,r 13,r 14,r21 ,r22 j23,r24.r31 ,r32,r33,r34,r41 ,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
ifCC[p]==T' II C[p]=='y')
{
r 11=0.0
r 12=0.0
rl 3=0.0
r 14=0.0
r21=0.0
190
r22=0.0;
r23=0.0:
r24=acc[p];
r31=0.0;
r32=0.0;
r33=0.0;
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrl I,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32.r33.r34,r41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5):
}
ifCC[p]=='Z' II C[p]=='z')
{
rl 1=0.0;
r 12=0.0;
rl 3=0.0:
rl4=0.0;
r21=0.0:
r22=0.0,
r23=0.0;
r24=0.0;
r31=0.0;
r32=0.0;
r33=0.0;
r34=acc[p];
r41=0.0:
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrl I.rl2,rl3,rl4,r21,r22,r23,r24,r31.r32,r33,r34,r41.r42.r43,
r44,n,p.sl,s2,s3.s4.s5):
}
/*
goto non_var: */
}
ifCM[p]=='R' II M [ p ] = ' r )
{
init=init-t-l;
ifCp==0&&init==l)s5=l;
else s5=0;
count=count+l:
s2=alk* 10;
/*alk indicates number of passes*/
191
s3=count;
s4=5000;
rotateCval[p],C[p],p,n,sl,s2,s3,s4,s5);
}
ifCM[p]==T II M[p]=='f)
{
init=init-)-l;
ifCp=0&&init==l)s5=l;
else s5=0;
count=count+l;
s2=alk*10;/*alk indicates number of passes*/
s3=count;
s4=5000;
translateCval[p],C[p],p,n,s 1 ,s2,s3,s4,s5);
}
/*
j=0;
forCi=0;i<=vars-1 ;i-i-+)
{
ifCvar[p]!=0)
{
new|j]=p;
}
}
newcount=j;*/
p=p+i;
ifCp<=n-l) goto upper;/*end of for loop*/
pass=0; /*to switch off pass to zero for the next scan*/
alk=alk-(-l:
p=0;
/*Resetting counter p resetting count*/
init=0;
ifCalk<=vars) goto upper;
k=0;
forCi=0;i<=n-l;i-i-+)
{
ifCvar[i]!=0)
{
accpass[k]=i;
k=k-hl:
}
}
192
count=0;
forCi=0;i<=100;i-(-i-) array[i]=0.0;
pass=0;
p=0;
alk=l;
s2=10000;
ap=0;
lower:
init=0;
ifCarray[p]!=l)/*to make sure there is no 2nd pass for the same matrix
ifCp==n-l) sl=vars:*/
ifCpass=0 II p a s s = l ) /*to show if the variable matrix for that pass is taken*/
ifCvar[p]!=0)
{
init=init-t-l;
ifCp=0)s5=l;
else s5=0;
s4=alk*10;
var_pass=var_pass-t-1;
x=Cn-vars)-(-alk-1;
ifCp!=accpass[ap])
{
array [p]=l;
/*
pass=pass-i-1;
/*to avoid future passes for the CURRENT matrix chain*/
ifCpass==2) array[p]= 1; is a switch to mark the inclusion of 2nd vel matrix*/
count=count-t-l:
s3=count;
if(M[p]=='R' II M[p]=='r')
{
if(C[p]=='X' II C[p]=='x)
{
r l l : =0.0;
rl2: =0.0;
rl3: =0.0;
rl4: =0.0;
r21: =0.0;
r22: =0.0;
r23: =C-var[p]);
r24: =0.0;
r31: =0.0;
r32: =var[p];
r33: =0.0;
r34: =0.0
r41: =0.0
r42: =0.0
r43: =0.0
r44: =0.0
193
multiplyCrl I,rl2,rl3,rl4,r21,r22,r23,r24,r31.r32,r33,r34,r41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
ifCC[p]=T' II C[p]==y)
{
rl 1=0.0;
rl 2=0.0;
rl3=var[p];
rl4=0.0;
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=C-var[p]),
r32=0.0;
r33=0.0;
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrl I,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5):
}
ifCC[p]=='Z' II C[p]=='z')
{
rl 1=0.0;
rl2=C-var[p]);
rl 3=0.0;
rl4=0.0;
r21=var p];
r22=0.0
r23=0.0
r24=0.0
r31=0.0
r32=0.0
r33=0.0
r34=0.0
r41=0.0
r42=0.0
r43=0.0
r44=0.0
multiplyCrl I,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,
r44,n,p,sl,s2,s3,s4,s5);
}
/*
goto non_var;to transfer control to the non-variable matrix chain */
}
if(M[p]==TIIM[p]==t)
{
194
ifCC[p]==X' II C[p]==x')
{
rl 1=0.0;
r 12=0.0;
r 13=0.0;
rl4=var[p];
r21=0.0;
r22=0.0;
r23=0.0;
r24=0.0;
r31=0.0;
r32=0.0;
r33=0.0;
r34=0.0;
r41=0.0;
r42=0 0;
r43=0.0:
r44=0.0;
multiplyCrl I,rl2,rl3,rl4,r21,r22,r23,r24,r31.r32.r33.r34,r4],r42.r43,
r44,n,p,sl.s2.s3,s4,s5):
}
ifCC[p]==T' II C[p]=='y')
{
rl 1=0.0;
rl2=0.0;
rl3=0.0;
rl4=0.0;
r21=0.0;
r22=0.0;
r23=0.0:
r24=var[p];
r31=0.0:
r32=0.0;
r33=0.0;
r34=0.0;
r41=0.0;
r42=0.0;
r43=0.0:
r44=0.0;
multiplyCrl 1 ,rl 2,r 13,r 14,r21 ,r22,r23,r24,r31 ,r32.r33,r34,r41 ,r42.r43.
r44,n,p,sl,s2,s3,s4,s5);
}
ifCC[p]=='Z' II C[p]=z')
{
rl 1=0.0;
r 12=0.0;
rl 3=0.0;
rl4=0.0;
r21=0.0;
r22=0.0;
r23=0.0:
195
r24=0.0;
r31=0.0;
r32=0.0;
r33=0.0;
r34=var[p];
r4I=0,0:
r42=0.0;
r43=0.0;
r44=0.0;
multiplyCrl I,rl2,rl3,rl4,r21,r22,r23,r24,r31.r32,r33,r34,r41,r42,r43,
r44,n,p,sl,s2,s3,s4.s5);
}
}
ifCM[p]=='R' II M[p]=='r')
{
init=init+l;
ifCp==0&&init==l)s5=l;
else s5=0;
count=count-i-l;
/*alk indicates number of passes*/
s4=alk*10;
s3=count;
s2=10000;
rotateCval[p],C[p],p,n,sl,s2.s3.s4.s5);
ifCM[p]==T' II M[p]=='t')
{
init=init-(-l;
ifCp==0 && var[p]==0 && acc[p]==0) s5=l;
else s5=0;
count=count-(-1;
/*alk indicates number of passes*/
s2=10000;
s3=count;
s4=alk*10;
translateCval[p],C[p],p,n.sl,s2.s3,s4,s5):
}
P=P+1;
ifCp<=n-l) goto lower;
pass=0; /*to su itch off pass to zero for the next scan*/
p=0;
/*Resetting counter p resetting count
196
forCi=0;i<=100;i-i-i-) array[i]=0.0; */
init=0;
ifCalk>=vars-Cap-(-1))
{
ap=ap+1;
forCi=0;i<=100;i+-t-) array[i]=0.0;
forCi=0;i<=ap-1 -,1++) array[accpass[i]]= 1;
}
alk=alk+l;
ifCcount!=combi*Cn-(-2)) goto lower;
/*ifCcount!=Cvars*Cn-f-l))) goto lower;*/
}
int factorialCint j)
{
int factor,k;
factor= 1;
do
{
factor=factor*j;
) while(j>=l);
return Cfactor);
}
I**************************
CAMBER
**************************^
void
{
void
void
void
camberCvoid)
rotateCdouble,char,int,int,double,double,double,double,double):
translateCdouble,char,int,int,double,double,double,double,double);
multiplyCdouble,double,double,double,double,double,double,double,double.
double,double,double,double,double,double,double,int,int,double.
double,double,double,double);
int menu,n,k,p,i;
double dia,dial,radl,tap,angrot,sl,s2,s3,s4,s5,val[20],max_thick,min_thick,eeta,zero_angle;
double centr_thick,hidden_dia,slant_length;
char M[20],C[20],axis;
forCi=0;i<=20;i-i-i-)M[i]=C[i]=val[i]=0.0;
clrscrO;
printfC"Use the other program\7\n");
exitO;
}
197
#include <stdio.h>
#include <math.h>
mainCvoid)
{
void rotateCdouble,char,int,int,double,double,double,
double,double);
voidtranslateCdouble,char,int,int,double,double,double,
double,double);
void multiplyCdouble,double,double,double,double,
double,double,double,double,double,
double,double,double,double,double,
double,int,int,double,double,double,double,double);
void camberCvoid);
void doreCvoid);
intdof,links,n,i,p,k,ndiscs,vel,count;
double val[50],s 1 ,s2,s3,s4,s5,dia,tap,thick,eeta;
charM[50],C[50],flex;
I***********************************************************************
DATA ENTRY
*/
clrscrO;
printfC"KINEMATIC MODELING OF SPATIAL MECHANISMSVn");
printfC"
—-\n\n\n");
printfC"MENU \n");
printfC"—-\n");
soundClOOO);
delayCSOO);
nosoundO;
printfC" 1 CAMBER
\n");
printfC"2QUITVn\n\n");
printfC"PLEASE ENTER YOUR SELECTION NOW.\n");
scanfC"%d",&vel);
ifCvel<l II vel>2)
{
do
{
printfC"YOUR SELECTION SHOULD BE EITHER 1 or 2\n");
forCi=500;i<= 1000;i=i-H 100)
{
soundCi);
delayClOO);
}
forCi=1000;i>=500;i=i-100)
{
soundCi);
delayClOO);
}
nosoundO;
printfC"PLEASE RE_ENTER SELECTIONXn");
scanfC"%d",&vel);
198
} whileCvel<l II vel>2);
}
ifCvel=2) exitC);
if(vel=l) camberO;
} /*END OF MAIN FUNCTION */
I***************
ROTATION
****************!
void rotateCdouble theta,char xyz,int incint n,doubIe si,
double s2,double s3,double s4,double s5)
{
double r 11 ,rl2,r 13,r 14,r21 ,r22,r23,r24,r31 ,r32.r33,r34,r41 ,r42,r43,r44;
void multiplyCdouble,double,double,double,double,
double,double,double,double,double,
double,double,double,double.double,
double,int,int,double,double,double,
double,double);
theta=theta*3.1415926537/180.0;
ifCxyz=='X' II xyz=='x')
{
rll = l;
rl2=0;
rl3=0;
rl4=0;
r21=0;
r22=cosCtheta);
r23=(-sinCtheta));
r24=0;
r31=0;
r32=sinCtheta);
r33=cosCtheta);
r34=0;
r41=0;
r42=0;
r43=0;
r44=l;
multiplyCr 11 ,r 12,r 13,r 14,r21 ,r22,r23,r24,r31 ,r32,r33,r34,r41 .r42,r43,
r44,n,inc,sl,s2.s3,s4,s5);
return;
}
ifCxyz='Y' II xyz=='y')
{
rll=cosCtheta);
199
rl2=0;
rl3=sinCtheta);
rl4=0;
r21=0;
r22=l;
r23=0;
r24=0;
r31=C-sinCtheta));
r32=0;
r33=cosCtheta);
r34=0;
r41=0
r42=0
r43=0
r44=l
multiplyCrl 1 ,r 12,r 13,r 14,r21 ,r22,r23j24.r31 ,r32.r33,r34,r41 ,r42,r43,
r44,n,inc,sl,s2,s3,s4,s5);
return;
}
ifCxyz=='Z' II xyz='z')
{
rll=cosCtheta);
rl2=C-sinCtheta));
rl3=0;
rl4=0;
r21=sinCtheta);
r22=cosCtheta);
r23=0;
r24=0;
r31=0;
r32=0;
r33=l;
r34=0;
r41=0;
r42=0;
r43=0;
r44=l;
multiplyCrl 1 ,r 12,r 13,r 14,r21 ,r22,r23,r24,r31 ,r32,r33,r34,r41 ,r42,r43.
r44,n,inc,sl,s2,s3,s4,s5):
return;
}
}/*END OF ROTATE FUNCTION
*****************************************************************************
TRANSLATION
-
*/
void translateCdouble disp,char xyz,int inc,int n,double si,
double s2,double s3,double s4,double s5)
{
double rll.rl2.rl3,rl4.r21,r22,r23.r24,r31,r32,r33.r34,r41.r42.r43.r44;
void multiplyCdouble,double,double,double,double,
200
double,double,double,double,doubIe,
double,double,double,double,double.
double,int,int,double,double,double.
double,double);
ifCxyz=='X' II xyz=='x')
{
rll=l;
rl2=0;
rl3=0;
rl4=disp;
r21=0;
r22=l;
r23=0;
r24=0;
r31=0;
r32=0;
r33=l;
r34=0;
r41=0;
r42=0;
r43=0;
r44=l;
multiplyCrl I,rl2,rl3,rl4,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,
r44,n,inc,sl ,s2,s3,s4,s5);
return;
)
ifCxyz=T' II xyz=='y')
{
r l l = l;
rl2=0;
rl3=0;
rl4=0;
r21=0;
r22=l;
r23=0;
r24=disp;
r31=0;
r32=0;
r33=l;
r34=0;
r41=0;
r42=0;
r43=0;
r44=l;
multiplyCrl I,rl2,rl3,rl4,r21.r22,r23.r24j31,r32,r33,r34.r41.r42j43.
r44,n,inc,sl.s2.s3,s4,s5);
return;
}
201
ifCxyz='Z' II xyz='z')
{
r l l = l;
rl2=0;
rl3=0;
rl4=0;
r21=0;
r22=l;
r23=0;
r24=0;
r31=0;
r32=0;
r33=l;
r34=disp;
r41=0;
r42=0;
r43=0;
r44=l;
multiplyCrl I,rl2,rl3,rl4,r21.r22j23.r24.r31,r32,r33,r34,r41.r42,r43,
r44,n,inc,sl,s2,s3,s4,s5);
return;
}
}/*END OF TRANSLATION
******************************************************************************
MULTIPLY
void multiplyCdouble rll,double rl2,double rl3,doubIe rl4,
double r21,double r22,double r23,double r24.
double r31,double r32,double r33,double r34,
double r41,double r42,double r43,double r44,
int x,int incdouble si,double s2,doubIe s3.
double s4,double s5)
{
static double b[4][4],o[4][4],z2[l][l],z3[l][l],z4[l][l],z5[l][l];
double p[4][4],q[4][4],r[4][4],c[4][4],checkl,check2:
intm,n,i,j,Alint,A2int,A3int,A4int,xint,checkint,f,facto_n,facto_r,combi;
double A1 ,A2,A3,A4,A5,a[4][4],s[4][4],divya,anu,sapna.check,combi2:
double z6[l][l],el,e2,c01,cl2,dl2,al.bl.camber,toejn;
int icamb,jcamb,rem;
void doreCvoid);
FILE *fp;
A1 =s 1 ;/*value of no. of variables passed on to A1 */
A2=s2;
A3=s3;
A4=s4;
A5=s5;
forCi=0;i<4;i-i-+)
fora=0;j<4;j++)a[i]|j]=p[i][j]=q[i]lj]=0.0;
forCi=0:i<4;i-H+)
202
for(j=0;j<4;j-^+) r[i][j]=s[i][j]=0.0;
z6[0][l]=0.0;
/*A2=s2;to acquire the passed on value of s2 to determ termination of vel
THIS KEEPS COUNT OF THE NUMBER OF PaSSES/VaRIaBLES COVERED SO FaR*/
a[0][0]=rll;
a[0][l]=rl2;
a[0][2]=rl3;
a[0][3]=rl4;
a[l][0]=r21;
a[l][l]=r22
a[l][2]=r23
a[l][3]=r24
a[2][0]=r31
a[2][l]=r32
a[2][2]=r33
a[2][3]=r34
a[3][0]=r41
a[3][l]=r42
a[3][2]=r43
a[3][3]=r44
sl=0.0;/*restoring the value of si which is 0.0*/
s2=0.0;
s3=0.0;/*restoring the value of s2 which is 0.0*/
s4=1.0;
s5=0.0;
s[0][0]=sl;
s[0][l]=s2;
s[0][2]=s3;
s[0][3]=s4;
ifCinc==0&&A5==l)
f
{
b[0][0]=l;
b[0][l]=0
b[0][2]=0
b[0][3]=0
b[l][0]=0
b[l][l]=l
b[l][2]=0
b[l][3]=0
b[2][0]=0
b[2][l]=0
b[2][2]=l
b[2][3]=0
b[3][0]=0
b[3][l]=0
b[3][2]=0
b[3 1[3]=1
203
/* aRRaY MULTIPLICATION
*/
q[0][0]=a[0][0]*b[0][0]-ha[0][l]*b[l
q[0][l]=a[0][0]*b[0][l]-ha[0][l]*b[l
q[0][2]=a[0][0]*b[0][2]-ha[0][l]*b[l
q[0][3]=a[0][0]*b[0][3]+a[0][l]*b[l
0]+a[0
l]+a[0
2]-ha[0
3]+a[0
2]*b[2]
2]*b[2]
2]*b[2]
2]*b[2]
0]+a[0
l]+a[0
2]+a[0
3]+a[0
[3]*b[3][0]
[3]*b[3][l]
[3]*b[3][2]
[3]*b[3][3]
q[l][0]=a[l][0]*b[0][0]+a[l][l]*b[l
q[l][l]=a[l][0]*b[0][l]-ha[l][l]*b[l
q[l][2]=a[l][0]*b[0][2]-ha[l][l]*b[l
q[l][3]=a[l][0]*b[0][3]-Ha[l][l]*b[l
0]+a[\
l]+a[l
2]-ha[l
3]-Ka[l
2]*b[2]
2]*b[2]
2]*b[2]
2]*b[2]
0]-t-a[l
l]+a[l
2]+a[l
3]+a[l
[3]*b[3][0]
[3]*b[3][l]
[3]*b[3][2]
[3]*b[3][3]
q[2][0]=a[2][0]*b[0][0]-ha[2][l]*b[l
q[2][l]=a[2][0]*b[0][l]-Ha[2][l]*b[l
q[2][2]=a[2][0]*b[0][2]-Ha[2][l]*b[l
q[2][3]=a[2][0]*b[0][3]-ha[2][l]*b[l
0]-ha[2
l]+a[2
2]+a[2
3]-t-a[2
2]*b[2]
2]*b[2]
2]*b[2]
2]*b[2]
0]-(-a[2
l]-ha[2
2]-f-a[2
3]-(-a[2
[3]*b[3][0]
[3]*b[3][l]
[3]*b[3][2]
[3]*b[3][3]
q[3][0]=a[3][0]*b[0][0]-ha[3][l]*b[l
q[3][l]=a[3][0]*b[0][l]-ha[3][l]*b[l
q[3][2]=a[3][0]*b[0][2]-Ha[3][l]*b[l
q[3][3]=a[3][0]*b[0][3]+a[3][l]*b[l
0]-(-a[3
l]+a[3
2]-ha[3
3]-t-a[3
2]*b[2]
2]*b[2]
2]*b[2]
2]*b[2]
0]-ha[3
1]-Ha[3
2]-ha[3
3]-Ha[3
[3]*b[3][0]
[3]*b[3][l]
[3]*b[3][2]
[3]*b[3][3]
forCi=0;i<4;i4-t-)
for(j=0;j<4;j-i-h)
{
b[i][j]=q[i]U];
}
ifCA4==20001)
{
z2[0][l]=q[l][0]*s[0][0]-Hq[l][l]*s[0][l]-Hq[l][2]*s[0][2]-hq[l][3]*s[0][3];
return;
}
ifCA4==20002)
z3[0][l]=q[l][0]*s[0][0]-hq[l][l]*s[0][l]+q[l][2]*s[0][2]-hq[l][3]*s[0][3]:
return;
}
ifCA4==20008)
z4[0][l]=q[l][0]*s[0][0]-hq[l][l]*s[0][l]+q[l][2]*s[0][2]+q[l][3]*s[0][3]:
cl2=Cz2[0][l]-z3[0][l]);
dl2=Cz2[0][l]-z4[0][l]);
el=fabsCcl2);
e2=fabsCdl2);
printfC"z2[0][l]=%lfz3[0][l]=7rlfz4[0][l]=%lf\n",z2[0][l],z3[0][l].z4[OJll]);
cambei^atanC2*el/A2);
204
camber=camber* 180.0/3.1415926536:
toe_in=atanC2*e2/A2);
toe_in=toeJn* 180.0/3.1415926536;
ifCA3>90 && CA3<270 II CA3<-90 && A3>-270))) camber=C-camber);
ifCA3>180 && CA3<360 II CA3<0 && A3>-180))) toe_in=C-toe_in):
/* clrscrO;*/
nrintfr"\n\n******************************** ********************* *********Vn\n\n');
printfC"THE CAMBER FOR A ROTATION OF %lf IS %lAn",A3,camber);
printfC"THE TOE-IN FOR A ROTATION OF %lf IS %lf \n' ,A3,toe_in);
nrintfr'\n\n************ ********************************************* *****\n\n");
doreC);
exitC);
)
ifCA4==20003)
{/*center*/
z2[0][l]=q[l][0]*s[0][0]-»-q[l][l]*s[0][l]+q[l][2]*s[0][2]-hq[l][3]*s[0][3];
return;
}
ifCA4==20004)
{ /*lower end*/
z3[0][ll=q[l][0]*s[0][0]-Hq[l][l]*s[0][l]+q[l][2]*s[0][2]+q[l][3]*s[0][3];
return;
}
ifCA4==20005)
{ /*upper end*/
z4[0][l]=q[l][0]*s[O][O]-Hq[l][l]*s[0][l]+q[l][2]*s[0][2]+q[l][3]*s[O][3];
return;
}
if(A4==20006)
{/*toe-in end*/
r/Mm
z5[0][l]=q[l][0]*s[0][0]+q[l]ll]*s[0][l]+q[l][2]*s[0][2]+q[l][3]*s[0][3];
return;
}
ifCA4==20007)
{ /*toe-in opposite end*/
z6[0][l]=qll][0]*s[0][0]+q[l][l]*s[0][l]+q[l][2]*s[0][2]+q[l][3]*s[0][3]:
cl2=Cz2[01[l]-z4[0][l]);
dl2=Cz2[0][l]-z5[0][l]);
el=fabsCcl2);
e2=fabsCdl2);
camber=asinC2*el/A2);
camber=camber* 180.0/3.1415;
toe_in=asinC2*e2/A2);
205
toeJn=toeJn* 180.0/3.1415;
ifCz3[0][l]>z4[0][l])camber=C-camber);
ifCz5[0][l]>z6[0][l])toeJn=C-toeJn);
ifCAl ==30000)
{
ifCCfp=fopenC"outfile.out","a"))!=NULL)
{
A3int=A3;
rem=A3int%14;
ifCA3==l)
{
icamb=l;
jcamb=0;
}
jcamb=jcamb+1;
ifCA3==l){fprintfCfp,"S.no. Disc#l
Disc#2 Camber ToeJn\n");
fprintfCfp,"
— \n");}
fprintfCfp,"%.01f %d
%d
%.41f %.41An",A3.icamb,jcamb,camber,toeJn);
ifCrem==0&«& A3>=14)
{
icamb=icamb-t-l;
jcamb=0:
}
fcloseCfp);
}
ifCA3==196)
exitC);
else
return;
}
/* clrscrO;*/
ifCA3!=30000)
{
Drintfr"\n\n** *********************** *************************************\n\n\n")'
printfC'THECAMBER IS %mn •,camber);
printfC"THE TOE-IN IS %lAn",toe_in);
nri n tfr "\n\n *******************************"''*'**
***************************\T\\n"
doreO;
exitO;
)
}
ifCA4<20000)
{
sapna=A2/10.0;
Alint=Al;
A2int=sapna;
A3int=A3;
xint=x;
A4int=A4;
)
206
\-
ifCA4>20000)
{
A3int=A3;
A2int=A2;
xint=x:
}
checkint=A3int/C A2int*Cxint-(-1));
ifCA2>=10&& A2<10000 && checkini=l && A4<20000)
{
forCi=0;i<4;i-i-t-)
{
forCj=0;j<4;j-(-+)
{
o[i]D]=o[i]lj]-Hq[i]|j];
}
}
1
divya=CAl*10.0);/*passing the "no.of variables" value through si*/
sapna=A4/10.0:
ifCA2>=10 && A2<5000 && A4<5000 && A2==divya && A3==CA4-H1)*A1)
{
r[0][0]=o[0][0]*s[0][0]-i-o[0][l]*s[0][l]-(-o[0][2]*s[0][2]+o[0][3]*s[0][3]
r[0][l]=o[l][0]*s[0][0]-Ho[l][l]*s[0][l]-^o[l][2]*s[0][2]-ho[l][3]*s[0][3]
r[0][2]=o[2][0]*s[0][0]-Ho[2][l]*s[0][l]-ho[2][2]*s[0][2]-Ho[2][3]*s[0][3]
clrscrO;
Drintfr'\n\n*** ********************************* ******\n\n\n")'
printfC"THE VELOCITY OF THE POINT IS \n");
nrintfr'\n\n* ******************************* **********\n\n')'
printfC%.llfi + %.lIfj-h%.llfk\n",r[0][0],r[0][l],r[0][2]);
doreC);
exitC);
}
check l=A3/Csapna*Cx-i-2)):
ifCA2>= 10000 && check 1==1 && A4<20000)/* II (Alint==l &«& A3int=Cxint-(-l)))*/
{
forCi=0;i<=3;i-n-)
{
forCj=0;j<=3;j+-H)
{
c[i]U]=q[i][j]*2;
}
}
forCi=0;i<=3;i-(-t-)
{
forCJ=0;j<=3;j-i-(-)
{
207
o[i][j]=o[i]U]+c[i][j];
}
}
/*
ifCAlint>2)
{
facto_n=factorialCA 1);
facto_r=factorialCA 1 -2);
combi=facto_n/C2*facto_r):
}
ifCAlint==2)
{ f=l;
facto_n=factorialCA 1);
facto_r=factorial Cf);
combi=facto_n/C2*facto_r);
}
*/
ifCAlint==l II Alint==0)combi=l;
combi2=combi;
}
ifCA4<20000 && CCA2>= 10000 && A3==Cx-t-2)*combi2) II CA2>=10 && A l i n t = l &&
A3int=xint-t-l)))
{
r[0][0]=o[0][0]*s[0][0]-t-o[0][l]*s[0][l]+o[0][2]*s[0][2]+o[0][3]*s[0][3]:
r[0][l]=o[l][0]*s[0][0]-^o[l][l]*s[0][l]-Ho[l][2]*s[0][2]+o[l][3]*s[0][3];
r[0][2]=o[2][0]*s[0][0]-ho[2][l]*s[0][l]+o[2][2]*s[0][2]+o[2][3]*s[0][3]:
clrscrO;
Drintff"\n\n******************************************\n\n\n )•
printfC"THE ACCELERATION OF THE POINT IS \n");
Drintfr'\n\n******************************************\n\n")'
printfC"%.llfi + %.llfj + %.llfk\n",r[0][0],r[0][l],r[0][2]);
doreO;
exitC);
}
/* } */
ifCA4<20000)
{
A2int=A2/C-10);
}
ifCA4>20000)
{
A2int=A2;
}
checkint=A3int/CA2int*Cxint-(-1));
ifCA2<=-10 && A2>-10000 && checkint==l)
analysis*/
{
/*10 is a dummy number to indicate velocity
208
forCi=0;i<4;i-t-(-)
{
ioT(}=0\i<4;i++)
{
o[i]|j]=o[i]U]-hq[i]y];
}
}
}
anu=Al*C-10);
ifCA2<=-10 && A2>-5000 && A4>=-5000 && A2==anu && A3int==Cxint-Kl)*Alint)
{
r[0][0]=o[0][0]*s[0][0]+o[0][l]*s[0][l]+o[0][2]*s[0][2]-Ho[0][3]*s[0][3];
r[0][l]=o[l][0]*s[0][0]+o[l][l]*s[0][l]+o[l][2]*s[0][2]-Ho[l][3]*s[0][3];
r[0][2]=o[2][0]*s[0][0]-ho[2][l]*s[0][l]+o[2][2]*s[0][2]+o[2][3]*s[0][3];
clrscrO;
Drintfr'\n\n* ************************************************** ************\n\n\n')'
printfC"THE VELOCITY OF THE POINT ON THE HYPER-REDUNDANT MANIPULATOR IS\n"
r)rintfr'\n\n***************************************************************\n\n )'
printfC"
~
~\n");
printfC"%.llfi + %.llfj-H%.llfk\n",r[0][0],r[0][l],r[0][2]);
doreC);
exitC);
}
ifCA4>=10 II A4<=-10) A4int=A4/C-10);
A4=A4int;
check2=A3/CA4*Cx+2));
ifCA2<=-10000 && check2==l)/* II CAlint==l && A3int==Cxint+l)))*/
{
forCi=0;i<=3;i-i"i-)
{
for(j=0;j<=3;j-H-t-)
(
c[i]U]=q[i]lj]*2;
}
}
forCi=0;i<=3;i-i-t-)
{
for(j=0;j<=3;j-^-h)
{
o[i]U]=o[i]D]+c[i]|j];
}
}
/* ifCAlint>2)
{
facto_n=factorialCA 1);
facto_r=factorialC A1 -2);
209
combi=facto_n/C2*facto_r);
}
ifCAlint==2)
{ f=i;
facto_n=factorialCAl);
facto_r=factori al Cf);
combi=facto_n/C2*facto_r);
)*/
ifCAlint==l II Alint=0)combi=l;
combi2=combi;
ifCCA2<=-10000 && A3int==Cxint-t-2)*combi2) II CAlint=l && A3int==xint-t-l))
{
r[0][0]=o[0][0]*s[0][0]-Ho[0][l]*s[0][l]+o[0][2]*s[0][2]-ho[0][3]*s[0][3];
r[0][l]=o[l][0]*s[0][0]-ho[l][l]*s[0][l]+o[l][2]*s[0][2]-ho[l][3]*s[0][3];
r[0][2]=o[2][0]*s[0][0]-ho[2][l]*s[0][l]-ho[2][2]*s[0][2]-Ko[2][3]*s[0][3]:
clrscrO;
DrintfC"\n\n************** ********************************** ***\n\n\n")'
printfC'THE ACCELERATION OF THE POINT ON THE MANIPULATOR IS \n");
printfC"
~
~
~\n");
printfC"%.llf i -f- %.llfj + %.llf k\n",r[0][0],r[0][l],r[0][2]);
doreC);
exitO;
}
ifCA2>=10&&x>l &&inc!=x-l && CA2!=divya II A3!=A1*CX-H1)))
{
return;
}
ifCA2<=-10&&inc!=x-l&&CA2!=divyallA3!=CA4-Hl)*Al))
{
return;
}
ifCAl>=l II inc!=x-l II A4>=20000)
{
return;
)
else
r[0][0]=q[0][0]*s[0][0]-Hq[0][l]*s[0][l]-hq[0][2]*s[0][2]-Hq[0][3]*s[0][3]
r[0][l]=q[l][0]*s[0][0]-Hq[l][l]*s[0][l]+q[l][2]*s[0][2]-hq[l][3]*s[0][3]
r[0][2]=ql2][0]*s[0][0]-Hq[2][l]*s[0][l]-Hq[2][2]*s[0][2]-Hq[2][3]*s[0][3]
clrscrC);
printfC"\n\n*****************\n\n\n");
210
printfC'POSmON ANALYSIS\n"):
printfC"\n\n*****************\n\n");
printfC"THE GLOBAL X CO-ORDINATE IS %.llf\n",r[0][0]);
printfC"THE GLOBAL Y CO-ORDINATE IS % mn",r[0][l]);
printfC"THE GLOBAL Z CO-ORDINATE IS %.llf\n",r[0][2]);
doreC);
exitC);
}
}
void doreCvoid)
(
soundC125);
delayC200);
nosoundO;
delayClOO);
soundC150);
delayC300);
soundC300);
delayC300);
nosoundO;
delay(lOO);
soundC200);
delayC300);
soundC300);
delayC300);
nosoundO;
soundC275);
delayC300);
soundC300);
/
*******************************/
delayC300);
nosoundO;
delayC200);
soundC300);
delayC400);
nosoundO;
delayClOO);
soundC325);
delayC200);
soundC350);
delayC200):
nosoundO;
delayC5);
soundC350);
delayC200);
nosoundO;
delayC5):
soundC325):
211
delayC200);
nosoundO;
delayC5);
soundC300);
delayC200);
soundC350);
delayC400);
nosoundO;
return;
}
I**************************
CAMBER
**************************!
void camberCvoid)
{
voidrotateCdouble,char,int,int,double,double,double,double,double);
void translateCdouble,char,int,int,double.double.double,double,double);
voidmultiplyCdouble,double,double,double,double,double,double,double,double,
double,double,double,double,double,doubIe,double,int,int,double,
double,double,double,double);
int menu,n,k,p,i,j;
double dia,dial ,rad 1 ,tap,tap 1 ,tap2,angrot,s 1 ,s2,s3,s4,s5,val[20],max_thick,min_thick,eeta,zero_angle;
double centr_thick,hidden_dia,slant_length,angrot 1 ,angrot2,angrot3,angrot4;
double alpha,beta.rad2,angro[50];
charM[20],C[20],axis,axisx,axisy,axisz;
forCi=0;i<=20;i-n-)M[i]=C[i]=val[i]=angro[i]=0.0;
clrscrO;
printfC"SELECT FROM THE FOLLOWING MENU\n\n");
printfCINPUT
OUTPUT
DISCS
ENTER\n");
printfC"-—
\n");
printfC"Angleof rotation of disc
camber
1
1 \n");
printfC" Angle of rotation of discs camber, toe-in 2
2 \n");
printfC"Angle of rotation of discs output file
2
3 \n");
scanfC"%d",&menu);
ifCmenu==l)
{
printfC"ENTER THE DIAMETER OF THE SURFACE OF THE DISC THAT IS PARALLEL TO\n");
printfC"THE FLANGE SURFACEVn");
scanfC"%ir,&dia);
printfC"ENTER THE TAPER ANGLE OF CAMBER ADJUSTING NURn");
scanfC"%lf',«&tap);
printfC"ENTER THE ANGLE OF ROTATION OF NUTUi");
scanfC"%lf',&angrot);
printfC"ENTER THE MINIMUM THICKNESS OF THE DISC\n");
scanfC"%lf',&min_thick);
printfC"ENTER THE NUMBER OF MOVEMENTS TO DEFINE THE CAMBER SETTING
MECHANISMXn");
scanfC"%d".&n);
k=l;
212
angrot4=C-Cangrot-(-90));
forCi=n-l;i>=0;i-)
{
ifCi=3)
{
pnntfC"For the thickness of the disc at the center enter zero\n");
printfC"The program calculates the correct value\7\n"):
ifCi=0)
{
printfC"For the final translation enter zero.The program will calculate\n");
printfC"the inclined diameter of the disc and perform the translation\7\n")}
printfC"ENTER MOVEMENT #%d AND ITS VALUE\n",k);
scanfC"%*c9'rc%c%ir,&M[i],&C[i],&val[i]);
k=k-hl;
}
tap=tap*3.1415926537/180.0;
centr_thick=min_thick+(dia/2)*tanCtap):
max_thick=centr_thick-t-dia/2*tan(tap);
slantJength=Cmax_thick/sinCtap))-Ccentr_thick/sin(tap)):
val[0]=C-Cslant_length));
val[3]=centr_thick;
s5=l;
p=0;
sl=s3=0;
dial=C-dia);
radl=dial/2:
axis='X';
s2=20000;
s4=20000;
/*The following determines the co-ordinates of the surface that is flush with
the nut at the thicker end of the nut in the zero position*/
p=0;
s5=l;
translateCrad 1 ,axis,p,n,s 1 ,s2,s3,s4.s5):
forCi=3;i<=n-l;i-i-t-)
{
p=i;
s5=0;
if(i==n-l)s4=20001;
else s4=20000;
ifCM[i]=='R'IIM[i]='r)
{
213
rotateCval[p],C[p],p,n,sl,s2,s3,s4,s5);
}
ifCM[i]==T II M[il==t')
{
translateCval[p],C[p],p,n,sl,s2.s3,s4,s5);
}
}
p=0;
/* The following determines the co-ordinates of the nut at the zero position */
forCi=0;i<=n-l;i-i~i-)
{
p=i;
ifCi==0)s5=l;
else s5=0;
ifCi==n-l)
{
s4=20002;
s2=dia;
sl=tap;
s3=angrot;
s5=0;
}
else s4=20000;
ifCM[i]=='R' II M[i]==r')
{
rotateCval[p],C[p],p.n,s 1 ,s2,s3,s4,s5):
}
ifCM[i]==T II M[i]=='f)
{
translateCval[p],C[p],p,n,sl,s2,s3,s4,s5):
}
}
forCi=0;i<=n-l;i+-i-)
{val[l]=angrot4;
p=i;
if(ic=0>s5=l;
else s5=0;
ifCi==n-l)
{
s4=20008;
s2=dia;
sl=tap;
s3=angrot;
s5=0;
}
214
else s4=20000;
ifCM[i]=='R' II M[i]='r')
{
rotateCval[p],C[p],p,n,sl,s2,s3,s4,s5);
}
ifCM[i]==T II M[i]==t')
{
translateCval[p],C[p],p,n,sl,s2,s3,s4,s5);
}
}
}
ifCmenu==2)
{
printfC"ENTER THE DIAMETER OF THE SURFACE OF THE DISC THAT IS PARALLEL TO\n");
printfC"THE FLANGE SURFACEVn");
scanfC"%lf'.&dia);
printfC"ENTER THE TAPER ANGLE OF CAMBER ADJUSTING DISCSVn");
scanfC"%lf',&tap);
pnntfC"ENTER THE ANGLE OF ROTATION OF DISC #1 \n");
scanfC"%lf',&angrotl);
printfC"ENTER THE ANGLE OF ROTATION OF DISC #2 \n');
scanfC"%lf',&angrot2);
printfC"ENTER THE MINIMUM THICKNESS OF THE DISCS\n");
scanfC"%lf',&min_thick);
n=8;
tapl=tap*3.1415926537/180.0;
tap2=C-tap);
centr_thick=min_thick-(-dia*sinCtapl/2);
max_thick=centr_thick+dia/2*tanCtapl);
sl=0;
s2=20000;
s3=0;
s4=20000;
angrotl=C-angrotl);
angrot2=C-angrot2);
angrot3=C-angrot2);
beta=C-tap/2);
dial=C-dia);
radl=dia/2;
rad2=dial/2;
axisx='X':
axisy= Y ;
axisz='Z';
alpha=C-Cangrot2-angrotl));
p=0;
s5=l;
translateCcentr_thick,axisy,p,n,sl,s2,s3,s4.s5);
p=i;
s5=0;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=2;
rotateCalpha,axisy,p,n,sl,s2,s3,s4,s5);
p=3;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=4;
translateCcentr_thick,axisy,p,n,sl,s2,s3,s4,s5);
p=5;
rotateCbeta,axisz,p,n.s 1 .s2,s3,s4,s5);
p=6;
rotateCangrotl,axisy,p,n,sl,s2,s3,s4,s5):
P=7;
s4=20003;
translateCrad I,axisx,p,n,sl,s2,s3,s4,s5);
n=ll;
s4=20000;
p=0;
s5=l;
transIateCrad2,axisx,p,n,sl,s2,s3,s4,s5);
P=i;
s5=0;
angrot4=angrot3-f-180;
rotateCangrot4,axisy,p,n,s 1 ,s2,s3,s4.s5);
p=2;
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4,s5);
p=3;
translale(cenlr_lhk:k,axisy,p,n,sl,s2,s3,s4,s5);
p=4;
rotateCbeta,axisz,p,n,sl.s2,s3,s4,s5);
p=5;
rotateCalpha,axisy,p,n,s 1 ,s2.s3,s4,s5);
p=6;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
216
P=7;
translateCcentr_thick,axisy,p,n,sl,s2,s3,s4,s5);
p=8;
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4,s5);
p=9;
rotateCangrotl ,axisy,p,n,sl ,s2,s3,s4,s5):
p=10;
s4=20004;
translateCradl,axisx,p,n.sl,s2,s3,s4,s5):
n=ll;
p=0;
s5=l;
s4=20000;
translateCrad2,axisx,p,n,sl,s2,s3,s4,s5);
p=i;
s5=0;
rotateCangrot3,axisy,p,n,sl.s2,s3,s4,s5):
p=2;
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4,s5);
P=3;
translateCcentr_thick,axisy,p,n,sl,s2,s3,s4.s5);
p=4;
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4.s5);
p=5;
rotateCalpha,axisy ,p,n,s 1 ,s2,s3,s4,s5);
p=6;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
P=7;
translateCcentr_thick,axisy,p,n,s 1 ,s2,s3,s4,s5);
p=8;
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4,s5);
P=9;
rotateCangrot 1 ,axisy ,p,n,s 1 ,s2,s3,s4,s5):
p=10;
s4=20005;
translateCrad 1 ,axisx,p,n,s 1 ,s2,s3,s4,s5);
s2=20000;
s4=20000;
217
angrot4=angrot3+90;
n=ll;
s2=dia;
p=0;
s5=l;
translateCrad2,axisx,p,n,sl,s2,s3,s4,s5);
p=i;
s5=0;
rotateCangrot4,axisy,p,n,sl,s2,s3,s4,s5);
p=2;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=3;
translateCcentr_thick,axisy,p,n,sl,s2,s3,s4,s5);
p=4;
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4,s5);
P=5;
rotateCalpha,axisy,p,n,sl,s2,s3,s4,s5);
p=6;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5):
p=7;
translateCcentr_thick,axisy,p,n,sl,s2,s3,s4,s5);
p=8;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=9;
rotateCangrotl,axisy,p,n,si,s2,s3,s4,s5):
p=10;
s4=20006;
translateCrad I,axisx,p,n,sl,s2,s3,s4,s5);
s4=20000;
angrot4=angrot3 4-270;
n=ll;
s2=dia;
p=0;
s5=l;
translateCrad2,axisx,p,n,s 1 ,s2,s3.s4,s5):
p=i;
s5=0;
rotateCangrot4,axisy,p,n,sl,s2,s3,s4,s5);
P=2;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=3;
translateCcentr_thick,axisy,p,n,sl,s2,s3,s4,s5);
p=4;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=5;
rotateCalpha,axisy,p,n,sl,s2,s3,s4,s5);
p=6;
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4,s5);
p=7;
translateCcentr_thick,axisy,p,n,s 1 ,s2,s3,s4,s5):
p=8;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
218
p=9;
rotateCangrotl,axisy.p,n,sl.s2,s3,s4,s5):
p=10;
s4=20007;
translateCradl,axisx,p,n,sl,s2,s3,s4,s5):
}
ifCmenu==3)
{
printfC"ENTER THE DIAMETER OF THE SURFACE OF THE DISC THAT IS PARALLEL TO\n");
printfC"THE FLANGE SURFACEVn"):
scanfC"%lf',&dia);
printfC"ENTER THE TAPER ANGLE OF CAMBER ADJUSTING DISCSVn"):
scanfC"%lf',&tap):
printfC"ENTER THE MINIMUM THICKNESS OF THE DISCSVn");
scanfC"%lf',&min_thick);
angro[9]=-17.1428;
angro[10]=-42.857;
angro[ll]=-68.5712;
angro[12]=-94.2854;
angro[ 13]=-119.9996;
angro[14]=-145.7138;
angro[l]=-171.428:
angro[2]=-197.1422
angro[3]=-222.8564
angro[4]=-248.5706
angro[5]=-274.2848
angro[6]=-299.999;
angro[7]=-325.7132:
angro[8]=-351.4274;
n=8;
tapl=tap*3.1415926537/180.0:
tap2=C-tap):
centr_thick=min_thick-i-dia*sinCtapl/2):
max_thick=centr_thick-(-dia/2*tanCtapl);
sl=0;
s2=20000;
s3=0;
s4=20000;
beta=C-tap/2);
dial=C-dia);
radl=dia/2;
rad2=dial/2;
axisx='X':
axisy='Y';
axisz='Z';
forCi=l;i<=J4;i-t-(-)
{
219
for(j=l;j<=14;j-i-+)
{
alpha=C-CangroU]-angro[i])):
angrot3=C-angro[j]);
si =30000;
s3=s3+l;
printfC"s3=%lf\n",s3);
s4=20000;
p=0;
s5=l;
translateCcentr_thick,axisy,p,n,sl,s2,s3,s4,s5);
p=i;
s5=0;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=2;
rotateCalpha,axisy.p,n,sl,s2,s3,s4,s5):
p=3:
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4,s5):
p=4;
translateCcentr_thick.axisy,p,n.s 1 .s2.s3.s4.s5);
p=5;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=6;
rotateCangro[i],axisy.p,n,sl,s2,s3,s4.s5):
P=7;
s4=20003;
translateCrad I,axisx,p,n,sl,s2,s3.s4.s5):
n=ll;
s4=20000;
p=0;
s5=l;
translateCrad2,axisx,p,n,sl,s2,s3,s4,s5);
p=i;
s5=0;
angrot4=angrot3-»-180;
rotateCangrot4,axisy,p,n.s 1 ,s2,s3,s4,s5);
p=2;
rotateCbeta,axisz,p,n,s 1 .s2,s3,s4,s5);
p=3;
translateCcentr_thick,axisy,p,n,s 1 .s2,s3,s4,s5):
220
P=4;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=5;
rotateCalpha,axisy,p,n,sl,s2,s3,s4,s5);
p=6;
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4.s5);
p=7;
translateCcentr_thick,axisy,p,n,sl,s2,s3,s4,s5);
p=8;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=9;
rotateCangro[i],axisy,p,n,sl,s2,s3,s4,s5);
p=10;
s4=20004;
translateCradl,axisx,p,n,sl,s2,s3,s4,s5):
n=ll;
p=0;
s5=l;
s4=20000;
translateCrad2,axisx,p,n,sl,s2,s3,s4,s5);
p=i;
s5=0;
angrot3=C-angro[j]);
rotateCangrot3,axisy,p,n,s 1 ,s2,s3,s4,s5);
P=2;
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4,s5);
p=3;
translateCcentr_thick,axisy,p,n,sl,s2,s3,s4.s5);
p=4;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=5;
rotateCalpha,axisy,p,n,sl,s2,s3,s4,s5);
p=6;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=7;
translateCcentr_thick,axisy,p,n,s 1 ,s2,s3,s4,s5);
p=8;
rotateCbeta,axisz,p,n,sl,s2.s3,s4,s5);
221
P=9;
rotateCangro[i],axisy,p,n,sl,s2,s3,s4,s5);
p=10;
s4=20005;
translateCrad I,axisx,p,n,sl,s2,s3,s4,s5):
s2=20000;
s4=20000;
angrot4=angrot3-i-90;
n=ll;
s2=dia;
p=0;
s5=l;
translateCrad2,axisx,p,n,sl,s2,s3.s4,s5);
p=l;
s5=0;
rotateCangrot4,axisy,p,n,s 1 ,s2,s3,s4,s5);
p=2;
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4,s5);
p=3;
translateCcentr_thick,axisy,p,n,s],s2,s3,s4,s5);
P=4;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=5;
rotateCalpha,axisy,p,n,sl,s2,s3.s4,s5);
p=6;
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4,s5);
P=7;
translateCcentr_thick,axisy,p,n,s 1 ,s2,s3,s4,s5);
p=8;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
P=9;
rotateCangro[i],axisy,p,n,sl,s2,s3,s4,s5);
p=10;
s4=20006;
translateCrad 1 ,axisx,p,n,s 1 ,s2,s3,s4,s5);
s4=20000;
angrot4=angrot3-(-270;
n=ll;
s2=dia;
222
p=0;
s5=l;
translateCrad2,axisx,p,n,s 1 ,s2,s3,s4,s5);
p=i;
s5=0;
rotateCangrot4,axisy,p,n,sl,s2,s3,s4,s5);
P=2;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
p=3;
translateCcentr_thick,axisy,p,n,sl,s2,s3,s4,s5);
p=4;
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4,s5);
p=5;
rotateCalpha,axisy,p,n,sl,s2,s3,s4,s5);
p=6;
rotateCbeta,axisz,p,n,sl,s2,s3,s4,s5);
P=7;
translateCcentr_thick,axisy,p,n,s 1 ,s2,s3,s4,s5);
p=8;
rotateCbeta,axisz,p,n,s 1 ,s2,s3,s4,s5);
p=9;
rotateCangro[i],axisy,p,n.s 1 .s2,s3,s4,s5);
p=10;
s4=20007;
translateCrad I,axisx,p,n,sl,s2,s3,s4,s5):
s4=20000;
}
}
}
}/*end of camber function*/
223
APPENDIX C
LIST OF COMBINATIONS FOR THE
DUAL DISC MECHANISM
224
00
1
.78
Tf
1
1
1
1
(X)
<x>
<N
in
1
(.M
1si
'
i
CM
CM
1
1
ro
t
1
1
' '
'
1
1
'
CO!
!
iin 1
30!
!
!
CO
!.n
1
!
.
•
!
i
j
1
1
f— 1
'
i^i ^
^1
1
1
cvj!
Tl-
oo
1
00
CM 1
.1
s
in
1
••I
^~
TT
Ln 1
CM
CM
CM
CM
OO
^
i
05!
CO
CO
1
oo
1
CM
CM
o
Oi
CM
CM
1
1
CO
O)
ini
in
1
T -
'Vj"
1
CD
CM
CM
1
1
1
'
~~^
^
'r-
1
18,3
1
^ — \ — i — '.
\
.45106
—.
1--
--.
i
CVJ
1
1
1
1
:
1
1
CM
CM
1
tvi
.59961
3,15
83468
f
^-^
'••
o
1
1
'
CO
s-
CM
CM
1
;
5326
h~
Tl-
CM
i
;
i
1
t
1
1
2.15
J
i
.
- i
] -
1
i
j
-,-
. -—
1
1
1
i
1
ITI-
CD
1
• a> £ ? S2 OCO) CD2
• cc> r ^ CO
M c v ICM
oc> ; T l •. C"«acv
!c• > C) o Id
1
I
O
h - CO
CMCT
r^ CO
CO h *
1-
CVi
CM
"^
J^ d c
i
1
J
:^
i
t
' 1
1
!C
00
1 '
00
CJ>lO
! h - Tt
dio
c^
1
225
;5
a I f > CO
cc> TJ • i n
c » CC);co
en> CT>ico
ic
» ; c>|T-
•O)
1
1 !
!
!in
1
i
!
t"
1
i
\ '•
!
1
1
I
I
!
!
1 1
1
i
1
1
i
1
i '--1
!
'
;
1 !
! i
ItN _
T!r -
\
j
]
;
•
t
1
1 • i
COICVJ
i
CO
CVJi
cc
( O ' c o iCO
COiCVJ a
1
1
CMI
00
in,
CVJ
;
1 '
in
co;
I
CD
CVJ
CD
1
-1701959
-0 84438
!
1
i
1.28
, -2.53263
-2.78469
i
i
1 1
i 1i
1
-2.78471
in
1
+"
'
!
1 - -1
in
i
—
-2.47845
16.16
t
CO
CM
1
1
-2.96656 !
CO
CM
CM
-2.98333
18,16
-2.67278
• ^
3941
16.15
1
96655
2.91665
—
1
14,14
!
1
1
1
1
1
'
;
:
ih; --i
•
t
1
1
ro- CO !*..» CM C
- I c M g J5ic
0r> CM CO C3) g 2> «(
a3 CO o) Tl- S|CO a
a3 Tt CO C3) " . Jg 0
" "7 T 9
' o c
0.949285
1.462161
1.689504
4,2
-2.67266
27,1
1
-2.47842
i
—
-2.83469
00
^
in
.599
834(
fO
'
CD
in
1
^
!
^\
19,3
IO
-.•
1
.451
.,-
CO
00
-4
in
12,2
CO
I
j
1
Tl00
,
'
1
1
— —
^
1
J 1:-77
7 t :
in
i ''
.'
1
•t
00
r^
i
11,2
i
- • ' I
CM
•
i
1
+
:
+.
!
4
_
-7 — —
1 i
,1
-+-i
CM
i
1
014
i
.13
499
h-
CM
^
CM
^—
cvi1
CO
o
o
r^
CO
CD
in
1
'
1
i
1
:
i
'
- -. — ,
1
,
.
i
!
-.
col
ml
CO
CM
1
TJCO
o
1
t
'7
ho.
j
ITI-
h*
h*
oo
T—
o
T—
00
Oi
N
1
' ! 1 ^
1
CM
1
1
h".
1
,_
oo
CO
00
00
CO
CO
(
^-
CO
Tt
-.'
CM
CO
00
s. ^f\l
o>
T—
•
'
!
1
I
m
^ j
co|^-l
(J) i n
T -
CM
1
1
.^--4--
CM
1
^
CM
^ -^
1
00
Tt
"»"
i
!
—
O)
,
rft
J6,28
1
i
—
:
-1.9807
19.17
-2.2332
CO!
1
25,13
!
!
.13
1
-2.1012
!
CO:
1
1
1
,
1
00
TlTl-
CO
O)
;
'
iO
h-
CO
lO
T~
co"
CM
co
"1
1
coi 1
1
o
CO
o
1 —
I
1
j
1
1
CO
2,28
.1744
00
CM
tvj
00
CD
I
1
;
m
7,4
!
2.031;
1
CO
CO
24,14
oO|
CO
co!
00
00
i
1
.
i
1
1
-2.03472
1
^co
CM,
1
I
1465
219
9835
ICO
1
'^
^
r«.ico
O'Tl-
CO CO
Ti- o
to 00
o
co r- iP
r^ CO
I CM ! r - - j T 1
fd d I^
.
. o
1^
CM Oi .^_
O) y— o
CO CO hCO CD Tj-
2^ S ':;
-2.03473
dj
i
i
1
i
I-- r^'ro in
00 i rr\
Tl- CO ho O) i n
•»" ro. Tl- r^ O)
1^ O i n CO o
CO :>2 CD o f^
^- fO;ft: 5n O
] ; - , j " J^i- CM CO r^ir^iCM c j i i O
! o ^ S co!CM|Ti- in coiTi- Tt
^ ^ 1 ^ . icvi. o d, idi^^pi«>!^/^;p
t-» 1- T- f-.
, : o ' o o T->-!co,
226
'cMi
.
!
1
^ - 1
1
1
t
o
o
^\
1 ;
j
10,26
,
1^.1
1
1
Tl-
i
1
j
*
!
1
in
1
o
00
CM
1
I
Tl-
^
co"
1
COI
(7)
fs.
CM
CO
CM
_^
^ 1
1
27,27
-2.04801
1
.41
1
20,17
-2.1834
12,28
1
7-L-^
-2.19874
18,2
!
^00
—
5.2
-2.183
-2.3681
28,2
-2.36839
-2.36841
I
1
!
20,3
^
Oi
:
;
;
1 ! ' ! ' '
1
1
1
1
i
1
1
'
i c o i f n ! ' ' ^ CM oojcM
2 j S ' ; ^ 5^
r^ °o CD ^ | o ^ | i ^ - t C3) ho. o
S
i n CM CM
t^ t^o CM
®ico -- • "^.
CO ^
-^,iLi
^
o
cvi• V ^-^•
' • •
1
'-'
00
CM
h1-
CO
in
CJ>
CO
CO CO
CO CO
CO ""^
00 •^
1 -
T-
T-
CM
iin
in
ICO
Io
cvi
1•
-1.68593
1
1
00
00
ioo
ICO
00
Oi CO
T t oo
Tl- h.
ho.
ICVJ ho.
o
CM
9 o d
i
\-^
,
i
i
CO CD
joo
00
CO | i n
CM CO
Oi Oi
•
CD
CJ>
o
in
in
d
1
1
227
Tl-
oo"
-1.61215
1
CO
CO
in
yin
in
d
1
1
-1.61212
-1.59478
7,16
-1.57294
-1.57245
1
—
'
1
i
joo
ICM
in
00 IC35
Tl-
loo
1
1
I
'
i
1 ! !
' 1 !1
'
1
15,14
1
22,18 i
25,26
-1.54549
q
23,14
-1.57295
3,28
ho
22,12
-1.59539
19,2
22,13
—1
1
20,16
8,17
1
-1.0532
-0.61754
0.617573
1.053778
1 495314
1.719403
2.307311
1
-1.64699
17,1 1
6.2
-1.54513
CO
-2.30728
Tl-
-1.68518
13,15
-1.81651
CO
1.020385
1.904502 i
2.416184 1
Tf
Oi
;
-1.68518
5.15
-1.81663
—
-0.12598
0.126016
-1.76652
25,1
-1.81665
-I
11,28
-1.84945
1
27,2
-1.76656
21,17
-1.84955
i
-2.41639
-1.90447
-1.02035 '
11,26
-1.76681
-1.89931
1
-1.78738 ; -1.78718 -1.76683
i
-1.89935
co|
2.046584
9,26
-1.89948
CO
0.74502 ;
-1.89949
8'Z
1
1
i
:
1 ' :
in
CM CD
ho.
in
1
1 1
1
1
'Tl-'
--
00
\
CM
i
1—1 -
joo
co"
228
-2.14624
-1.23886
-0.84464
-0.47563
-0.09743
0.097083
0.475311
0.84467
1.238883
1 2.146263
1
—
'
8,13 i
21,26 ;
i 1,27
-1.29792 -1.2979
1
i
j
i
1
i
i
I
! 13,13 |
-1.43273 i -1.43268
15,3
1
1
1
-1.49957 : -1.49951
17,17 \
\
i
1
i
i
1
8,26
-1.23943
21,5
22,5
9,25
-1.23939
8,25
-1.38798 -1.38795
22,4
23,5
-1.23937
9,5
-1.37121
9,18
-1.48318 -1.48317 -1.46356
7,25
-1.23936
19,15
-1.37077
7,18
-1.46356
7,12
-1.21163
20,18
-1.35144
21,12
-1.46355
22.27
-1.21153
2,14
-1.35076
23,12
-1.46351
1
I
21,3
-1.14914
8,5
6,15
-1.14912
17,28
-1.32135 i -1.32066
9,27
-1.43321 1 -1.4332 1
-—
-2.48256
-2.34039
-1.9375
-1.49533
-1.2718 1
1.272314:
1.495358
1.937972
2.34078
2.48259
1
1 -2.59784
1 -2.14617
1 -0.84457
-0.44226
-0.22327
0.223302
0.442291
0.844602
2.146195
2.597866
--- - + — -
T-.
Tt
CM
^ 7
'—1
o
CM
o
CVI
1
7
CO
CM
CO
CO
d
229
682280
•
CD
8
CD CO
Oi T -
q
1
in
cvi
2.668363
ho
Tt
CO
CD
5.1
-0.90544
-0.90543
-0.90499
14,16
24,12
-0.90494
23,28
-0.88514
15,27
-0.98682
-0.8817
10,19
-0.95209
-1.08367
-0.8817
20,11
11,12
-0.86196
: 23,19
-0.95207 i -0.93537
Tt
co'
CO
—1
Tt
q
Cvi
-
1
—
•
•
•
-
1
1
16.14
6,11
-0.88537
C0_^
-0.95419
-0.61744
-0.06616
0.066176
0.617463
0.953945
1.619906
2.307414
2.794747
|
20,12
-0.98687
CM
0.163478 ! 9,17
-1.04721
-1.0956
co"
10,18
-1.04727
4,28
-1.09901
CD
CM
:
-1.04728
20,2
-1.09905
26,2
—
-1.08366 1 -1.08329
3,17
20,25
-1.09931
•
-2.76138
-2.51608
-1.61954
-1.39599
-'-
i
9,14
10,28
-1.09933
—-
1 18,1
;
-
-0.65089
-0.16346
0.65058
1.020317
1.685998
1.904563
2.79254
1
-1.1271
CM
92'Z
1 -1.149
-1.14897 ; -1.12724
1-1.90454
1
1 -1.68597 12,15
CO
1
;
!
1
!
+
•
.
—
oo"
-
;
1
n
i
1
!
•
CD
1
1
.
Tt
co"
CO
1
CD
d
1
-2.79486
-2.66839
-2.04685
-0.74528
-0.44215
-0.32292
0.322936
o
CO
m
'Tt
h-
|o
CO
CO
CM
00
1^.
iCM
-2.24106
-1.74091
-1.29878
-1.07547 ,
0.442166 1
1.075262
1.298798
! '
230
iCM|
CO
co"
CM
i
i i
colr>.
CO CM
1 - CO
Tt Tt
CN cvj
7,24
ml
1
1
1
i
.
.-
.
7-
i
1
— 4
.
4
18.28
co"
19.25
T-
-- t
20.26
Tt
7,13
1
-0.60145
1
25,6
-0.60146
-0.68355
1
1
1
o"
-0.60165
-0.69077
1
-0.6017
23,6
22,19
-0.69159
!
8,27
-0.76567
1
-0.63782
-0.73303
1
i
-0.63785
19,24
-0.73329
19,11
-0.80344
i
i
!
1
'CM
(D'
4
CD
ho.
o
CO
Tt
CD
d
1.741184
1.949644
-0.66004
6,24
-0.75008
11,19
-0.80345
1
-0.68293
24,6
-0.75011
21,11
-0.8036
1
co!
ml
inj
!
2,27
-0.66003
22,3
-0.76567 1 -0.76523
!
!
10,25
-0.76517
6,25
9,19
-0.80365
CD
1
-1.94963
-0.64807
-0.19679
-0.09953
0.099433
0.196695
0.375964
1
- ^
2.046866
2.668409
24,5
-0.82309
-j
1
1 9'02
-0.8232 ; -0.82315 ! -0.8231
i
1
1
t
!
-0.86161
16,17"'
1
1
i
,
1
m'
Tt
CM
m'
i 1
1
1
!
i
[
i
1
i
i
,
!
1
1
1
1
i
!
i
i
^
.
i
1
-1.61486
-1.39629
-0.94917
-0.7306
-0.45404
-0.03338
0.730612
0.949181
Tt
CO
2i
m
9
CO
CO
CO
Oi
231
5,10
-
L
i 16,27
9.6^
-0.34908
4,10
-0.33379
28,13
9,16
-0.30406
12,20
13,16
-0.30374
18,10
-0.40049
1 — f — . — .
\
h00
Tt
Tt
CO
d
1
CD
CO
0
CO
ho.
m
d
-^
17,14 i
-0.3037
oo'
i
-0.26071 1-0.26069
22,11
-0.38719
! 12,19
-0.38746
4,23
1
0.844871
1.243664
2.017713
2.319313
CO
Tt
-0.34992
2.17
-0.40051
CD
24,15
-0.38347
Tt
CD
24,25
-0.38378
10,17
-—
L
-0.41573
—
0.327747
1 ,! i
1
-2.31917
-2.01771
-1.24379 ,
1 ^
j
1
1
-0.41578
8,14
-0.48927 1 -0.44583 i
—'
0.163362
1.020115
2.568988
2.761497
2.892128
; :
5,28
-0.38751
1
-1.02011
1
-0.41616
-0.49777
1
-2.89218
-2.76149
i
j !
! '
-0.43557
3,4
19,1
21,2
-0.4978
25,2
1
1.614872
1
1
7,15 i
9,28
-0.49802 [ -0.49801
[-
1
23,1
11,15
-0.54774 -0.54771
—
1
Z'92
-0.54786 ; -0.54784
T—
T—
1.98220-
1
00
-7—
i
i
i
1
!
^
!
CD
CD
a>
cvi
«
-2.85877
•1.67093
-0.62139
-0.36937
-0.06608
1
1
i1
iCO
°
CO
lO
jo
98626 r 2
CD
i
1
IS
1
5,23
1
00
CO
m
CD
Tt
o
CM
Tt
o
I
\
•
•
CM CO
ho
Tt
cv jCC
c jTt) 0
• 0
ho
806260 V
CO CO
r 1.495685
3,23
24,2
-0.08179
24,20
-0.14011
6,28
-0.08176
1
8,28
-0.08189
16,4
-0.21391
1
-0.20866
-0.11208
1
—1— r
10.15
-0.1123
3,27
-0.16391
6,26
-0.2142
1
9689692
232
-0.21385
4,14
-0.13943
14,21
-0.06667
i
-1.0929 1
-0.87435 1
CM,
-0.11234
25,7
1
]
-0.13169
8,24
27,3
-0.16396
5,25
-0.22165
1
1 -0.13176
1.13
-0.13171
18,23
22,6
-0.18563
-0.19382
11,25
-0.18558
-0.22173
]
-0.19415
9.1
-0.22414
18,18
-0.24383
1
CO
CM
Tt"
-0.20154
13,20
-0.25187
i
i -0.2016
-2.69539 i 15,17
-2.47172
-2.19298 i
-1.86512
-1.28706 !
1.286984 1
1.865193 i
19,10
-0.2521
-—
li .670939
2.858774
2.95826
11.20
, -0.25213
1
1
1
1
!
1
1
i
\
1
i
1
1
—
d
co
m
cd
-
CO •
'
^i
'
' '
00,
o
d\
•
'
4
—
081738
1
' \
! 1 1
i
!
— I t
1
CM
1
1
i
!
1
1
4
L
m!
, ,
.
11
I
1
1
1
i
!
•
CD
'^
i^
1
d
i
1
I
:
.
,
; ' I
o
1
1
:
1
'
1
1
'
1
' ,
o
1 !
•
!1
1 11
'
1
00
1
1
1
o
1
CO
CM;
CD
CM
01
1
i
1
o
j
U. .-
oo>
!1
!
'
i
1 ^
f^ rt v: j !1
^~'
C
O
CM
m
1
1
1
CO
°
'
.04 982
co'
00
CM
CM
1
.01
1
1
Oi
1
!
CM
CO
00
^
1
CM!
co"
Tt
CO
CM
00
i
1
1
CO
' .
CM
1 ^ ^
•
i
1
m'
cvj^
1
I
:
i
1
1
'
'
1
!
!
i
.
1
'
'
1
[
1
•
1
I
.
,
iq.
|Tt
i
CO!
i
,
m
m
oo|
^^
•
!
1
;t
!
.,-
!
:
1
1
:
,
1
1
1
i
q
1
i
00
!
i
1 i
- 4
loo c D i m t o CO CO r ^ COi CO T t i
Jft ' f O ' CO UJ JZ ^M V-/;».>J
ho 1
cMim m CO o m i - <o co'
m 00
|o>lcp CD|CM o CO CM m CO
CM
5 d d d 9 ^ ^ S
1
V V V o o o o
l"--
1 o
i
CO
d
J j-.
4
1
ro m m O) O) CO: m
ho.ih..;cM
C D I i - i r ^ I c O : CM T - CO T - T - ^
C M m ' m T t h . Tt CO CO r^, • ^
CD CD C D ' S CM CD C O i ' ^ m m
^
CO ! Tt T - . o i r ^ CD CD
5 ^;q; ^ ' ! d '
1
QIQCVJ
!
•
:
1
.
1
'
233
'
G
q
Tt,
<D y-
CO
;
i
1
1
ho
!
-
^
I
•
CO
1
,
m
1
1 I
d
1
1
1
.,-
i
1
CM
!
i
1
^^
i
CD
co"
1
1
o
i
:
1
1
00
!
'
1
m
m
'
d
^^
d
o
CO
CO!
i
t
Tt
1V
,
1
t
• ' "
CO
i
1
1
1
1
°. i -f -
1
1
CO
CD
hCO
CD
1
^^^
1
:CJ
CM
1
O
o
co"
CM
o
•'
;
T—
CO
CO
CD
Oi
yf
'
: ,s.
Tt
Oi
CD
m
o
1
1—
o
o
m
o
CD
1
,
o
CM
^
^^
.
f >1
Tt
1
O
00
h^
CO
h.
CM
CO
CM
CM
CO
CD
^
(r>!
CD
CVI
m
Tt
1
T -
CD
o
CM
CM
o
h^
CO
Tt
m
o
CM
1
'
^1
:
1
1
Tt
CO
CM
CM!
i
'
,
d
!
^•
CO
o
000
1
'
!
i
i
1
CO ho."
fV|
,
o
o
o
o
CO
CM
i
00
CO
CD
j
m
y—
CM Oi
!
o
CO
CD
!
1
CO
i
m
ho.
'
1
i^
t
Tt
]
!
CO
co"
o
'
i
1
00
j
TZ\
1
"! ! M
1
o
CO
ho
j
2!
Oi
1
' 1
ii^
1
1
'
- CO
Z
' 1
h-..
CO
CD
CO
,
i^^
h^ SR
CM S
•
oo
OO
CO
ho"
O"
!o
I
1
co"
•
^
;
CD COic-,
h^ CO d
1
.066661
o
!
\oi
'
(CO
i
co
'
y- I
i
:
i
1
:
i
|o'
!
!
• ^ -
CM
°: i-^
00
h.
00
m
00
•
CM
!
•
Tt
CO
m
CD
,
1
-4 , : '
Ttico 1 - 0 0
r ^ i O ; 0 0 CO
•»- ro. 1 o o
ro. CD CD h.-
m h - CO CM
CO co CD h*
CD ho. co h.
CM T - m co
CD ^
CM CO CO Oi r^ O ) m
• • '
• O C M ' » - T t CD CO
CM CM •»-1 •
•
.
.
.
•
'
•
• O
- ^ CM CO CM CM
i ,
m
CD|
r^
coi
O;
,
11
Tt";
1
j
S^
Oi
t^l
d
i i
^ i- .
'
Tt
1
Tt
1
:
Si
o
252
1 !
1
i
!
1
1
1
i
!
1
h-
CM
25206
co"
i
ho
CM
co"
1
d
!
383i
I
1
i
1
1
CD
CO
00
\
1
1
!
m'
Tt
CO
CO ho."
;
1
d
CM
1
1
•
!
CO
d
CD
'
i
CO
o
CD
Tt
CM
o
CO
co"
5
1
1
1
d
i
1
1
1
'
°l
1
1
!
1
CO
00
i
f
-
1
I
1
1
CO
',
^!
'
i
i
1
Ol
1
i
l
CO
CM
:
l
s
00 r^
tr
m q
Oi
cvi
1
i
'
-i '
i
S2|
^!
<
5; CD Tt Nr
.
oilCDm
'^'OJ'CD
Oi
o d v^
Cvj
.
•
CD
CO
CO
1
o;
co!
d
1
m
cvi
•
I
jCD
i !
1 |C0
I1 ii Cco'i
M
i
l
Tt
o
l
'
i
1
'
q
i ^
i
1
'
:
;
;
1
1
1
1
.
-t-
4--
4 -
.-
'-i-i i - i - Ttl
colho.li:
i
CM [J5
CO'
CDj
CO
CO
1
^
^ T i d d "^.^ " ^ i ^
1
9
O|^-;CM!C^
1
234
^
4---
i
1
i
h-
1
I
i
co
m"
t
1
,
I
'
:
1
.
!co
'm"
j
! -j-
"i
'
Ico
_
I
,
1
|Tt
- -
t
CD
<D
00
CD
-'
--T-
1
i
CO
o T t CO CD
ho T t CO CD C^ ' ^ CD
CD 00
0 ] q 'CD " * > - o>
q
00 CD CD
cj* -.-^'didld
CM"
—
CM
1
7
' |CM.
Oi
i
m
o
o
I
d
CO
CM
^ ^
1
d
o
Tt
o
CO
d
i
1
,
'
Tt
i
CD
1
1
;
m
T—
1
,
1 '
!
.
1
1
'
1
1 ! '
CD
CO
d
1
1
h^
CM CO
m" CO
1
1
1
,
y ~
Tt
co"
i
m
ho
m
1
CO
1
m
1
]
Tt
1
1
d
[
1
1 1
co"
CM
CO
1
y—
T -
o"
j
Tt
CO
1
i
1
m
m
CM
CM
ho."
CD
CO
!2411
m
1
d
CO T t "
CO
,—__, _ -
:
Tt
,
1
CO
1
i
m
CM'
00
*" 1
CM
1
d
1
i
CO
h.
00
CD
Tt
CM CO
1
1
Oi CO
d
CM
1
;
'^"
d
d
m
\
1
1
m
Tt
m
1696 1
,
m
CO
CM
-_r
;
i
d
CO
.^
d
Tt
CO
00
CM
^~
1
'
CO
00
00
ho.^
1
1
Tt
Tt
CO
!
1
I
.
1
00
CO
CO
CD
o!
1
,
00
d
.
!
-
^
!
CO
Oi 1
i
Tt
CO
m
'
'
- 4 — 4 - -4 - ^
-(
i
;
CO
hCO
CO
d
,
!
-
1
d
1
'
t
CO,
'
Tt"
;
!
!
-
1 i
1
d
;
--T
,
i
,
CM
CM*
''~
1
^"
1
CM
COlh.!
CM^ ho.;
0 |
1
1
d
CO
CO
1
i
m"
100
'
i
1
co
, j
1
j
CM
h-
•
___—
1
;
0|
Tt
CO
Tt Tt
ho
Tt
^
i
— 1
d
1
1 ^
^
co|
y ~
1
i
CO
CO
"^-1
CD
1 !
°' i
•
,
CO
i
S'
SSi
CM I
1
1CO
i
f
i
00 I
COj
7-
,
ico,
1
"^
evil
,
,
1
.
.
;
,
j
CO i«!co m r^ o> m Si! S SR
1- i2 00 1- CO s o "^ 2 ®
C O J ^ T t O C O C O ^ T - T t T O ) S £ i - C 0 C 0 C 0 ^ O ; - C M
00 "^ CO O •»- CO ^ CM CD CD
^ CM 4 j ^ d 9 S P f^. ®
'^ ' T T 9 d ° i - C M C 0
i
I
•
1
'
!
!
CD
CO
ho
'
1
o
CO
d
'
'{
i
1
I
i
1-
co|
2
^CDi ^1 .-
1
. . .
;
•
1
1
1
i !
1
°l ^
1
1-
i
'
:
Ttj
1
1
m
m
1
col
h-l
00
00
CM;
OO
CO
00
co"
1
j
Tt
m;
d
1
7847
'
CM
CM
j
"*
Tt"
i
'
'
;
1 i
^"
co"
1
i
j
°i
^
ho.
CD,
^ 1
<N.
m
CO
d
;
1
1
'
1
!
1
i
1'
1
'
i
j
I
1
i
i
1
1
°i
;
1
!
m
i
d
1
Tt
^
i
547
Tt"
co"
y^
00
co"
d
CM
i
Oi
CM
Tt
d
Tt"
CM
Oi
00
498
'
0.497762
1
'-
co"
I
!
: 1
1
CO
o
co"
rM
'
•
•
;
1
•
t o T - 1 - CO " ^ S
!
T t 0>
o
Tt"
1
r^i
t
JS S CO <h r^'co olcD CO T°o
g5 S " 5 col-* c o i ^ ' o j •,—
l^ dd d dl!£ l^i^i^ q
1
I
•
•
1
'
1
,
1
:
•
1
!
i
ho.
T—
1
^
^ CD -.- O l O i C D I C D h t o 5 ) O 00 C O , - ^ m 1 - CM T t l
• t J ^ J t - ^ T I
'
•
•
I
,
I.-
1
[
4
J---J -
4
00!COtm|"*'SiS; SliSiSS
i;
cvi
. •
•:
•
• O l c o J l O i i - S j C D CO
•'
'
lilolo-'-!''1
235
;
CO
ho
»
, .
i
I
1
1
1
CO•>
•»—
1
1
,
1
.
1
1
ho
i^
11
co"
1'
CM
- - i - -4-
Tt
Tt
O
CO
COI
1
1
1
ho.
d!
: ! I !
,
-
1
1
CO
;
COI
ro.
i
!
I
1
co!
i"^
C
D i•'mJ ICO'O
Tt cDloo
05
- ' SIS
gO
' ^ l h - CDCO
O
^ ^ T t C D g ^ ' c D C D O C D - r i CO Oi r ^ i ' ^ . G Oi Oi ^
^ ' ^
1
'
1
,
00
OOi
CO
T—
SI
t
'
1
m
ho
CO
CO
CO
CO
00
1
d
- ^ - '
-
j
o
o
^
d
'
1 . _
o
00
CO
CO
i i 1 ! :
i
1
CM
Oi
y-
1
^
1
^"
o
d
-
1
O
1
o
Ol
mi
^—
00
ho.
CO
CD
CM^
1
!
1
m
m
y^
o
oo'
- -
1
i
d
y-
00
CM
1 -
1
m
CD
r^
d
- —H
1
1 1
<D|
CO
CO
CM
d
•
1
CM
CO
CD"
h^
h-
CM|
i
1
d
00
00
h-
o
!
m"
^
m
CO
CO
"^
T-
i
00
^
d
m
;
1
ho
r-
CM
ho"
ol
d
Tt
'
— — t
1
1 I
s
m!
CD
CD
CM
CM
co
h..
'
'
!
o
r^
(0
!
o
CM
1
d
m
d
i
1
ho.
o
o
CO
!
,
1" 111 ' '
,
i
ho
i
'
•• 1
T'^
fS
1
1
'
1
CD
1
1
,
Tt:
o
ho
m
m
'
1
i
j
d
CO
§
d
1
Oi
co;
CM"'
1
1
CO
'
mi
o
^~ ]
i
:
O 1
CM
o
m
T " 1
;
1
CO I
1
!
i
-4
m!
s
1
CO
Tt
T-
i
i
1
d
coco
m" o
CO
.
-i
1
1
co
CD
COTt
i 1 : 1
4
-1
i
!
icai
|T~
'
'
]
1
I
'
d
'
I
145
!
oo"
^
°! ''
in
1545
O ,
CD .
i
:
.26
11468
1
CO
-i
4
;
^ 1
!
o
'
.- -^
I
1
t
-^
CO
1
CO,
1j
-4
t4*NiTth
-CDiT-!coco m
Ih. T
0 0 ' C O ( r ) ! , _ T t C 0 C O CO CO
jr^
C
M S l i ^ ^ l i n CM -^ c o N r 00 co
° 0 O) p^ T t ' T t c o i m i i p CO CO
TJCM P h . - ^ T t T t ro. CD CO
cvi
2• T dT d
' ^ ! ^ ! 9 ^ "f.
. ^ O i O ^ - ^ C M
1
1
1
'
CM
Tt
00
CO
CO
cvi
1
1 -2.0469 '
1 -0.32296 i
-0.06616 1
0.066141 i
0.322947 1
28,4
2.26
•
CO
CM
co"
m
00
00
CO
"^
o
cvi
13.18
0.82311
17,12
3,18
0.823117 0.823121
m
CD
-2.79255
1 -2.66837
-2.51585
-1.90457
8,10
27,5
'
CM
CD
CO
CO
CO
r
-0.16346
0.163437
0.322898
1 2.516088
1 2.76139
I 16,18
17,5
10,24
2,24
28,6
co"
1.095574 1.098963
19.19
1
92*8
236
—
CO
00
1.0837
1
1.083263 1.083697
CO
1.0473
16.26
27,4
0.95208
i
0.986816
12,8
23,24
0.934748 0.935352 0.952051
14,19
1
col
2.307397 1
15,7
0.905448
27,12
16,11
0.823176 0.861578 0.861935 0.881733 0.881734
4,5
1
7,23
0.987468 1.047184 1.047293
1 2.668401
2.794866
1
0.885152 0.885368 0.904889 0.904938 0.905435
-2.30742
23,7
-1.6199
-1.39605
1 -0.95398 1
13.4
1 -0.61745 1
1,23
1 0.617434 1
0.9541851 16,21
1.39603 I
'
I
0.803569 0.803612
1 -2.79476
1
1
CM
-4
1
1
j
i
—
1
1
CD
CM
i
CM
m
T— 1
1
i
- i
si
i
1
1
- +
(
]
1
1
1
11
i
T—
iCD
|C0
CO
y-
i
1
CM
!m |
!Tt
[CO
'
^•
1
1
CD"
1
iTt
i
1 •
1
i
00
q
1
c^i
i
CM
m"
1
y—
1
oo
m
i
CO
CO
CDI
COI
m"
1.148917
"^1
m
CO
ho.
Tt
CM
CD
CO
m"
CM;
1
!
1
I
1
1
1
1
1
o
co_
CD
CM
CD
2
CM
CO
CO
Tt
•
!
CO
CM
1
!
oo
o
o
CM
CO
Tt
CM"
CM
1.127251
r^
1.099316 i 1.099337 1.127104
1
CO
5
CD
ho."
CM
CO
CM
CD
CD
h.
00
CM
oo"
CM"
m"
m
00
hCO
CD
CO
CO
ho.
CO
q
CM
'
CO
CD
h^
00
CO
CO
T-
co"
CO
T—
—
1
Tt
CO
CO
CO C O
CD
CO
Cvj CM"
CM
co"
o
CM
CM
h^
CM"
q
1
CD
ho"
CM
--
i
1
i
1.099003
i
1
!
CD"
u
CO
is
1
j
1
1
i
1
CD
CD
CO
CD
CO
CM
1
1
1
1—
o
Tt"
ho
1
o
i
1
m
iZ
oo
Tt
CM
m
CO
ICM
h^
CD
Tt 1 " ^ Tt
ho. iTt ICD h..
1 ^
CD
ho
CO C O O
cvi i q
1
1 '
1
i
i
1 •
m
o
1
m
CD
CO
CD
m
m
00
CD
CM ro.
h . CD
|Tt C O Tt
CO
CO C D
Tt
cvi
m
id d o
i ' d d Id
i '
237
1
t
|co
Io
q cvi
cvi 1
'
1
i
1
CM m
CD
Tt
icvi
* -
4
[
1
1
$2 m
Iin co"
Ico
j
m"
1- -
CM
CO
i
!
CM
1
i —
1
1
ho. ICD m
Tt
CO
\^
00
CO C O
CM C D
Oi
q
;
1
m
CM
CM
COCO i
h-
t
CM 1
i
ho.
00
CD
CO
CD
1
m h . CO
h^
00
CD
00 C O
O CM
CO o '8 m C
O
o
CO CM
00 iCM
!!^ m CO
iq
.m
Ico
|d P ,o
i •
•
1
00
CM
CD
h^
CD
CM
o
c^.
j
CO
CO
Tt
i
CM
i
i
1
1
Tt
00
CO
13,22
1
1
q
1.149131
JTt";
*
1
CM
CO
CO
h."
iCM
T- CD
CM Tt
!
1 m— ;i
i
]
m
^ m
1
o
m
q
1
CM
Tt
m
ho.
o
1
C O CCMO
CM CM
CD
iTt r^ Tt
CM Tt
1
1
i
1
I
1
m
C D CM m
Tt
r^ 00 r^
m
CM 00 CO
CM
im
CM
00
Oi
Tt
Cvj Tt
Tt
d Id
1
1
cvj
cvi
1
•»"
i
COi
i
548
-
— . -
-.
r>.
•
^
i
yS
j
.
.
.
. _ _,
m'
Pi
^
ho
^
^
1-1
"^
m_^
m
,
Tt
i
]
j
T-
q
'
• ^
i
1
1
1
1
1
1
1
1
CD
CO
!
m
CD
CD,
i
'
!
i
'
CO
1
11
1
1
Tt
.
1
1
i
:
.
"^.
j
'
O'
! 1
CM
CO
'
'
,
i
1
•^
^"^
m
T -
i
1
•
1
i
1
1
I
h-l
!
CD;
1
j
^
1
1
;
ro.i
I
- '
h
j
i
1
!
m
:
i
CO
|CM
!
^
i
• ^
;
I
1
!
'
CM
i
'
m_
P|
1
'"
1
y—
.46355
• » -
5879
0733
5328
t
1
1
I
i
'
•
P
cvi y• i '
'
(
' ; i
l o T t CD m
CD
"*
^
00
CO
CO
CM
CM
m
^~
CM
.
• o
qjq m
^jcoco
!i
1
'
'
'
1
1
1
1
'
1
i
1
1
'
'
'
'
I
1
1
^
T-
1
1
-1
;
'
CO
ho.
00
ho
i
1
m
1 1
!
ii
' ''
1
1 ''
h.
1
co"
1
'
1
,
1
i
1
'
1
1
] T—
;
1 |CM_
'Tt'
i
Oi
;
1
'
1
j
I
1
1
!
COCO
,
i
-1 4 — " !
1
1
--
. J
1
m
^^
!
i
CO
ho.
CD
h^
i
j
00
CD
CD
'
;
i
1
,
1
1
j
co
col
i 17
1
l
!
^-
CD"
i
1 -
CO!
CO|
ho.
CO
CM
i
t
^"
m"
1
"^1
col
[
1
'
I
1
j ' 1: 1' '
1
__ '
1
'
I
CD!
1
ml
CM"
1
1
I
i
*
1
i
I
m
1
1
CD
o"
CO
1
h.
Oi
1 i
Tt
CO
CM_
CO
CO
ho.
Tt"
m i
'
;''"(!
,
1 i
'
1 i
1
• J 1 i i
t 1 1 -^
t - [- i
:
TZi
'fNiiCD CO C O C 0 ' C 0 | C 0 h ^ C D C M
O y- ^
2
bG
COjCD CM CO 0 0 1
CO [ T t FSiD:: 5^1
CM T t m o c D i
dld^S
1
1
!
)£\ZZ
1 r"
'
!
^
CD!
CD
CO
h..
CO
ho.
!
m
'"^ '
1
1
q
<
irT
u^
1
CM
| CM
- - . i
q
00
i
m
Cvi
.
i
ho
i
CM'
1
'-
CO
1
•
i
i ^^ 1
CM;
Tt!
CD
^—
CD
m
co'
.
1
1
i
'
o Si i^
!
j
m
m
m
1
S
1
!
m
•^
i
-4_^
CO
i
CD
1
1
col
ho
CO
ho.
Tt
i
• ^ '
.
co
1 -
^'tn
:
h-
00 1 o> 1
CM
.
i
m
CD
m
"^
1
1
Tt^
: ! ,
CO
CO
j
CD
:
m!
O
h^
!
COj
00
Tt
Pi
CD
O
T *
CO
'*.
1
1
1
!
1 T—
'
1
q!
1
•
Tt" ^—
CO CO
1
-^i
:
;
i
Tt
T -
,
Tt:
—
CM_ ^
CM
1
1
I
1
!
,
CD
!
i
i
;
1
i
T.^
•
CD
CD
COi
1
:
CM'
• ^
1
!
'
I
1
1
I
CM
CM
00!
00
1
CD
Tti
1
•
4
1
q
-
1
;
S! 1
i
K|2.
':
T t 00
i
1
,
\
m'
1 ". 1
^
-i i
•
1
.
CD'
• y -
CM
'
1
.
1
11
1
i
-
1
'
m
"^
.
i
i
1 — '
i
Tt
f
I
1
CD
, q
!
1 ^~
1—--^
!
g
COj
1
_
.685177
.572397
i
ro.;
co"!
1
1
' "
^J
1
1
Tt
00
CO
m
^~
-4---f- -t•
1
T -
j
1
18,8
724
Tt
81666
\
;
m
O
g
^1
d
'
1 ! i • • ]
1 C 0 O 5 rr, r o - c o l ' ^ f r > T t CO ^-
Jn'oo
CD g
CO m
i^ ^'
<5> CM CD CO yo ) 11.5 cyj CO .51-
m 05 2
CO O ) CO S
4 J f J o SR O O CD g
CO m CD
CO CD T t
i; ^
CD T- OJ m r^ m CD CD
O OOIJT^ CM m O P
CO m Tt
'^. r s ^ ^ ' t o ^ c o T - c D i - i CM •
- Z- - : i - co - t h. Tt
' V V V V d d
-.--T.^cvi
o
238
o^S^C3m»nS^cocoo
• • ] . , - • _^ m P co co CD
7 " ^ ' ' "^ • ,d ^ y^ -r^ --^
1
CO
!
!
.23
147
17,
i
r7
1I"7!
hol
^
!
'
1
i
\
CO
Tt
,
q
i
1
'
• ^
ho"
o
1—
cvi
I
1
^ 1
CD
00
CM
CD
I
oo!
•j
i
'
'
•
i
Oi
CD
"^
Oi
CO
CO,
CO
CD
CD'
1
1
i
1
19929
;
y1
q
^
•
'
1
1
!
^1
i
CD
T—
1
ho
-
_-
•
1 -
'
1
!o
i
^
co"
,
1
1
1
I
m m
cj CM .,_• d
1 1 1
dic-j
1
—
' . C O
O.OO
CMj
en
CO
4.7
11
'
'
!>
'
'
i
1
:
1
i
1
1
!
i
j
1
1
'
1
1
1
o"
!
'
1
o
CO
1
i
1
1 1
!
1
i
1
, !
i
>
i
CO
1
1
[
1
, 1I
1
•
CO
y -
i
y -
cvi
I
1
CO
o
cvi
^~
i
— - - -— .
i
1
1
1
1
l4-
CO COCD m CM
SP m i c D h o | h - O
m
frjlCMlCDlTt
2 l m COlh. >}i ho.|CD h- CD Tt 1
r f » c D r o : [ T t ; " 4 C M ! r o . CO i n h ^ l
h^ Oi y-'
..>
.
'^
•
'^
1
1-4
i
I
I
i
,
1
4
1^ - J
1
CO
'
'
'
1
1
'
-4 ^
239
J
1 1 1 l^.l
1
!
1
'
1
'
i
1
4
4
i$2i
,
!
4
!
1
icvjr-^icviV^lmiCDCO
i - r ^ l C D l - ^ C0!CD|CD;O
o ' 1 - 00 CD 00 m i o
Tt C M l c D i m CM m CO
o m CVIiOO CO h . CM
• o
- ^ CO •»- CO 0 |
i~;
• - ^ i _ : ' ^ CO
O
T 1 _•
•
•i •
•1
CM ••— T - O O
_• _•
' ' ! ' i | O I O ' ' - ' ' - C M
I
'
1
CO
1
'
!
1
'
1
-,--1-.^ —
•
'
1
1
1
^
!1
;
1
1
P
T -
CO
1
U
i - |
' /Ni 1 «.•
•»-;CM|CM
O
CM
o
CM
Oi
n\ m CD CD ooj
6b T.j^f ' C^
m r^
IS: ro. 1oo
sc i S ' S 2 i
; i o 00 h-icojco
i
Cvj
ho
•
r o ^ ' CD Tt m
S CO 00 O Tt
^
^ hlimioo
2 •? CO -"t!ho
1
1
cvi
4
1
I
---.
cvi
m
o
CO
o
i
1
1
00
CD
ho.
CO
CO
\ J
CO
CD
'
i
I
m
1
1
'
cd
1.8
?
--
i
Tt"
VM
CO
2.6
4954
1
I
'
CD
00
i
CO
1
.
1
;
Cvi
m
1
:
Cvi
o
o
1
1
Tt
o
cvi
y^
^ T*
1
'
1
11
1
CO
CO
CM
Cvi
1
CM^
CO
,
'
1
C:' :
CO
h^
'
CO
CO
CO
'
00
1-
•
CM
co"
CM
1
1
1
i :
ho
ho
Tt
^
Tf
,
1
co'
1
Tt
^
• O '
I
1
CO
CO
"^1 ; 1 1
i
'
O
1
i
1
!
i
'
cvi
i
i
1
Tt
i
1
CO.
:
1
CD
CD
h^
CM"
i
'
1 '
1
Tt
y—
P' 1
i
1
1
1
i
CD
CD;
i
en'
\ * j
!
Cvi
i
1
1
1
1
cvi
i
!
CD
! 1 ' ' ' 1
I
i
1
ho.
I1
!
1
CD
CO
.11
I
CO CD,
;
'
m
CD
1,
1
co"i
i
CH
co'
CO
CD
:
t
i
CO
^1
.
;
i1
277
i
i
Tt
^
312
i
^
O l
1
^'
1
1
.11
86'
n
CO
. .
CO
j
I i
CM
1
CM,'
Tt:
1
1
1
;
1
.J .
K.
.10
!
,
6,19
^
!
'^'"":
'Tt:
.22
I
CDi
'i
802
CD
1
i
^
CO O '
CM T ^
CM
1
1
*
.21
hoo
CO
Oi
-^'
cvj
•
•
•
'
' O O
--
.857003
.298369
1.52254
i
;
OOC
CO
00
CM|
17.7
'
249
,
7448
•
5,8
1
472
"
13126
*
2.1 74479
•
-
338876
J74105
.989062
5.6
1
i
82*6
1
o ^
,
CO
j
m!
Ol
^
m
1
ol
CM
CD,
1
1
CDi
1 :
mi
Oi <
1
i
1
1
-4
i
i
]
1
Tt"!
Tt
Cvj
i
1
.45
, 1
i
ooj
r^!
m;
1 1
I
1
1
1
1
CO
1
.-_|- 1
41825
Cvi
1
m
':
CO
CM
CO
CM
C0_^
Tt
y-\
T"
'
'
5
00
5
CM
CM
1
m
oo
CM
:
!
!
1
1
S2
!
• 1
i
ho.
>
•
CO:
CO
CO
Tt
;
-^
i
1 ^
1^.
CO
;
o
t
hCM
00
1
1
'
1
1
!
VJ
oo"
8416
!
i
1
h^
CD"
h.
Cvj
'" 1
co"
Cvj
m"
1 '!
3840
I '
q
!| Cm
M
m
'
00
i :
i
i
1
m
cvj
i
:
1
I
q
1
CO T t
CO
,
'
1
;
:
If-
co
Oi
'
1
CDi
CO*
•
^
^
r^'
1
Tt
!
'•
!
!
'
,
,
'
i
,
i
1 1
M
;
CO
CM_
]
1
1
T—
1
'
CM
1
ho
h-!
co"
CM P
m"
1
,
i
O
1
y—
1
1
1
1
i
q
i
ICMJ
1
i
00
m
h.
; - ^^
CM O)
SS S
- d dl^^iPi^ P "*: P
i i , i , 0 0 0 - « - ' ^ - » \
'• :
'
CM:
CD'
1 iJ^I 1 ' •
CM
240
y— j
CD
CVJ
j
co"
i
i
CO
1
1 ;
1
I
i
i
;
.
1
1
I
;
'
'
'
"^ ho. OJ CO
ho.!TtlCD
^ L»» **. 1 m 1 O i T t CD
TI TT i i H i H i y 1 i K ^ ?ri i o T^ CD
00CD,!- 1^ P CM'CO T O) CD CO h . . a > i r o . , c D
C D O 00 T t J::; CM CM CD
O CD
CD y- Oi CT) CO 0O|CD <D
CD T t CO CO 1 ^ 1 0 , 2 CO Tt
Tt O h . - ^ O ^ i C D ? ^
,
.
:
!
^ 1
i1 1t
P P ^ P -. ^ ^ ^ p
V:9 9 9 9 ! d d -•
'
:
CO CD
ho.!
CM
CM;
1
1
~
ITJ
1
Tt:
«,t
1
i
ho.|
,
I O '
^ -
i
1-
col
CM]
1
CM|
'
1 '
i
^ 'i
1
cvii
o
i
^j .
ho
1 1
- -^
^-,
C0_
#^\
VU
co"
CD
CO
CO
Tt
00
1
i
1
ho.
cvj
!
CO
—f r -
i
'
i
1
'®
1
i
CO
CO
h.
CM
1 i
—
! ^ :' i
t
m
m
Oi
m
j
!
!
ho
CD'
m
cvj
1
1
1
CD
Tt"
CM
CD
CO
CO
1
!
:
1
i
1
i
i
j
i
00
hCO
CN.
1
i
I
Tt
CO
CM
CO
1
1
ho
m
-|
i
1
Cvi
O
- f
'
t
Cvi
00
1
4
CO
CM
00
Tt
00
CM:
o
o
1 11 :
j
I
00
ro.
Cvj
f^
!
M l ' ^ '^
Tt
00
CM
--•
CD
O
CD
Tt
oo"
'^
CO
,
CM
CO
CO
1
,
CDi
00
Cvj
ho
1
CO
Tt '
i
CM
'.
! I
.
CO
1
H^
CD
1
cvi
2.338
1
:
cvi
oo
m
!
i
CO
h-
CM!
1
Cvi
CO
CM
1
co"
CO
CO
cvi
co"
Tt
ho."
CO
CO
o
00
Oi
1
1
cvi
00
CO
CM
o
CD
m
cvi
i
j
1
i
o
CO
1
1
1
CD
CO
00.
cvi
CM
CD
1
1
m
Cvj
1
^~ '
1
"^
Tt
00
CD"
l"^l
i
1
!
P
CO
m
i
- 4 - 4 -n-^r o
CO,
m'
O^i
1
-'
1
CD!
1
1
1
!
'^ii..-
--
h~
i
, , i°' i
1
m
1
1
coio
o;cM,
co"
1
CDi
1
CM
O
;
1
1
JCM
.
,
1 - _
4 -
h ^ ! h ^ 7 Tt
4
O) 1 m 1 o ) m
CM
!co
o Ttco4?.
cDir^iooiCM CD
Tt h . i ^ oo oo o co co co
(D T t CO 2
O CO T t ^
•-- d d9
1 '
1
i . ' . i
:
>
O CO CO h^ T t CO
C 0 ! O O i C O h . CD
d"^.^. ^ P P
O O i O O ' t ;__
1
2.866671 1 2.916657
1 -0.88398
21,21 ;
-0.44186 i
i
1 -0.21832
i
1 0.291665 :
7.8
1 0.446908 :
22,22
2.96655
—
20.21
7.21
2.91668 2.933423
\
—
— -— —
—
—
1 1
-
; 1
\
--
1
1
1
—-
L _
241
\
1 1
i
;
!
1
!
!
•---
—
4
1
4
PERMISSION TO COPY
In presenting this thesis in partial fulfillment of the
requirements for a master's degree at Texas Tech University or
Texas Tech University Health Sciences Center, I agree that the Library
and my major department shall make it freely available for research
purposes.
Permission to copy this thesis for scholarly purposes may
be granted by the Director of the Library or my major professor.
It
is understood that any copying or publication of this thesis for
financial gain shall not be allowed without my further written
permission and that any user may be liable for copyright infringement.
Agree
(Permission is granted.)
r / -^ / /
Student's Signature
Disagree
Date
(Permission is not granted.)
Student's Signature
Date
Download