This website describes the final project of the course ME446 Robot Dynamics and Control. The course emphasizes the fundamentals of kinematics, dynamics, and motion and force control of robots. We will take advantage of all the knowledge learned in the lecture to experiment with the precise control of the robot arm.
The final project task is to make our CRS Robot Arm perform the sequence of tasks using appropriate control and follows the desired path as marked in the following figure. Task 1 is to move the end effector vertically down into the hole and then out. Task 2 is to get the robotic arm around the obstacle without bumping into it and then move the end effector along a zigzag path. Task 3 is to push the end effector down on the egg so that the scale reads in the range 500 to 1000 grams and stayed there for at least 2 seconds. When the robot arm returns to its original position, the task is marked as complete.
- Trajectory planning
For our project, we mainly used Straight Line Trajectory to move the robot arm from points to points in line segments.
The straight line between each points are calculated by:
where critical points are defined by:
#define num_points 23 //number of total points
point array_points[num_points] = { //x, y, z, thetaz, mode
{ 0.138, 0.000, 0.432, 0.0, 0}, //state 1 - point 1: home
{0.254, 0.000, 0.508, 0.0, 0}, //state 2 - point 2: rest position
// Task 1: Insert into a hole
{task1_x, task1_y, task1_z + 0.3, 0.0, 0}, //state 3 - point 2.1: above the hole
{task1_x, task1_y, task1_z, 0.0, 1}, //state 4 - point 3: surface of the hole
{task1_x, task1_y, task1_z - 0.065, 0.0, 2}, //state 5 - point 4: insert 2 inches into the hole
{task1_x, task1_y, task1_z - 0.065, 0.0, 1}, //state 6 - point 4: wait for 1 second at point 4
{task1_x, task1_y, task1_z, 0.0, 0}, //state 7 - point 3: go back to surface of the hole
{task1_x, task1_y, task1_z + 0.3, 0.0, 0}, //state 8 - point 2.1: go back above the hole
{0.030, 0.104, 0.494, 0.0, 0}, //state 9 - point 4.1: reduce y from point point 2.1
{0.363, 0.104, 0.494, 0.0, 1}, //state 10 - point 4.2: increase x from point 4.1 and above the zigzag
// Task 2: Zig Zag
{task2_x, task2_y, task2_z, -(90 - 36.87)/180*PI, 3}, //state 11 - point 5: entry of zig-zag
{task2_x + 0.022, task2_y - 0.050, task2_z, -(90 + 34.065)/180*PI, 3}, //state 12 - point 5.1: first line segment of zigzag
{task2_x + 0.01, task2_y - 0.067, task2_z, (180 - 15)/180*PI, 3}, //state 13 - point 5.2: first curve segment of zigzag
{task2_x - 0.06, task2_y - 0.055, task2_z, -(90 + 34.065)/180*PI, 3}, //state 14 - point 6: second line segment of zigzag
{task2_x - 0.069, task2_y - 0.073, task2_z, -(90 - 36.87)/180*PI, 3}, //state 15 - point 6.1: second curve segment of zigzag
{task2_x - 0.012, task2_y - 0.149, task2_z, 0.0, 0}, //state 16 - point 7 :exit of zig zag
{task2_x - 0.012, task2_y - 0.149, task2_z + 0.3, 0.0, 0}, //state 17 - point 7.1: above point 7
// Task 3: Desired force
{task3_x, task3_y, task3_z + 0.2, 0.0, 4}, //state 18 - point 8: above the egg
{task3_x, task3_y, task3_z, 0.0, 4}, //state 19 - point 8.1: move down to touch the egg
{task3_x, task3_y, task3_z - 0.019, 0.0, 5}, //state 20 - point 9: press on egg
{task3_x, task3_y, task3_z - 0.019, 0.0, 4}, //state 21 - point 9: press on egg for 2s
{task3_x, task3_y, task3_z + 0.2, 0.0, 0}, //state 22 - point 8: back above the egg
{0.254, 0.000, 0.508, 0.0, 5}, //state 23 - point 10: thetamotor = 0
};The robot arm start from state 1 and end at state 23. For each state, the first three elements are start points (x_a, y_a, z_a ) and the first three elements of the next state are end points (x_b, y_b, z_b).
The fourth element of each state stands for the rotation angle of the end effecter frame with respect to the world frame, which is used in the task 2.
The last element of each state stands for the mode, which are defined as:
// mode = 0: speed = 0.5
// mode = 1: speed = 0.1, weak x y force
// mode = 2: wait for 1 second, weak x y force
// mode = 3: speed = 0.05, weak y, slightly weak x
// mode = 4: speed = 0.05
// mode = 5: wait for 2 seconds- Controller
We implemented Task Space PD control together with the feedforward force or impedance control as the position/force controller, learned in Lab 4.
In task 1 and 2, we used PD controller added with impedance control, where theta z were set into different values when performing task 2. We will illustrate more details of task 2 solution in the Challenge part.
In task 3, we used PD controller added with feedforward force, where we applied a force on the z direction to guarantee the egg is weighted between 500 and 1000 grams.
The final result exhibition is as follows:
ChallengesThere are two big challenges. The first is from the ZigZag path. To let the end effector smoothly move in the narrow slot, we carefully designed the line trajectory in the zigzag as shown in the following figure:
The x axis of the world frame points down in the figure, and the y axis points right. The yellow arrows indicate directions and line segments that the robot followed. In addition, by using impedance control, we set different theta z to rotate the end effector frame and align the rotated x axis with the yellow arrows. Theta z are green degree values in the figure. We weak the rotated y axis force (vertical to the yellow arrows) and slightly weak rotated x axis force. In this way, the peg followed the slot smoothly even if the force control was not perfectly applied only in the yellow arrow directions (the weakened y axis force did not push the slot so hard).
The second challenge is that the scale reads after pushing the egg is very sensitive to the initial home position, we tuned the gains, the position to touch the egg and the desired forces for many times to attain the perfect read.
Group member:
1. Zhao, Yang
UIUC ME MS Graduate
E-mail: [email protected]
2. Tang, Meng
UIUC ME MENG Graduate
E-mail: [email protected]








Comments