2401_83108464 2024-05-10 17:17 采纳率: 0%
浏览 13
已结题

MATLAB运行显示错误,如何解决?


syms theta1 theta2 theta3 theta4 theta5 theta6;
syms dtheta1 dtheta2 dtheta3 dtheta4 dtheta5 dtheta6;
syms ddtheta1 ddtheta2 ddtheta3 ddtheta4 ddtheta5 ddtheta6;
qv = [theta1, theta2, theta3, theta4, theta5, theta6];
dqv = [dtheta1, dtheta2, dtheta3, dtheta4, dtheta5, dtheta6];
ddqv = [ddtheta1, ddtheta2, ddtheta3, ddtheta4, ddtheta5, ddtheta6];
l = [0.33, 0.26, 0.02, 0.29, 0.07];
m = [6, 4, 4, 2, 2, 2];
r0 = 0.02;
Ixx = [m(1)*l(1)^2/3, 0, m(3)*l(4)^2/3, m(4)*l(5)^2/3, m(5)*l(5)^2/3, m(6)*l(5)^2/3];
Iyy = [m(1)*l(1)^2/3, m(2)* l(2)^2/3, m(3)* l(3)^2/3, m(4)*l(5)^2/3, 0, m(6)*l(5)^2/3];
Izz = [0, m(2)*l(2)^2/3, m(3)*(l(3)^2+l(4)^2)/3, 0, m(5)*l(5)^2/3, m(6)*r0^2/2];
Ixy = [0, 0, -m(3)*l(3)*l(4)/3, 0, 0, 0];
Ixz = zeros(1,6);
Iyz = zeros(1,6);
mx = [0, m(2)*l(2)/2, m(3)*l(3)/2, 0, 0, 0];
my = [0, 0, -m(3)*l(4)/2, 0, -m(5)*l(5)/2, 0];
mz = [-m(1)*l(1)/2, 0, 0, m(4)*l(5)/2, 0, m(6)*l(5)/2];
J = cell(6, 6);
for i = 1:6
    J{i} = [(-Ixx(i)+Iyy(i)+Izz(i))/2, Ixy(i)*Ixz(i)*mx(i), Ixy(i)*(Ixx(i)-Iyy(i)+Izz(i))/2, Iyz(i)*my(i), Ixz(i)*Iyz(i)*(Ixx(i)+Iyy(i)-Izz(i))/2, mz(i), mx(i)*my(i)*mz(i)*m(i)];
end
T01 = [cos(qv(1)), -sin(qv(1)), 0, 0; sin(qv(1)), cos(qv(1)), 0, 0; 0, 0, 1, r0; 0, 0, 0, 1];
T12 = [cos(qv(2)), -sin(qv(2)), 0, 0; sin(qv(2)), cos(qv(2)), 0, 0; 0, 0, 1, r0; 0, 0, 0, 1];
T23 = [cos(qv(3)), -sin(qv(3)), 0, 0; sin(qv(3)), cos(qv(3)), 0, 0; 0, 0, 1, r0; 0, 0, 0, 1];
T34 = [cos(qv(4)), -sin(qv(4)), 0, 0; sin(qv(4)), cos(qv(4)), 0, 0; 0, 0, 1, r0; 0, 0, 0, 1];
T45 = [cos(qv(5)), -sin(qv(5)), 0, 0; sin(qv(5)), cos(qv(5)), 0, 0; 0, 0, 1, r0; 0, 0, 0, 1];
T56 = [cos(qv(6)), -sin(qv(6)), 0, 0; sin(qv(6)), cos(qv(6)), 0, 0; 0, 0, 1, r0; 0, 0, 0, 1];
T02 = T01 * T12;
T03 = T01 * T12 * T23;
T04 = T01 * T12 * T23 * T34;
T05 = T01 * T12 * T23 * T34 * T45;
T06 = T01 * T12 * T23 * T34 * T45 * T56;
T = cat(3, T01, T02, T03, T04, T05, T06);
D = zeros(6, 6);
for i=1:6
    for j=1:6
       p=max(i,j);
       for n=p:6
            D(i,j)=D(i,j)+trace(diff(T(:,:,n),qv(j))*J(:,:,n)*transpose(diff((T(:,:,n)),qv(i))));
        end
    end
 end
H=sym(zeros(6,1));
C=sym(zeros(6,6,6));
for i=1:6
    for j=1:6
       for k=1:6
          p=max([i,j,k]);
          for n=p:6
            C(j,k,i)=C(j,k,i)+trace(diff(diff(T(:,:,n),qv(j)),qv(k))*J(:,:,n)*transpose(diff((T(:,:,n)),qv(i))));
          end
          H(i)=H(i)+C(j,k,i)*dqv(j)*dqv(k);
      end
   end
