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)');
MATLAB运行显示错误,如何解决?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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 工业机器人的力矩-关节变量的关系曲线。
推荐相关链接:
解决 无用评论 打赏 举报 编辑记录 -
悬赏问题
- ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
- ¥20 关于URL获取的参数,无法执行二选一查询
- ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
- ¥15 marlin编译错误,如何解决?
- ¥15 有偿四位数,节约算法和扫描算法
- ¥15 VUE项目怎么运行,系统打不开
- ¥50 pointpillars等目标检测算法怎么融合注意力机制
- ¥20 Vs code Mac系统 PHP Debug调试环境配置
- ¥60 大一项目课,微信小程序
- ¥15 求视频摘要youtube和ovp数据集