• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

Matlab求解机械臂可达工作空间(动画版本)(基于robotics-toolbox)

人工智能 跃动的风 2458次浏览 0个评论

1、做了一个可视化的蒙特卡洛求解工作空间的程序

在这里插入图片描述

代码:(注意9和10两个版本的toolbox代码有区别)

%arm_solve.m
%机械臂可达空间动画求解
%using  Robotic Toolbox 9.10

clc;
clear;
L(1) = Link([0,0.08,0,-pi/2]);
L(2) = Link([0,0.455,0,pi/2]);
L(3) = Link([0,0.0,0,-pi/2]);
L(4) = Link([0,0.145,0,pi/2]);
L(1).qlim=[0,pi/2];
L(2).qlim=[-pi/2,pi/2];
L(3).qlim=[-pi/2,pi/2];
L(4).qlim=[-pi,pi];
base=[ 1 0 0 0;0 0 -1 0;0 1 0 0;0 0 0 1];

four_arm = SerialLink(L,'name','fourarm','base',base);

teach(four_arm); 
four_arm.plot([0 0 pi/3 0])
hold on;
N=30000;    %随机次数

    %关节角度限制
limitmax_1 = 0.0;
limitmin_1 = 90.0;
limitmax_2 = -90.0;
limitmin_2 = 90.0;
limitmax_3 = -90.0;
limitmin_3 = 90.0;
limitmax_4 = -180.0;
limitmin_4 = 180.0;

theta1=(limitmin_1+(limitmax_1-limitmin_1)*rand(N,1))*pi/180; %关节1限制
theta2=(limitmin_2+(limitmax_2-limitmin_2)*rand(N,1))*pi/180; %关节2限制
theta3=(limitmin_3+(limitmax_3-limitmin_3)*rand(N,1))*pi/180; %关节3限制
theta4=(limitmin_4+(limitmax_4-limitmin_4)*rand(N,1))*pi/180; %关节4限制

for n=1:1:3000
qq=[theta1(n),theta2(n),theta3(n),theta4(n)];
four_arm.plot(qq);%动画显示
Mricx=four_arm.fkine(qq);
plot3(Mricx(1,4),Mricx(2,4),Mricx(3,4),'b.','MarkerSize',0.5);%画出落点
hold on;
end

%arm_solve.m
%机械臂可达空间动画求解
%using  Robotic Toolbox 10.4
%update 2020.1
clc;
clear;
L(1) = Link([0,0.08,0,-pi/2]);
L(2) = Link([0,0.455,0,pi/2]);
L(3) = Link([0,0.0,0,-pi/2]);
L(4) = Link([0,0.145,0,pi/2]);
L(1).qlim=[0,pi/2];
L(2).qlim=[-pi/2,pi/2];
L(3).qlim=[-pi/2,pi/2];
L(4).qlim=[-pi,pi];
base=[ 1 0 0 0;0 0 -1 0;0 1 0 0;0 0 0 1];

four_arm = SerialLink(L,'name','fourarm','base',base);

teach(four_arm); 
four_arm.plot([0 0 pi/3 0])
hold on;
N=30000;    %随机次数

    %关节角度限制
limitmax_1 = 0.0;
limitmin_1 = 90.0;
limitmax_2 = -90.0;
limitmin_2 = 90.0;
limitmax_3 = -90.0;
limitmin_3 = 90.0;
limitmax_4 = -180.0;
limitmin_4 = 180.0;

theta1=(limitmin_1+(limitmax_1-limitmin_1)*rand(N,1))*pi/180; %关节1限制
theta2=(limitmin_2+(limitmax_2-limitmin_2)*rand(N,1))*pi/180; %关节2限制
theta3=(limitmin_3+(limitmax_3-limitmin_3)*rand(N,1))*pi/180; %关节3限制
theta4=(limitmin_4+(limitmax_4-limitmin_4)*rand(N,1))*pi/180; %关节4限制

for n=1:1:3000
qq=[theta1(n),theta2(n),theta3(n),theta4(n)];
four_arm.plot(qq);%动画显示
Mricx=four_arm.fkine(qq);
plot3(Mricx.t(1),Mricx.t(2),Mricx.t(3),'b.','MarkerSize',0.5);%画出落点
hold on;
end






