7 views (last 30 days)

Show older comments

So i need to plot my robot that consists of a base, platform, and 4 legs. When i use the plot3 function, only one point from the platform is connected to the corresponding point in the base. how can i connect all 4 points from the platform to the base. I basically found the lengths of legs (di(i)) where i =1-4 , and i found the euler angles, leg 1 and 4 have spherical joints ( theta and phi are available) and leg 2 and 3 are revolute (theta only is non-zero). Attached is the figure and you can see how it's only connected from one point to the base.

The code is the following

for i=1:50

t(i)=0.1*i;

P=[0 0 20]';

s=[ 0 0 1];

R1 = [cos(i*0.0174532) 0 sin(i*0.0174532)];

R2 = [0 1 0];

R3 = [-sin(i*0.0174532) 0 cos(i*0.0174532)];

R = [R1; R2; R3];

B1 = [ 15 15 0 ]'; %sph

B2= [-15 15 0]'; %rev

B3 = [-15 -15 0]'; %rev

B4 = [15 -15 0]'; %sph

A1 = [5,14,0]'; %sph

A2 = [-30,30,0]'; %rev

A3 = [-30,-30,0]'; %rev

A4 = [5,-14,0]'; %sph

b1 = P +(R*B1); %sph

b2 = P +(R*B2); %rev

b3 = P +(R*B3); %rev

b4 = P +(R*B4); %sph

%position%

x1(i)= dot((b1 - A1),(b1 - A1));

d1(i)= sqrt(x1(i)); %sph

x2(i)= dot((b2 - A2),(b2 - A2));

d2(i)= sqrt(x2(i)); %rev

x3(i)= dot((b3 - A3),(b3 - A3));

d3(i)= sqrt(x3(i)); %rev

x4(i)= dot((b4 - A4),(b4 - A4));

d4(i)= sqrt(x4(i)); %sph

%angles%

s1 = (b1-A1)/d1(i);

s2 = (b2-A2)/d2(i);

s3 = (b3-A3)/d3(i);

s4 = (b4-A4)/d4(i);

th1(i)=acos(s1(3)); %sph

th2(i)=acos(s2(3)); %rev

th3(i)=acos(s3(3)); %rev

th4(i)=acos(s4(3)); %sph

ss1(i) =dot((b3-A3)/d3(i),[0 1 0]);

ss2(i) =dot((b4-A4)/d4(i),[0 1 0]);

phy1(i) = asin(s1(2)/sin(th1(i)));

phy4(i) = asin(s4(2)/sin(th4(i)));

%animation%

xplot = [5,-30,-30,5,5];

yplot = [14,30,-30,-14,14];

zplot= [ 0 0 0 0 0 ];

x1plot= [d1(i)*sin(th1(i))*cos(phy1(i)) , d2(i)*sin(th2(i))*cos(0) , d3(i)*sin(th3(i))*cos(0) , d4(i)*sin(th4(i))*cos(phy4(i)) , d1(i)*sin(th1(i))*cos(phy1(i))];

y1plot= [b1(2)+d1(i)*sin(th1(i))*sin(phy1(i)) , b2(2)+d2(i)*sin(th1(i))*sin(0) , b3(2)+d3(i)*sin(th1(i))*sin(0) , b4(2)+d4(i)*sin(th4(i))*sin(phy4(i)) , b1(2)+d1(i)*sin(th1(i))*sin(phy1(i))];

z1plot = [d1(i)*cos(th1(i)) , d2(i)*cos(th2(i)) , d3(i)*cos(th3(i)) , d4(i)*cos(th4(i)) , d1(i)*cos(th1(i))];

%plot(x1plot,y1plot)

plot3([xplot,x1plot],[yplot,y1plot],[zplot,z1plot],'linewidth',2)

pause(0.003)

%%%%%%%%%%%%

end

Mike Garrity
on 25 Mar 2016

It's only drawing that connection because you didn't "lift the pen" between drawing the two platforms. You haven't told plot3 anything about the connections. You need to spell it out explicitly like this:

