尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

一类分数阶多智能体系统时变编队滑模控制【附代码】

一类分数阶多智能体系统时变编队滑模控制【附代码】 ✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、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, N5, wb1e-3, wh1e3): 返回一个连续时间传递函数近似分数阶算子 s^alpha w np.logspace(np.log10(wb), np.log10(wh), 2*N1) zeros []; poles [] for k in range(-N, N1): wkp wb*(wh/wb)**((kN0.5-0.5*alpha)/(2*N1)) wkz wb*(wh/wb)**((kN0.50.5*alpha)/(2*N1)) 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_val5.0, beta0.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, eta0.5, k1.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, axis0) 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], axis0) 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 (adjadj.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) ,如有问题可以直接沟通
返回列表