✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab完整代码及仿真定制内容点击👇
🔥 内容介绍
无人机三维路径规划在复杂地形环境中面临着避障和效率的挑战。本文提出了一种基于野狗算法 (DOA) 的无人机三维航迹避障规划方法,该方法能够有效地规划出满足避障和效率要求的三维航迹。该方法首先建立了无人机三维环境模型,然后利用 DOA 算法优化航迹,最后对规划结果进行评估。仿真结果表明,该方法能够有效地规划出避障且高效的三维航迹,为复杂地形环境中的无人机飞行提供了有力的技术支持。
引言
无人机在复杂地形环境中执行任务时,需要规划出满足避障和效率要求的三维航迹。传统的路径规划方法往往难以满足复杂地形环境中的避障要求,而基于人工智能的路径规划方法则具有较高的计算复杂度。
野狗算法 (DOA) 是一种受野狗觅食行为启发的优化算法,具有较强的全局搜索能力和局部搜索能力。本文提出了一种基于 DOA 的无人机三维航迹避障规划方法,该方法能够有效地规划出满足避障和效率要求的三维航迹。
方法
1. 无人机三维环境模型建立
无人机三维环境模型包括地形模型、障碍物模型和目标点模型。地形模型采用数字高程模型 (DEM) 表示,障碍物模型采用三维点云数据表示,目标点模型采用三维坐标表示。
2. 基于 DOA 的航迹优化
DOA 算法是一种基于种群的优化算法,其基本原理是模拟野狗觅食行为。在航迹优化过程中,每个野狗代表一条航迹,野狗种群代表航迹集合。野狗根据自己的位置和周围环境信息更新自己的位置,从而实现航迹的优化。
3. 航迹评估
航迹评估包括避障评估和效率评估。避障评估判断航迹是否与障碍物发生碰撞,效率评估计算航迹的长度和飞行时间。
结果
仿真结果表明,该方法能够有效地规划出避障且高效的三维航迹。与传统路径规划方法相比,该方法规划的航迹避障性能更好,效率更高。
结论
本文提出了一种基于 DOA 的无人机三维航迹避障规划方法,该方法能够有效地规划出满足避障和效率要求的三维航迹。该方法为复杂地形环境中的无人机飞行提供了有力的技术支持,具有广阔的应用前景。无人机三维航迹。该算法可广泛应用于无人机在复杂地形环境中的各种任务。
📣 部分代码
%% Implementation of the Truncated Amplitude Flow algorithm proposed in the paper
%`` Sparse Phase Retrieval via Truncated Amplitude Flow鈥欌? by G. Wang, L. Zhang,
% G. B. Giannakis, M. Akcakaya, and J. Chen
function [Relerrs, z] = SPARTA1(y, x, Params, Amatrix, Supp) %#ok<INUSD>
Arnorm = sqrt(sum(abs(Amatrix).^2, 2)); % norm of rows of Amatrix
ymag = sqrt(y);
normest = Params.m * Params.n1 / sum(sum(abs(Amatrix))) * (1 / Params.m) * sum(ymag);
ynorm = ymag ./ (Arnorm .* normest);
%% finding largest normalized inner products
Anorm = bsxfun(@rdivide, Amatrix, Arnorm);
[ysort, ~] = sort(ynorm, 'ascend');
ythresh = ysort(round(Params.m / (1.2))); %6/5 the orthogonality-promoting initialization parameter
ind = (abs(ynorm) >= ythresh);
%% estimate the support of x
Aselect = Anorm(ind, :);
if Params.support_opi == 1
% based on orthogonality-promoting initialization
rdata_opi= sum(abs(Aselect).^2, 1);
[~, sind_opi] = sort(rdata_opi, 'descend');
Supp_opi = sind_opi(1 : round(Params.n1 - Params.nonK));
else
% based on squared quantities
Ya = bsxfun(@times, abs(Amatrix).^2, y);
rdata = sum(Ya, 1);
[~,sind] = sort(rdata, 'descend');
Supp_opi = sind(1 : (Params.n1 - Params.nonK));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% power iterations for sparse orthogonality-promoting initialization
if Params.power_trunc == 0
z0 = randn(Params.n1, Params.n2);
z0 = z0 / norm(z0, 'fro'); % Initial guess
for t = 1:Params.npower_iter % Truncated power iterations
z0 = Aselect' * (Aselect * z0);
z0 = z0 / norm(z0, 'fro');
end
z0(setdiff((1:Params.n1), Supp_opi)) = 0;
z0 = z0 / norm(z0, 'fro');
z0 = normest * z0; % Apply scaling
elseif Params.power_trunc == 1
z0 = randn(Params.n1, Params.n2);
z0 = z0 / norm(z0, 'fro'); % Initial guess
for t = 1:Params.npower_iter % Truncated power iterations
z0 = Aselect' * (Aselect * z0);
sz0 = sort(abs(z0), 'descend');
z0(abs(z0) < sz0(Params.n1 - Params.nonK) - eps) = 0;
z0 = z0 / norm(z0, 'fro');
end
elseif Params.power_trunc == 2
Aselect = Anorm(ind, Supp_opi);
zk0 = randn(Params.n1 - Params.nonK, Params.n2);
zk0 = zk0 / norm(zk0, 'fro'); % Initial guess
for t = 1:Params.npower_iter % Truncated power iterations
zk0 = Aselect' * (Aselect * zk0);
zk0 = zk0 / norm(zk0, 'fro');
end
z0 = zeros(Params.n1, 1);
z0(Supp_opi) = zk0;
else
Asample = Amatrix(:, Supp_opi);
Arnormx = sqrt(sum(abs(Asample).^2, 2)); % norm of rows of Amatrix
% finding largest normalized inner products
Anormx = bsxfun(@rdivide, Amatrix, Arnormx);
ynormx = ymag ./ (Arnormx .* normest);
ysortx = sort(ynormx, 'ascend');
ythreshx = ysortx(round(Params.m / (1.2))); % 6/5 the orthogonality-promoting initialization parameter
indx = (abs(ynormx) >= ythreshx);
Aselectx = Anormx(indx, Supp_opi);
zk0 = randn(Params.n1 - Params.nonK, Params.n2);
zk0 = zk0 / norm(zk0, 'fro'); % Initial guess
for t = 1:Params.npower_iter % Truncated power iterations
zk0 = Aselectx' * (Aselectx * zk0);
zk0 = zk0 / norm(zk0, 'fro');
end
z0 = zeros(Params.n1, 1);
z0(Supp_opi) = zk0;
end
z = normest * z0; % Apply scaling
Relerrs = norm(x - exp(-1i * angle(trace(x' * z))) * z, 'fro') / norm(x, 'fro'); % Initial rel. error
for t = 1: Params.T
Az = Amatrix * z; %A(z);
ratio = abs(Az) ./ ymag;
yz = ratio > 1 / (1 + Params.gamma_lb);
ang = Params.cplx_flag * exp(1i * angle(Az)) + (1 - Params.cplx_flag) * sign(Az);
grad = Amatrix' * (yz .* ymag .* ang - yz .* Az) / Params.m;
z = z + Params.mu * grad;
[sz, ~] = sort(abs(z), 'descend');
z(abs(z) < sz(Params.n1 - Params.nonK) - eps) = 0;
Relerrs = [Relerrs; norm(x - exp(-1i * angle(trace(x' * z))) * z, 'fro') / norm(x,'fro')]; %#ok<AGROW>
if Relerrs(end) < Params.tol - eps
break;
end
end
⛳️ 运行结果
🔗 参考文献
[1] 徐宏飞.面向智慧避障的物流无人机航迹规划研究[J].北京交通大学[2024-03-23].
[2] 高九州,张焯.基于改进A*算法的无人机三维空间避障路径规划[J].计算机测量与控制, 2023(12):203-209,223.
🎈 部分理论引用网络文献,若有侵权联系博主删除
🎁 关注我领取海量matlab电子书和数学建模资料
👇 私信完整代码和数据获取及论文数模仿真定制
1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱船配载优化、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化
2 机器学习和深度学习方面
2.1 bp时序、回归预测和分类
2.2 ENS声神经网络时序、回归预测和分类
2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类
2.4 CNN/TCN卷积神经网络系列时序、回归预测和分类
2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类
2.7 ELMAN递归神经网络时序、回归\预测和分类
2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类
2.9 RBF径向基神经网络时序、回归预测和分类