【无人机】自主四轴飞行器的模型预测控制(Matlab实现)

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

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

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

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

目录

💥1 概述

一、模型预测控制概述

二、自主四轴飞行器的动力学建模

三、模型预测控制在自主四轴飞行器中的应用

四、研究现状与挑战

五、未来展望

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

 自主四轴飞行器的模型预测控制是一种先进的控制策略,旨在实现对四轴飞行器稳定、精确和高效的飞行控制。 该控制方法基于对四轴飞行器的动态模型建立和预测未来的飞行状态。通过综合考虑飞行器的物理特性、飞行环境以及控制目标,模型预测控制能够在每个控制周期内计算出最优的控制输入。 这种控制策略具有处理多约束条件(如速度限制、姿态限制等)的能力,能够适应复杂的飞行任务和环境变化,有效提高四轴飞行器的飞行性能、稳定性和自主性,在诸如航拍、物流配送、环境监测等众多应用领域具有重要的意义和广阔的应用前景。 

关于自主四轴飞行器的模型预测控制(MPC)研究,可以从以下几个方面进行详细阐述:

一、模型预测控制概述

定义:模型预测控制是一种基于数学模型的先进控制策略,它通过预测系统未来的行为来生成当前时刻的控制信号。这种方法能够处理系统的非线性、时变性和约束条件,具有较好的鲁棒性和适应性。

优势

  1. 鲁棒性:对模型的不确定性和外部干扰有较好的容忍度。
  2. 适应性:能够处理系统的时变性和非线性特性。
  3. 优化能力:能够在有限的时间内生成最优或次优的控制策略。

二、自主四轴飞行器的动力学建模

为了实现模型预测控制,首先需要建立自主四轴飞行器的动力学模型。这通常包括刚体动力学模型、电机模型、螺旋桨模型和气动模型等。基于牛顿第二定律,可以建立飞行器的平移运动方程和旋转运动方程,描述飞行器在三维空间中的加速度、角速度和角加速度等动态特性。

三、模型预测控制在自主四轴飞行器中的应用

1. 自主导航

  • 通过预测无人机的未来位置和姿态,生成相应的控制信号,实现无人机的自主导航。这要求模型预测控制算法能够准确预测无人机的运动轨迹,并实时调整控制策略以应对外部干扰和不确定性。

2. 轨迹跟踪

  • 在给定的参考轨迹下,模型预测控制算法能够生成跟踪该轨迹所需的控制信号。这要求算法能够处理轨迹跟踪过程中的各种约束条件(如速度限制、高度限制等),并确保跟踪的准确性和稳定性。

3. 避障

  • 通过集成传感器数据(如激光雷达、摄像头等)到模型预测控制框架中,实现无人机的自主避障。这要求算法能够实时感知周围环境中的障碍物,并预测无人机的未来运动轨迹与障碍物的关系,从而生成避障所需的控制信号。

4. 姿态控制

  • 保持无人机的稳定飞行姿态是模型预测控制的一个重要应用。通过预测无人机的角速度和角加速度等动态信息,生成维持或调整姿态所需的控制信号,确保无人机在各种飞行条件下都能保持稳定的姿态。

四、研究现状与挑战

研究现状

  • 国内外学者在自主四轴飞行器的模型预测控制方面进行了大量研究,提出了多种控制算法和优化策略。例如,Seok-Kyoon Kim等人提出的带主动阻尼的无速度传感器比例-微分四旋翼飞行器轨迹跟踪控制器,以及Carmelo Sferrazza等人提出的基于学习的参数化模型预测控制轨迹跟踪方法等。

挑战

  1. 模型复杂性:建立准确的无人机动力学模型是一个复杂且耗时的过程,需要综合考虑多种因素(如空气阻力、电机效率等)。
  2. 计算资源:模型预测控制需要大量的计算资源来进行优化计算,这对无人机的处理器性能提出了较高的要求。
  3. 传感器数据:模型预测控制对传感器数据的准确性和实时性要求较高,需要高性能的传感器和数据处理算法来支持。

五、未来展望

随着技术的不断进步和算法的不断优化,模型预测控制在自主四轴飞行器中的应用将更加广泛和深入。未来研究方向可能包括:

  • 提高无人机动力学模型的准确性和实时性;
  • 开发高效的优化算法以降低计算复杂度;
  • 利用机器学习和深度学习技术提高模型预测控制的智能化水平;
  • 拓展模型预测控制在无人机编队、协同作业和复杂环境适应性等方面的应用。

📚2 运行结果

主函数部分代码:

%% Quadcopter state-space model
clear all
close all
%% constants
m=0.65; % mass kg
g=9.81; 

