我目前正在研究一些代码,以粗略显示机械臂可以使用MatLab(工作区)到达的所有点。结果应该是3D图上的点云。我希望使用正向运动学来做到这一点。我的代码当前看起来像这样。您不必了解其背后的数学原理。我只需要帮助增加它的所有值:
function [ T ] = TransMat( a,b,c,d )
T = [ cosd(d) -sind(d)*cosd(b) sind(d)*sind(b) a*cosd(d);
sind(d) cosd(d)*cosd(b) -cosd(d)*sind(b) a*sind(d);
0 sind(b) cosd(b) c;
0 0 0 1];
end
%distal DH
a1 = 0; alpha1 = 0; d1 = 3; %t1 = 0 %shoulder1 to base
a2 = 0; alpha2 = 90; d2 = 0; %t2 = 0 %shoulder2 to shoulder1
a3 = 5.75; alpha3 = 0; d3 = 0; %t3 = 0 %elbow to shoulder2
a4 = 7.375; alpha4 = 0; d4 = 0; %t4 = 0 %wrist1 to elbow
a5 = 0; alpha5 = -90; d5 = 2; %t5 = 0 %wrist2 to wrist1
t1=0; t2=0; t3=0; t4=0; t5=0;
A1 = TransMat(a1,alpha1,d1,t1);
A2 = TransMat(a2,alpha2,d2,t2);
A3 = TransMat(a3,alpha3,d3,t3);
A4 = TransMat(a4,alpha4,d4,t4);
A5 = TransMat(a5,alpha5,d5,t5);
for t1 = 0:180
A1 = TransMat(a1,alpha1,d1,t1);
A2 = TransMat(a2,alpha2,d2,t2);
A3 = TransMat(a3,alpha3,d3,t3);
A4 = TransMat(a4,alpha4,d4,t4);
T = A1*A2*A3*A4;%*A5;
X=T(1,4);
Y=T(2,4);
Z=T(3,4);
plot3(X,Y,Z,'.')
hold on;
t1 = t1 + 20;
if t1 == 180
t2 = t2 + 20;
t1 = 0;
end
if t2 == 180
t3 = t3 + 20;
t2 = 0;
end
if t3 == 180
t4 = t4 + 20;
t3 = 0;
end
if t4 == 180
end
end
此刻,我刚刚遍历了t1 9次。我想将t2递增20,然后再通过t1递增9次。说完所有这些,我相信我应该得到9 ^ 5分。我知道这很像二进制加法,但是我是一个新手程序员,我还没有编程能力来实现我的计划!
修改:
代码已更新为最新版本,并带有嵌套循环。不幸的是,代码只是在一个平面上绘制,因此仍然有些错误。如果找到解决方案,我将进行更新。