💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

 ⛳️赠与读者

💥1 概述

一、方案背景与目标

二、方案框架

1. 无人机模型建立

2. MPC控制器设计

3. 实时控制与反馈

三、关键技术与挑战

四、应用场景与前景

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

基于神经网络为无人机开发模型预测控制(MPC)方案是一个结合了先进控制技术和人工智能算法的复杂过程。

一、方案背景与目标

背景:无人机(UAV)在航拍、货物配送、搜索救援等领域的应用日益广泛,对其自主导航和轨迹跟踪能力提出了更高要求。模型预测控制(MPC)作为一种基于模型的控制技术,通过预测未来状态并优化控制输入来实现对复杂系统的控制,非常适合用于无人机的控制系统中。

目标:结合神经网络的强大学习能力,开发一种基于神经网络的MPC控制方案,以提高无人机在复杂环境中的自主飞行能力和轨迹跟踪精度。

二、方案框架

1. 无人机模型建立
  • 动力学模型:首先,需要建立一个准确的无人机动力学模型,该模型应能够描述无人机的平移和旋转运动。这通常包括无人机的质量、惯性矩、推力、升力等参数。
  • 神经网络模型:利用神经网络(如深度学习中的卷积神经网络CNN、循环神经网络RNN等)对无人机动力学模型进行建模。神经网络的输入可以是无人机的当前状态(如位置、速度、姿态等),输出则是预测的未来状态。
2. MPC控制器设计
  • 预测模型:将训练好的神经网络模型作为MPC的预测模型。该模型能够根据当前状态和控制输入预测未来一段时间内的系统状态。
  • 成本函数:定义一个成本函数,用于衡量预测状态与期望状态之间的偏差。成本函数应考虑到无人机的各种约束条件,如最大速度、最大俯仰角等。
  • 优化求解:在给定的预测范围内,使用优化算法(如二次规划、线性规划等)找到控制输入序列,以最小化成本函数。优化求解过程应考虑到无人机的实时性和计算资源限制。
3. 实时控制与反馈
  • 控制输入实施:将优化后的第一个控制输入应用到无人机中,实现实时控制。
  • 状态估计与反馈:使用传感器数据(如GPS、陀螺仪、加速度计等)实时估计无人机的当前状态,并将状态信息反馈给MPC控制器,以便进行下一轮预测和优化。

三、关键技术与挑战

  • 神经网络训练:需要收集大量的无人机飞行数据来训练神经网络模型,以确保模型的准确性和泛化能力。
  • 计算复杂度:MPC控制器需要在每个控制周期内进行多次预测和优化计算,这对无人机的计算资源提出了较高要求。因此,需要优化算法以提高计算效率。
  • 实时性与鲁棒性:无人机在飞行过程中可能面临各种干扰和不确定性因素(如风速变化、传感器噪声等),MPC控制器需要具备良好的实时性和鲁棒性以确保无人机的安全飞行。

四、应用场景与前景

基于神经网络的MPC控制方案可以广泛应用于各种无人机应用场景中,如自主避障、精确导航、编队飞行等。随着人工智能和无人机技术的不断发展,该方案有望在未来实现更加智能化、自主化的无人机控制系统。

总之,基于神经网络的MPC控制方案为无人机控制领域带来了新的思路和方法。通过结合神经网络的学习能力和MPC的控制精度,可以进一步提高无人机的自主飞行能力和轨迹跟踪精度,为无人机的广泛应用提供有力支持。

📚2 运行结果

主函数部分代码:

% Model Predictive Controller using Linear Adaptive Prediction model
% MATLAB main script
%
​
%% Clear Workspace & Command Window
close all %
 Optionalclc
clear 
format long
​
%% Fix MATLAB Path
path = pwd();
addpath(genpath(path));
​
%
% Load constant data 
for
 the modelsetSimulationSettings()
​
%% Create quadcopter struct (quad) & Load basic fields
quadStructBasics()
​
%
% Define MPC Parameters 
for
 Altitude & x-y ControllerssetMPCSettings()
​
%% Define options for Optimizer
​
%
 Use 
'sqp'
 solver (Sequential Quadratic Programming)options = optimoptions('fmincon','Display','None','Algorithm','sqp');
​
%% Define initial conditions for ftPrev,xPrev,yPrev,DftPrev,DuxPrev,DuyPrev
​
ftPrev = 0;                   %
 Previous Total Thrust DftPrev = zeros(1,mpcParamsAlt.Nc);
​
uxPrev = 0;                   % Previous ux
uyPrev = 0;                   % Previous uy
​
DuxyPrev = zeros(mpcParamsXY.Nc,2);
​
initConditions = zeros(1,12); % Initial conditions for system states [phi theta psi p q r u v w x y z] 
​
% Save initial conditions in struct
simOut.states = initConditions;
​
%% Initialize system states
​
%
 --- Earth Frame --- %%---------------------%
​
% Linear Positions 
x = [];
y = [];
z = [];
​
% Angular Positions 
phi   =  [];
theta =  [];
psi   =  [];
​
​
% ---- Body Frame --- %
%---------------------%
​
% Linear Velocities 
u = [];
v = [];
w = [];
​
% Angular Velocities 
p = [];
q = [];
r = [];
​
%-------------------------------------------%
​
% Initialize Objective Functions Evaluations
Jz = [];
Jxy = [];
​
% Initialize reference angles
phi_ref   = [];
theta_ref = [];
psi_ref = [];
​
%% PID Settings
setPIDSettings()
​
%
% Main Loop​
fprintf("\nSimulation started\n")
​
% Yaw Reference Vector
psi_ref = zeros(length(1:(duration/Ts)+1),1);
​
for k = 1:(duration/Ts)+1
​
    %% Generate reference sub-vector for current time step
​
    %
 Altitude z    refVectorAlt = getReferenceSignal(Ts,(k+1:k+mpcParamsAlt.Np),'Signal','ramp_z');
​
    % x
    refVectorX = getReferenceSignal(Ts,(k+1:k+mpcParamsXY.Np),'Signal','cos_x');
    % y
    refVectorY = getReferenceSignal(Ts,(k+1:k+mpcParamsXY.Np),'Signal','sin_y');
​
    % x'
    refVectorXDot= getReferenceSignal(Ts,(k+1:k+mpcParamsXY.Np),'
Signal
','
cos_xDot
');
    % y'
    refVectorYDot = getReferenceSignal(Ts,(k+1:k+mpcParamsXY.Np),'Signal','sin_yDot');
​
    %% Print current step k 
    progress = k/((duration/Ts)+1)*100;
    fprintf("\nSimulation Time Step %
d - 
Progress:
 %.
1
f
%%", k, progress)
​
    z = [z; simOut.states(end,end)];
    
    %
 Update x,y    x = [x; simOut.states(end,end-2)];
    y = [y; simOut.states(end,end-1)];
    
    % Update phi,theta,psi
    phi = [phi; simOut.states(end,1)]; 
    theta = [theta; simOut.states(end,2)];
    psi = [psi; simOut.states(end,3)];

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]史宝岱,徐艳召,崔俊杰,等.基于卷积神经网络的无人机图像自动识别算法[J].信息工程大学学报,2023,24(05):526-532.

[2]谢睿.基于改进MPC的自动驾驶车辆轨迹跟踪控制研究[D].山东交通学院,2024.DOI:10.27864/d.cnki.gsjtd.2024.000181.

部分理论引用网络文献,若有侵权联系博主删除

🌈4 Matlab代码实现

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