基于四旋翼无人机的PD控制研究(Matlab代码实现)

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

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

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

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现

💥1 概述

近年来,无人机(UAV)越来越多地应用于环保、电力、交通、测绘、安防、农业等民用领域。随着现代技术的进步,特别是人工智能技术的快速发展,未来无人机+行业应用的模式具有广阔的应用前景。目前无人机的智能化水平还有待提高,许多应用背后都有无人机操作员在控制无人机.要提高无人机的自动化和智能化水平,还需科研工作者进行大量研究。无人机的自主着陆问题是无人机智能化应用必须解决的关键技术问题,相比无人机航路规划、导航等方面,自主着陆的研究还相对较少。

四旋翼无人机动力学模型
四旋翼无人机是MIMO系统,其动力学模型可表示为(公式比较重要,纯手打):

                     \left\{\begin{array}{l} \ddot{x}=u_{1}(\cos \phi \sin \theta \cos \psi+\sin \phi \sin \psi)-K_{1} \dot{x} / m \\ \ddot{y}=u_{1}(\sin \phi \sin \theta \cos \psi-\cos \phi \sin \psi)-K_{2} \dot{y} / m \\ \ddot{z}=u_{1} \cos \phi \cos \psi-g-K_{3} \dot{z} / m \\ \ddot{\theta}=u_{2}-\frac{l K_{4}}{I_{1}} \dot{\theta} \\ \ddot{\psi}=u_{3}-\frac{l K_{5}}{I_{2}} \dot{\psi} \\ \ddot{\varphi}=u_{4}-\frac{l K_{6}}{I_{3}} \dot{\phi} \end{array}\right.

式中:(x.y.z)为UAV质心在惯性坐标系中的位置.后续仿真中假设UAV可通过自身携带的GPS获得位置信息;\theta\psi\phi为无人机三个姿态的欧拉角,分别为俯仰角、偏航角和滚转角;g为重力加速度:为无人机半径长度;m为UAV之负载总质量;l为围绕每个轴的转动惯量;K为阻力系数。UAV着陆控制目标为:X→xd,y→yd,z一0,\phi→0.

系统方框图如图1所示。外环产生指令信号\theta _{d}\psi _{d}和u,,并将其传递至内环系统,采用双环控制方法设计内外环的控制律。

       

 本文讲解四旋翼无人机的 PD 控制器的增益,并使用它们来控制四旋翼飞行器所需的高度、横滚、俯仰和偏航角。阶跃响应在不同的时刻开始。为所有变量提供比较值(过冲、上升时间和SS误差)。

📚2 运行结果

 

 部分代码:

% Plot the errors
figure(5)
[p q] = size(Ez);
t3 = 0:0.01:5; % For exp.3
hold on
plot(t3,Ez,'r')
plot(t3,Ep,'g')
plot(t3,Et,'b')
plot(t3,Eps,'k')
hold off
title('Error vectors');
legend('Z error','Phi error','Theta error','Psi error');
grid
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
% Variables used to decide the effectiveness of the gains
[a b] = size(Ez);
%     Calculate the overshoot
ZOvershoot = 50;
ROvershoot = 50;
POvershoot = 50;
YOvershoot = 50;
% Height
if (min(Ez) < 0)
    ZOvershoot = abs(min(Ez))*10;  % Height overshoot
end
if (min(Ez) > 0)
    ZOvershoot = 0;  % Height overshoot
end
% Roll
if (min(Ep) < 0)
    ROvershoot = abs(min(Ep))*10;  % Roll overshoot
end
if (min(Ep) > 0)
    ROvershoot = 0;  % Height overshoot
end
% Pitch
if (min(Et) > 0)
    POvershoot = abs(min(-Et))*10;  % Pitch overshoot
end
if (min(Et) < 0)
    POvershoot = 0;  % Height overshoot
end
% Yaw
if (min(Eps) < 0)
    YOvershoot = abs(min(Eps))*10;  % Yaw overshoot
end
if (min(Eps) > 0)
    YOvershoot = 0;  % Height overshoot
end

Overshoot = [ZOvershoot ROvershoot POvershoot YOvershoot]

%     Calculate the steady-state error
Zess = Ez(a);
Ress = Ep(a);
Pess = Et(a);
Yess = Eps(a);

SSError = [Zess Ress Pess Yess]

%     Calculate the rise time
Ztr = 10;
Phitr = 10;
Thetatr = 10;
Psitr = 10;
for i = 1:a
    Ez(i) = Zd - Z(i); % find the error in height
    if abs(Ez(i)) < 0.05
        Ztr = i*stepsize;
        break;
    end
end

for i = 1:a
    Ep(i) = Phid - Phi(i); % find the error in height
    if abs(Ep(i)) < 0.05
        Phitr = i*stepsize;
        break;
    end
end

for i = 1:a
    Et(i) = Thetad - Theta(i); % find the error in height
    if abs(Et(i)) < 0.05
        Thetatr = i*stepsize;
        break;
    end
end

for i = 1:a
    Eps(i) = Psid - Psi(i); % find the error in height
    if abs(Eps(i)) < 0.05
        Psitr = i*stepsize;
        break;
    end
end

Ztr = Ztr - ztime;
Phitr = Phitr - phitime;
Thetatr = Thetatr - thetatime;
Psitr = Psitr - psitime;
 
 
Rise_time = [Ztr Phitr Thetatr Psitr]

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
    % Calculate the controls in order to draw them
    U1 = m*(g + Kpz*Ez + Kdz*( - x(:,6)))./(cos(x(:,9)).*cos(x(:,7)));   % Total Thrust on the body along z-axis
    U2 = (Kpp*Ep + Kdp*( - x(:,8)));   % Roll input
    U3 = (Kpt*Et + Kdt*( - x(:,10)));   % Pitch input
    U4 = (Kpps*Eps + Kdps*( - x(:,12)));   % Yawing moment
    
    U1 = real(U1);
    U2 = real(U2);
    U3 = real(U3);
    U4 = real(U4);

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]宋志强,方武,刘孝赵.基于PD控制的四旋翼无人机着陆控制研究[J].计算机应用与软件,2020,37(09):324-327.

[2]Abdel-Razzak (2022). PD control of quadrotor.

🌈4 Matlab代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

荔枝科研社

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

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

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

打赏作者

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

抵扣说明:

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

余额充值