基于增量 PID 的四旋翼无人机离散化建模与轨迹跟踪实现附MATLAB代码

简介: ✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。🔥 内容介绍一、四旋翼无人机轨迹跟踪的重要性与挑战重要性:四旋翼无人机凭借其灵活的机动性和广泛的应用场景,在航拍、物流配送、农业植保、电力巡检等众多领域发挥着关键作用。在这些应用中,精确的轨迹跟踪能力是确保无人机完成任务的核心要素。例如,在电力巡检中,无人机需要沿着预

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。

🍎 往期回顾关注个人主页:Matlab科研工作室

👇 关注我领取海量matlab电子书和数学建模资料

🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。

🔥 内容介绍

一、四旋翼无人机轨迹跟踪的重要性与挑战

  1. 重要性:四旋翼无人机凭借其灵活的机动性和广泛的应用场景,在航拍、物流配送、农业植保、电力巡检等众多领域发挥着关键作用。在这些应用中,精确的轨迹跟踪能力是确保无人机完成任务的核心要素。例如,在电力巡检中,无人机需要沿着预设的输电线路轨迹飞行,以便清晰拍摄线路设备,及时发现潜在故障;在物流配送里,准确按照规划轨迹飞行能保证货物准确送达目的地。
  2. 挑战:四旋翼无人机是一个高度非线性、强耦合的复杂系统。其四个旋翼产生的升力不仅决定了无人机的垂直运动,还会对其姿态(俯仰、滚转、偏航)产生影响,各运动状态之间相互关联。此外,飞行过程中会受到多种外界干扰,如气流变化、阵风等,这些干扰增加了实现精确轨迹跟踪的难度。传统的控制方法难以应对这种复杂的系统动态和干扰,因此需要更有效的控制策略。

二、四旋翼无人机的离散化建模

四、基于增量 PID 的轨迹跟踪实现

  1. 跟踪原理:在四旋翼无人机轨迹跟踪过程中,将期望轨迹按照离散时间步进行划分,每个时刻的期望位置、姿态等信息作为参考输入。增量 PID 控制器实时计算无人机实际状态与期望状态的误差,根据上述增量 PID 算法计算出控制量增量,通过调整四个旋翼的转速来改变无人机的受力和力矩,从而调整其运动状态,使其逐渐逼近期望轨迹。例如,当无人机的实际位置偏离期望轨迹时,增量 PID 控制器会根据位置误差计算出相应的控制量增量,增加或减少旋翼升力,使无人机回到期望轨迹上。
  2. 优势与效果:基于增量 PID 的控制策略结合四旋翼无人机的离散化建模,能够较好地应对无人机系统的非线性和强耦合特性。离散化建模为增量 PID 控制器提供了适合数字处理的系统模型,而增量 PID 控制器能够根据实时误差快速调整控制输入,有效抑制外界干扰对轨迹跟踪的影响,实现较为精确的轨迹跟踪效果。同时,增量 PID 算法相对简单,计算量小,适合在无人机搭载的有限计算资源平台上运行,保证了控制的实时性。

⛳️ 运行结果

📣 部分代码

function x_dot=EOMs(in)

% Forces and Moments, and Equations of Motion


% *** QUANTITY ****** UNITS *********************************************

% *** mass -> {slugs}

% *** length -> {ft}

% *** area -> {ft^2}

% *** velocity -> {ft/s}

% *** acceleration-> {ft/s^2}

% *** density -> {slugs/ft^3}

% *** force -> {lbf}

% *** moments -> {lbf-ft}

% *** angles -> {radians} (calculations)

% *** velocity -> {ft/s}

% *** ang. vel. -> {rad/s}

% *** ang. accel. -> {rad/s^2}

% ***********************************************************************

global maneuver alpha_dot

% maneuver is a parameter that sets version to sim (glide or turn)

%x_dot=zeros(12,1);

% extract inputs from input vector

T           = in(1);            % Thrust

de          = in(2);            % Elevator Deflection (down is +) {deg}

drt         = in(3);            % Rudder Deflection {deg}

da          = in(4);            % Aileron Deflection (deg)


% extract states from input vector

V           = in(5);            % Velocity {ft/s}

gamma       = in(6);            % Flight path angle {rad}

alpha       = in(7);            % Angle of attack {rad}

q           = in(8);            % Pitch Rate {rad/s}

p           = in(9);            % Roll Rate {rad/s}

mu          = in(10);           % Bank Angle (About Velocity Vector) {rad}

beta        = in(11);           % Sideslip Angle {rad}

r           = in(12);           % Yaw Rate {rad/s}

chi         = in(13);           % Heading angle {rads}

north       = in(14);           % North Position {ft}

east        = in(15);           % East Position {ft}

h           = in(16);           % Altitude {ft}

