✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,
代码获取、论文复现及科研仿真合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab完整代码及仿真定制内容点击👇
🔥 内容介绍
随着技术的不断发展和创新,无人机技术已经成为当今世界上备受关注的领域之一。无人机在农业、环境监测、航空航天等领域有着广泛的应用,而无人机的轨迹跟踪技术则是无人机应用中的重要一环。本文将介绍基于模型预测控制(MPC)模型的无人机轨迹跟踪技术,探讨其原理、应用和发展趋势。
-
无人机轨迹跟踪技术概述 无人机轨迹跟踪技术是指通过控制无人机的飞行轨迹,使其按照预定的路径和速度进行飞行。这项技术在军事、民用和科研领域都有着广泛的应用。无人机轨迹跟踪技术的发展可以提高无人机的自主飞行能力,实现更加精准的飞行任务。
-
模型预测控制(MPC)模型介绍 模型预测控制(MPC)是一种基于模型的控制方法,通过对系统进行建模,预测系统的未来行为,并根据预测结果来调整控制输入,以实现对系统的控制。MPC方法在工业控制、自动驾驶等领域有着广泛的应用。
-
基于MPC模型的无人机轨迹跟踪原理 基于MPC模型的无人机轨迹跟踪技术是将MPC方法应用于无人机的飞行控制中。通过建立无人机的动力学模型和环境模型,预测无人机的未来轨迹,并根据预测结果来调整无人机的控制输入,使其按照预定的轨迹进行飞行。
-
基于MPC模型的无人机轨迹跟踪应用 基于MPC模型的无人机轨迹跟踪技术可以应用于农业植保、环境监测、航空航天等领域。例如,在农业植保中,无人机可以按照预定的轨迹进行飞行,对农田进行精准的喷洒作业;在环境监测中,无人机可以按照预定的轨迹进行飞行,对环境进行实时监测。
-
基于MPC模型的无人机轨迹跟踪发展趋势 随着技术的不断发展,基于MPC模型的无人机轨迹跟踪技术将会得到进一步的完善和应用。未来,随着人工智能、大数据等技术的不断发展,基于MPC模型的无人机轨迹跟踪技术将会实现更加精准的飞行控制,应用范围也将进一步扩大。
总结 基于MPC模型的无人机轨迹跟踪技术是无人机技术领域的重要一环,它可以提高无人机的飞行控制精度,实现更加精准的飞行任务。随着技术的不断发展,基于MPC模型的无人机轨迹跟踪技术将会得到进一步的完善和应用,为无人机技术的发展注入新的动力。
希望本文对基于MPC模型的无人机轨迹跟踪技术有所帮助,谢谢阅读!
📣 部分代码
clc;
clear all;
close all;
% Initial state x(0)
X0=[0;0;(0*pi)/180];
%X0 =[2.3917 ;-1.3973;-1.2586];
vk=0;
Ts=0.005;
%thetak=(120*pi)/180;
thetak=-1.2586;
wk=0;
D=zeros(3,1);
N=50;
Xr=[-2 10 atan(1)]';
% Xr(3)=(atan((-50-X0(2))/(50-X0(1))));
% Xr(3)=(atan((Xr(2)-X0(2))/(Xr(1)-X0(1))));
s=3;
Simlength=(s/Ts);
% Define cost functionx| and expected disturbances
Q=[0.00001 0 0;0 1 0;0 0 100000000];
R=[0.01 0;0 100];
W=ones(1,N)'; % expected demand (this is just an example)
[A B C]=model_system(vk,thetak,Ts);
[Gx,Gu,Gw]=constants_mpc(A,B,D,N);
% Build R_hat
R_hat = kron(eye(N),R);
% Build Q_hat
Q_hat=kron(eye(N),Q);
% Constraints
Ax=[1 0 0;0 1 0;-1 0 0 ;0 -1 0];
bx=100*[150; 150;150; 150];
Au=[1 0;0 1 ;-1 0;0 -1];
bu=[2; 0.01; 0; 0.01];
% Transform into U constraints
Au_hat=kron(eye(N),Au);
bu_hat=kron(ones(N,1),bu);
Ax_hat=kron(eye(N),Ax);
bx_hat=kron(ones(N,1),bx);
% Aggregated U constraints
AU=[Ax_hat*Gu; Au_hat];
bU=[bx_hat-Ax_hat*Gx*X0-Ax_hat*Gw*W;bu_hat];
% MPC into action
Xhist=X0;
Uhist=[];
VK=vk;
THK=thetak;
Disturb= normrnd(0.5,1,Simlength+N,1); %Longer than simulation for prediction horizon
% Simulation loop
XR=[];
% figure();
% plot(Xhist(1,:),Xhist(2,:),'b')
% ylabel('y');
% xlabel('X');
% title('Trayectory');
% grid on;
% hold on;
for k=1:Simlength
% expected disturbances (force that they are different)
W=0*Disturb(k:k+N-1)+0*normrnd(0,0.2,N,1);
% Update controller matrices for current state and disturbances (H and Au are constant)
[A B C]=model_system(vk,thetak,Ts);
Xr(3)=(atan((Xr(2)-X0(2))/(Xr(1)-X0(1))));
%Xr(3)=(atan((-50-X0(2))/(50-X0(1))));
[H,F,AU,bU]=MPC_U(A,B,D,N,W,X0,Xr,Q_hat,R_hat,Au_hat,bu_hat,Ax_hat,bx_hat);
UMPC=quadprog(2*H,2*F,AU,bU);
XR=[XR Xr];
% Apply only first component
u=UMPC(1:size(B,2));
% X1=linearModel(A,B,D,u,Disturb(k),X0);
X1=nonlinearModel(D,u,Disturb(k),X0,thetak,wk,vk,Ts);
vk=saturated(0,20,vk+u(1));
wk=saturated(-1,1,wk+u(2));
thetak=X1(3);
X0=X1;
VK=[VK vk];
THK=[THK thetak];
Xhist=[Xhist X0];
Uhist=[Uhist u];
% plot(Xhist(1,:),Xhist(2,:),'b')
% ylabel('y');
% xlabel('X');
% title('Trayectory');
% grid on;
% hold on;
% pause(0.1);
% Xpredict=Gx*X0+Gu*UMPC+Gw*W;
% Xp=Xpredict(1:3:end);
% Yp=Xpredict(2:3:end);
% THp=Xpredict(3:3:end);
% plot(Xp,Yp,'R')
end
%%
%Simlength=size(Xhist,2);
t=0:Ts:Ts*(Simlength-1);
% figure();
% plot(Xhist);
% hold on;
% plot(Uhist);
% legend('X','U');
% xlim([0 Simlength]);
%u
figure();
subplot(4,1,1);
plot(t,Uhist(1,:));
ylabel('Velocity');
xlabel('Time(s)');
title('Delta Velocity');
grid on;
subplot(4,1,2);
plot(t,Uhist(2,:));
ylabel('Angular Velocity');
xlabel('Time(s)');
title('Delta Angular Velocity');
grid on;
% vk thetak
t2=0:Ts:Ts*(Simlength);
% figure();
subplot(4,1,3);
plot(t2,VK);
ylabel('Velocity');
xlabel('Time(s)');
title('Velocity');
grid on;
subplot(4,1,4);
plot(t2,THK,t2,Xhist(3,:));
%plot(THK);
ylabel('Theta');
xlabel('Time(s)');
title('Theta');
grid on;
% state x and y
figure();
plot(Xhist(1,:),Xhist(2,:))
ylabel('y');
xlabel('X');
title('Trayectory');
grid on;
%%
t=0:Ts:Ts*(Simlength-1);
t2=0:Ts:Ts*(Simlength);
figure();
subplot(3,1,1);
plot(t,XR(1,:),t2,Xhist(1,:));
ylabel('Velocity');
xlabel('Time(s)');
title('Velocity on X axis');
grid on;
% vk thetak
t2=0:Ts:Ts*(Simlength);
% figure();
subplot(3,1,2);
plot(t,XR(2,:),t2,Xhist(2,:));
ylabel('Velocity');
xlabel('Time(s)');
title('Velocity on Y axis');
grid on;
subplot(3,1,3);
plot(t,XR(3,:),t2,THK);
%plot(THK);
ylabel('Theta');
xlabel('Time(s)');
title('Theta');
grid on;
⛳️ 运行结果
🔗 参考文献
[1] 张鑫,吴伊凡,崔永琪.基于改进MPC算法的四旋翼无人机轨迹跟踪控制[J].电子技术与软件工程, 2023(3):148-153.
[2] 石转转,张占东,郭开玺,等.基于MPC模型的滑块轨迹追踪[J].机械工程与自动化, 2021.DOI:10.3969/j.issn.1672-6413.2021.05.014.