机器人工作空间分析

基于蒙特卡罗法和数值法的机器人工作空间分析

引言

  机器人工作空间指的是机器人末端执行器运动描述参考点所能达到的空间点的集合。这个空间点的集合一般用水平面和垂直面的投影来表示,以描述机器人在执行任务时能够到达的区域。机器人工作空间的形状和大小对于机器人的应用至关重要,因为它决定了机器人能够完成哪些任务以及任务执行的效率和准确性。

蒙特卡罗法

  采用蒙特卡罗法计算工作空间,主要思想是通过各个关节在关节角限位条件下随机选取指定采样点,并进行正向运动学仿真函数求解对应的末端执行器工作位置,从而近似获得其工作区间。
其基本步骤为:
  (1)各个关节在关节角限位条件下随机产生关节变量,关节变量生成公式如下:
在这里插入图片描述

式中:Pmin为采用点最小值;Pmax为采用点最大值;r为0至1的随机数。
  (2)将步骤(1)中的关节变量代入正向运动学方程,并求解出在基坐标系中的位置向量,如下公式:
在这里插入图片描述

  (3)进行正向运动学仿真函数求解对应的末端执行器工作位置,从而近似获得其在空间中的点位,并进行输出,重复步骤(1)、(2),直到输出所有采样点。

  下图为采用matlab软件生成的机器人空间可视化结果与其在不同视角投影图,从随机采样点可以看出,六轴机器人在X轴方向行程为2000mm,在Y轴方向行程为2000mm,在Z轴方向行程为2000mm。从图中可看出机器人工作空间为一个半径为1000mm的球型。
图1 机器人可达工作空间及在XY、YZ、XZ直角坐标系投影
             图1 机器人可达工作空间及在XY、YZ、XZ直角坐标系投影

代码实现

clc;
clear;
 
%% 准备
    %保留精度
    format short;
    
    %角度转换
    du=pi/180;  %度
    radian=180/pi; %弧度
    
    %模型导入
    mdl_puma560
 
%% 参数
    %关节角限位
    q1_s=-180; q1_end=180;
    q2_s=0;    q2_end=90;
    q3_s=-90;  q3_end=90;
    q4_s=-180; q4_end=180;
    q5_s=-90;  q5_end=90;
    q6_s=0;    q6_end=360;
    
    %计算点数
    num=100000;
 
%% 求取工作空间
    %设置轴关节随机分布,轴6不对工作范围产生影响,设置为0
    q1_rand = q1_s + rand(num,1)*(q1_end - q1_s);%rand产生num行1列,在0~1之间的随机数
    q2_rand = q2_s + rand(num,1)*(q2_end - q2_s);
    q3_rand = q3_s + rand(num,1)*(q3_end - q3_s);
    q4_rand = q4_s + rand(num,1)*(q4_end - q4_s);
    q5_rand = q5_s + rand(num,1)*(q5_end - q5_s);
    q6_rand = rand(num,1)*0;
    q = [q1_rand q2_rand q3_rand q4_rand q5_rand q6_rand]*du;
    
    %正运动学计算工作空间
    tic;
    T_cell = cell(num,1);
    for i=1:1:num
        [T_cell{i}]=p560.fkine(q(i,:));%正向运动学仿真函数
    end
    %[T_cell{:,1}]=p560.fkine(q);%正向运动学仿真函数
    disp(['运行时间:',num2str(toc)]);
 
 %% 分析结果
    %绘制工作空间
    t1=clock;
    figure('name','机械臂工作空间')
    hold on
    plotopt = {'noraise', 'nowrist', 'nojaxes', 'delay',0};
    p560.plot([0 30*du 0 0 40*du 0], plotopt{:});
     figure_x=zeros(num,1);
     figure_y=zeros(num,1);
     figure_z=zeros(num,1);
     for cout=1:1:num
         figure_x(cout,1)=T_cell{cout}(1,4);
         figure_y(cout,1)=T_cell{cout}(2,4);
         figure_z(cout,1)=T_cell{cout}(3,4);
     end
     plot3(figure_x,figure_y,figure_z,'r.','MarkerSize',3);
     hold off
     disp(['绘制工作空间运行时间:',num2str(etime(clock,t1))]);  
     
     %获取X,Y,Z空间坐标范围
     Point_range=[min(figure_x) max(figure_x) min(figure_y) max(figure_y) min(figure_z) max(figure_z)];


数值法

   数值法进行机器人全工作空间的绘制,具体流程为:首先是设置各关节角度限制,然后以某一步距值对各关节分别进行累加并计算正解获得末端点位置,当各关节都到达最大限制角度后停止计算,最后对获得的所有末端点进行处理绘制出机器人的边界曲线,根据这些边界曲线可以绘制出代表机器人的工作空间的边界曲面。
  数值法在理论上相对简单,但它可能无法完美地描述机构的特性,特别是对于具有复杂运动特性的机器人。

代码实现

%六轴机械臂工作空间计算
clc;
clear;
format short;%保留精度
 
%角度转换
du=pi/180;  %度
radian=180/pi; %弧度
 
%% 模型导入
mdl_puma560
 
%% 求取工作空间
    %关节角限位
    q1_s=-180; q1_end=180;
    q2_s=0;    q2_end=90;
    q3_s=-90;  q3_end=90;
    q4_s=-180; q4_end=180;
    q5_s=-90;  q5_end=90;
    q6_s=0;    q6_end=360;
    
    %设置step
    %step越大,点越稀疏,运行时间越快
    step=20;%计算步距
    step1= (q1_end -q1_s) / step;
    step2= (q2_end -q2_s) / step;
    step3= (q3_end -q3_s) / step;
    step4= (q4_end -q4_s) / step;
    step5= (q5_end -q5_s) / step;
    step6= (q6_end -q6_s) / step;
    
    %计算工作空间
    tic;%tic1
    i=1;
    T = zeros(3,1);
    T_x = zeros(1,step1*step2*step3*step4*step5);
    T_y = zeros(1,step1*step2*step3*step4*step5);
    T_z = zeros(1,step1*step2*step3*step4*step5);  
    for  q1=q1_s:step:q1_end
        for  q2=q2_s:step:q2_end
              for  q3=q3_s:step:q3_end
                  for  q4=q4_s:step:q4_end
                      for q5=q5_s:step:q5_end
                              T=p560.fkine([q1*du q2*du q3*du q4*du q5*du 0]);%正向运动学仿真函数
                              T_x(1,i) = T(1,4); 
                              T_y(1,i) = T(2,4); 
                              T_z(1,i) = T(3,4); 
                              i=i+1;
                      end
                 end
             end
        end 
    end
    disp(['循环运行时间:',num2str(toc)]); 
    t1=clock;
     
%% 绘制工作空间
figure('name','六轴机械臂工作空间')
hold on
plotopt = {'noraise', 'nowrist', 'nojaxes', 'delay',0};
p560.plot([0 20*du 0 0 0 0], plotopt{:});
plot3(T_x,T_y,T_z,'r.','MarkerSize',3);
disp(['绘制工作空间运行时间:',num2str(etime(clock,t1))]);  
 
%获取X,Y,Z空间坐标范围
Point_range=[min(T_x) max(T_x) min(T_y) max(T_y) min(T_z) max(T_z)]
hold off

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值