In the initial setting of the robot arm, each servo is set to no rotation (0 degrees), and the links in the robot arm coincide with the z-axis. The xy plane is horizontal (the factory floor), and the entire robot arm is initially pointing up, vertically. From this initial setting, each servo can effect a rotation of up to 90 degrees in either of two directions. Servo1 moves the entire robot arm in the xz plane by rotation about the y-axis. Servo2 moves the arm (except link1) in the (perhaps rotated) yz plane by rotation about the x-axis. In a similar manner, each odd-numbered servo can rotate the remaining part of the arm in the (perhaps rotated) xz plane, and each even-numbered servo can rotate the remaining part of the arm in the (perhaps rotated) yz plane. In effect, the servos rotate the links about the y and x-axes of coordinate systems fixed to the end of each link. Counterclockwise rotations about a coordinate axis are produced with positive rotation angles, if we are looking along the positive half of the axis toward the coordinate origin. The sample data has been carefully chosen to illustrate the effects of these rotations.
There are two restrictions on the final positioning of the robot's arm. No part of the arm can be below the factory floor, and the links in the robot's arm cannot intersect with each other (except where they are connected by the servos).
You should check only the final position of the arm.
Given the number of links in a robot's arm, their lengths, and the proposed settings of the servos, first determine if the proposed positioning of the arm is allowable. If the arm can be positioned as proposed, then determine the coordinates of the robot's hand, accurate to three fractional digits. Otherwise identify the first (smallest numbered) servo that has an inappropriate setting, and why that setting is inappropriate. Links are assumed to intersect if they come within 0.001 length units of each other.
2 25 15 0 90.0 1 1.0 45.0 2 1 1 0 45 4 1 2 3 4 90 0 0 0 3 1 1 1 0 90 90 2 1 1 45.0 45 4 1 1 1 2 0 90 0 90 8 10 1 1 1 1 1 1 2 0 0 90 0 90 0 90 0 -1
Case 1: robot's hand is at (0.000,-15.000,25.000) Case 2: robot's hand is at (0.707,0.000,0.707) Case 3: robot's hand is at (0.000,-0.707,1.707) Case 4: robot's hand is at (10.000,0.000,0.000) Case 5: robot's hand is at (1.000,-1.000,1.000) Case 6: robot's hand is at (1.207,-0.707,1.207) Case 7: servo 4 attempts to move arm below floor Case 8: servo 8 causes link collision