Robotic Arm: Team Provolone

From ENGR005 2008
Revision as of 00:27, 13 November 2008 by Jnicolu1 (Talk | contribs) (Testing)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Team Provolone

Can they build it? YES, they can.
Team Provolone is arguably the best team for the Robot Arm Lab. They are dedicated to success and will not stop until the job is done. The team's design hinges on uniqueness and versatility, which will make the design a cutting-edge prototype produced to complete the assigned test with efficiency and grace.

Squirrel eating provolone cheese, food of champions. Courtesy of Andrew Cheng.

Team Members

Shiv Bhandari
Frances Hunter
Yewande Alade
Jack Nicoludis

Design

The Provolone team (the only team) decided to use a base composed of a "turntable-like" disc supported on ball bearings to stabilizes the arm. While simple and aesthetically pleasing, the hollow plastic design of our base made it very light. It could not completely counterbalance the weight of the arms and had to be clamped/held down in order to work the most efficiently. The first servo is hidden within the base. The second servo is mounted at the end of the upper arm by a large black bracket. Coming from this joint is the short lower arm that is attached to the pencil holder. During the designing process, the arm was originally built with a two relatively long upper and lower arms. However, the torque that the arms exerted (especially on the servos), caused the apparatus to tip over. In order to created a more balanced model, the team decided to build with shorter arms. Though the shortening of the arms gave us more control while the machine was in operation, it reduced our drawing space ("area"). This became a nuisance when we attempted to define a center point for our arms while it underwent inverse kinematics.

Lesson: Experimentation with hardware got us nowhere.

Programming

The basis of the code is the construction of a nx2 Matrix ("MAT") that contains all the points needed to be connected in order to draw a circle and a square. The first section of the matrix (the first rows) is the division of the circle into many equidistant points. The number of points in the circle can be changed in order to adjust accuracy--the more points, the more "accurate" representation of a circle was created. The second part of the matrix is the division of the square into 16 points. The size of the square was drawn in relation to the radius of the previously drawn circle (2r by 2r--the radius of the circle as a basis for the construction of the points). After the matrix is constructed, it translates these images so they are drawn about a specific point (x0,y0)--the center point. The points of the matrix undergo inverse and forward kinematics to find the position of the lower arm and the displacement angle of the two joints. Then, the angle is converted into pulse widths that create a command string that is sent to the servos. Simultaneously, graphs of the points in MAT and the path of the arm are displayed on screen.

Testing

At first, the circle drawn by the arm was oval shaped. As a result, we were forced to review our MATLAB scripts to find the source of the problem. It was after this review that we realized that there were multiple causes of our "warped" drawing. For one, our angles used for forward/inverse kinematics had to be adjusted. Initially, we created these two angles independent of each other. While the upper arm moved fine under these conditions, the lower arm's movements were incorrect. It was moving in relation to a constant horizontal--it was not moving in relation of the upper arm. In other words, the arms were not in sync. By subtracting the theta value of the upper arm from the theta value of the lower arm, the arms moved in the proper manner.

After fixing this problem, we came across our second issue. We had to readjust our center point. When the center of the circle and the radius of the circle were out of reach of the robot arm, making the arm distort the image. Due to the lengths of our upper and lower arms and the range of rotation of the servo motors, our robotic arm could only complete the drawing within a certain "plot of points." We realized that our robotic arm was operation in a plane spanning (4,4) to (6,6). Unsurprisingly, the arm was most efficiently approximately in the center of this "plane" around the point (5,5). After fixing these values, the robot still had trouble drawing a circle and a square, but this can be attributed to other factors (e.g.--the jerky movement of the servos, the friction of the pencil on the paper, etc.)