多智能体非完整性一致性编队

多智能体非完整性一致性编队


一、非完整模型(差分驱动)




通过位置一致性协议直接生成线速度 和角速度 ,不依赖全局定位。


二、主脚本(gwo_emg_main.m)

%% 0. 环境
clear; clc; close all;

%% 1. 参数(3 机器人 + 1 领航者)
N = 3;                      % 跟随者数量
dt = 0.01;  T = 20;         % 10 s 仿真
t = 0:dt:T;

%% 2. 通信拓扑(环形无向)
A = [0 1 0; 1 0 1; 0 1 0];   % 邻接矩阵
D = diag(sum(A,2));
L = D - A;                   % 图 Laplacian

%% 3. 初始状态 [x y θ](随机)
X0 = [0 0 0; 1 0 pi; 0 1 pi/2];   % 跟随者
X  = zeros(N, 3, length(t));
X(:,:,1) = X0;

%% 4. 领航者轨迹(椭圆 + 时变半径)
r0 = @(t) [sin(0.1*t); 2*cos(0.1*t)];          % 椭圆
rho01 = @(t) [0.75*sin(0.3*t); 0.75*cos(0.3*t)]; % 相对队形
rho02 = @(t) [-0.75*sin(0.3*t); -0.75*cos(0.3*t)];

%% 5. 事件触发参数
lambda = 0.8;               % 触发阈值
eTh    = zeros(N,1);        % 触发计数器

%% 6. 主循环
for k = 1:length(t)-1
    tk = t(k);
    % 领航者当前位
    p0 = r0(tk);
    p1 = p0 + rho01(tk);
    p2 = p0 + rho02(tk);
    pDes = [p1'; p2'; (p1+p2)']/2;          % 3×2 期望位置
    
    % 当前跟随者位置
    pCur = X(:,:,k)';
    
    % 位置一致性误差(无时延)
    ePos = pDes - pCur;
    
    % 事件触发判断
    for i = 1:N
        if norm(ePos(i,:)) > lambda
            % 触发更新
            v(i) = 1.0 * norm(ePos(i,:));   % 线速度
            angDes = atan2(ePos(i,2), ePos(i,1));
            w(i) = 2.0 * atan(sin(angDes - X(i,3,k))); % 角速度
            eTh(i) = eTh(i) + 1;
        else
            v(i) = 0.8 * v(i);              % 衰减保持
            w(i) = 0.8 * w(i);
        end
    end
    
    % 更新非完整运动学
    for i = 1:N
        X(i,1,k+1) = X(i,1,k) + v(i)*cos(X(i,3,k))*dt;
        X(i,2,k+1) = X(i,2,k) + v(i)*sin(X(i,3,k))*dt;
        X(i,3,k+1) = X(i,3,k) + w(i)*dt;
    end
end

%% 7. 可视化
figure; hold on; grid on;
for i = 1:N
    plot(squeeze(X(i,1,:)), squeeze(X(i,2,:)), 'LineWidth', 1.5);
end
plot(squeeze(r0(t(1:end))'(1,:)), squeeze(r0(t(1:end))'(2,:)), 'k--', 'LineWidth', 2);
legend('F1','F2','F3','Leader'); title('非完整编队轨迹');

figure; plot(t, squeeze(X(1,1,:) - r0(t)'(1,:)), 'o-'); grid on;
xlabel('时间 /s'); ylabel('x 误差'); title('F1 位置一致性误差');

figure; stem(find(eTh>0), eTh(eTh>0), 'filled'); grid on;
xlabel('时间 /s'); ylabel('触发次数'); title('事件触发时刻');

三、关键公式(协议摘要)


四、运行结果

参考代码 实现多智能体非完整性一致性编队 www.youwenfan.com/contentcsg/51184.html

结论

专注于matlab/simulink,电子电路,编程