plot3([xplot, nan, ...

x1plot, nan, ...

xplot(1), x1plot(1), nan, ...

xplot(2), x1plot(2), nan, ...

xplot(3), x1plot(3), nan, ...

xplot(4), x1plot(4)], ...

[yplot, nan, ...

y1plot, nan, ...

yplot(1), y1plot(1), nan, ...

yplot(2), y1plot(2), nan, ...

yplot(3), y1plot(3), nan, ...

yplot(4), y1plot(4)], ...

[zplot, nan, ...

z1plot, nan, ...

zplot(1), z1plot(1), nan, ...

zplot(2), z1plot(2), nan, ...

zplot(3), z1plot(3), nan, ...

zplot(4), z1plot(4)], ...

'LineWidth',2)

Although I might go with something like this instead:

clf

h = patch(nan,nan,nan,'FaceColor','none','LineWidth',2);

view(3)

for i=1:50

t(i)=0.1*i;

P=[0 0 20]';

s=[ 0 0 1];

R1 = [cos(i*0.0174532) 0 sin(i*0.0174532)];

R2 = [0 1 0];

R3 = [-sin(i*0.0174532) 0 cos(i*0.0174532)];

R = [R1; R2; R3];

B1 = [ 15 15 0 ]'; %sph

B2= [-15 15 0]'; %rev

B3 = [-15 -15 0]'; %rev

B4 = [15 -15 0]'; %sph

A1 = [5,14,0]'; %sph

A2 = [-30,30,0]'; %rev

A3 = [-30,-30,0]'; %rev

A4 = [5,-14,0]'; %sph

b1 = P +(R*B1); %sph

b2 = P +(R*B2); %rev

b3 = P +(R*B3); %rev

b4 = P +(R*B4); %sph

%position%

x1(i)= dot((b1 - A1),(b1 - A1));

d1(i)= sqrt(x1(i)); %sph

x2(i)= dot((b2 - A2),(b2 - A2));

d2(i)= sqrt(x2(i)); %rev

x3(i)= dot((b3 - A3),(b3 - A3));

d3(i)= sqrt(x3(i)); %rev

x4(i)= dot((b4 - A4),(b4 - A4));

d4(i)= sqrt(x4(i)); %sph

%angles%

s1 = (b1-A1)/d1(i);

s2 = (b2-A2)/d2(i);

s3 = (b3-A3)/d3(i);

s4 = (b4-A4)/d4(i);

th1(i)=acos(s1(3)); %sph

th2(i)=acos(s2(3)); %rev

th3(i)=acos(s3(3)); %rev

th4(i)=acos(s4(3)); %sph

ss1(i) =dot((b3-A3)/d3(i),[0 1 0]);

ss2(i) =dot((b4-A4)/d4(i),[0 1 0]);

phy1(i) = asin(s1(2)/sin(th1(i)));

phy4(i) = asin(s4(2)/sin(th4(i)));

%animation%

xplot = [5,-30,-30,5,5];

yplot = [14,30,-30,-14,14];

zplot= [ 0 0 0 0 0 ];

x1plot= [d1(i)*sin(th1(i))*cos(phy1(i)) , ...

d2(i)*sin(th2(i))*cos(0) , ...

d3(i)*sin(th3(i))*cos(0) , ...

d4(i)*sin(th4(i))*cos(phy4(i)) , ...

d1(i)*sin(th1(i))*cos(phy1(i))];

y1plot= [b1(2)+d1(i)*sin(th1(i))*sin(phy1(i)) , ...

b2(2)+d2(i)*sin(th1(i))*sin(0) , ...

b3(2)+d3(i)*sin(th1(i))*sin(0) , ...

b4(2)+d4(i)*sin(th4(i))*sin(phy4(i)) , ...

b1(2)+d1(i)*sin(th1(i))*sin(phy1(i))];

z1plot = [d1(i)*cos(th1(i)) , d2(i)*cos(th2(i)) , ...

d3(i)*cos(th3(i)) , d4(i)*cos(th4(i)) , ...

d1(i)*cos(th1(i))];

verts = [xplot, x1plot; yplot, y1plot; zplot, z1plot];

faces = [1 2; 2 3; 3 4; 4 1; ... % first platform

5 6; 6 7; 7 8; 8 1; ... % second platform

1 5; 2 6; 3 7; 4 8]; % connections

h.Vertices = verts'; % note transpose!

h.Faces = faces;

pause(0.003)

%%%%%%%%%%%%

end

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!