matlab机器人工具箱的使用(4)

本文介绍了如何在Matlab中使用机器人工具箱生成随机关节变量,并通过正运动学转换为三维坐标。通过设定关节限制并结合DH参数,绘制出30000个点的工作空间分布,同时展示了将机械臂模型融入绘图过程的完整代码。

学习目标:

matlab机器人工具箱的使用(4)

学习内容:

1、工作空间可视化

学习记录:

思路:
随机生成一个关节变量-----fkine------>变换矩阵------transl--------->三维坐标

  • rand函数

rand是在(0,1)内生成一个随机数
在[m,n]内随机生成一个数字:m+rand*(m-n)
随机关节空间变量:q=qmin+rand*(qmax-qmin)

  • Link.qlim

限制关节角度的

本案例使用的《机器人控制技术》书中的机械臂模型,前面已经说明了它的DH参数。
在这里插入图片描述

%采用弧度制
L(1).qlim=[-180,180]/180*pi;
L(2).qlim=[-145,65]/180*pi;
L(3).qlim=[-65,220]/180*pi;
L(4).qlim=[-180,180]/180*pi;
L(5).qlim=[-135,135]/180*pi;
L(6).qlim=[-360,360]/180*pi;

可以验证一下设置的是否正确:

>> L(1).qlim

ans =

   -3.1416    3.1416

绘制工作空间:
首先定义一个30000为迭代次数,P是一个[30000,3]的矩阵,事先声明一个这也的0矩阵可以加快运行速度。L(1).qlim(2)是最大限制,L(1).qlim(1)是最小限制,这就生成了关节随机变量,再组合成完整的关节随机变量,通过正运动学函数得到变换矩阵,在提取它的变换矩阵,赋值给P得到30000×3的位置矩阵。最后用plot函数绘制出点来。

num=30000;
P=zeros(num,3);
for i =1:num
    q1=L(1).qlim(1)+rand*(  L(1).qlim(2) - L(1).qlim(1)  );
    q2=L(2).qlim(1)+rand*(  L(2).qlim(2) - L(2).qlim(1)  );
    q3=L(3).qlim(1)+rand*(  L(3).qlim(2) - L(3).qlim(1)  );
    q4=L(4).qlim(1)+rand*(  L(4).qlim(2) - L(4).qlim(1)  );
    q5=L(5).qlim(1)+rand*(  L(5).qlim(2) - L(5).qlim(1)  );
    q6=L(6).qlim(1)+rand*(  L(6).qlim(2) - L(6).qlim(1)  );
    
    q=[q1 q2 q3 q4 q5 q6];
    T=Six_dof.fkine(q);
    P(i,:)=transl(T);
end

plot3(P(:,1),P(:,2),P(:,3),'b.','markersize',1);

最后加入这些可以把机械臂也放进去。

hold on
grid on
daspect([1 1 1]);
view([45 45]);
Six_dof.plot([0 0 0 0 0 0])

完整代码:

%1.standard DH 课本6R
L(1)=Link('revolute','d',0.504,'a',0.17,'alpha',pi/2);
L(2)=Link('revolute','d',0,'a',0.78,'alpha',0,'offset',pi/2);
L(3)=Link('revolute','d',0,'a',0.14,'alpha',pi/2);
L(4)=Link('revolute','d',1.06,'a',0,'alpha',pi/2,'offset',pi);
L(5)=Link('revolute','d',0,'a',0,'alpha',pi/2,'offset',pi);
L(6)=Link('revolute','d',0.125,'a',0,'alpha',0);
Six_dof = SerialLink(L,'name','6/-dof');
%Five_dof.base=transl(0,0,0.28);

%关节限制
L(1).qlim=[-180,180]/180*pi;
L(2).qlim=[-145,65]/180*pi;
L(3).qlim=[-65,220]/180*pi;
L(4).qlim=[-180,180]/180*pi;
L(5).qlim=[-135,135]/180*pi;
L(6).qlim=[-360,360]/180*pi;

num=30000;
P=zeros(num,3);
for i =1:num
    q1=L(1).qlim(1)+rand*(  L(1).qlim(2) - L(1).qlim(1)  );
    q2=L(2).qlim(1)+rand*(  L(2).qlim(2) - L(2).qlim(1)  );
    q3=L(3).qlim(1)+rand*(  L(3).qlim(2) - L(3).qlim(1)  );
    q4=L(4).qlim(1)+rand*(  L(4).qlim(2) - L(4).qlim(1)  );
    q5=L(5).qlim(1)+rand*(  L(5).qlim(2) - L(5).qlim(1)  );
    q6=L(6).qlim(1)+rand*(  L(6).qlim(2) - L(6).qlim(1)  );
    
    q=[q1 q2 q3 q4 q5 q6];
    T=Six_dof.fkine(q);
    P(i,:)=transl(T);
end

plot3(P(:,1),P(:,2),P(:,3),'b.','markersize',1);


%示教
%Six_dof.teach

在这里插入图片描述
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值