% extract simulation time{sec} from input(used to calculate windup thrust)

tm          = in(17);


% DEFINE ANY NEEDED TERMS THAT APPEAR IN THE E.O.M.'S

% Define and/or Calculate Necessary Constants

d2r         =pi/180;            %Convert Degrees to Rads -- Although it s already

                               %coded in Matlab (DEG2RAD) - Checked

r2d         =180/pi;            %Convert Rads to Degrees -- Although it s already

                               %coded in Matlab (RAD2DEG) - Checked

rho         =.0023081;          %Air Density (Slugs per ft^3) - Checked

g           =32.17;             %Gravity - Checked

m           =.487669;           %Slugs - Empty Mass of A/C (w/o fuel)(7.117 Kg empty)

Iyy         =1.5523;            %Inertias Experimentally determined using Empty Mass

Ixx         =1.9480;            %Inertia Units are (slugs*ft^2) - Checked

Izz         =1.9166;            % - Checked

Ixz         =0;                 %Assumed zero due to symmetric aircraft - Assumed

S           =10.56;             %Square Feet - Wing Area Converted from

                               %Manuf 1520 sq in area - Checked (also Matches DigDat)

CLow        =.421;              %from Look up table for Eppler 193 at AoA=0,

                               %DigDat = .421, Line # 277 - Checked CL column

