• matlab开发-一种二自由度机器人。利用ANFIS函数建立神经网络来求解逆运动学问题。
• 二自由度二自由度机器人的通用控制技术 机器人的通用控制技术 二自二自由度机器人的通用控制技术由度机器人的通用控制技术
• 二自由度机器人的MATLAB仿真，提供了matlab过程分析图片。更加清晰。
• 1 %运动学正解 2 function [x, y, c] = planar_robot_forward_kinematics(L1, L2, theta1, theta2) 3 x = L1 * cos(theta1) + L2 * cos(theta1 + theta2); 4 y = L1 * sin(theta1) + L2 * sin(theta1 ...


1 %运动学正解
2 function [x, y, c] = planar_robot_forward_kinematics(L1, L2, theta1, theta2)
3 x = L1 * cos(theta1) + L2 * cos(theta1 + theta2);
4 y = L1 * sin(theta1) + L2 * sin(theta1 + theta2);
5 c = theta1 + theta2;
6 end

1 %运动学逆解
2 function [theta1, theta2] = planar_robot_inverse_kinematics(L1, L2, x, y, handcoor)
3 c2 = (x^2 + y^2 - L1^2 -L2^2) / (2 * L1 * L2);%若(x,y)在工作空间里，则c2必在[-1,1]里，但由于计算精度，c2的绝对值可能稍微大于1
4 temp = 1 - c2^2;
5 if(temp < 0)
6     temp = 0;
7 end
8 if(handcoor == 0)   %right handcoor
9     theta2 = atan2(sqrt(temp), c2);
10 else    %left handcoor
11     theta2 = atan2(-sqrt(temp), c2);
12 end
13 s2 = sin(theta2);
14 theta1 = atan2(y, x) - atan2(L2 * s2, L1 + L2 * c2);
15 end

1 %画圆弧
2 function draw_arc(x0, y0, r, theta1, theta2, options)
3 deltaTheta = 0.1 * pi / 180;
4 theta = theta1 : deltaTheta : theta2;
5 x = x0 + r * cos(theta);
6 y = y0 + r * sin(theta);
7 plot(x, y, 'LineStyle', options.LineStyle, 'Color', options.Color, 'LineWidth', options.LineWidth);
8 axis equal;
9 end

1 %画工作空间
2 function draw_planar_robot_workspace(L1, L2, thetaLimit1, thetaLimit2, handcoor)
3 thetaL1 = thetaLimit1(1);
4 thetaU1 = thetaLimit1(2);
5 thetaL2 = thetaLimit2(1);
6 thetaU2 = thetaLimit2(2);
7
8 hold on;
9 if(handcoor == 0) %right handcoor
10     options.LineStyle = '-';
11     options.Color='g';
12     options.LineWidth = 3;
13
14     x0 = 0;
15     y0 = 0;
16     r = sqrt(L1 * L1 + L2 * L2 + 2 * L1 * L2 * cos(thetaU2));
17     alpha = acos((r^2 + L1^2 - L2^2) / (2 * r * L1));
18     thetaStart = thetaL1 + alpha;
19     thetaEnd = thetaU1 + alpha;
20     draw_arc(x0, y0, r, thetaStart, thetaEnd, options)
21
22     x0 = 0;
23     y0 = 0;
24     r = L1 + L2;
25     thetaStart = thetaL1;
26     thetaEnd = thetaU1;
27     draw_arc(x0, y0, r, thetaStart, thetaEnd, options)
28
29     x0 = L1 * cos(thetaU1);
30     y0 = L1 * sin(thetaU1);
31     r = L2;
32     thetaStart = thetaU1;
33     thetaEnd = thetaU1 + thetaU2;
34     draw_arc(x0, y0, r, thetaStart, thetaEnd, options);
35
36     x0 = L1 * cos(thetaL1);
37     y0 = L1 * sin(thetaL1);
38     r = L2;
39     thetaStart = thetaL1;
40     thetaEnd = thetaL1 + thetaU2;
41     draw_arc(x0, y0, r, thetaStart, thetaEnd, options);
42
43     title('Workspace in right handcoor', 'fontsize', 16);
44 else  %left handcoor
45     options.LineStyle = '-';
46     options.Color='b';
47     options.LineWidth = 3;
48
49     x0 = 0;
50     y0 = 0;
51     r = sqrt(L1 * L1 + L2 * L2 + 2 * L1 * L2 * cos(thetaL2));
52     alpha = acos((r^2 + L1^2 - L2^2) / (2 * r * L1));
53     thetaStart = thetaL1 - alpha;
54     thetaEnd = thetaU1 - alpha;
55     draw_arc(x0, y0, r, thetaStart, thetaEnd, options)
56
57     x0 = 0;
58     y0 = 0;
59     r = L1 + L2;
60     thetaStart = thetaL1;
61     thetaEnd = thetaU1;
62     draw_arc(x0, y0, r, thetaStart, thetaEnd, options)
63
64     x0 = L1 * cos(thetaU1);
65     y0 = L1 * sin(thetaU1);
66     r = L2;
67     thetaStart = thetaU1 + thetaL2;
68     thetaEnd = thetaU1;
69     draw_arc(x0, y0, r, thetaStart, thetaEnd, options);
70
71     x0 = L1 * cos(thetaL1);
72     y0 = L1 * sin(thetaL1);
73     r = L2;
74     thetaStart = thetaL1 + thetaL2;
75     thetaEnd = thetaL1;
76     draw_arc(x0, y0, r, thetaStart, thetaEnd, options);
77     title('Workspace in left handcoor', 'fontsize', 16);
78 end
79 set(gcf, 'color', 'w');
80 axis off;
81 end

1 %画工作空间草图
2 function draw_planar_robot_workspace_sketch(L1, L2, thetaLimit1, thetaLimit2, handcoor)
3
4 thetaL1 = thetaLimit1(1);
5 thetaU1 = thetaLimit1(2);
6 thetaL2 = thetaLimit2(1);
7 thetaU2 = thetaLimit2(2);
8
9 hold on;
10 if(handcoor == 0) %right handcoor
11     options.LineStyle = '-';
12     options.Color='g';
13     options.LineWidth = 3;
14
15     x0 = 0;
16     y0 = 0;
17     r = sqrt(L1 * L1 + L2 * L2 + 2 * L1 * L2 * cos(thetaU2));
18     alpha = acos((r^2 + L1^2 - L2^2) / (2 * r * L1));
19     thetaStart = thetaL1 + alpha;
20     thetaEnd = thetaU1 + alpha;
21     draw_arc(x0, y0, r, thetaStart, thetaEnd, options)
22
23     x0 = 0;
24     y0 = 0;
25     r = L1 + L2;
26     thetaStart = thetaL1;
27     thetaEnd = thetaU1;
28     draw_arc(x0, y0, r, thetaStart, thetaEnd, options)
29
30     x0 = L1 * cos(thetaU1);
31     y0 = L1 * sin(thetaU1);
32     r = L2;
33     thetaStart = thetaU1;
34     thetaEnd = thetaU1 + thetaU2;
35     draw_arc(x0, y0, r, thetaStart, thetaEnd, options);
36
37     x0 = L1 * cos(thetaL1);
38     y0 = L1 * sin(thetaL1);
39     r = L2;
40     thetaStart = thetaL1;
41     thetaEnd = thetaL1 + thetaU2;
42     draw_arc(x0, y0, r, thetaStart, thetaEnd, options);
43
44     %-------------
45     options.LineStyle = '--';
46     options.Color='r';
47     options.LineWidth = 0.5;
48
49     x0 = 0;
50     y0 = 0;
51     r = sqrt(L1 * L1 + L2 * L2 + 2 * L1 * L2 * cos(thetaU2));
52     thetaStart = 0;
53     thetaEnd = 2 * pi;
54     draw_arc(x0, y0, r, thetaStart, thetaEnd, options)
55
56     r = L1 + L2;
57     draw_arc(x0, y0, r, thetaStart, thetaEnd, options)
58
59     x0 = L1 * cos(thetaU1);
60     y0 = L1 * sin(thetaU1);
61     r = L2;
62     draw_arc(x0, y0, r, thetaStart, thetaEnd, options);
63
64     x0 = L1 * cos(thetaL1);
65     y0 = L1 * sin(thetaL1);
66     draw_arc(x0, y0, r, thetaStart, thetaEnd, options);
67
68     xA1 = L1 * cos(thetaL1);
69     yA1 = L1 * sin(thetaL1);
70     xB1 = xA1 + L2 * cos(thetaL1 + thetaU2);
71     yB1 = yA1 + L2 * sin(thetaL1 + thetaU2);
72     xA2 = L1 * cos(thetaU1);
73     yA2 = L1 * sin(thetaU1);
74     xB2 = xA2 + L2 * cos(thetaU1 + thetaU2);
75     yB2 = yA2 + L2 * sin(thetaU1 + thetaU2);
76     xC1 = (L1 + L2) * cos(thetaL1);
77     yC1 = (L1 + L2) * sin(thetaL1);
78     xC2 = (L1 + L2) * cos(thetaU1);
79     yC2 = (L1 + L2) * sin(thetaU1);
80
81     plot([0, xA1, xB1], [0, yA1, yB1], 'lineStyle', '-', 'color', 'k', 'lineWidth', 3);
82     plot([0, xA2, xB2], [0, yA2, yB2], 'lineStyle', ':', 'color', 'k', 'lineWidth', 3);
83
84     fontsize = 15;
85     delta = 25;
86     text(0, 0, 'O', 'Fontsize', fontsize);
87     text(xA1, yA1 - delta, 'A_1', 'fontsize', fontsize);
88     text(xB1, yB1 - delta, 'B_1', 'fontsize', fontsize);
89     text(xA2, yA2 + delta, 'A_2', 'fontsize', fontsize);
90     text(xB2, yB2 - delta, 'B_2', 'fontsize', fontsize);
91     text(xC1, yC1, 'C_1', 'fontsize', fontsize);
92     text(xC2, yC2, 'C_2', 'fontsize', fontsize);
93     title('Workspace sketch in right handcoor', 'fontsize', 16);
94
95 else  %left handcoor
96     options.LineStyle = '-';
97     options.Color='b';
98     options.LineWidth = 3;
99
100     x0 = 0;
101     y0 = 0;
102     r = sqrt(L1 * L1 + L2 * L2 + 2 * L1 * L2 * cos(thetaL2));
103     alpha = acos((r^2 + L1^2 - L2^2) / (2 * r * L1));
104     thetaStart = thetaL1 - alpha;
105     thetaEnd = thetaU1 - alpha;
106     draw_arc(x0, y0, r, thetaStart, thetaEnd, options)
107
108     x0 = 0;
109     y0 = 0;
110     r = L1 + L2;
111     thetaStart = thetaL1;
112     thetaEnd = thetaU1;
113     draw_arc(x0, y0, r, thetaStart, thetaEnd, options)
114
115     x0 = L1 * cos(thetaU1);
116     y0 = L1 * sin(thetaU1);
117     r = L2;
118     thetaStart = thetaU1 + thetaL2;
119     thetaEnd = thetaU1;
120     draw_arc(x0, y0, r, thetaStart, thetaEnd, options);
121
122     x0 = L1 * cos(thetaL1);
123     y0 = L1 * sin(thetaL1);
124     r = L2;
125     thetaStart = thetaL1 + thetaL2;
126     thetaEnd = thetaL1;
127     draw_arc(x0, y0, r, thetaStart, thetaEnd, options);
128
129     %-------------
130     options.LineStyle = '--';
131     options.Color='r';
132     options.LineWidth = 0.5;
133
134     x0 = 0;
135     y0 = 0;
136     r = sqrt(L1 * L1 + L2 * L2 + 2 * L1 * L2 * cos(thetaL2));
137     thetaStart = 0;
138     thetaEnd = 2 * pi;
139     draw_arc(x0, y0, r, thetaStart, thetaEnd, options)
140
141     r = L1 + L2;
142     draw_arc(x0, y0, r, thetaStart, thetaEnd, options)
143
144     x0 = L1 * cos(thetaU1);
145     y0 = L1 * sin(thetaU1);
146     r = L2;
147     draw_arc(x0, y0, r, thetaStart, thetaEnd, options);
148
149     x0 = L1 * cos(thetaL1);
150     y0 = L1 * sin(thetaL1);
151     draw_arc(x0, y0, r, thetaStart, thetaEnd, options);
152
153     xA1 = L1 * cos(thetaL1);
154     yA1 = L1 * sin(thetaL1);
155     xB1 = xA1 + L2 * cos(thetaL1 + thetaL2);
156     yB1 = yA1 + L2 * sin(thetaL1 + thetaL2);
157     xA2 = L1 * cos(thetaU1);
158     yA2 = L1 * sin(thetaU1);
159     xB2 = xA2 + L2 * cos(thetaU1 + thetaL2);
160     yB2 = yA2 + L2 * sin(thetaU1 + thetaL2);
161     xC1 = (L1 + L2) * cos(thetaL1);
162     yC1 = (L1 + L2) * sin(thetaL1);
163     xC2 = (L1 + L2) * cos(thetaU1);
164     yC2 = (L1 + L2) * sin(thetaU1);
165
166     plot([0, xA1, xB1], [0, yA1, yB1], 'lineStyle', '-', 'color', 'k', 'lineWidth', 3);
167     plot([0, xA2, xB2], [0, yA2, yB2], 'lineStyle', ':', 'color', 'k', 'lineWidth', 3);
168
169     fontsize = 15;
170     delta = 25;
171     text(0, 0, 'O', 'fontsize', fontsize);
172     text(xA1, yA1 - delta, 'A_1', 'fontsize', fontsize);
173     text(xB1, yB1 + delta, 'B_1', 'fontsize', fontsize);
174     text(xA2, yA2 + delta, 'A_2', 'fontsize', fontsize);
175     text(xB2, yB2 - delta, 'B_2', 'fontsize', fontsize);
176     text(xC1, yC1, 'C_1', 'fontsize', fontsize);
177     text(xC2, yC2, 'C_2', 'fontsize', fontsize);
178     title('Workspace sketch in left handcoor', 'fontsize', 16);
179 end
180 set(gcf, 'color', 'w');
181 axis off;
182 end

1 %求边界点
2 function p = solve_planar_robot_boundary_point( L1, L2, thetaLimit1, thetaLimit2, handcoor, x0, y0, s)
3
4 thetaL1 = thetaLimit1(1);
5 thetaU1 = thetaLimit1(2);
6 thetaL2 = thetaLimit2(1);
7 thetaU2 = thetaLimit2(2);
8
9 xA1 = L1 * cos(thetaL1);
10 yA1 = L1 * sin(thetaL1);
11 xA2 = L1 * cos(thetaU1);
12 yA2 = L1 * sin(thetaU1);
13 xC1 = (L1 + L2) * cos(thetaL1);
14 yC1 = (L1 + L2) * sin(thetaL1);
15 xC2 = (L1 + L2) * cos(thetaU1);
16 yC2 = (L1 + L2) * sin(thetaU1);
17
18 if(handcoor == 0) %right handcoor
19     r = [sqrt(L1 * L1 + L2 * L2 + 2 * L1 * L2 * cos(thetaU2)), L1 + L2, L2, L2];
20     xB1 = xA1 + L2 * cos(thetaL1 + thetaU2);
21     yB1 = yA1 + L2 * sin(thetaL1 + thetaU2);
22     xB2 = xA2 + L2 * cos(thetaU1 + thetaU2);
23     yB2 = yA2 + L2 * sin(thetaU1 + thetaU2);
24     pp = [xB1, yB1, xB2, yB2; xC1, yC1, xC2, yC2; xC2, yC2, xB2, yB2; xC1, yC1, xB1, yB1];
25 else  %left handcoor
26     r = [sqrt(L1 * L1 + L2 * L2 + 2 * L1 * L2 * cos(thetaL2)), L1 + L2, L2, L2];
27     xB1 = xA1 + L2 * cos(thetaL1 + thetaL2);
28     yB1 = yA1 + L2 * sin(thetaL1 + thetaL2);
29     xB2 = xA2 + L2 * cos(thetaU1 + thetaL2);
30     yB2 = yA2 + L2 * sin(thetaU1 + thetaL2);
31     pp = [xB1, yB1, xB2, yB2; xC1, yC1, xC2, yC2; xB2, yB2, xC2, yC2; xB1, yB1, xC1, yC1];
32 end
33 xc = [0, 0, L1 * cos(thetaU1), L1 * cos(thetaL1)];
34 yc = [0, 0, L1 * sin(thetaU1), L1 * sin(thetaL1)];
35
36 p = zeros(8,2);
37 k = 0;
38 if(abs(s(1) - 0) < eps)
39     temp = r.^2 - (x0 - xc).^2;
40     for i = 1 : 4
41         if(temp(i) >= 0)
42             xp1 = x0;
43             yp1 = yc(i) + sqrt(temp(i));
44             xp2 = x0;
45             yp2 = yc(i) - sqrt(temp(i));
46             if(dot([xp1 - x0; yp1 - y0], s) > 0 && (pp(i, 3) - xp1) * (pp(i, 2) - yp1) - (pp(i, 1) - xp1) * (pp(i, 4) - yp1) > 0)
47                 k = k + 1;
48                 p(k, :) = [xp1, yp1];
49             end
50             if(dot([xp2 - x0; yp2 - y0], s) > 0 && (pp(i, 3) - xp2) * (pp(i, 2) - yp2) - (pp(i, 1) - xp2) * (pp(i, 4) - yp2) > 0)
51                 k = k + 1;
52                 p(k, :) = [xp2, yp2];
53             end
54         end
55     end
56 else
57     a = (s(2) / s(1))^2 + 1;
58     b = 2 * (s(2) / s(1)) * (y0 - yc - x0 * (s(2) / s(1))) - 2 * xc;
59     c = xc.^2 - r.^2 - 2 * y0 * yc + y0^2 + yc.^2 + (s(2) / s(1))^2 * x0^2 + 2 * (s(2) / s(1)) * x0 * (yc - y0);
60     delta = b.^2 - 4 * a * c;
61     for i = 1 : 4
62         if(delta(i) >= 0)
63             x = roots([a b(i) c(i)]);
64             xp1 = x(1);
65             yp1 = s(2) / s(1) * (x(1) - x0) + y0;
66             xp2 = x(2);
67             yp2 = s(2) / s(1) * (x(2) - x0) + y0;
68             if(dot([xp1 - x0; yp1 - y0], s) > 0 && (pp(i, 3) - xp1) * (pp(i, 2) - yp1) - (pp(i, 1) - xp1) * (pp(i, 4) - yp1) > 0)
69                 k = k + 1;
70                 p(k, :) = [xp1, yp1];
71             end
72             if(dot([xp2 - x0; yp2 - y0], s) > 0 && (pp(i, 3) - xp2) * (pp(i, 2) - yp2) - (pp(i, 1) - xp2) * (pp(i, 4) - yp2) > 0)
73                 k = k + 1;
74                 p(k, :) = [xp2, yp2];
75             end
76         end
77     end
78 end
79
80 distance = sqrt((p(1 : k, 1) - x0).^2 + (p(1 : k, 2) - y0).^2);
81 [~, index] = min(distance);
82 p = p(index, :);
83 end

1 %画工作空间(示例)
2 clc;
3 clear;
4 close all;
5 L1 = 200;
6 L2 = 200;
7 thetaLimit1 = [-135, 135] * pi / 180;
8 thetaLimit2 = [-145, 145] * pi / 180;
9
10 figure(1);
11 handcoor = 0;
12 draw_planar_robot_workspace(L1, L2, thetaLimit1, thetaLimit2, handcoor)
13 figure(2);
14 handcoor = 1;
15 draw_planar_robot_workspace(L1, L2, thetaLimit1, thetaLimit2, handcoor)
16
17 figure(3);
18 handcoor = 0;
19 draw_planar_robot_workspace_sketch(L1, L2, thetaLimit1, thetaLimit2, handcoor)
20 figure(4);
21 handcoor = 1;
22 draw_planar_robot_workspace_sketch(L1, L2, thetaLimit1, thetaLimit2, handcoor)

1 %求边界点(示例)
2 clc;
3 clear;
4 close all;
5 L1 = 200;
6 L2 = 200;
7 thetaLimit1 = [-135, 135] * pi / 180;
8 thetaLimit2 = [-145, 145] * pi / 180;
9
10 figure(1);
11 handcoor = 1;
12 draw_planar_robot_workspace(L1, L2, thetaLimit1, thetaLimit2, handcoor);
13 while (1)
14     [x0, y0] = ginput(1);
15     [x1, y1] = ginput(1);
16     s = [x1 - x0; y1 - y0];
17     p = solve_planar_robot_boundary_point(L1, L2, thetaLimit1, thetaLimit2, handcoor, x0, y0, s);
18     plot([x0, p(1)], [y0, p(2)], '--o')
19 end

转载于:https://www.cnblogs.com/gxb31415926/p/7259897.html
展开全文
• 二自由度管道机器人摄像云台系统设计，姬旭，林国能，介绍摄像云台系统在管道机器人上应用的状况,提出了一种二自由度摄像云台系统，详细阐述了该系统的软件和硬件设计。本设计选用89C51
• 根据所在研究中心机器人的工作模式，把二自由度串联型机器人的关节控制当成经典案例进行深入探讨。 利用 拉格朗日函数方法建立机器人动力学方程，近而确立机器人动力学模型。 基于永磁同步电机建立伺服控制系统，...
• 机械毕业设计论文，二自由度球面定位并联机器人
• 我用的mini arduino 但是我先前，还是选择的大的，ardunio 我错了
我用的mini arduino

但是我先前，还是选择的大的，ardunio
我错了 
展开全文
• 对于工业机器人的设计与大多数机械设计过程相同；首先要知道为什么要设计机器人机器人能实现哪些功能？活动空间（有效工作范围）有多大？了解基本的要求后，接下来的工作...第步是按照设计要求制作机械传动简图，分
原作者无处找寻了，仅此致谢！
对于工业机器人的设计与大多数机械设计过程相同；首先要知道为什么要设计机器人？机器人能实现哪些功能？活动空间（有效工作范围）有多大？了解基本的要求后，接下来的工作就好作了。
首先是根据基本要求确定机器人的种类，是行走的提升（举升）机械臂、还是三轴的坐标机器人、还是六轴的机器人等。选定了机器人的种类也就确定了控制方式，也就有了在有限的空间内进行设计的指导方向。接下来的要做的就是设计任务的确定。这是一个相对复杂的过程，在实现这一复杂过程的第一步是将设计要求明确的规定下来；第二步是按照设计要求制作机械传动简图，分析简图，制定动作流程表（图），初步确定传动功率、控制流程和方式；第三步是明确设计内容，设计步骤、攻克点、设计计算书、草图绘制，材料、加工工艺、控制程序、电路图绘制；第四步是综合审核各方面的内容，确认生产。下面我将以六轴工业机器人作为设计对象来阐明这一设计过程在介绍机器人设计之前我先说一下机器人的应用领域。机器人的应用领域可以说是非常广泛的，在自动化生产线上的就有很多例子，如垛码机器人、包装机器人、转线机器人；在焊接方面也有很例子，如汽车生产线上的焊接机器人等等；现在机器人的发展是非常的迅速，机器人的应用也在民用企业的各个行业得以延伸。机器人的设计人才需求也越来越大。六轴机器人的应用范筹不同，设计形式也各不相同。现在世界上生产机器人的公司也很多，结构各有特色。在中国应用最多的如：ABB、Panasonic、FANUK、莫托曼等国外进口的机器人。即然机器人的应用那么广泛，在我国却没有知名的生产公司。对于作为中国机械工程技术人员来说是一个值得思考的问题！有关机器人技术方面探讨太少了？从业人员还不能成群体？虽然在很多地方可以看到机器的论术，可是却没有真正形成普及的东西。即然是要说设计，那我就从头一点一点的说起。力求讲的通俗简明一些，讲得不对的地方还请各位指正！六轴机器人是多关节、多自由度的机器人，动作多，变化灵活；是一种柔性技术较高的工业机器人，应用面也最广泛。那么怎样去从头开始的设计它呢？工作范围又怎样去确定？动作怎样去编排呢？位姿怎样去控制呢？各部位的关节又是有怎么样的要求呢？等等。。。。。。让我们带着众多的疑问慢慢的往下走吧！首先我们设定：机器人是六轴多自由度的机器人，手爪夹持二氧气体保护焊标准焊枪；完成点焊、连续焊等不同要求的焊接部件，工艺要求、工艺路线变化快的自动生线上。最大伸长量：1700mm；转动270度；底座与地平线水平固定；全电机驱动。好了，有了这样的基本要求我们就可以做初步的方案的思考了。首先是全电机驱动的，那么我们在考虑方案的时候就不要去考虑液压和气压的各种结构了，也就是传动机构只能用齿轮齿条、连杆机构等机械机构了。机器人是用于焊接方面的，那么我们就去考察有人工行为下的各种焊接手法和方法。这里就有一个很复杂的东西在里面，那就是焊接工艺；即然焊艺定不下来，我们就给它区分一下，在常用焊接里有单点点焊、连续断点点焊、连续平缝焊接、填角焊接、立缝焊接、仰焊、环缝焊等等。。。。。。搞清了各种焊方法，也就明白了要实现这些复杂的动作就要有一套可行的控制方式才行；在机械没有完全设计出来之前可以不做太多的控制方案思考，有一个大概的轮廓概念就行了，待机械结构做完，各方面的驱动功率确定下来之后再做详细的程序。焊枪是用常用的标准的焊枪，也就是说焊枪是随时可以更换下来的，也就要求我们要做到对焊枪的夹持部分进行快速锁定与松开。焊枪在焊接过程中要进行各种焊接姿态调整，那么机械手腕就要很灵活，在各个方位角度上都可调节。有了上面的基本要求和设定条件，方案推理也有了条理，接下来我们就把设计要求明确下来，设计方向就不会有太大的偏离了。
设计任务
设计要求： 机器人适用于焊接领域，可以完成各种焊接动作；为了机器人能适应各种焊接工艺，在线调整工艺快速，编制控制程序时采用柔性控制程序，自适应在线、离线示教程序；焊缝、焊池、焊道成像跟踪，自动调节焊机的各项参数。
机器人采用全伺服驱动，地面固定安装。六轴控制，各关节运动灵活，按工艺描述表设计各轴动作范围，尽量使机构紧凑，整体外形美观。工艺描述        六轴动作顺序        动作范围        速度范围        定位精度        驱动功率        电器元件        1轴（回旋）       　　 360度                        0.75Kw                2轴（大臂俯仰）        160度                        1.5Kw　2台                3轴（前臂俯仰）        210度                        0.5Kw                4轴（小臂旋转）        270度                        0.35Kw                5轴（手腕俯仰）        150度                        300Kw                6轴（手腕旋转）        360度                        200w
设计内容
机械设计：根据设计要求及工艺描述设计各关节的机械机构，确定各部件的材料和加工工艺；制作计算书，验算机械强度、驱动功率和给出最大抓（举）重量，各运动路径的惯量计算，位姿的控制计算。验算机器人各关键部件使用寿命。结合控制程序及电路制作机器人维修保养说明书。
程序控制设计：根据设计要求与机械工程师最后制定的工艺路线设计控制流程；结合机械结构与驱动、信号反馈方式，设计机器人运动程序；程序要具有自适应功能，自动定点跟踪，对焊机电流、电压实时监测，并自动调节；焊道、焊池用成像监测判别技术。设计电路图有了这样一个文件，我们就好设计了；那么我们首先就要做的是：绘制机器人动运简图，规划机器人运动轨迹，做好这些我们就可以进行机械机构的设计，同时可以考虑程序的线路图了。先做一个简图，来研究一下运动规迹。
当我们把机械运动简图画好后，一般的情况下是先对简图进行分析；虽然简图不能全部反映机械结构的组成，但是它却表现出了要设计的物体的总体轮廓。那么对于我们这个机器人的简图，我们从哪里着手分析才合理呢？首先，我们看一下设计任务书的内容。从任务书中知道，六个轴中有三个轴是做旋转运动的，其余作摆角运动。结合任务书，我们看一下简图，是不是第1轴、第4轴和第六轴是做转动的，也就是说我们要检查一下我们所画的简图是不是与任务书中的要求相符合，符合了也就代表我们的设计思路与要求（客户要求）相同，可以进行下一步工作，如果不同，就得重新画简图。从简图知道，机器人的手臂伸缩范围较大；如果把手臂全部伸直，而且我们假设地把它们看成同一钢体，这样就形成一端固定的悬臂梁。应用力学知识体系中的有关梁的分析我们知道，要搞清悬臂梁的变形量，首先要知道梁的重量和截面惯量。由简图知道，由于有多个关节连接，要知道截面形状和惯量不太容易，只有把所有的机构都设计完成后才会知道想求的参数。由简图看出，第二轴担负着手臂的上下运动，而且手臂又比较长，在运动的过程中必然存在着惯性冲量，也就是说，当大臂的运动速度很慢时，惯性就很小；如果速度加快，惯性就加大，这个惯性冲量是与速度有着线性关系；怎样保持一定的速度，又不让惯性随着变化呢？大家都知道，增加阻尼，可有效消除这种关系。这样，大家就可以理解简图上两个弹簧的用意了。即然是这样，那我们就从手腕开始设计。也说是大家所说的从上到下的设计方法。 设计手腕要考虑哪些问题呢？可以知道的是有一把焊枪，焊枪的重量不是很重，同时要有夹持焊枪的手爪。也就是说手腕在转动时的负载是不大的，选择驱动功率不大的元件就行了。要让手腕在360度范围内转动，而且后面紧跟着又有一个上下摆动的关节；手腕又是在机器人手臂的最前端，当然总体质量不能太重。用什么样的机构最好呢？下面我们考虑几个方案：1.如简图所示，采用行星齿轮传动。电机驱动太阳轮，行星轮绕太阳轮转动，内齿轮经行星轮减速与太阳轮反向运动，电机与太阳轮同轴安装。2.多级齿轮减速传，电机安装于手腕一侧。3.摆线针轮减速传动，电机与偏心轴同轴安装。
4.蜗轮蜗杆减速传动，电机有两种安装方式；一种与输出轴成90度安装，另一种与输出轴同轴线反向错位安装。
如上所述，还有很多种方式方法，到底选哪一种最好呢？这样我们就要做比较了。从上面的方案里看，第2种方法是不行的；第4种方法如果采用，手腕的结构就会很大，不利于机器人在运动时做精密定位。这样我们去除了两种方法，我们再比较一下第1种和第3种方法；
行星齿轮传动，传动比大，结构复杂，齿轮副配合有间隙，不能自锁。如果采用就得提高齿轮精度，由于是精密传动，齿轮材料也不能按常规齿轮选用材料，加工工艺相对常规齿轮相复杂的多。
摆线针轮传动，传动比大，结构复杂，传动间隙小，可以自锁。如果采用，手腕的尺寸不会太小，并且零件加工困难，精度不易保证。
比较各方面后，决定采用行星齿轮传动机械结构。行星齿轮在传动的过程中有装配间隙和机械磨损所造成的间隙；要消除这些机械间隙首先就要让齿轮副的配合间隙要小，齿轮材料经热处理后表面要耐磨，因此行星齿轮副的设计计算不能按常规行星齿轮的设计方法去计算。机器人的手腕是很灵活的关节，而且是要做正反两个方向的回转。怎么样安装电机是一个问题；行星齿轮传动机构与手腕俯仰关节连接是一个问题。
还有，手腕的运动速可能是非等速的；怎么样去控制电机？又怎么样去采集反馈信号？发出的控制信号到执行单元的过程中有没外部干扰？它来自哪里？
再有，就是手腕在运动过程中的精度；手腕在空间做相对运动，怎样去实现运动精度？影响运动精度的因素有哪些？在设计手腕这前一定要搞清楚影响手腕的各方面的因素及内容，问题得到解答后再真正开始手腕的设计。下面给出伺服电机的的技术参数：型号： MSMD04ZS1V 额定输出功率：400W 额定转矩：1.3 N.m 最大转矩：3.8 N.m 额定转速/最高转速：3000/5000 rpm 电机惯量（有制动器）：1.7×10-4Kg.m2 变压器容量：0.9 KVA 编码器：17位（分辨率：131072）. 7线制增量式/绝对式. 适配驱动器型号：MBDDT2210 位置控制接线图:

17位增量式/绝对式编码器接线图:

即然我们选用了行星齿轮传动，那么我们就要进行行星齿轮的相关计算。      首先选定模数，由于机器人手腕部分结构要求尽量的小，输出的转矩也相应不是很大，但是，它却会在正反两个方向上存在着高速换向的可能，也就是说在换向时齿轮要克服很大的惯性力，因此，模数的选择计算要按输出转矩的数倍来计算，也就是说：在按强度计算模数时，安全系数选大些。同时由于结构的限制，尽量选用小模数。有关齿轮的计算公式大家可以查阅《齿轮设计手册》。这里我选用模数为：ｍ＝1，选定了模数，下面就要计算传动比，有关行星齿轮传动的计算大家可查阅《齿轮设计手册》或《机械设计手册》内的《齿轮传动部分》，里面有详细的介绍和计算范例。在此不作介绍和引用。      行星齿轮传动，必定有一个结构是浮动的，在机器人手腕部分是不是也适用呢？哪一部分做输了出？哪一部分浮动？      首先，机器人手腕做360度转动，结构又比较小，再者就是它的输出部分是要有一个法兰，用来安装夹持执行部件的。
如果让行星架浮动，行星齿轮分布在太阳轮圆周上，让它浮动时，在运转过程中它不是绕定轴转动，也就是说它不满足输出法兰的转动条件。
现在我们考虑一下让内齿转动，法兰固定在内齿轮上，这样就可以保证法兰的转动条件。
下面给出手腕的结构图，无浮动部件，内齿轮转动。


展开全文
• 随着机器人技术的快速发展,机器人在各个领域中的作用越来越重要。通过对机器人运动控制系统的次开发可以实现对机器人的远程控制,并在此...本文的研究对象为四自由度串联机器人,研究了其运动控制系统次开发的问题.
• 仿生机器人制作之_三自由度机械手
• 第八章 操作臂的机械设计【（一）8.1-8.9...（）基于任务需求的设计1、自由度的数目（1）图8-1所示未操作臂以两种不同的方法对磨削工具进行定位。实际上只需要5个自由度（2）在一些任务中，当由主动定位装置来放置...
第八章 操作臂的机械设计【（一）8.1-8.9】（一）概述1、机器人系统的组成大体可分为四个部分（1）操作臂，包括它的内部或本体传感器；（2）末端执行器，或者叫做工具端；（3）外部传感器和执行器，比如视觉系统和反馈装置；（4）控制器；（二）基于任务需求的设计1、自由度的数目（1）图8-1所示未操作臂以两种不同的方法对磨削工具进行定位。实际上只需要5个自由度（2）在一些任务中，当由主动定位装置来放置零件时，则可以使用少于6个自由度的机器人。如图8-2，在计算圆管和末端执行器之间的自由度时，倾斜/转动工作台来放置焊接的零件，应该被视为2个自由度。这样在进行弧焊时，由于其工具端具有对称性，理论上只要3个自由度。（3）若零件自身具有对称轴，嘛呢也会减少操作臂所需要的自由度数目。2、工作空间（1）工作空间有时也被称为工作空间体积或工作空间包络。3、负载能力（1）操作臂的负载能力与结构尺寸、动力传递系统、驱动器有关。4、速度（1）对于特定任务，操作臂末端执行器的最大速度和总体循环时间是由很大区别的。通常加速和减速时间占据了大部分的循环时间。因此，除了最大速度，加速能力也很重要。5、重复精度和定位精度（1）通常可以在操作臂制造完成后进行精确的测量，或者在制作过程中保证公差。（三）运动学构形几乎所有的工业操作臂都采用腕部机构布局形式，前面3个关节确定腕关节原点的位置（即定位结构），后面三个关节轴相交于腕关节原点（即定向结构）。这样可以产生封闭的运动学解。另外，定位结构几乎都采用一种简单的运动学结构：连杆转角为0°或±90°，连杆长度不同，但偏距都为0。根据前三个关节（定位结构）的设计形式对操作臂的腕部进行简单的分类：1、笛卡尔操作臂（1）如图8-3，关节1到关节3都是移动副，且相互垂直，分别对应笛卡尔坐标的  轴（2）这类机器人由很高的结构刚度，因此可以制造大型机器人。通常称为龙门式机器人。（3）另一个优点是前三个关节式解耦的，避免了前三个关节出现运动学奇异点。（4）主要缺点，所有电缆和固定装置均须“内置”于机器人中，因此，所能完成的工作完全取决于本身的机械结构。2、铰接型操作臂（1）如图8-4，铰接型操作臂有时被称为关节型，肘型，拟人操作臂。这种类型的操作臂通常由2个“肩”关节（一个绕竖直轴旋转，一个改变相对于水平的仰角），1个“肘”关节（通常平行于俯仰关节）以及2个或者3个位于操作臂末端的腕关节组成。（2）此种操作臂减少了工作空间中的干涉，式操作臂能够到达指定的空间位置。他们的整体结构比笛卡尔操作臂小，可应用于工作空间较小的场合，成本较低。3、SCARA操作臂（1）如图8-5，SCARA有三个平行的旋转关节（平面内移动和定向），第四个移动关节可以使末端执行器垂直于该平面。（2）优点1：前三个关节不必支承操作臂或负载的任何重量。优点2：便于在连杆0中固定前两个关节的驱动器。驱动器可以做的较大，可以提供更大的速度，一般速度是铰接型机器人的10倍，适合执行平面内的任务。4、球面坐标型操作臂如图8-6，与铰接型操作臂相类似，但用移动关节代替了肘关节。移动连杆可以伸缩，缩回时，甚至可以“从后面伸出”。5、圆柱面坐标型操作臂如图8-7，由1个使手臂竖直运动的移动关节和1个带有竖直轴的旋转关节组成，另1个移动关节与旋转关节正交。6、腕关节（1）在实际中，很难制作出这种三轴正交且不受关节角度限制的腕关节。图8-8是这类腕关节的设计原理图，远端的驱动器通过几组锥齿轮来驱动这个机构。（2）如图1-4，许多机器人采用了三个相交，但不垂直的轴构成腕关节。然而由于不正相交，从而使腕部不能到达一些方位。这些方位描述为腕部的第三个轴不能进入的锥体。然而，这个腕关节能被安装在操作臂的连杆3上，这种情况下，连杆结构部分占据了这个圆锥，因此可能会阻碍操作臂运动，如图8-9（3）若第四个关节与第2、3个关节轴平行，也可以得到一个封闭形式的运动学解，如图8-10（4）典型的5自由度焊接机器人使用两轴腕关节确定方向，如图8-11，在安装工具时必须使其对称轴与关节5的轴正交。（四）工作空间属性的定量测量1、按照生成工作空间设计的效果（1）当具有相似的工作空间体积  时，制作笛卡尔操作臂比制作铰接型操作臂要消耗更多的材料。结构长度指标  越小越好（2）笛卡尔操作臂  最小值为3.0。铰接型操作臂  =0.62。2、设计良好条件的工作空间（1）操作臂离奇异点越远，操作臂越能均匀地在各个方向上移动和施力，即称为良好条件（2）笛卡尔质量矩阵  的特征根可以作为评判操作臂在各个笛卡尔方向的加速能力的方法（3）图8-2以图形的方式展示了平面两杆操作臂的特性。在工作空间的中间，椭球近似于球星，操作臂处于良好条件。但工作空间边界上椭球变扁，说明某些方向上加速困难（五）冗余机构于闭链机构1、微操作臂和其他冗余机构（1）微操作臂一般由几个安装在“传统”操作臂末端附近的快速而精确的自由度构成。主要用于完成惊喜的运动与力的控制。图8-13所示为两种7自由度的操作臂位形。（2）冗余自由度机器人的主要用途是在杂乱的工作环境中工作时，避免发生碰撞。2、闭环结构（1）闭环结构的好处，提高了机构的刚度。坏处，通常会减小关节的运动范围，从而减小了工作空间，如图8-14所示的Stewart机构，通过控制6个和基座相连的直线驱动器行程，实现“末端执行器”的位姿。每个驱动器的一端用2自由度的万象关节与基座相连，另一端用一个3自由度的球关节与末端执行器相连。（2）通常，闭环机构的自由度可以用式（8-9）求解（六）驱动方式1、驱动器布局（1）直接驱动布局，将驱动器的输出轴与关节直接相连。有点是没有传动元件与减速元件，关节精度与驱动器精度相同。（2）减速系统，大多数驱动器高转速，低扭矩，而机械臂需求是低转速，高扭矩，这就需要减速系统来进行转换。（3）传动系统，一般驱动器都比较重，所以靠近基座安装是比较合理的，这样操作臂的总体惯性将会明显下降，反过来也减小了驱动器的尺寸。为此需要传动系统将驱动器的运动传送给关节。2、减速系统和传动系统（1）第一类减速元件：齿轮。优点是结构紧凑，传动比大。觉电视额外引入了间隙与摩擦。（2）第二类减速元件：柔性带、钢缆、皮带。如图8-15（3）传动方案：普通丝杠或滚珠丝杠。如图8-16（七）刚度与变形典型的操作臂都不具备能够直接测量工具坐标系{T}位置的传感器，因此只能根据关节传感器的位置，通过正向运动学计算工具坐标系{T}的位置。所以希望在各种在和情况下对D-H的描述都是固定不变的。1、并联和串联的柔性元件2、轴3、齿轮因此，齿轮减速可以增大刚度  倍。4、带5、连杆（1）为了对连杆的刚度进行近似处理，将单连杆视为悬臂梁，计算其端点刚度，如图8-17。分为中空圆截面梁和方截面中空梁。（2）有限元技术可以用来更准确地估算更真实的结构元件的刚度。6、驱动器（1）液压缸；气缸（3）电动机：直流有刷电机，如图8-18；无刷电机；交流电机；步进电机（八）位置检测1、旋转光学编码器2、感应同步器：输出两个模拟信号，一个是轴转角的正弦信号，一个是余弦信号。轴的转角由这两个信号的相对幅值计算得到。一般比编码器可靠，但他的分辨率较低。3、电位器：最直接的位置检测形式。连接在电桥中，能够产生与轴角成正比的电压信号。缺点是分辨率低，电信号不好，对噪声敏感。4、转速计，能够输出与轴的转速成正比的模拟信号。这种数值微分会产生噪声和延时。（九）力检测1、用来测量操作臂末端执行器与其接触工作环境之间的接触力，此类装置大都使用由半导体或金属箔制作的检测元件，称为应变片。2、使用应变计测量力是依靠受压后的挠曲变形来实现的。因此，在设计力传感器时，首先要权衡刚度与灵敏度之间的关系，因为刚度较高的传感器一般灵敏度较低。3、传感器的刚度对过载保护装置也有影响，应变计可能会受到冲击载荷而损坏，所以必须具有过载保护装置，可以通过使用限位挡块避免传感器的损坏。4、设计传感器时，消除滞后现象是很重要的。若没有过载，大多数用于产生挠曲变形的金属具有很小的滞后。然而，发生挠曲变形位置附近，有螺丝连接，过盈配合、焊接关节等都会产生滞后。理想情况下，发生挠曲变形的部分及其复紧的部分应使用同一块金属制成。5、采用差分测量的办法可以提高力矩传感器的线性度和抗干扰能力。6、利用传感器的不同物理构形能消除由于温度效应和偏心力带来的影响。7、金属箔式应变计相对耐用，但整个量程范围只能产生很小的电阻变化。为了让其具有良好的动态测量范围，消除电缆和电路中的噪声是至关重要的。8、半导体应变计过载时非常容易损坏。优点是在给定应力下，能够产生相当于约70倍的金属箔式应变计的电阻变化。对于给定的动态测量范围，半导体应变计的信号处理工作相对简单例8.1如图8-5所示SCARA操作臂，连杆1和连杆2的长度均为L/2，移动关节3的行程为 ，为简单起见，不计馆街转角的限制，求  。当  为何值时，  最小，并求出最小的  。解答：长度和 工作空间是圆柱体 因此 %MATLAB代码
syms L x Q
L=10;%连杆长度
%L=20；
x = 0.1:0.01:30;
fun=@(x)((L+x)./((3.14.*L.^2.*x).^(1./3)));%设置函数
[x,fval] = fminbnd(fun,0,30)%寻找最小值
L=15;
x = 0.1:0.01:30;
Q = (L+x)./((3.14.*15.^2.*x).^(1./3));
plot(x,Q)所以  的最小值为1.29，当  时取得。例8.2用式（8-6）公式验证图8-14所示的Stewart机构确实具有6个自由度。解答：例8.3轴的扭转刚度是500.0Nt-m/rad，与齿轮转动装置中的输入端相连，  =10，输出齿轮（输入齿轮固定）的刚度是5000.0Nt-m/rad，求驱动系统的输出刚度。在具有多级传动的系统中，如果最后一级的传动比很大，那么在这级传动之前的刚度通常可以忽略。例8.4一个5X5X50cm的方截面连杆，壁厚1cm，由一组  =10的刚性齿轮驱动，输入齿轮由直径0.5cm、长30cm的轴驱动。试求当100Nt的力作用在杆端时，杆端的变形。（材料为钢材，  ）解答：至P204
展开全文
• 第三章 操作臂运动学【（一）3.1-3.10】（一）概述1、操作臂运动学：研究操作臂的运动特性...（）连杆描述（连杆长度 、连杆转角 ）1、连杆：操作臂可看成将刚体通过关节连接而成的运动链，将这些刚体称为连杆。2...
• （5）建立如下图所示的二自由度机械臂 P点坐标： P=Rot(theta2,‘z’)*[a;0;0]; E点坐标： E=P+Rot(theta2,‘z’)Rot(phi,‘z’)[b;0;0]; 若给定的E点坐标与实际利用上式求解的坐标一致则说明逆解正确 代码实现 (1)...
• 焊接机器人是提高生产效率，改善焊接质量的重要工具，而机器人的操作精度直接影响到机器人的应用水平。本文根据误差的来源分别对机器人的结构误差和力变形误差做了系统的研究，并且分别提出了补偿方案。 实验结果...
• ## 4自由度臂型机器人MATLAB仿真

万次阅读 多人点赞 2018-06-12 09:37:17
导师布置的小作业，建立4自由度机械臂，并对其进行...我按照实验室的科大宝宝二代机器人，建立了4自由度机械臂模型，规划其轨迹，让它写字。代码如下：clear L L(1) = Link([ 0 -0.3 0 pi/2 0]); L(2) = Link([ ...
• 上次我发了二自由度串联机器人的正解和反解的贴子，可能这个论坛的高手觉得太简单了，都问我做的是是不是并联机器人。 前几天我感到很羞愧，也知道在这个论坛一定不能班门弄斧，本来我想把这次做的东西在年前就贴...
• 文章目录前言一、方案确立、使用步骤1.引入库2.读入数据总结 前言 老板想做个大号的四足，让我先做个小的练练手，两套方案均基于树莓派。 一、方案确立 大致情况如下方链接所示。前面的动态图是基于ROS-kinectic...
• 以平面二自由度机器人为例子： from:http://blog.sina.com.cn/u/2707887295
• 机器人学之动力学笔记【10】—— 双旋转自由度机械臂1. conditions2. Velocity and acceleration propagations（上行运算）2.1 计算第一杆件2.2 计算第杆件3. Force and torque propagations（下行计算）4. Joint ...
• 机电系统的动力与运动的计算机仿真 -----------基于二自由度两连杆平面机器人系统仿真 马国锋 梁应海 周凯 武汉理工大学机电工程学院机械工程及自动化系 摘要平面两连杆机器人机械臂是一种简单的两自由度的机械装置...
• 来自国外某大学机器人课程的课后作业，以二自由度机械臂为例，详细描述了动力学辨识的基本过程，涉及到软件硬件的设计，对于刚入门机器人动力学的同学具有蛮大参考意义的！
• 转自：http://weibo.com/p/230418a16714bf0102vafv?from=page_100505_profile&wvr=6&mod=wenzhangmod 机器人的雅克比矩阵 以平面二自由度机器人为例子：
• 简介二自由度舵机云台是一款大扭矩、高性价比的小型云台，底部舵机的平面结构，增强了这个云台的负重能力。它可以在水平和垂直方向做二自由度运动，方便安装摄像头，可以实现图像监控、图像识别定位追踪；加装红外...
• DH参数法建立机器人的运动学正解运用DH参数法时坐标系建立的两个约定：(1)x_i与z_...alpha与theta的正方向约定为：下面举三个例子：a、平面二自由度机器人clear;clc;syms theta1 alpha1 a1 d1 theta2 alpha2 a2 d2 a...
• DH参数法建立机器人的运动学正解运用DH参数法时坐标系建立的两个约定：(1)x_i与z...alpha与theta的正方向约定为：下面举三个例子：a、平面二自由度机器人clear;clc;syms theta1 alpha1 a1 d1 theta2 alpha2 a2 d2 a ...
• SCARA机器人技术参数(1)负载额定5KG，不大于10KG(2)自由度4(3)运动参数大臂±120°(回转行程)，角速度额定...手腕升降200MM(升降行程)，线速度≤01M/S关键零部件设计计算各自由度电机的选择此机器人二自由度是平面...