今天想用matlab绘制机器人的工作空间,找了半天没找到对应的函数,只能用plot()一步一步画了
这个是机器人原型
下面是matlab代码
T(1) = Link([0 0 10 0]);
T(2) = Link([0 0 5 0]);
T(3) = Link([0 0 0 0]);%原本是两轴机器人,但是为了显示末端,在加一个轴
T(1).qlim = [0 pi];
T(2).qlim = [-pi/2 pi];
ws = SerialLink(T,'name','ws');
n=1;
for i = 0:0.1:pi
for j = -pi/2:0.1:pi %遍历所有可能的角度
%同一个机器人的多个图像不能同时显示,这里需要克隆多个名字不同的机器人
clone = SerialLink(T,'name',strcat('clone',num2str(n)));
%在同一个窗口,绘制多个机器人
clone.plot([i j 0],'workspace',[-16 16 -16 16 0 2],'view','top','noname','noshading','nowrist','noshadow','jointdiam',2,'linkcolor','g');
n = n+1;
hold on
end
end
其中
‘workspace’,[xmn xmx ymn ymx zmn zmx] 矩形环境空间,根据实际情况选择参数
‘view’,‘top’ 初始观察方向,
‘noname’ 不显示机器人名字
‘noshading’ 不用光源,节约资源
‘nowrist’ 不显示坐标系
‘noshadow’ 不显示阴影
‘jointdiam’,2 关节高度
‘linkcolor’,‘g’ 关节轴颜色,绿色
结果展示
与答案对比
最后总结
这种方法只适用于简单的机器人,对于多关节的机器人工作空间的绘制会十分缓慢,建议使用robodk
而且我的代码克隆了很多机器人,导致后面越画越慢(不过之后我使用delete(clone)好像也没啥用)
----------------------------------------------------------以上是分割线--------------------------------------------------------
现在看看之前的代码好蠢,其实可以用正运动学直接计算出末端坐标,然后用scatter3(x,y,z,’.’)描点就好了,下面是代码
clear
T(1) = Link([0 0 10 0]);
T(2) = Link([0 0 5 0]);
T(1).qlim = [0 pi];
T(2).qlim = [-pi/2 pi];
ws = SerialLink(T,'name','ws');
for i = 0:0.1:pi
for j = -pi/2:0.1:pi
T = ws.fkine([i j]);
qn = T*[0;0;0;1];
ws.plot([i j]);
plot3(qn(1),qn(2),qn(3),'.');
hold on
end
end
这样速度很快,也可以清晰地显示机器人的运动过程。
下面是结果