CLaw        =4.59;              %Coef of Lift for finite wing = Cla/(1+ (Cla/(pi*ARw*e)

                               %DigDat = 4.59, Line #276-277, CLA column- Checked

CDminw      =.011;              %DigDat Min Drag of Wing at AoA = -6 deg,

                               %Dig Dat Line# 274- Checked

ARw         =7.9456;            %Aspect Ratio AR = (b^2)/S- Checked

e           = .75;              %Span efficiency factor -estimation- Checked

Kw          = 1/(pi*ARw*e);     % = 1/(pi*AR*e)- Checked

Cmw         =-0.005;            %DigDat = AoA =0, Line #277- Checked

cgw         =-.416;             %Distance Aero Center is back from CG, 5 Inches

c           =1.3333;            %Feet - Root Chord of Wing (16")- Checked

b           =9.16;              %Feet - Span (110")- Checked

lambda      =.72955;            %Taper Ratio from S=(Cr*(1+Lambda)*b)/2- Checked

CLat        =.76;               %Dig Dat, Line #346, CLA Column- Checked

CDmint      =.002;              %Dig Dat, Line #345, at AoA = -2 deg

Kt          =.446;              %=1/(pi*e*AR) =SET SAME AS WING OR DIGDAT From BLAKE

it          =2*d2r;             %Tail incidence 2 degrees

Te          =.422;              %Blake from DigDat

nt          =1;                 %Blake from DigDat

St          =S;                 %Horiz Tail Area Square Feet=Reference Area = Wing Area

cgt         =3.5;               %Distance tail Aero Center back from A/C CG,

                               %42 inches - Measured

CLavt       =.0969;             %Dig Dat Line #190

CDminvt     =.001;              %Dig Dat Line #409, AOA = -10 deg, Column CD

Svt         =S;                 %Vert Tail Area Square Feet = Reference Area = Wing Area

Tr          =.434;              %Blake from DigDat

nvt         =nt;                %Same as Hori Tail

cgvt        =cgt;               %Same as Hori tail

Cmaf        =.114;              %Dig Dat, Line#209, at AoA = 0

CDf         =.005;              %Dig Dat, Line#209, at AoA = 0

Cnda        = -0.0128;          %per rad DigDat

Clda        = 0.244;            %per rad DigDat


% Define/calculate any needed coefficients, forces, etc.

CLw         =CLow+CLaw*alpha;

CDw         =CDminw+Kw*CLw^2;

E           =2*(CLow+CLaw*(alpha-alpha_dot*(cgt+cgw)/V))/(pi*ARw);

alphat      =alpha+it+Te*de+q*cgt/V-E;

CLt         =CLat*alphat;

CDt         =CDmint+Kt*CLt^2;

Cmf         =Cmaf*alpha;

CDvt        =CDminvt;

Clp         =-1/12*CLaw*(1+3*lambda)/(1+lambda);

Clb         =-.1;

Clr         =.01;

qb          =.5*rho*V^2;

Lw          =qb*S*CLw;

Dw          =qb*S*CDw;

Mw          =qb*S*c*Cmw;

Lt          =nt*qb*St*CLt;

Dt          =nt*qb*St*CDt;

Df          =qb*S*CDf;

Mf          =qb*S*c*Cmf;

Dvt         =nt*qb*Svt*CDvt;


% Calculate Forces and Moments

% Lift

L           =Lw+Lt*cos(E-q*cgt/V)-(Dt+Dvt)*sin(E-q*cgt/V);

% Drag

D           =Dw+(Dt+Dvt)*cos(E-q*cgt/V)+Lt*sin(E-q*cgt/V)+Df;

% Side Force

Y           =nvt*qb*Svt*CLavt*(-beta+Tr*drt+r*cgvt/V);

% Pitch Moment

Mc          =Lw*cgw*cos(alpha)+Dw*cgw*sin(alpha)+Mw-Lt*cgt*...

   cos(alpha-E+q*cgt/V)-(Dt+Dvt)*cgt*sin(alpha-E+q*cgt/V)+Mf;

% Yaw Moment

Nc          =-qb*nvt*Svt*CLavt*(-beta+Tr*drt+r*cgvt/V)*cgvt+(-qb*S*b*Cnda*da);

% Roll Moment

Lc          =qb*S*b^2/(2*V)*(Clp*p+2*V/b*Clb*beta+Clr*drt+Clda*da*2*V/b);


% -=-=-=-=-=- NONLINEAR 6-DOF EQUATION OF MOTION (EOMs) -=-=-=-=-=-=-=-=-

%

% These are the state derivative equations; the comment names the state,

% but the equation is for its derivative (rate)

%

% The equations are arranged by aircraft mode

%

% NOTE: These assume that Ixz=0, if not, then eq's need to be modified

% Longitudinal (phugoid and short period): V, gamma, q, alpha

% Phugoid: V, gamma

% Velocity

x_dot       =1/m*(-D*cos(beta)+Y*sin(beta)+T*cos(beta)*cos(alpha))-...

   g*sin(gamma);

% Flight Path Angle

gamma_dot   =1/(m*V)*(-D*sin(beta)*sin(mu)-Y*sin(mu)*cos(beta)...

   +L*cos(mu)+T*(cos(mu)*sin(alpha)+sin(mu)*sin(beta)*cos(alpha)))...

   -g/V*cos(gamma);

% Short Period: alpha, q

% Angle of Attach

alpha_dot   =q-tan(beta)*(p*cos(alpha)+r*sin(alpha))-1/(m*V*cos(beta))...

   *(L+T*sin(alpha))+g*cos(gamma)*cos(mu)/(V*cos(beta));

% Pitch Rate

q_dot       =Mc/Iyy+1/Iyy*(Izz*p*r-Ixx*r*p);

% Lateral (roll) - Directional (yaw): p, mu, beta, r

% Roll: p, mu

% Roll Rate

p_dot       =Lc/Ixx+1/Ixx*(Iyy*r*q-Izz*q*r);

% Bank Angle (about velocity vector)

mu_dot      =1/cos(beta)*(p*cos(alpha)+r*sin(alpha))+1/(m*V)*(D*sin(beta)...

   *cos(mu)*tan(gamma)+Y*tan(gamma)*cos(mu)*cos(beta)+L*(tan(beta)+...

   tan(gamma)*sin(mu))+T*(sin(alpha)*tan(gamma)*sin(mu)+sin(alpha)*...

   tan(beta)-cos(alpha)*tan(gamma)*cos(mu)*sin(beta)))-...

   g/V*cos(gamma)*cos(mu)*tan(beta);

% Dutch Roll: beta, r

% Side Slip Angle

beta_dot    =-r*cos(alpha)+p*sin(alpha)+1/(m*V)*(D*sin(beta)+Y*cos...

   (beta)-T*sin(beta)*cos(alpha))+g/V*cos(gamma)*sin(mu);

% Yaw Rate

r_dot       =Nc/Izz+1/Izz*(Ixx*p*q-Iyy*p*q);

% Heading Angle (from North)

chi_dot     =1/(m*V*cos(gamma))*(D*sin(beta)*cos(mu)+Y*cos(mu)*cos(beta)...

   +L*sin(mu)+T*(sin(mu)*sin(alpha)-cos(mu)*sin(beta)*cos(alpha)));


% Kinematic Equations

% North Position

n_dot       =V*cos(gamma)*cos(chi);

% East Position

e_dot       =V*cos(gamma)*sin(chi);

% Altitude

h_dot       =V*sin(gamma);

% Pack derivatives into output vector x_dot

x_dot(1)    = V_dot;

x_dot(2)    = gamma_dot;

x_dot(3)    = alpha_dot;

x_dot(4)    = q_dot;

x_dot(5)    = p_dot;

x_dot(6)    = mu_dot;

x_dot(7)    = beta_dot;

x_dot(8)    = r_dot;

x_dot(9)    = chi_dot;

x_dot(10)   = n_dot;

x_dot(11)   = e_dot;

x_dot(12)   = h_dot;

end

🔗 参考文献

[1]张伟,张三乐,宋小康,等.四旋翼无人机的运动控制与轨迹规划[J].西安文理学院学报(自然科学版), 2023, 26(4):40-48.DOI:10.3969/j.issn.1008-5564.2023.04.007.

🍅往期回顾扫扫下方二维码

相关文章
|
机器学习/深度学习 存储 监控
yolov5单目测距+速度测量+目标跟踪(算法介绍和代码)
yolov5单目测距+速度测量+目标跟踪(算法介绍和代码)
|
4月前
|
人工智能 安全 测试技术
VS Code 使用 Codex 教程:从安装到配置,一篇讲清楚
宇哥带你零基础玩转VS Code+Codex!本教程手把手教你配置API、接入中转服务、分析项目、修复Bug、生成接口与重构代码,安全高效提升开发效率。(238字)
5905 2
VS Code 使用 Codex 教程:从安装到配置,一篇讲清楚
|
10月前
|
机器学习/深度学习 数据可视化 算法
【无人机】四旋翼无人机建模+分析+仿真可视化的matlab代码,非线性刚体动力学模型、解耦的线性传递函数模型
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页: Matlab科研工作室  👇 关注我领取海量matlab电子书和数学建模资料  🍊个人信条:格物致知, 完整Matlab代码获取 及仿真咨询内容私信。 🔥  内容介绍  一、研究背景与主题引入 四旋翼无人机凭借垂直起降、空中悬停及高机动性等特性,在航拍、物流配送、农业植保、电力巡检等领域广泛应用。其动力学系统具有强非线性、强耦合特性,且受空气动力学效应、电机动力学滞后及外界扰动(如阵风)影响显著。传统线性控制方法在复杂飞行场景中易出现超调、振荡
345 1
|
7月前
|
消息中间件 存储 监控
【Kafka核心】三大核心模块:消费者组、重平衡Rebalance、offset提交
本文系统梳理Kafka消费端三大核心:消费者组(架构载体与扩展基础)、重平衡(动态调度与容灾机制)、offset提交(进度持久化与语义保障),深入解析其原理、流程、强耦合关系及生产级优化方案,覆盖从入门到落地的全链路实践。
|
8月前
|
人工智能 安全 开发者
阿里云 JVS Claw 全面开放公测!零门槛对接百炼大模型,免费解锁 AI 智能体全能力
阿里云 JVS Claw 智能体平台正式公测,零门槛开放,深度集成千问 3.5、万相视频等百炼全栈大模型,支持语音输入、专属文件空间、Skill 管控等 10+ 新功能,助力个人与企业轻松实现 AI 自动化工作流。
|
9月前
|
机器学习/深度学习 人工智能 测试技术
Agent Lightning:微软开源的框架无关 Agent 训练方案,LangChain/AutoGen 都能用
Agent Lightning 是微软推出的开源工具,专攻AI Agent“训练鸿沟”——无需修改代码,即可为LangChain、AutoGen等任意框架注入强化学习、Prompt优化与微调能力,让Agent在真实交互中持续进化。
503 7
Agent Lightning:微软开源的框架无关 Agent 训练方案,LangChain/AutoGen 都能用
|
8月前
|
前端开发
前端开发 之 15个页面加载特效中【附完整源码】
本篇文章内容展示了毒药水加载、圆环百分比加载、圆点加载等页面炫酷加载特效,并给出了完整的代码及注释
446 2
|
10月前
|
存储 弹性计算 测试技术
阿里云最便宜服务器多少钱?2026年38 元1年最便宜的阿里云轻量服务器测评
在阿里云的云服务器产品中,38 元 / 年的轻量应用服务器是性价比极高的入门选择,尤其适合个人开发者和小型项目需求。这款服务器以极低的成本提供了实用的配置,同时也有明确的购买限制,若不符合购买条件,也有针对老用户的替代方案。下面从配置详情、购买规则、使用限制及替代选择四方面,用通俗语言详细解析。
|
11月前
|
存储 人工智能 JSON
构建AI智能体:五十四、智能投资顾问的两种实现:反应式与深思式实践策略对比
反应式与深思熟虑式智能投资顾问架构代表了AI在投资咨询领域应用的两种不同哲学和实践路径。反应式架构以其快速响应、高可扩展性的特点,适合标准化、高并发的咨询场景;而深思熟虑式架构通过深度推理、个性化服务为复杂投资决策提供专业支持。未来智能投顾的发展方向不是二选一,而是通过混合架构实现优势互补。金融机构应根据自身业务特点、客户群体和技术能力,选择合适的架构组合策略。对于追求极致用户体验的机构,可以优先部署反应式架构快速获客;对于服务高净值客户的机构,则应重点建设深思熟虑式架构提供深度服务。
1000 8

热门文章

最新文章