【无人机跟踪】基于矢量场的路径跟随算法的反正弦矢量场制导下无人机路径跟踪附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、算法改进、程序设计科研仿真。
🍎完整代码获取 定制创新 论文复现私信
🍊个人信条:做科研,博学之、审问之、慎思之、明辨之、笃行之,是为:博学慎思,明辨笃行。
🔥 内容介绍
无人机(UAV)在农业、医疗、灾害管理、国防、安全及物流配送等实际场景中应用广泛。在此背景下,人们通常期望无人机能够自主遵循预设路径。路径跟随算法需充分考虑无人机的动态特性,并在优先采用计算成本较低的导航逻辑的前提下实现精准性能。基于矢量场的路径跟随算法提供了一个精妙的框架,将路径规划与跟踪功能融为一体。该方法通过位置导向指令在工作空间的每个点确定独特的航向,从而引导无人机沿预定路径飞行。因此,矢量场方法中的导航输入对位置扰动及飞行器动力学效应具有较强鲁棒性。此外,基于矢量场的路径跟随算法为实现低路径跟随误差提供了有效解决方案[1]。现有矢量场方法研究可大致分为两类:梯度法[2–10]和直接法[11–17]。梯度法通过求解势函数的梯度来推导目标航向;而直接法则利用无人机相对于路径的当前位置直接确定所需航向。Frew等人[2]通过基于圆形路径推导势函数的梯度,提出了李雅普诺夫矢量场方法。该方法中的导航指令包含控制径向速度的收缩项以及调控相对于目标路径切向速度的环流项。参考文献[3]提出了一种沿圆形路径飞行的混合矢量场策略:当无人机初始位置位于圆外时,沿目标圆的切线方向选择最短路径;而在进入圆内区域时,则采用参考文献[2]中提出的矢量场方法。Lim等人[4]对参考文献[2]中的矢量场方法进行了改进,引入了可迭代计算的导航参数以调节无人机速度,实现同时抵达目标圆周的目标。Pothen和Ratnoo[5]通过将环流参数设定为径向距离的函数,提出了一种能更快稳定进入目标圆形路径且所需最大曲率更低的矢量场方法。参考文献[6]进一步将李雅普诺夫矢量场方法扩展至动态星形曲线的追踪。Sun等人[7]对参考文献[5]中的环流参数进行了优化,以改善稳定时间特性。参考文献[8,9]的研究者则基于沿目标路径定义的切向分量与法向分量的矢量和,提出了确定目标航向的基本思路。这两种方法在构成向量场的切向分量构建方式上存在差异。Goncalves等人[8]将切向分量推导为两个函数梯度的叉积,其交点即构成所需路径;而Kapitanyuk等人[9]则通过旋转法向量直接获得切向分量;Wilhelm与Clem[10]则将文献[8]中的路径追踪方法与加权排斥向量场相结合以规避圆形障碍物。基于梯度的方法需要计算梯度值才能得出相应结果。
⛳️ 运行结果
📣 部分代码
close all;clear all; clc;set(groot,'defaulttextinterpreter','latex');set(groot,'defaultLegendInterpreter','latex');%---------------- declaration of constant parameters ---------------------%global rd Vgd k_kai k_kaidot k2 x_c y_crd = 50; % desired radiusVgd = 10; % ground speedk_kai = 100; % autopilot proportional gaink_kaidot = sqrt(k_kai); % autopilot derivative gainred = [0.8500 0.3250 0.0980]; % color for plottingblue = [0 0.4470 0.7410]; % color for plotting%%%%%%%%%%%%%%%%%%%%%% desired circle %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%x_c = 0; % x-coordinate of the centre of desired circley_c = 0; % y-coordinate of the centre of desired circletheta = 0:2*pi/1000:2*pi; % desired circular path angular paramterx_sc = x_c + rd*cos(theta); % x-coordinate of the desired circular pathy_sc = y_c + rd*sin(theta); % y-coordinate of the desired circular path%-------------------------------------------------------------------------%%------------------ initial conditions ---------------------------------%tspan = [0 30]; % simulation run timer_0 = 100; % initial radial distance in mgamma_0 = deg2rad(225); % initial LOS angle in radx0 = r_0*cos(gamma_0) + x_c; % initial UAV position x-coordinate in my0 = r_0*sin(gamma_0) + y_c; % initial UAV position y-coordinate in m% k2 = 14.9260./(r_0 - rd).^2;