Ix=7.5E-3; % Inertia o x axis kg*m^2
Iy=7.5E-3; % Inertia o y axis kg*m^2
Iz=1.3E-2; % Inertia o z axis kg*m^2

dx=0; dy=0; dz=0; % disturbances
kx=0.25; ky=0.25; kz=0.25; % air friction

% States
% x=[x y z vx vy vz roll pitch yaw wr wp wy];

% Control
% u=[T tr tp ty];

%% Space-state model
%{
syms x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
syms u1 u2 u3 u4

xdot1=x4;
xdot2=x5;
xdot3=x6;
xdot4=(u1/m)*(cos(x9)*sin(x8)*cos(x7)+sin(x9)*sin(x7))-kx*x4/m+dx/m;
xdot5=(u1/m)*(sin(x9)*sin(x8)*cos(x7)-cos(x9)*sin(x7))-ky*x5/m+dy/m;
xdot6=(u1/m)*cos(x8)*cos(x7)-g-kz*x6/m+dz/m;
xdot7=x10+x11*sin(x7)*tan(x8)+x12*cos(x7)*tan(x8);
xdot8=x11*cos(x7)-x12*sin(x7);
xdot9=sin(x7)*x11/cos(x8)+cos(x7)*x12/cos(x8);
xdot10=(u2/Ix)-((Iy-Iz)/Ix)*x11*x12;
xdot11=(u3/Iy)-((Iz-Ix)/Iy)*x10*x12;
xdot12=(u4/Iz)-((Ix-Iy)/Iz)*x10*x11;


xdot=[xdot1 xdot2 xdot3 xdot4 xdot5 xdot6 xdot7 xdot8 xdot9 xdot10 xdot11 xdot12]';
x=[x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12]';
u=[u1 u2 u3 u4];
y=[x1 x2 x3 x7 x8 x9]';

% No se pueden encontrar los puntos de equilibrio -> hay que simplificar el
% modelo
%xdot=subs(xdot,[u1 u2 u3 u4],[m*g 0 0 0])
%[e1 e2 e3 e4 e5 e6 e7 e8 e9 e10 e11 e12]=solve(xdot,[x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12])

%}

%% Model simplification
% sin x -> x; cos x -> 1; tan x -> x; no distrurbances
syms x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
syms u1 u2 u3 u4

xdot1=x4;
xdot2=x5;
xdot3=x6;
xdot4=(u1/m)*(x8+x9*x7)-kx*x4/m;
xdot5=(u1/m)*(x9*x8-x7)-ky*x5/m;
xdot6=(u1/m)-g-kz*x6/m;
xdot7=x10+x11*x7*x8+x12*x8;
xdot8=x11-x12*x7;
xdot9=x7*x11+x12;
xdot10=(u2/Ix)-((Iy-Iz)/Ix)*x11*x12;
xdot11=(u3/Iy)-((Iz-Ix)/Iy)*x10*x12;
xdot12=(u4/Iz)-((Ix-Iy)/Iz)*x10*x11;

xdot=[xdot1 xdot2 xdot3 xdot4 xdot5 xdot6 xdot7 xdot8 xdot9 xdot10 xdot11 xdot12].';
x=[x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12].';
u=[u1 u2 u3 u4].';
y=[x1 x2 x3 x9].';

[x_size,aux]=size(x);
[y_size,aux]=size(y);
[u_size,aux]=size(u);

%xdot=subs(xdot,[u1 u2 u3 u4],[m*g 0 0 0])
%[e1 e2 e3 e4 e5 e6 e7 e8 e9 e10 e11 e12]=solve(xdot,[x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12])
% Equilibrium points
%ue=[m*g 0 0 0].';
%xe=[x1 x2 x3 0 0 0 0 0 0 0 0 0].';

%% Jacobian linearization
% Equilibrium points
ue=[m*g 0 0 0].';
xe=[x1 x2 x3 0 0 0 0 0 0 0 0 0].';


JA=jacobian(xdot,x.');
JB=jacobian(xdot,u.');
JC=jacobian(y, x.');

A=subs(JA,[x,u],[xe,ue]); A=eval(A);
B=subs(JB,[x,u],[xe,ue]); B=eval(B);
C=subs(JC,[x,u],[xe,ue]); C=eval(C);

🎉3 参考文献

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

[1]尤小庆. 四轴飞行器的自抗扰控制方法研究[D].华北理工大学,2023.DOI:10.27108/d.cnki.ghelu.2023.001424.

[2]陈辉. 四轴飞行器目标跟踪控制及传感器数据安全研究[D].中国民航大学,2023.DOI:10.27627/d.cnki.gzmhy.2023.000630.

🌈4 Matlab代码实现

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值