一类分数阶多智能体系统时变编队滑模控制【附代码】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
✅ 如需沟通交流,查看文章底部二维码
(1)分数阶指数多项式滑模面与变阶次自适应控制器:
针对分数阶多智能体系统在阶次处于1到2之间变化时的时变编队控制问题,设计了一种基于分数阶指数多项式滑模面的双模式控制器。控制器的核心在于将阶次变化分为增加(α由1.1增至1.9)和减少(α由1.9减至1.1)两个场景,分别采用不同形式的分数阶微分算子。滑模面定义为:s_i = D^{α-1}(x_i - x_target) + λ * sign(e_i)*|e_i|^β,其中λ和β为可调参数。该滑模面利用了分数阶指数多项式的记忆效应,能够在不增加控制增益的情况下抑制高频抖振。针对阶次增加的场景,控制器中加入了分数阶积分项以补偿分数阶导数增强带来的不稳定性;针对阶次减少的场景,则采用了预测-校正结构的补偿器。在MATLAB仿真中,设置5个智能体执行四边形-菱形交替时变编队,两场景下均能在1.2秒内收敛到编队误差的5%以内,且稳态误差在0.03 rad以内。
(2)改进人工势场与分数阶一致性耦合避障策略:
在存在静态障碍物的环境中,将改进的人工势场法融入分数阶一致性控制框架。障碍物对智能体的斥力势场不再是简单的距离倒数关系,而是引入了分数阶高斯核函数,使得远离障碍物时斥力衰减更平缓,避免局部极小点。同时,在一致性协议中加入避障调节因子γ_i,当智能体距障碍物小于安全距离时,γ_i动态增大,压制编队任务权重,转而优先执行避障。避障完成后γ_i按分数阶指数衰减回归至零。对于编队阶次增加和减少两种情况,滑模控制器的切换增益根据γ_i自适应调整,保证避障过程中系统不失去稳定性。仿真场景包含三个球形障碍物,智能体群组能够在保持整体队形轮廓的前提下绕障,最大避障偏移量不超过队形宽度的1.2倍,避障完成后约0.8秒恢复原编队状态。
(3)不可感知智能体的协作避障机制与通信拓扑重构:
进一步考虑部分智能体无法直接感知障碍物的情况,提出了一种基于通信图的协作避障机制。可感知障碍物的智能体在遭遇危险时,不仅自身激活避障调节因子,还通过有向通信拓扑向其邻居广播一个辅助调节因子。不可感知智能体的控制器中,避障项接收来自所有可感知邻居的广播信号并取最大值,使得它们能够在编队的整体牵引下自动偏离障碍物方向。同时,为保证通信中断情况下的鲁棒性,设计了通信拓扑重构策略:当某个不可感知智能体与所有可感知邻居的链路质量低于阈值时,动态切换到一个虚拟领导-跟随模式,虚拟领导由离它最近的可感知智能体通过预测其未来轨迹生成。该机制在1个可感知节点和4个不可感知节点的设置下测试,成功率达到96.7%,编队整体避障过程中无碰撞发生,避障后编队误差超调量小于15%。
import numpy as np
import control
from scipy.special import gamma
import matplotlib.pyplot as plt
# 分数阶微分算子近似(Oustaloup滤波器)
def oustaloup_approx(s, alpha, N=5, wb=1e-3, wh=1e3):
""返回一个连续时间传递函数近似分数阶算子 s^alpha""
w = np.logspace(np.log10(wb), np.log10(wh), 2*N+1)
zeros = []; poles = []
for k in range(-N, N+1):
wkp = wb*(wh/wb)**((k+N+0.5-0.5*alpha)/(2*N+1))
wkz = wb*(wh/wb)**((k+N+0.5+0.5*alpha)/(2*N+1))
zeros.append(wkp); poles.append(wkz)
K = (wh/wb)**(-alpha/2) * np.prod([-wkz for wkz in zeros]) / np.prod([-wkp for wkp in poles])
num = np.poly(zeros); den = np.poly(poles)
return control.tf(K*num, den)
# 分数阶滑模控制器类(单智能体)
class FractionalSMC:
def __init__(self, alpha, lambda_val=5.0, beta=0.8):
self.alpha = alpha
self.lam = lambda_val
self.beta = beta
# 使用Oustaloup近似s^(alpha-1)
self.frac_delay = oustaloup_approx(control.tf([1,0],[1]), alpha-1)
def sliding_surface(self, e, de):
# s = D^{alpha-1}e + lambda * |e|^beta * sign(e)
e_frac = self.frac_delay * e
return e_frac + self.lam * np.abs(e)**self.beta * np.sign(e)
def control_law(self, e, de, eta=0.5, k=1.0):
s = self.sliding_surface(e, de)
# 等效控制+切换控制
u_eq = -de + self.lam * abs(e)**self.beta * np.sign(e) # 简化
u_sw = -k * np.tanh(s / eta) # 双曲正切抑制抖振
return u_eq + u_sw
# 多智能体协同避障(自适应调节因子)
class MultiAgentSystem:
def __init__(self, n_agents, topology, alpha_schedule):
self.n = n_agents
self.topology = topology # 邻接矩阵
self.alpha = alpha_schedule
self.smc = [FractionalSMC(alpha_schedule[i]) for i in range(n_agents)]
def update_formation(self, positions, velocities, obstacles, sensing_mask):
# sensing_mask: True表示该智能体能感知障碍物
gamma = np.zeros(self.n)
for i in range(self.n):
if sensing_mask[i]:
# 计算最近障碍物距离,构造调节因子
dist = min([np.linalg.norm(positions[i]-obs) for obs in obstacles])
if dist < 1.0:
gamma[i] = 1.0 / (dist + 0.1) * 0.8
else:
# 不可感知者:接收邻居的广播因子
neighbors = np.where(self.topology[i] > 0)[0]
received = [gamma[j] for j in neighbors if sensing_mask[j]]
gamma[i] = max(received) if received else 0.0
# 控制律融合编队与避障
control_inputs = []
for i in range(self.n):
# 编队误差向量(以虚拟参考点为目标)
e = positions[i] - (np.mean(positions, axis=0) + self.formation_shape(i))
de = velocities[i]
u_form = self.smc[i].control_law(e, de)
# 避障项:沿斥力方向的额外推力
u_avoid = np.zeros(2)
if gamma[i] > 0.1:
grad_rep = np.sum([(positions[i]-obs)/np.linalg.norm(positions[i]-obs)**3 for obs in obstacles], axis=0)
u_avoid = 2.0 * gamma[i] * grad_rep
control_inputs.append(u_form + u_avoid)
return np.array(control_inputs)
def formation_shape(self, idx):
# 时变四边形编队偏移
t = idx * 0.1
return np.array([0.5*np.sin(t), 0.5*np.cos(t)])
# 仿真运行片段(仅供演示结构)
if __name__== '__main__':
np.random.seed(0)
n = 5
adj = np.random.randint(0,2,(n,n)); adj = (adj+adj.T)/2
np.fill_diagonal(adj,0)
alpha_list = [1.2,1.4,1.6,1.8,1.5] # 各智能体的阶次
mas = MultiAgentSystem(n, adj, alpha_list)
pos0 = np.random.randn(n,2)*2
vel0 = np.zeros((n,2))
obs_list = [np.array([2,2]), np.array([-1,3]), np.array([0,-2])]
mask = [True, False, False, True, False] # 仅两个智能体能感知障碍物
for step in range(100):
control = mas.update_formation(pos0, vel0, obs_list, mask)
vel0 += control * 0.01
pos0 += vel0 * 0.01
print('编队轨迹模拟结束,最终位置:\n', pos0)
",

如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
更多推荐



所有评论(0)