机器人空间是指机器人末端执行器运动描述参考点所能达到的空间点的集合。在规划机器人任务时,往往需要首先知道机器人的可达空间。所以我们可以用蒙特卡洛随机采样的方法,对各个关节角在关节范围内进行随机选取,取大量的采样点进行计算,通过正运动学求解, 即可得到相应的末端位置,同构绘制大量末端位置点即可可视化机器人工作空间。
接下来,我们将用蒙特卡罗法可视化SCARA机器人的工作空间。

SCARA机器人有三个转动关节和一个移动关节。并且关节坐标系中所有的Z轴相互平行。由此,建立该机器人的D-H参数表:

同时,我们假设
% 设置关节范围
q1_lim = [-pi,pi];
q2_lim = [-pi,pi];
q3_lim = [-pi,pi];
q4_lim = [0,100];
% theta d a alpha offset
% 机器人各连杆DH参数
% 定义各个连杆,默认为转动关节
% theta d a alpha
L(1)=Link([0 200 0 0], 'modified'); L(1).qlim=q1_lim;
L(2)=Link([0 40 400 0], 'modified'); L(2).qlim=q2_lim;
L(3)=Link([0 0 250 0], 'modified'); L(3).qlim=q3_lim;
% 移动关节需要特别指定关节类型--jointtype
L(4)=Link([0 0 0 0], 'modified'); L(4).qlim=q4_lim; L(4).jointtype='P';
% 把s所有连杆串联在一起
Scara=SerialLink(L,'name','Scara');
% 定义机器人工具坐标的变换
Scara.tool = transl(0 ,0 ,100);
% 蒙特卡洛法求机器人工作空间
N=2000; %随机次数
theta1=q1_lim(1)+diff(q1_lim)*rand(N,1);
theta2=q2_lim(1)+diff(q2_lim)*rand(N,1);
theta3=q3_lim(1)+diff(q3_lim)*rand(N,1);
theta4=q4_lim(1)+diff(q4_lim)*rand(N,1);
pos = {1,N};
% 正运动学求解
for i=1:N
pos{i}=Scara.fkine([theta1(i) theta2(i) theta3(i) theta4(i)]);
end
% 绘图
figure
Scara.plot([0 pi/2 0 0],'jointdiam',1)
axis equal;
hold on;
for i=1:N
plot3(pos{i}.t(1),pos{i}.t(2),pos{i}.t(3),'r.');
hold on;
end
grid off

观察上图知,通过大量随机的选取机器人的关节工作区间,从而近似获得其工作区间。图中红色区域即为SCARA机器人的工作空间。(本例中选取的随机次数为2000,一般随机次数越大,结果越精确,不过仿真时间也越长)。由于现实生活中的某些条件限制(如障碍物等),关节的工作范围受到一定限制,所以选取关节的工作区间的选取需要同实际相结合。