2、当然上面那个还是太慢了,真正想要迅速得到结果还是用这个整体矩阵求解比较方便,1s就有结果。

在这里插入图片描述

%机械臂可达空间迅速求解
% Robotic Toolbox 9.10

clc;
clear;
L(1) = Link([0,0.08,0,-pi/2]);
L(2) = Link([0,0.455,0,pi/2]);
L(3) = Link([0,0.0,0,-pi/2]);
L(4) = Link([0,0.145,0,pi/2]);
L(1).qlim=[0,pi/2];
L(2).qlim=[-pi/2,pi/2];
L(3).qlim=[-pi/2,pi/2];
L(4).qlim=[-pi,pi];
base=[ 1 0 0 0;0 0 -1 0;0 1 0 0;0 0 0 1];

four_arm = SerialLink(L,'name','fourarm','base',base);

teach(four_arm); 
four_arm.plot([0 0 pi/3 0])
hold on;
N=30000;    %随机次数

    %关节角度限制
limitmax_1 = 0.0;
limitmin_1 = 90.0;
limitmax_2 = -90.0;
limitmin_2 = 90.0;
limitmax_3 = -90.0;
limitmin_3 = 90.0;
limitmax_4 = -180.0;
limitmin_4 = 180.0;

theta1=(limitmin_1+(limitmax_1-limitmin_1)*rand(N,1))*pi/180; %关节1限制
theta2=(limitmin_2+(limitmax_2-limitmin_2)*rand(N,1))*pi/180; %关节2限制
theta3=(limitmin_3+(limitmax_3-limitmin_3)*rand(N,1))*pi/180; %关节3限制
theta4=(limitmin_4+(limitmax_4-limitmin_4)*rand(N,1))*pi/180; %关节4限制


qq=[theta1,theta2,theta3,theta4];

Mricx=four_arm.fkine(qq);

x=reshape(Mricx(1,4,:),N,1);
y=reshape(Mricx(2,4,:),N,1);
z=reshape(Mricx(3,4,:),N,1);
plot3(x,y,z,'b.','MarkerSize',0.5);%画出落点
hold on;


%机械臂可达空间迅速求解
% Robotic Toolbox 10.4

clc;
clear;
L(1) = Link([0,0.08,0,-pi/2]);
L(2) = Link([0,0.455,0,pi/2]);
L(3) = Link([0,0.0,0,-pi/2]);
L(4) = Link([0,0.145,0,pi/2]);
L(1).qlim=[0,pi/2];
L(2).qlim=[-pi/2,pi/2];
L(3).qlim=[-pi/2,pi/2];
L(4).qlim=[-pi,pi];
base=[ 1 0 0 0;0 0 -1 0;0 1 0 0;0 0 0 1];

four_arm = SerialLink(L,'name','fourarm','base',base);

teach(four_arm); 
four_arm.plot([0 0 pi/3 0])
hold on;
N=30000;    %随机次数

    %关节角度限制
limitmax_1 = 0.0;
limitmin_1 = 90.0;
limitmax_2 = -90.0;
limitmin_2 = 90.0;
limitmax_3 = -90.0;
limitmin_3 = 90.0;
limitmax_4 = -180.0;
limitmin_4 = 180.0;

theta1=(limitmin_1+(limitmax_1-limitmin_1)*rand(N,1))*pi/180; %关节1限制
theta2=(limitmin_2+(limitmax_2-limitmin_2)*rand(N,1))*pi/180; %关节2限制
theta3=(limitmin_3+(limitmax_3-limitmin_3)*rand(N,1))*pi/180; %关节3限制
theta4=(limitmin_4+(limitmax_4-limitmin_4)*rand(N,1))*pi/180; %关节4限制


qq=[theta1,theta2,theta3,theta4];

Mricx=four_arm.fkine(qq);
X=zeros(N,1);
Y=zeros(N,1);
Z=zeros(N,1);
for n=1:1:N
    X(n)=Mricx(n).t(1);
    Y(n)=Mricx(n).t(2);
    Z(n)=Mricx(n).t(3);

end
plot3(X,Y,Z,'b.','MarkerSize',0.5);%画出落点
hold on;



开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明Matlab求解机械臂可达工作空间(动画版本)(基于robotics-toolbox)
喜欢 (0)

您必须 登录 才能发表评论!

加载中……