目录
摘要
Notations for Formations
克罗内克积和矩阵方程
矩阵向量化
Affine Span and Affine Dependence
Stress Matrices
Calculation of Equilibrium Stresses
LMI求解及MATLAB的LMI工具箱使用
标题:Affine Formation Maneuver Control of Multiagent Systems
作者:Shiyu Zhao
期刊/时间:IEEE T RANSACTIONS ON AUTOMATIC CONTROL, VOL. 63, NO. 12, DECEMBER 2018
本文的编队问题分为了两个子问题:1.多智能体形成期望队形。2.多智能体可以完成集体动作,包括队形的平移、旋转、等比例放大、缩小等。本文提出了一种基于仿射变换的控制方法。与大多数控制方法不同,本文的控制律基于应力矩阵,应力矩阵可以看作是具有正边权和负边权的广义图拉普拉斯矩阵。采用领导——跟随法。
克罗内克积表示任意两个矩阵相乘,若A是的矩阵,B是的矩阵那么,就是的矩阵。具体解释可参照克罗内克积 - MBA智库百科。
克罗内克积在Matlab中用函数Kron(A,B)来表示,请看举例:
A=[1,2;3,4];
B=[1,2,3;4,5,6];
C=kron(A,B);
disp(C);
===============================================================================
C= 1 2 3 2 4 6
4 5 6 8 10 12
3 6 9 4 8 12
12 15 18 16 20 24
克罗内克积具有如下重要性质
vec(ABC) = (⊗ A)vec(B)
其中vec()表示矩阵的向量化。
矩阵向量化就是将矩阵的每一列按照顺序排列起来,例如一个的矩阵向量化后得到一个的列向量,具体可参照矩阵向量化_鬼道2022的博客-CSDN博客_矩阵向量化 。
在Matlab中矩阵向量化的两个方法,请看例子:
%方法一
A=[1,2;3,4];
B=[1,2,3;4,5,6];
C=kron(A,B);
disp(C);
a=A(:);
disp(a);
%方法二
b=reshape(B,6,1);
disp(b);
=================================================================================
a= 1
3
2
4
b= 1
4
2
5
3
6
可以参考文章仿射相关与线性相关_老子今晚不加班的博客-CSDN博客_仿射无关
引理1:的点集仿射张成的条件是,,且
令向量w为标称编队的应力向量,考虑无向图的任意方向,令为标称编队的关联矩阵,是H矩阵的第i列,下面将用matlab实现计算Stress矩阵。
首先,写出编队的关联矩阵,为该无向图定义任意方向;在有向图中的关联矩阵由0、-1、1组成,0:表示边和节点没有相连
1:表示由此节点发出边
-1:表示由此节点进入边
列由定点索引,行由边索引。如矩阵D所示:
D=[1,0,0,0,0,0,-1,1,-1,0,0,0;...
-1,1,0,0,0,0,0,0,0,-1,0,0;...
0,0,0,0,0,-1,1,0,0,0,1,0;...
0,-1,1,0,0,0,0,0,1,0,0,-1;...
0,0,0,0,-1,1,0,-1,0,0,0,1;...
0,0,-1,1,0,0,0,0,0,0,-1,0;...
0,0,0,-1,1,0,0,0,0,1,0,0];
H=D';
然后构建矩阵E,定义r矩阵为标称位置矩阵,pbar 为r矩阵的增广矩阵,z为E矩阵空空间得一组基底,c为系数矩阵。
% r
r=[2,0;1,1;1,-1;0,1;0,-1;-1,1;-1,-1];
%n,m 顶点数、边数
[n,m]=size(A);
% P bar
pbar =[r,ones(n,1)];
d=2;
%计算E
E=[];
for i =1:n
E=[E;pbar'*H'*diag(H(:,i))];
end
z = null(E);
c = zeros(size(z,2),1);
LMI工具箱的使用可以参考matlab-LMI工具箱_泰兰纳斯的博客-CSDN博客_lmi工具箱
接下来是本论文的求解过程
%利用LMI ToolBox
%初始化
setlmis([])
for i=1:size(z,2)
%定义矩阵变量
c(i) = lmivar(1,[1,0]);%ci为1个标量
%定义约束项因为seigema(ci*mi)>0
lmiterm([-1,1,1,c(i)],1,M{i});
end
%获取lmi信息
lmisys = getlmis;
%求解lmi
[tmin,xfeas] = feasp(lmisys);
%dec2mat从xfeas中导出矩阵变量的可行值
for i=1:size(z,2)
c(i) = dec2mat(lmisys,xfeas,c(i));
end
c = c/norm(c);
w = z*c;
Omega = H'*diag(w)*H;
disp(Omega);
在论文中提到Ew=0,所以w可以用z表示,及w=zc
最后得到应力矩阵