模型

一阶多智能体的运动学方程可以描述为
x˙i(t)=ui(t),i∈{1,2,3,…,N} \dot x_i(t) = u_i(t),i\in\{1,2,3,\dots,N\} x˙i(t)=ui(t),i{1,2,3,,N}
其中xi(t)x_i(t)xi(t)为状态,ui(t)u_i(t)ui(t)为控制量,最终期望的结果为
lim⁡t→T∣xi(t)−xj(t)∣=0 \lim_{t\to T} |x_i(t) - x_j(t)| = 0 tTlimxi(t)xj(t)=0

∣xi(t)−xj(t)∣=0,∀t≥T |x_i(t)-x_j(t)| = 0, \forall t \ge T xi(t)xj(t)=0,tT

其中上式中第一个等式表示在时间趋近于TTT的时候,智能体的状态趋于一致。第二个等式表示在时间超过TTT的时候智能体的时间已经保持一致。

算法

在上一篇文章中我们构建了一个分布式的协同一致性算法,在本节中,我们构建一个leader-follower结构的协同一致性算法。其中leader的状态是leader算法设计的,设leader的编号为1,设leader的控制量为
u1(t)=u1 u_1(t) = u_1 u1(t)=u1
follower的控制量可以设计为(这里设计了一个最简单的纯p控制):
ui(t)=−k∑j=1Naij(xi(t)−xj(t)) u_i(t) = - k\sum_{j=1}^{N}a_{ij}(x_i(t) - x_j(t)) ui(t)=kj=1Naij(xi(t)xj(t))
在leader-follower结构中有一个假设,leader到每一个follower都是可达的,即leader的信息可以被广播在follower中。

仿真

设置智能体的初始状态为
x=[123−3] x = \begin{bmatrix} 1& 2& 3& -3 \end{bmatrix} x=[1233]
智能体的连接为

智能体1 --- 智能体2
  |    \      |
  |      \    | 
智能体4 --- 智能体3

那么拉普拉斯矩阵为
L=[3−1−1−1−12−10−1−13−1−10−12] L = \begin{bmatrix} 3 & -1 & -1 & -1\\ -1 & 2 & -1 & 0\\ -1 & -1 & 3 & -1\\ -1 & 0 & -1 & 2\\ \end{bmatrix} L= 3111121011311012
leader的控制量为 u1=−x1u_1 = - x_1u1=x1

仿真代码为(matlab)

clc;clear;close all;

x = [1 2 3 -3];
u = [];
A = [0 1 1 1;
     1 0 1 0;
     1 1 0 1;
     1 0 1 0;];
B = [3 0 0 0;
     0 2 0 0;
     0 0 3 0;
     0 0 0 2;];
L = B - A;
dt = 0.001;
k = 2;
k_1 = 3;

for i = 1:4000
	% follower 控制量
    u1 = - k.* (x(end,:) * L);
    % leader控制量
    u1(1) = - k_1 .* x(end,1);
    % 状态更新
    x1 = x(end,:) + u1 * dt;

    u = [u;u1];
    x = [x;x1];
end

画出控制量的曲线以及状态量曲线

Fig1 = figure(1);
plot(0.001:0.001:4.001,x,'LineWidth', 1.5);
xlabel('t');
ylabel('x');
legend('agent1','agent2','agent3','agent4');
print(Fig1,'x','-dpng','-r600')

Fig2 = figure(2);
plot(0.001:0.001:4.000,u,'LineWidth', 1.5);
xlabel('t');
ylabel('u');
legend('agent1','agent2','agent3','agent4');
print(Fig2,'u','-dpng','-r600')

状态变量的随时间变化图为
x

控制量随时间变化图为
x

可以看到,最终四个智能体的状态全部归于一致。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