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)];
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))));
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))));
H(i)=H(i)+C(j,k,i)*dqv(j)*dqv(k);
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);
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);
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)');
0 提建议
邀请回答
编辑 收藏 删除 收藏 举报
追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金
¥ 15
(您已提供 ¥ 20, 还可追加 ¥
支付方式
扫码支付
加载中...
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
函数或矩阵乘法时,操作数的维度不一致。
问题解决方案:
检查变量维度:首先,检查 diff
函数和矩阵乘法操作中的变量 T
, J
, D
, H
, C
, G
, tauv
等,确保它们的维度在运算前是匹配的。
检查符号变量的使用:由于代码中使用了符号变量(syms
),确保在使用这些符号变量进行运算时,它们的形式和维度是正确的。
逐步调试:注释掉部分代码,逐步运行,以确定导致错误的具体行或操作。
使用 MATLAB 的调试工具:利用 MATLAB 的调试器逐步执行代码,检查变量的值和维度。
提供代码:
由于错误信息不完整,无法提供确切的修改代码。但是,您可以按照上述解决方案逐步检查和调试代码。
代码运行方式:
您需要在 MATLAB 环境中运行代码。确保您已经安装了 MATLAB 并且具备符号运算的工具箱。
代码预期运行结果:
预期中,修改后的代码应该能够无错误地运行,并且能够生成 6R 工业机器人的力矩-关节变量的关系曲线。
推荐相关链接:
本回答被题主选为最佳回答
, 对您是否有帮助呢?
本回答被专家选为最佳回答
, 对您是否有帮助呢?
本回答被题主和专家选为最佳回答
, 对您是否有帮助呢?
举报
按下Enter换行,Ctrl+Enter发表内容
查看更多回答(6条)