Matlab机器人工具箱(2)——预分析(可达空间与可操作性的可视化)

  • 前言
  • 1、蒙特卡洛法可视化机器人可达空间
  • 2、机器人的可操作性可视化
  • 总结

前言

上一篇博客Matlab机器人工具箱(1)——机器人的建立、绘制与正逆运动学介绍了matlab RTB 臂型机器人的基本操作,本篇博客展示两个常用的预分析方法,包括蒙特卡洛法可视化机器人可达空间  机器人的可操作性可视化

1、蒙特卡洛法可视化机器人可达空间

在规划机器人任务时,往往需要首先知道机器人的可达空间。本例用蒙特卡洛随机采样的方法,对各个关节角在关节范围内进行随机选取,取大量的采样点进行计算,通过正运动学求解,即可得到相应的末端位置,绘制后即可可视化机器人工作空间。
以上一篇博客中的Scara机器人为例:
在这里插入图片描述

代码在这里:

clear ; clc; close all;
%       theta    d        a        alpha     offset
% 机器人各连杆DH参数
d1 = 0;
d2 = 86;
d3 = -92;
% 由于关节4为移动关节,故d4为变量,theta4为常量
theta4 = 0;

a1 = 400;
a2 = 250;
a3 = 0;
a4 = 0;

alpha1 = 0 / 180 * pi;
alpha2 = 0 / 180 * pi;
alpha3 = 180 / 180 * pi;
alpha4 = 0 / 180 * pi;
% 关节限制
q1_lim = [-180,180];   q1_lim= deg2rad(q1_lim);
q2_lim = [-180 ,180];  q2_lim= deg2rad(q2_lim);
q3_lim = [-180 ,180];  q3_lim= deg2rad(q3_lim);
q4_lim = [0 ,180];       
% 定义各个连杆,默认为转动关节
%           theta      d        a        alpha 
L(1)=Link([0         d1      a1      alpha1]); L(1).qlim=q1_lim;
L(2)=Link([0         d2      a2      alpha2]); L(2).qlim=q2_lim; L(2).offset=pi/2;
L(3)=Link([0         d3      a3      alpha3]); L(3).qlim=q3_lim;
% 移动关节需要特别指定关节类型--jointtype
L(4)=Link([theta4  0       a4      alpha4]); L(4).qlim=q4_lim; L(4).jointtype='P';
% 把上述连杆“串起来”
Scara=SerialLink(L,'name','Scara');
% 定义机器人基坐标和工具坐标的变换
Scara.base = transl(0 ,0 ,305);
Scara.tool = transl(0 ,0 ,100);
% 蒙特卡洛法求机器人工作空间
N=3000;                                               %随机次数
theta1=q1_lim(1)+diff(q1_lim)*rand(N,1); %关节1限制
theta2=q2_lim(1)+diff(q2_lim)*rand(N,1); %关节2限制
theta3=q3_lim(1)+diff(q3_lim)*rand(N,1); %关节3限制
theta4=q4_lim(1)+diff(q4_lim)*rand(N,1); %关节4限制
pos = {1,N};
% 正运动学求解
for i=1:N
    pos{i}=Scara.fkine([theta1(i) theta2(i) theta3(i) theta4(i)]);
end
% 绘图
figure
Scara.plot([0 0 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
view(20,30)

2、机器人的可操作性可视化

评价机器人的可操作性一般看雅克比的条件数,可视化方法,即绘制速度可操作性椭球
这里采用RTB自带的puma560机器人进行举例:

clear;clc;close all;
% 载入RTB自带的puma560机器人
mdl_puma560;
q = [0 pi/3 pi/6 0 pi/3 pi/4];
J = p560.jacob0(q);
% 线速度的可操作性椭球
figure
plot_ellipse( J(1:3,:)*J(1:3,:)' )
xlabel('x');ylabel('y');zlabel('z')
% 角速度的可操作性椭球
figure
plot_ellipse( J(4:6,:)*J(4:6,:)' )
xlabel('x');ylabel('y');zlabel('z')
% 可操作性度量
p560.maniplty(q)

线速度的可操作性椭球
在这里插入图片描述

角速度的可操作性椭球
在这里插入图片描述
输出:

Manipulability: translation 0.0358079, rotation 2.44949

这里,可操作性度量与椭球的体积成正比。

总结

本篇文章主要对机器人进行预分析,可视化其工作空间和可操作性,以避免规划路径时的错误和偏差。一下篇博客将开始机器人轨迹规划的讲解。Matlab机器人工具箱(3)——轨迹规划