💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
摘要:
在经典编队控制研究中,通常难以充分发挥智能体之间通信链路的潜力,因为所采用的通信链路通常被假设为理想的,或者在一定通信范围内是理想的。在本文中,考虑了一种更现实的通信信道模型,并提出了一种新的通信感知编队控制方法,旨在优化编队系统的通信性能。研究发现了一个充分必要条件,用于在现实通信环境中实现可行的编队。随后,针对具有拓扑切换的多智能体系统,提出了一种通信感知编队控制方法。严格证明了所提出的算法能够优化编队系统的通信性能。最后,通过一个仿真例子来说明所提出的设计。
在早期的编队控制理论研究中,通常假设编队设计中的通信链路是理想的 [3–5]。也就是说,智能体之间不存在路径损耗,每个智能体都能有效地与其他所有智能体通信。在过去十年中,提出了更具现实意义的通信链路模型,其中大多数基于通信范围 [6–13],采用二元信道模型,即假设在发射机的一定半径内通信质量是理想的(100%),超出该范围则为零。在这些研究中,控制律的设计基于给定的通信约束,而不依赖于通信链路的实时质量。然而,这一事实意味着智能体失去了对通信环境变化做出反应的能力。
近年来,控制与通信领域对移动智能体的现实通信链路建模给予了广泛关注 [14–23]。这一研究兴趣源于对未来多智能体机器人网络的设想,即在未来不久,这些网络将在恶劣的未知环境中合作适应和学习,以实现共同目标 [14]。许多无线链路指标,包括误码率 [2]、接收信号功率 [14,16]、中断概率 [15,21]、传输速率 [17,19,20,22,23] 和接收信噪比(CNR)[18],已被用于移动智能体网络中,以建模智能体之间的通信链路。在现实的通信环境中,智能体之间的信道质量与其位置或相对距离密切相关 [19]。由于智能体之间的信道质量可以由智能体本地测量或估计,因此基于信道质量而不是位置或距离信息作为反馈,为智能体设计了通信感知控制器。
受移动智能体通信链路建模新进展的启发,本文旨在研究多智能体系统在实际通信环境中的编队控制。我们使用接收概率(无线通信理论中一个现实的信道指标)来建模智能体之间的通信链路 [24]。在所提出的信道模型中,信道质量并非假设为理想或在通信范围内理想,而是随着传播距离的增加而衰减,从而更准确地描述了实际通信环境中物理信号的传输。
在经典的编队控制方案中,智能体之间的期望距离通常是预先定义的,然后设计梯度控制器以保持期望距离并维持编队 [1]。只要期望距离在预先定义的通信范围内,设计者可以任意选择该距离。然而,这些控制器设计解决方案可能不足以应对实际通信环境中的编队控制,因为通信环境的条件可能随时间和空间变化。预先定义的期望距离可能无法在不同的通信环境中始终保证智能体之间的最优通信。一个更合理的想法是直接优化编队系统的通信性能,而不是保持预定义的期望距离[11]。
通过对现有编队控制方案中通信链路模型和控制器设计方法的关注,我们试图提出一种新的通信感知编队控制策略,用于实际通信环境中的多智能体系统。设计的目的是既要保持稳定的编队,又要优化编队系统的通信性能。本文的贡献有两方面:
第一,我们使用接收概率来建模智能体之间的通信链路,并弥合了通信链路模型与图拓扑模型之间的差距。然后,为实际通信环境中的编队系统提出了一个通信性能指标,实现了天线远场和近场通信之间的平衡。进一步提供了在实际通信环境中实现可行编队的充分必要条件。
第二,我们设计了一种新的通信感知编队控制律,以维持编队并优化通信性能。在所提出的编队控制方法中,智能体形成一种优化其通信性能的配置,而无需预先定义期望距离。通过理论分析和仿真实例,严格证明了所提出方法在优化通信性能方面优于经典编队方法的优越性。
在本文中,我们提出了一种新的通信感知编队控制策略,用于实际通信环境中的多智能体系统。智能体之间的通信链路通过接收概率进行建模,这为智能体之间的单输入单输出(SISO)信道提供了更准确的描述。然后,我们为编队系统设计了一个通信性能指标,实现了天线远场通信和天线近场通信之间的平衡。通过直接优化通信性能而不是保持预定义的期望距离,设计了通信感知编队控制律。利用非光滑技术工具,分析了所提出控制器的稳定性和收敛性。通过理论分析,严格证明了所提出的通信感知控制策略在优化通信性能方面的优越性。此外,还提供了仿真结果以说明所提出设计的有效性。未来的工作将集中在移动智能体的概率信道建模以及编队系统的自适应控制器设计上。
详细文章见第4部分。
PPT部分截图:
📚2 运行结果
2.1 Matlab代码运行结果
2.2 Python运行结果
部分代码:
% Import the helper functions from utils.m
helper = utils;
%---------------------------%
% Initialize all parameters %
%---------------------------%
max_iter = 500; % maximum number of iterations
alpha = 10^(-5); % system parameter about antenna characteristics
delta = 2; % required application data rate
beta = alpha*(2^delta-1);
v = 3; % path loss exponent
r0 = 5; % reference distance between antenna near and far-field
PT = 0.94; % reception probability threshold
rho_ij = 0;
% Initialize agents' positions
swarm = [
-5, 14;
-5, -19;
0, 0;
35, -4;
68, 0;
72, 13;
72, -18;
];
% Initialize the swarm size
swarm_size = size(swarm, 1);
% Initialize the velocity of each agent
swarm_control_ui = zeros(swarm_size, swarm_size);
% Initialize the communication qualities
communication_qualities_matrix = zeros(swarm_size, swarm_size);
% Initialize the distances matrix to record the distances between agents
distances_matrix = zeros(swarm_size, swarm_size);
% Initialize the matrix to record the aij (near-field communication quality) value to indicate neighboring agents
neighbor_agent_matrix = zeros(swarm_size, swarm_size);
% Initialize performance indicators
Jn_list = []; % Store all average communication performance values
rn_list = []; % Store all average neighboring distance values
% Initialize timer
start_time = tic;
t_elapsed = [];
% Assign a different color to each edge-label pair
edge_colors = rand(swarm_size, swarm_size, 3);
% Assign a different color to each agent node
node_colors = [
108 155 207; % Light Blue
247 147 39; % Orange
242 102 171; % Light Pink
255 217 90; % Light Gold
122 168 116; % Green
147 132 209; % Purple
245 80 80 % Red
] / 255; % Divide by 255 to scale the RGB values to the [0, 1] range
% Define the figure positions
figure_positions = [
%Left Bottom Right Width Height
200, 480, 500, 400; % Position for Figure 1
750, 480, 500, 400 % Position for Figure 2
200, 10, 500, 400; % Position for Figure 3
750, 10, 500, 400; % Position for Figure 4
];
fig1 = figure('Position', figure_positions(1, :)); % Formation scene plot
fig2 = figure('Position', figure_positions(2, :)); % Node trace plot
fig3 = figure('Position', figure_positions(3, :)); % Jn plot
fig4 = figure('Position', figure_positions(4, :)); % rn plot
%----------------------%
% Formation Controller %
%----------------------%
for iter=1:max_iter
fprintf("Iteration %d\n", iter);
for i=1:swarm_size
for j=setdiff(1:swarm_size, i)
rij = helper.calculate_rij(swarm(i, :), swarm(j, :));
aij = helper.calculate_aij(rij, alpha, delta, r0, v);
gij = helper.calculate_gij(rij, r0);
if aij>=PT
rho_ij = helper.calculate_rho_ij(rij, r0, v, beta);
else
rho_ij=0;
end
qi = [swarm(i,1), swarm(i,2)];
qj = [swarm(j,1), swarm(j,2)];
eij = (qi-qj) / sqrt(norm(qi - qj));
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Formation control input %
%%%%%%%%%%%%%%%%%%%%%%%%%%%
swarm_control_ui(i,1) = swarm_control_ui(i,1) + rho_ij*eij(1);
swarm_control_ui(i,2) = swarm_control_ui(i,2) + rho_ij*eij(2);
% Record the communication qualities, distances, and neighbor_agent matrix for Jn and rn performance plots
phi_rij=gij*aij;
communication_qualities_matrix(i,j) = phi_rij;
communication_qualities_matrix(j, i) = phi_rij;
distances_matrix(i, j) = rij;
distances_matrix(j, i) = rij;
neighbor_agent_matrix(i, j) = aij;
neighbor_agent_matrix(j, i) = aij;
end
swarm(i,1) = swarm(i,1) + swarm_control_ui(i,1);
swarm(i,2) = swarm(i,2) + swarm_control_ui(i,2);
swarm_control_ui(i,1) = 0;
swarm_control_ui(i,2) = 0;
% Store the node trace
swarm_trace(iter, i, :) = swarm(i, :);
end
Jn = helper.calculate_Jn(communication_qualities_matrix, neighbor_agent_matrix, PT);
rn = helper.calculate_rn(distances_matrix, neighbor_agent_matrix, PT);
% Append Jn and rn to their respective lists
Jn_list = [Jn_list, Jn];
rn_list = [rn_list, rn];
% Check if the last 20 values in Jn are the same
if length(Jn_list) > 19 && length(unique(round(Jn_list(end-19:end), 4))) == 1
fprintf('Formation completed: Jn values has converged in %.2f seconds %d iterations.\n', t_elapsed(end), iter-20);
break;
end
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)
🌈4 Matlab代码、Python代码、文章、PPT下载
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取