✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。
🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:做科研,博学之、审问之、慎思之、明辨之、笃行之,是为:博学慎思,明辨笃行。
🔥 内容介绍
一、研究亮点总结
适配不同检测目的的路径生成:所提出的算法能够针对不同的检测目的(基于不同检测距离需求),生成适宜的检测路径,例如用于裂缝检测和摄影测量的路径。这意味着该算法具备灵活性,可根据实际检测任务的特点,生成满足特定需求的无人机飞行路径,以获取最有效的检测数据。
优化路径的性能提升:与传统方法相比,所提出的优化方法生成的可行检测路径在总转弯角度和加速度方面有显著改善。通过在优化目标中纳入转弯角度,有助于提高检测路径的整体平滑度,降低无人机在飞行过程中的遍历难度,从而更高效且稳定地完成检测任务。
二、亮点的意义解读
混合视点生成技术的关键作用:混合视点生成技术在生成适合不同目的的检测路径时至关重要,同时还能满足不同的覆盖要求。不同的检测任务可能需要从不同的视角、距离对目标结构进行观察。例如,裂缝检测可能需要更近距离、特定角度的观察,而摄影测量可能需要更全面、均匀的覆盖。混合视点生成技术能够综合考虑这些因素,生成满足多样化需求的视点,进而规划出合适的检测路径。
转弯角度优化对路径平滑度的影响:将转弯角度纳入优化目标,可有效改善检测路径的整体平滑度。无人机在飞行过程中,频繁或过大的转弯角度会增加飞行的复杂性和能耗,同时可能影响检测数据的稳定性和准确性。通过优化转弯角度,不仅能降低遍历难度,还能使无人机更平稳地飞行,有助于提高检测质量和效率。
三、研究方法与流程
混合视点生成:此为研究的首要步骤,旨在生成适用于不同检测目的和覆盖要求的视点集合。这些视点将作为后续路径规划的基础,确保无人机能够从合适的位置和角度对目标结构进行检测。
多层角度 - 距离旅行商问题(ML - ADTSP)求解:该问题的解决旨在降低无人机检测过程中的总能耗以及检测路径的复杂性。通过求解此问题,优化无人机在各个视点之间的飞行路径,使得飞行过程更加高效、节能。
两步遗传算法(GA)应用:采用两步遗传算法来解决上述组合优化问题。遗传算法是一种强大的优化工具,通过模拟生物进化过程中的选择、交叉和变异等操作,逐步搜索最优解。在本研究中,通过两步遗传算法对 ML - ADTSP 进行求解,以找到最优的检测路径。同时,还对不同交叉函数的性能进行了讨论,以确定最适合该问题的交叉函数,进一步提高算法的优化效果。
四、研究成果与应用前景
模拟结果展示:通过求解 ML - ADTSP,模拟结果表明无人机在整个检测路径上的平均加速度显著趋于平稳。这直接体现了优化后的路径更加平滑,降低了无人机飞行过程中的加减速变化,从而提高了路径的整体质量,减少了遍历难度。
应用扩展性:经过轻微的底层优化,所提出的框架可应用于检测不同的结构。这显示了该研究成果具有广泛的适用性,不仅适用于特定的检测任务和目标结构,还能在不同的实际场景中发挥作用,为无人机三维全覆盖检测路径规划提供了一种通用且有效的解决方案,具有较高的实用价值和应用前景。
⛳️ 运行结果
📣 部分代码
% parfor i = 1:overall_vis_size %Loop for all viewpoint
%%%%% Update %%%%%
for i = 1:overall_vis_size %Loop for all viewpoint
for ii = 1:vp_size %Loop for visibility of viewpoint
if Viewpoint.v(ii).visibility(i) > 0
constraints(i,ii) = 1;
end
end
end
ctsr_id = zeros(overall_vis_size,1);
for i = 1:overall_vis_size
if Overall_visibility(i) == LowG_flag
ctsr_id(i) = 1;
end
end
ctsr_id = logical(ctsr_id);
constraints(ctsr_id,:) = [];
set_cover = optimproblem;
vp = optimvar('vp', size(Viewpoint.v,2), 'Type','integer', 'LowerBound',0, 'UpperBound',1);
set_cover.Objective = sum(vp);
meshconstr = optimconstr(size(constraints,1),1);
constrsize = size(meshconstr,1);
for i = 1:constrsize
meshconstr(i) = constraints(i,:)*(vp) >= mesh_overlap;
end
set_cover.Constraints.mesh = meshconstr;
problem = prob2struct(set_cover);
problem.options.MaxTime = 600;
[SCP_solution,fval,exitflag,output] = intlinprog(problem);
SCP_solution = logical(round(SCP_solution));