matlab实现PUMA机器人的工作空间
PUMA机器人的工作空间主要有前3个关节决定,后3个关节决定姿态。
程序编写好了,请看运行结果!
步长为20度
步长为10度
步长为5度
步长为3度
步长为2度
步长为5度时的XY平面
步长为5度时的XZ,YZ平面
编写时的界面,为运行
源代码如下:
function varargout = mypuma(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @mypuma_OpeningFcn, ...
'gui_OutputFcn', @mypuma_OutputFcn, ...
'gui_LayoutFcn', [], ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
handles.output = hObject;
guidata(hObject, handles);
function varargout = mypuma_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;
%步长为20度时的工作空间,2个for循环就搞定
function pushbutton1_Callback(hObject, eventdata, handles)
hold off;
for a=(-160:20:160)*pi/180
for b=(-225:20:45)*pi/180
x=431.8*cos(b)*cos(a)-149.09*sin(a);
y=431.8*cos(b)*sin(a)+cos(a)*149.09;
z=-431.8*sin(b);
plot3(x,y,z,'b.');
hold on;
grid on;
end
end
title('PUMA560 20deg 08S008103 ');
%步长10度时的工作空间,2个for循环就搞定
function pushbutton2_Callback(hObject, eventdata, handles) hold off;
a2=431.8;
d2=149.09;
for a=(-160:10:160)*pi/180
for b=(-225:10:45)*pi/180
x=431.8*cos(b)*cos(a)-149.09*sin(a);
y=431.8*cos(b)*sin(a)+cos(a)*149.09;
z=-431.8*sin(b);
plot3(x,y,z,'r.');
hold on;
grid on;
end
end
title('PUMA560 10deg 08S008103 ');
%步长为5度时的工作空间,2个for循环就搞定
function pushbutton3_Callback(hObject, eventdata, handles) hold off;
a2=431.8;
d2=149.09;
for a=(-160:5:160)*pi/180
for b=(-225:5:45)*pi/180
x=431.8*cos(b)*cos(a)-149.09*sin(a);
y=431.8*cos(b)*sin(a)+cos(a)*149.09;
z=-431.8*sin(b);
plot3(x,y,z,'g.');
hold on;
grid on;
end
end
title('PUMA560 5deg 08S008103 ');
%步长为3度时的工作空间,2个for循环就搞定
function pushbutton7_Callback(hObject, eventdata, handles) hold off;
for a=(-160:3:160)*pi/180
for b=(-225:3:45)*pi/180
x=431.8*cos(b)*cos(a)-149.09*sin(a);
y=431.8*cos(b)*sin(a)+cos(a)*149.09;
z=-431.8*sin(b);
plot3(x,y,z,'b.');
hold on;
grid on;
end
end
title('PUMA560 3deg 08S008103 ');
%步长为2度时的工作空间,2个for循环就搞定
function pushbutton8_Callback(hObject, eventdata, handles) hold off;
for a=(-160:2:160)*pi/180
for b=(-225:2:45)*pi/180
x=431.8*cos(b)*cos(a)-149.09*sin(a);
y=431.8*cos(b)*sin(a)+cos(a)*149.09;
z=-431.8*sin(b);
plot3(x,y,z,'b.');
hold on;
grid on;
end
end
title('PUMA560 2deg 08S008103 ');
%步长为5度时的xy平面
function pushbutton4_Callback(hObject, eventdata, handles) hold off;
a2=431.8;
d2=149.09;
for a=(-160:5:160)*pi/180
for b=(-225:5:45)*pi/180
x=431.8*cos(b)*cos(a)-149.09*sin(a);
y=431.8*cos(b)*sin(a)+cos(a)*149.09;
z=-431.8*sin(b);
plot(x,y,'g.');
hold on;
grid on;
end
end
title('PUMA560 5degXY 08S008103 ');
%步长为5度时的xz平面
function pushbutton5_Callback(hObject, eventdata, handles) hold off;
a2=431.8;
d2=149.09;
for a=(-160:5:160)*pi/180
for b=(-225:5:45)*pi/180
x=431.8*cos(b)*cos(a)-149.09*sin(a);
y=431.8*cos(b)*sin(a)+cos(a)*149.09;
z=-431.8*sin(b);
plot(x,z,'g.');
hold on;
grid on;
end
end
title('PUMA560 5degXZ 08S008103');
%步长为5度时的yz平面
function pushbutton6_Callback(hObject, eventdata, handles) hold off;
a2=431.8;
d2=149.09;
for a=(-160:5:160)*pi/180
for b=(-225:5:45)*pi/180
x=431.8*cos(b)*cos(a)-149.09*sin(a);
y=431.8*cos(b)*sin(a)+cos(a)*149.09;
z=-431.8*sin(b);
plot(y,z,'g.');
hold on;
grid on;
end
end
title('PUMA560 5degY-Z 08S008103 ');。