✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎 往期回顾关注个人主页:Matlab科研工作室
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。
🔥 内容介绍
一、多无人机编队应用需求与挑战
- 广泛的应用场景:多无人机编队在诸多领域展现出巨大潜力。在军事领域,可执行侦察、监视、攻击等任务,通过编队协同提高作战效能;在民用方面,诸如测绘、物流配送、大型活动安保等场景中,多无人机编队能够凭借集体优势,高效完成任务。例如,在物流配送中,多架无人机编队可共同运输大型货物或按规划路线依次投递小件包裹,大幅提升配送效率;在大型活动安保中,编队无人机能全方位监控活动现场,及时发现并预警异常情况。
- 避障路径规划的挑战:然而,多无人机编队在实际运行中面临复杂的环境,充斥着各种静态和动态障碍物,如建筑物、山脉、其他飞行器等。要实现安全、高效的飞行,避障路径规划成为关键难题。一方面,需要规划出无碰撞的路径,确保每架无人机在飞行过程中都能避开障碍物;另一方面,要维持编队的整体性和协同性,使无人机之间保持合适的相对位置关系,避免相互碰撞。此外,不同的任务需求可能对路径规划有不同的要求,如最短路径、最快到达等,这进一步增加了路径规划的复杂性。传统的路径规划方法在处理多无人机编队的复杂约束和动态环境时,往往难以满足要求。
二、控制障碍函数(CBF)的基本概念与优势
- CBF 的概念:控制障碍函数(CBF)源于控制理论,是一种用于确保系统状态始终保持在安全集合内的数学工具。对于一个动态系统,CBF 通过定义一个关于系统状态的函数 h(x),并设定相应的条件来约束系统的行为。直观地说,h(x) 描述了系统状态 x 与不安全状态的 “距离”,当系统状态接近不安全状态时,h(x) 的值趋近于零。通过设计合适的控制输入,使得 h(x) 满足特定的不等式条件,就能保证系统状态始终处于安全范围内。
- 在多无人机编队中的优势:将 CBF 应用于多无人机编队避障路径规划具有显著优势。首先,CBF 能够自然地处理系统的安全约束,对于多无人机编队而言,这些约束包括避开障碍物以及保持无人机之间的安全距离。通过定义合适的 CBF,可以将这些安全要求转化为数学不等式,在路径规划过程中直接考虑。其次,CBF 可以与其他控制策略相结合,如基于优化的控制方法,形成一种高效的混合控制策略。这使得在满足安全约束的前提下,还能优化其他性能指标,如路径长度、飞行时间等。此外,CBF 具有较好的灵活性和可扩展性,能够适应不同的环境和任务需求,对于动态变化的障碍物和编队结构调整,都能通过调整 CBF 的参数或形式来应对。
三、基于 CBF 的多无人机编队避障路径规划原理
- 安全约束建模:基于 CBF 的多无人机编队避障路径规划,首先要对安全约束进行建模。对于每架无人机,分别考虑其与障碍物以及其他无人机之间的安全关系。例如,定义一个 CBF 来描述无人机与障碍物之间的距离约束,当无人机接近障碍物到一定程度时,CBF 的值开始减小,通过控制输入的调整,使无人机改变飞行方向以保持安全距离。同样,对于无人机之间的相对位置关系,也可以通过 CBF 进行建模,确保编队内无人机之间不会发生碰撞。这些 CBF 函数共同构成了多无人机编队的安全约束条件。
- 路径规划与控制协同:在建立安全约束模型后,将路径规划与控制设计协同进行。通常采用基于优化的方法,在满足 CBF 定义的安全约束条件下,优化某个性能指标,如总路径长度最短或飞行时间最短。这意味着在每一个决策时刻,根据当前的系统状态和安全约束,计算出最优的控制输入,使得无人机既能避开障碍物,保持编队的安全性,又能朝着目标位置前进。通过不断迭代这个过程,逐步规划出多无人机编队的避障路径。在实际应用中,这种方法能够实时响应环境变化,当出现新的障碍物或编队结构发生改变时,通过重新求解优化问题,及时调整路径和控制输入,保证多无人机编队的安全、高效运行。
综上所述,基于控制障碍函数的多无人机编队避障路径规划为解决多无人机在复杂环境中的安全飞行和协同问题提供了一种有效的途径,具有重要的理论研究价值和实际应用前景。
⛳️ 运行结果
📣 部分代码
function [responses, totalReward, rewardVsTime] = runTest(rightAnswers, socIn, socInWeight, momentum, rewardAmount, epsilon, discount)
%runTest return a vector of binary responses to the test questions and the
%reward gathered.
%rightAnswers - Row vector of correct answers. Should be a binary vector.
%socIn - Row vector of social input for each question. Should be a binary
%vector.
%socInWeight - The amount social input is considered. Should be a number
%from 0 to 0.9.
%momentum - The rate at which the rate of change of the left and right
%quality changes. This allows the neural network to handle volitility.
%rewardAmount - The reward received per correct answer.
%epsilon - The learning rate.
numQuestions = size(rightAnswers, 2);
rewardVsTime = zeros(2, numQuestions); %for plotting
totalReward = 0;
QL = 0.5; %quality of left decision
qLInc = 0;
QR = 0.5; %quality of right decision
qRInc = 0; %amount
for i = 1:numQuestions
SI = socIn(i);
RA = rightAnswers(i);
%changes the SI to either -1 or 1. Treated as the output of a
%linear neuron with weight of 2 connecting it to SI and a bias of
%-1.
linNeuOut = -1 + 2*SI;
%Takes quality of a left decision and gives it a weight of 1,
%and takes the quality of a right decision and gives it a weight of
%-1, then feeds them both as input to a neuron with a tan activation
%function, bounding it between -1 and 1.
tanhNeuOut = tanh(QL - QR);
%combines the modified social input and the output of the tan
%neuron into one value, then feeds it as input into a binary
%threshold neuron.
binNeuIn = linNeuOut*socInWeight + tanhNeuOut;
binNeuOut = (binNeuIn > 0)*1;
responses(i) = binNeuOut;
%Set the current reward to 0 if none was earned or the amount per
%correct answer if the right answer was given, then add it to the
%total reward.
currentReward = (RA == binNeuOut)*rewardAmount;
totalReward = totalReward + currentReward;
%reward time plot variable recording.
rewardVsTime(1, i) = i;
rewardVsTime(2, i) = totalReward;
%Update the QBlock which won out, if it failed to be correct the
%reward input will be 0, if it was right it will be the set reward
%per answer
if tanhNeuOut > 0
[QL, qLInc] = updateQBlock(epsilon, momentum, discount, QL, qLInc, currentReward);
elseif tanhNeuOut <= 0
[QR, qRInc] = updateQBlock(epsilon, momentum, discount, QR, qRInc, currentReward);
end
end
end
%NEURAL NETWORK DIAGRAM
% | OUTPUT
% (bin)
% /\
% w=socInWeight/ \w=1
% / \
% / \
% (linNeu) (tanhNeu)
% /| /\
% / | w=1/ \w=-1
% / |w=2 / \
% -1 | (QL) (QR)
% |
% |
% |
% SI INPUT
🔗 参考文献
[1]邓彦松.多自主体编队及协调控制研究[D].电子科技大学,2013.DOI:10.7666/d.D763413.
🍅往期回顾扫扫下方二维码