end
g=9.8;
gv=[0 0 g 0]';
r=[0 0 -l(1)/21;
      l(2)/2 0 0 1;
      l(3)/2 -l(4)/2 0 1;
      0 0 l(5)/21;
      0 -l(5)/2 0 1;
     0 0 l(5)/2 1]';
G=sym(zeros(6,1));
       for i=1:6
            for p=i:6
             G(i)=G(i)-m(p)*gv'*diff(T(:,:,p),qv(i))*r(:,p);
            end
       end
tauv=D* ddqv'+H+G;
q0=deg2rad([0 90 0 0 0 0]);
qf=deg2rad([140 120 90 110 100 180]);
t=0:0.05:5;
[q,dq,ddq]=jtraj(q0,qf,t);
N=length(t);
tau=zeros(6);
   for i=1:length(t)
        theta1=q(i,1);theta2=q(i,2);theta3=q(i,3);
        theta4=q(i,4);theta5=q(i,5);theta6=q(i,6);
        dtheta1=dq(i,1);dtheta2=dq(i,2);dtheta3=dq(i,3);
        dtheta4=dq(i,4);dtheta5=dq(i,5);dtheta6=dq(i,6);
        ddtheta1=ddq(i,1);ddtheta2=ddq(i,2);ddtheta3=ddq(i,3);
        ddtheta4=ddq(i,4);ddtheta5=ddq(i,5);ddtheta6=ddq(i,6);
        tau(:,i)=eval(tauv);
    end
figure('Name','6R工业机器人力矩-关节变量的关系曲线');
subplot(2,3,1);
plot(q(:,1),taut(1,:));
grid on
xlabel('θ_1(rad)');ylabel('关节1力矩(N·m)');
subplot(2,3,2);
plot(q(:,2),taut(2,:));
grid on
xlabel('θ_2(rad)');ylabel('关节2力矩(N·m)');
subplot(2,3,3);
plot(q(:,3),taut(3,:));
grid on
xlabel('θ_3(rad)');ylabel('关节3力矩(N·m)');
subplot(2,3,4);
plot(q(:,4),taut(4,:));
grid on
xlabel('θ_4(rad)');ylabel('关节4力矩(N·m)');
subplot(2,3,5);
plot(q(:,5),taut(5,:));
grid on
xlabel('θ_5(rad)');ylabel('关节5力矩(N·m)');
subplot(2,3,6);
plot(q(:,6),taut(6,:));
grid on
xlabel('θ_6(rad)');ylabel('关节6力矩(N·m)');

img

  • 写回答

7条回答 默认 最新

  • 笑面虎 2024-05-10 17:17
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    您想要解决的问题:

    您希望解决的问题是在 MATLAB 中运行一段关于 6R 工业机器人动力学分析的代码时出现的错误。错误提示表明在使用 symengine 进行二元运算时维度不匹配。

    图片内容:

    图片中显示的是 MATLAB 运行时的错误信息,具体内容为:

    错误使用symengine
    The dimensions do not match.
    出错 sym/privBinaryOp(1line 946)
    Csym = mupadmex(op, args(1]. s, args [2). s, varargin(:)) ;
    出错*(line 273)
    X = privBinaryOp(A, B, "symobj: :mtimes') :
    CSDN@2401_83108464
    

    这表明在执行矩阵乘法操作时,参与运算的矩阵维度不兼容。

    问题出现原因:

    错误提示通常意味着在进行矩阵运算时,尝试相乘的矩阵或向量的维度不符合矩阵乘法的要求。在 MATLAB 中,矩阵乘法要求第一个矩阵的列数与第二个矩阵的行数相同。从错误信息来看,可能是在执行 diff 函数或矩阵乘法时,操作数的维度不一致。

    问题解决方案:

    1. 检查变量维度:首先,检查 diff 函数和矩阵乘法操作中的变量 T, J, D, H, C, G, tauv 等,确保它们的维度在运算前是匹配的。

    2. 检查符号变量的使用:由于代码中使用了符号变量(syms),确保在使用这些符号变量进行运算时,它们的形式和维度是正确的。

    3. 逐步调试:注释掉部分代码,逐步运行,以确定导致错误的具体行或操作。

    4. 使用 MATLAB 的调试工具:利用 MATLAB 的调试器逐步执行代码,检查变量的值和维度。

    提供代码:

    由于错误信息不完整,无法提供确切的修改代码。但是,您可以按照上述解决方案逐步检查和调试代码。

    代码运行方式:

    您需要在 MATLAB 环境中运行代码。确保您已经安装了 MATLAB 并且具备符号运算的工具箱。

    代码预期运行结果:

    预期中,修改后的代码应该能够无错误地运行,并且能够生成 6R 工业机器人的力矩-关节变量的关系曲线。

    推荐相关链接:

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月10日
  • 赞助了问题酬金15元 5月10日
  • 创建了问题 5月10日

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集