1.前记:
使用surf函数实现指定顶点,圆锥半径,高度的圆锥。
2.代码
为了实现任意位置和方位,使用机器人系统工具箱函数getTransform计算机器人末端正运动的齐次矩阵结果并将其位置和方位赋予要画的圆锥体上。
运行函数:
robot = loadrobot("kinovaGen3","DataFormat","column","Gravity",[0 0 -9.81]);
qq=robot.randomConfiguration;
% qq=robot.homeConfiguration
t=getTransform(robot,qq,robot.BodyNames{end});
eulZYX =rad2deg(tform2eul(t,'XYZ'));方位
t1=t(1:3,4);%位置
show(robot,qq,"Frames","off");
xlim([-1 1]); ylim([-1 1]); zlim([-0.4 1.6])
hold on
color=rand(1,3);
% MyPlotCone(size,r,P,R,alpha,color)
h=.2;%高度
r=0.1;%半径
MyPlotCone(h,r, t1,eulZYX,0.6,color)% 调用function代码
trplot(robot.getTransform(qq, robot.BodyNames{end}), 'length',0.2,'arrow','frame', 'Tcp',...
'text_opts', {'FontSize', 6, 'FontWeight', 'bold'},...
'width', 0.06,'thick',0.06 ,'rgb','color','k')% workspace frame
结果:
画圆锥的代码调用:
function MyPlotCone(h,r,P,R,alpha,color)
% write by jianrobsim
t1=P;%x y z
eulZYX=R;% y p r
%
% cylinder - 创建圆柱
% 此 MATLAB 函数 返回三个 2×21 矩阵,其中包含圆柱的 x、y 和 z 坐标,但不对其绘图。
% 圆柱的半径为 1,圆周上有 20 个等间距点。底面平行于 xy 平面。
[X,Y,Z]=cylinder([0 r],50);% 后50为将圆化成均等分
M=makehgtform('translate',[t1(1),t1(2),t1(3)],'xrotate',deg2rad(eulZYX(1)),'yrotate',deg2rad(eulZYX(2)),'zrotate',deg2rad(eulZYX(3)));
hf=surf(X,Y,Z*h,'Parent',hgtransform('Matrix',M),'LineStyle','none','FaceAlpha',alpha);
set(hf,'FaceColor',color)
set(hf,'EdgeColor','k')
end
附录:上述的代码中使用trplot画的机器人末端的坐标系显示。