Albert_Lsk 2020-10-21 15:47 采纳率: 0%
浏览 113

Matlab 画出机器人工作空间,但有部分索引超出维度。

Matlab 这部分索引超出维度,请问是为什么?

     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

以下是完整的代码片段

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=1000;

%% 求取工作空间
    %设置轴关节随机分布,轴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)];
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-25 01:37
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在 MATLAB 中,figure_x, figure_y, 和 figure_z 是三维图像窗口的名称。这些窗口分别代表 X、Y、Z 轴的方向。然而,figure_xfigure_z 的索引从 1 开始,而 MATLAB 对象的索引是从 1 开始的。

    在你的代码中,你试图使用 figure_xfigure_z 来访问 T_cell 对象中的值,但是它们实际上没有这个数组,而是存储了每个关节的角度信息。这可能是由于你没有正确地创建和初始化 T_cell 对象。

    要解决这个问题,你需要首先创建一个 T_cell 对象,并且确保它包含足够的关节角度数据来覆盖所有索引。例如:

    T_cell = zeros(num, 7);  % 创建一个与关节数量相同的矩阵,其中第 1 列是关节角限制,其余列是关节角
    
    T_cell(:,1) = -180:90:180;  % 初始化关节角
    T_cell(:,2) = 0:90:90;      % 初始化关节角
    T_cell(:,3) = -90:90:90;   % 初始化关节角
    T_cell(:,4) = -180:180:180;  % 初始化关节角
    T_cell(:,5) = -90:90:90;   % 初始化关节角
    T_cell(:,6) = 0:360:360;   % 初始化关节角
    

    然后你可以使用这些数据来创建 figure_x, figure_y, 和 figure_z 窗口。

    评论

报告相同问题?