✅作者简介:热爱数据处理、建模、算法设计的Matlab仿真开发者。
🍎更多Matlab代码及仿真咨询内容点击 🔗:Matlab科研工作室
🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。
👇 关注我领取海量matlab电子书和数学建模资料
🔥内容介绍
一、引言:四旋翼无人机的非线性控制挑战
四旋翼无人机是典型的欠驱动非线性系统,其动力学模型受空气阻力、姿态耦合、外部扰动(如风速)等因素影响,呈现强非线性、强耦合特性。传统线性控制方法(如 PID)在大姿态角、快速机动场景下难以保证跟踪精度,而 T-S(Takagi-Sugeno)模糊模型通过 “模糊规则将非线性系统分解为多个局部线性模型的加权组合”,为非线性跟踪控制提供了高效解决方案 —— 既保留非线性系统的全局特性,又可利用线性控制理论简化控制器设计。
二、1. 四旋翼无人机非线性动力学建模基础
核心动力学特性
🔥运行结果
🔥部分代码
x_atti = UAV_Result.x_atti; % [-] Real attitude
xhat_atti = UAV_Result.xhat_atti; % [-] Estimated attitude
x_alti = UAV_Result.x_alti; % [-] Real altitude
xhat_alti = UAV_Result.xhat_alti; % [-] Estimated altitude
x_posi = UAV_Result.x_posi; % [-] Real position
xhat_posi = UAV_Result.xhat_posi; % [-] Estimated position
xr_atti = UAV_Result.xr_atti;
xr_alti = UAV_Result.xr_alti;
xr_posi = UAV_Result.xr_posi;
Quadrotor = UAV_Result.Quadrotor;
% figure(1)
% plot(T_posi,member_w1,'LineWidth',2.5);
% hold on;
% plot(T_posi,member_w2,'LineWidth',2.5);
% hold on; grid on;
% legend('$w_1(k)$','$w_2(k)$','interpreter','latex')
% figure(2)
% plot(T_atti,xhat_atti(1,:)*180/pi,'LineWidth',2.5);
% hold on;
% plot(T_atti,xhat_atti(3,:)*180/pi,'LineWidth',2.5);
% hold on;
% plot(T_atti,xhat_atti(5,:)*180/pi,'LineWidth',2.5);
% hold on;
% plot(T_atti,xr_atti(1,:)*180/pi,'-.','LineWidth',2.5);
% hold on;
% plot(T_atti,xr_atti(3,:)*180/pi,'-.','LineWidth',2.5);
% hold on;
% plot(T_atti,xr_atti(5,:)*180/pi,'-.','LineWidth',2.5);
% hold on; grid on;
% legend('$\hat{\phi}(k)$','$\hat{\theta}(k)$','$\hat{\psi}(k)$','$\phi_r(k)$','$\theta_r(k)$','$\psi_r(k)$','interpreter','latex','Fontsize',12)
% xlabel('Time [s]')
% ylabel('Angle [degree]')
%
% figure(3)
% plot(T_posi,xr_alti(1,:),'Color',"#0072BD",'LineWidth',2.5);
% hold on;
% plot(T_posi,xhat_alti(1,:),'-.','LineWidth',2.5);
% hold on; grid on;
%
% figure(4)
% plot3(xhat_posi(1,:),xhat_posi(2,:),xhat_alti(1,:),'LineWidth',2.5); hold on;
% plot3(xr_posi(1,:),xr_posi(2,:),xr_alti(1,:),'-.','LineWidth',2.5); hold on; grid on;
% xlim([-1 15])
% ylim([-1 15])
% zlim([0 50])
% xlabel('X Position [m]')
% ylabel('Y Position [m]')
% zlabel('Z Position [m]')
if mode == 0
elseif mode == 1
drone1 = Quadrotor{1};
drone2 = Quadrotor{2};
drone3 = Quadrotor{3};
drone4 = Quadrotor{4};
x_init = 0;
y_init = 0;
z_init = 0;
X_Position = xhat_posi(1,:);
Y_Position = xhat_posi(2,:);
Z_Position = xhat_alti(1,:);
AXIS = 30;
for j = 1 : 1 : 300
figure(1)
set(gcf,'Position',[200, 200, 900, 600],'Color','w')
plot3(xr_posi(1,:),xr_posi(2,:),xr_alti(1,:),'-.','LineWidth',3); hold on
plot3(x_posi(1,:),x_posi(2,:),x_alti(1,:),'LineWidth',2); hold on
xlabel('X Position [m]','fontsize',15,'fontname','Times New Roman')
ylabel('Y Position [m]','fontsize',15,'fontname','Times New Roman')
zlabel('Z Position [m]','fontsize',15,'fontname','Times New Roman')
% Center
scatter3(X_Position(j), Y_Position(j), Z_Position(j), 'MarkerEdgeColor', [0 0 0], 'LineWidth', 1.5); hold on
axis([-AXIS, x_init+AXIS, -AXIS, y_init+AXIS, 0, z_init+AXIS]); grid on;
% Rotor 1
scatter3(drone1(1,j), drone1(2,j), drone1(3,j), 'MarkerEdgeColor', [0 0 0], 'LineWidth', 1.5); hold on
plot3([X_Position(j) drone1(1,j)], [Y_Position(j) drone1(2,j)], [Z_Position(j) drone1(3,j)],'LineWidth', 1.5, 'Color', 'red'); hold on
%textscatter3(real([drone1(1,j) drone1(2,j) 0.2+drone1(3,j)]), string(1), 'MarkerSize',12);
% Rotor 4
scatter3(drone2(1,j), drone2(2,j), drone2(3,j), 'MarkerEdgeColor', [0 0 0], 'LineWidth', 1.5); hold on
plot3([X_Position(j) drone2(1,j)], [Y_Position(j) drone2(2,j)], [Z_Position(j) drone2(3,j)],'LineWidth', 1.5, 'Color', 'blue'); hold on
%textscatter3(real([drone2(1,j) drone2(2,j) 0.2+drone2(3,j)]), string(4), 'MarkerSize',12);
% Rotor 3
scatter3(drone3(1,j), drone3(2,j), drone3(3,j),'MarkerEdgeColor', [0 0 0], 'LineWidth', 1.5); hold on
plot3([X_Position(j) drone3(1,j)], [Y_Position(j) drone3(2,j)], [Z_Position(j) drone3(3,j)],'LineWidth', 1.5, 'Color', 'red'); hold on
%textscatter3(real([drone3(1,j) drone3(2,j) 0.2+drone3(3,j)]), string(3), 'MarkerSize',12);
% Rotor 2
scatter3(drone4(1,j), drone4(2,j), drone4(3,j), 'MarkerEdgeColor', [0 0 0], 'LineWidth', 1.5); hold on
plot3([X_Position(j) drone4(1,j)], [Y_Position(j) drone4(2,j)], [Z_Position(j) drone4(3,j)],'LineWidth', 1.5, 'Color', 'blue'); hold on
%textscatter3(real([drone4(1,j) drone4(2,j) 0.2+drone4(3,j)]), string(2), 'MarkerSize',12);
hold on
axis([-10, 20, -10, 20, 0, z_init+AXIS]);
grid on;
hold off
j
end
end
end
🔥参考文献
🏆团队擅长辅导定制多种科研领域MATLAB仿真,助力科研梦:
🌈 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱调度、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题、港口调度、港口岸桥调度、停机位分配、机场航班调度、泄漏源定位
🌈 机器学习和深度学习时序、回归、分类、聚类和降维
2.1 bp时序、回归预测和分类
2.2 ENS声神经网络时序、回归预测和分类
2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类
2.4 CNN|TCN|GCN卷积神经网络系列时序、回归预测和分类
2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类
2.7 ELMAN递归神经网络时序、回归\预测和分类
2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类
2.9 RBF径向基神经网络时序、回归预测和分类