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



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

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

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

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

                     

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

式中:(x.y.z)为UAV质心在惯性坐标系中的位置.后续仿真中假设UAV可通过自身携带的GPS获得位置信息;

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


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


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

为无人机三个姿态的欧拉角,分别为俯仰角、偏航角和滚转角;g为重力加速度:为无人机半径长度;m为UAV之负载总质量;l为围绕每个轴的转动惯量;K为阻力系数。UAV着陆控制目标为:X→xd,y→yd,z一0,

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

→0.系统方框图如图1所示。外环产生指令信号

和u,,并将其传递至内环系统,采用双环控制方法设计内外环的控制律。       

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

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

📚2 运行结果

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

 

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

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

基于四旋翼无人机的PD控制研究(Matlab代码实现)_参考文献_10

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

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

 部分代码:

% 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
 endOvershoot = [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
 endfor i = 1:a
     Ep(i) = Phid - Phi(i); % find the error in height
     if abs(Ep(i)) < 0.05
         Phitr = i*stepsize;
         break;
     end
 endfor i = 1:a
     Et(i) = Thetad - Theta(i); % find the error in height
     if abs(Et(i)) < 0.05
         Thetatr = i*stepsize;
         break;
     end
 endfor i = 1:a
     Eps(i) = Psid - Psi(i); % find the error in height
     if abs(Eps(i)) < 0.05
         Psitr = i*stepsize;
         break;
     end
 endZtr = 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代码实现