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