MATLAB画四旋翼无人机,机翼可独立旋转

MATLAB画四旋翼无人机,机翼可独立旋转 %% 高仿真无人机|全动态旋转动画 % 大疆风格 完美结构 流畅动画 %clear;clc;close all;% 窗口设置 ffigure(Color,w,Position,[100,100,900,700]);axaxes(Color,[0.960.981],DataAspectRatio,[111]);hold on;grid on;box on;xlabel(X);ylabel(Y);zlabel(Z);view(60,25);lighting gouraud;material shiny;axis([-55-55-23]);%%1. 流线型机身真实无人机造型 body_color[0.050.120.25];[x,y,z]ellipsoid(0,0,0,1.8,0.9,0.5);surf(x,y,z,FaceColor,body_color,EdgeColor,none);% 顶部视觉模块[x2,y2,z2]cylinder(0.4,50);z2z2*0.25 -0.12;surf(x2,y2,z2,FaceColor,[0.020.050.1],EdgeColor,none);%%2. 碳纤维机臂从机身中心连接到旋翼 arm_R0.12;arm_L3.2;arm_color[0.10.10.13];arm_points[arm_L,arm_L,0;-arm_L,arm_L,0;arm_L,-arm_L,0;-arm_L,-arm_L,0];fori1:4 cylinder3d([0,0,0], arm_points(i,:), arm_R, arm_color);end %%3. 电机底座真实结构 motor_R0.28;motor_H0.22;fori1:4[xm,ym,zm]cylinder(motor_R,50);zmzm*motor_H -0.11;xmxm arm_points(i,1);ymym arm_points(i,2);surf(xm,ym,zm,FaceColor,[000],EdgeColor,none);end %%4. 起落架 leg_color[0.080.080.1];plot3([1.21.2],[1.21.2],[0-1.2],Color,leg_color,LineWidth,4);plot3([-1.2 -1.2],[1.21.2],[0-1.2],Color,leg_color,LineWidth,4);plot3([1.21.2],[-1.2 -1.2],[0-1.2],Color,leg_color,LineWidth,4);plot3([-1.2 -1.2],[-1.2 -1.2],[0-1.2],Color,leg_color,LineWidth,4);% 脚垫 pad_pos[1.2,1.2,-1.2;-1.2,1.2,-1.2;1.2,-1.2,-1.2;-1.2,-1.2,-1.2];fori1:4[xp,yp,zp]cylinder(0.15,30);zpzp*0.1 -0.05;xpxp pad_pos(i,1);ypyp pad_pos(i,2);zpzp pad_pos(i,3);surf(xp,yp,zp,FaceColor,[000],EdgeColor,none);end %%核心4 叶旋翼每个旋翼4片桨叶blade_len1.25;blade_w0.11;blade_color[0.930.930.96];blades[];form1:4 oxarm_points(m,1);oyarm_points(m,2);oz0.15;% 每个旋翼4个叶片0°、90°、180°、270°fork0:3 angk * pi/2;bx[ox, oxblade_len*cos(ang)-blade_w*sin(ang), oxblade_len*cos(ang)blade_w*sin(ang), ox];by[oy, oyblade_len*sin(ang)blade_w*cos(ang), oyblade_len*sin(ang)-blade_w*cos(ang), oy];bz[oz, oz0.02, oz0.02, oz];ppatch(bx,by,bz,blade_color,EdgeColor,[0.10.10.12],FaceAlpha,0.98);blades[blades, p];end end %% 灯光 light(Position,[6,6,8],Color,[111]);light(Position,[-6,-6,6],Color,[0.90.91]);light(Position,[0,7,4],Color,[110.95]);%%旋翼旋转动画angle0;whileishandle(f)angleangle 6;% 旋转速度ifangle360angle0;end %4个旋翼每个4片桨叶一起旋转form1:4 baseIdx(m-1)*4 1;oxarm_points(m,1);oyarm_points(m,2);oz0.15;fork0:3 currentAngangle k*90;idxbaseIdx k;bx[ox, oxblade_len*cosd(currentAng)-blade_w*sind(currentAng),... oxblade_len*cosd(currentAng)blade_w*sind(currentAng), ox];by[oy, oyblade_len*sind(currentAng)blade_w*cosd(currentAng),... oyblade_len*sind(currentAng)-blade_w*cosd(currentAng), oy];bz[oz, oz0.02, oz0.02, oz];set(blades(idx),XData,bx,YData,by,ZData,bz);end end drawnow;end %% 辅助函数3D圆柱体functioncylinder3d(startPos,endPos,r,color)dirVecendPos - startPos;Lnorm(dirVec);dirVecdirVec / L;[X,Y,Z]cylinder(r,50);ZZ * L;RrotMatrix([0,0,1],dirVec);fori1:size(X,1)forj1:size(X,2)vecR *[X(i,j);Y(i,j);Z(i,j)];X(i,j)vec(1) startPos(1);Y(i,j)vec(2) startPos(2);Z(i,j)vec(3) startPos(3);end end surf(X,Y,Z,FaceColor,color,EdgeColor,none);endfunctionRrotMatrix(v1,v2)vcross(v1,v2);snorm(v);cdot(v1,v2);vx[0,-v(3),v(2);v(3),0,-v(1);-v(2),v(1),0];Reye(3) vx vx^2*(1-c)/(c1);end