💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文内容如下:🎁🎁🎁

 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

摘要—本文提出了一种针对具有单向拓扑结构和先验未知期望设定点的异构车辆车队的分布式模型预测控制(DMPC)算法。车队中的车辆(或节点)在动力学上是解耦的,但受到空间几何的约束。每个节点被分配一个仅依赖相邻节点信息的局部开环最优控制问题,其中成本函数的设计方式是对预测轨迹与假设轨迹之间的误差进行惩罚。结合这种惩罚机制,提出了一种基于等式的终端约束,以确保系统的稳定性,该约束强制预测时域内每个节点的终端状态等于其相邻节点状态的平均值。通过使用局部成本函数之和作为李雅普诺夫候选函数,证明了在成本函数权重满足明确充分条件的情况下,此类DMPC的渐近稳定性是可以实现的。通过对乘用车的仿真验证了所提DMPC算法的有效性。
关键词—自动驾驶车辆,异构车队,图论,分布式控制,模型预测控制

一、研究背景与意义

I. 引言
近年来,自动驾驶车辆的车队编组行驶受到了广泛关注[1]-[7]。这主要归因于其在道路交通方面的潜在益处,包括提高交通效率、增强道路安全性和降低燃油消耗等[1][2]。车队控制的主要目标是确保一组车辆以相同速度行驶,同时保持任意连续跟随车辆之间的预设距离[5]-[7]。
车队控制的最早实践可追溯到上世纪八十年代的PATH项目,该项目在传感器与执行器、控制架构、分散控制以及弦稳定性[5]等方面引入了许多知名主题。自那时以来,车队控制的其他许多问题也得到了讨论,如间距策略的选择[6][7]、通信拓扑的影响[8]-[10]以及动态异构性的影响[11][12]。近年来,在多智能体一致性控制框架下,提出了一些先进的车队控制律,例如[13]-[17]。其中,大多数控制律为了理论完整性而采用线性动力学和线性控制器,并未考虑输入约束和模型非线性。值得注意的是,[14]和[17]中假设通信拓扑是有限范围的,是少数例外。然而,由于执行器饱和以及动力系统(如发动机、传动系统和空气阻力)中存在的显著非线性,在更精确的问题描述中确实存在输入约束和模型非线性[18][19]。此外,随着车与车(V2V)通信(如DSRC和VANETs[20])的快速发展,各种类型的通信拓扑不断涌现,例如双前车跟随型和多前车跟随型[21][22]。考虑到拓扑结构的多样性,特别是以系统和综合的方式考虑大量拓扑结构时,车队控制自然面临新的挑战。
本文基于模型预测控制(MPC)框架,提出了一种针对非线性动力学和拓扑结构多样性的车队控制创新解决方案。传统上,MPC用于单智能体系统,通过数值优化有限时域最优控制问题来获得控制输入,其中可以显式处理非线性和约束[23]。该技术已被许多工业应用所采纳,例如热能控制[24]、避碰[18]、车辆稳定性[25]和能量管理[26]等。这些MPC大多以集中式方式实现,即假设所有状态已知,从而计算所有控制输入,例如[18][24]-[26]。然而,在考虑包含多辆车的实际车队系统时,由于难以收集所有车辆的信息以及计算大规模优化问题的挑战,集中式实现方式并不适用。因此,本文提出了一种异构车队的分布式模型预测控制(DMPC)综合方法,其中每辆车被分配一个仅依赖其相邻车辆信息的局部最优控制问题。
最近,针对动态耦合或解耦的多智能体系统,提出了几种DMPC方案[27]-[30]。通常通过一致性约束来建立渐近稳定性,例如,新计算的最优轨迹与先前计算的轨迹之间的不匹配必须是有界的[27][28]。关于DMPC的最新综述可参见[31]。然而,现有的大多数DMPC算法仅关注于系统在共同设定点的稳定,假设所有智能体预先知道期望的平衡信息。对于车辆车队而言,这种共同设定点对应于领航车的状态。然而,假设所有跟随车都能与领航车通信是不切实际的,这意味着并非所有跟随车都知道车队中的期望设定点。本文旨在解决分布式MPC框架下期望设定点先验未知的车辆车队控制问题。该领域现有的大多数MPC研究依赖于自适应巡航控制(ACC)的问题描述,例如[32][33],其中问题描述仅涉及两辆车。也存在一些扩展到协同ACC情况的研究,涉及多辆车,例如[14][34]。然而,[14]和[34]中的处理方式也直接将两辆连续车辆纳入问题描述,仅适用于有限类型的通信拓扑,即前车跟随型和前车-领航车跟随型。
本文提出了一种针对具有单向拓扑结构和先验未知期望设定点的异构车队的分布式模型预测控制(DMPC)算法。本文的贡献主要体现在两个方面:1)所提出的DMPC算法不需要所有节点预先知道期望设定点,与许多先前的研究(如[27]-[30])相比,这是一个显著改进;2)我们的发现不仅明确强调了通信拓扑在稳定整个车队系统中的重要性,还将[14][34]中的结果扩展到适用于任意单向拓扑。具体而言,车队被视为一组车辆,这些车辆在动力学上是解耦的,但通过空间几何和通信拓扑相互交互。在车队中,只有直接与领航车通信的跟随车知道期望设定点。在所提出的DMPC算法下,每个跟随车被分配一个仅依赖相邻车辆信息的局部开环最优控制问题,其中对预测轨迹与假设轨迹之间的误差进行惩罚。提出了一种基于相邻平均的终端约束,通过该约束,每个节点的终端状态被强制等于其相邻节点状态的平均值。我们使用局部成本函数之和作为李雅普诺夫候选函数,并证明了在单向拓扑下,通过成本函数权重的明确参数条件可以实现渐近稳定性。本文的部分内容已在[2]中进行了简要总结。

随着自动驾驶技术的快速发展,多车辆协同控制成为未来交通系统的重要组成部分。多车辆协同控制的目标在于通过车辆间的相互作用,提升整体交通效率、增强行车安全性,并实现更复杂的任务。然而,现实交通环境中车辆类型多样、性能差异显著,构成了异构车辆的协同控制问题,其复杂性给传统控制方法带来了巨大挑战。

分布式模型预测控制(DMPC)作为一种先进的控制方法,通过将整体控制问题分解为多个局部优化问题,并在车辆间进行信息传递,实现车辆的协同控制。该方法特别适用于单向拓扑结构下的异构车辆车队,其中信息仅从领导者(如头车)流向跟随者,而不会反向流动,从而简化了通信需求并保护了车辆隐私。

二、研究问题与挑战

在单向拓扑结构下,异构车辆车队的协同控制面临以下主要挑战:

  1. 车辆模型差异:不同类型的车辆拥有不同的动力学特性,如动力系统、传动系统和制动系统等,导致模型参数差异较大。
  2. 信息交互限制:车辆间存在通信延迟和带宽限制,信息交互存在一定困难,影响协同控制的效率。
  3. 控制目标冲突:不同车辆可能拥有不同的控制目标,如速度、路径、安全距离等,需要平衡不同目标之间的冲突。
三、DMPC方法介绍

DMPC方法通过将每个车辆的控制问题分解为局部优化问题,并利用滚动优化策略进行求解,实现车辆的协同控制。具体步骤如下:

  1. 建立车辆动力学模型:考虑异构车辆的动力学差异,采用包含车辆质量、空气阻力系数、滚动阻力系数等参数的非线性车辆动力学模型。
  2. 设计DMPC控制器:每个车辆作为一个独立的智能体,利用预测状态信息建立自身的优化问题。优化问题的约束包括车辆的动力学约束、控制输入约束和安全距离约束。
  3. 信息传递机制:每个车辆将自己的预测轨迹和控制信息发送给其前车,并接收后车的预测轨迹和控制信息。车辆根据接收到的信息更新其局部目标函数,实现车辆之间的协调。
  4. 求解优化问题:利用合适的优化算法(如序列二次规划SQP)求解每个车辆的优化问题,得到最优的控制序列,并将其应用于实际车辆控制。
四、具体实现策略

在单向拓扑结构下,针对异构车辆车队,可以采用以下DMPC实现策略:

  1. 预测状态估计:每个车辆基于自身的动力学模型、传感器信息和接收到的邻居车辆信息,预测未来一段时间内的自身状态和邻居车辆状态。采用扩展卡尔曼滤波(EKF)进行状态估计,以有效处理非线性动力学模型带来的不确定性。
  2. 自适应信息共享策略:为了提升控制性能,提出一种自适应的信息共享策略。每个车辆根据自身的控制性能和邻居车辆的控制性能决定是否共享信息。如果某个车辆的控制性能较差,则可以向邻居车辆请求信息以提高自身的控制精度。
  3. 终端约束设计:为了确保系统的稳定性,设计基于相邻平均值的终端约束,强制每个节点的终端状态等于其相邻节点的状态平均值。
五、仿真验证与结果分析

通过仿真验证DMPC方法在单向拓扑结构下异构车辆车队协同控制中的有效性。仿真场景包括车辆加速、弯道跟踪和避障等,考察通信时延对控制性能的影响。

  1. 加速性能与一致性验证:仿真结果表明,DMPC策略能够有效地控制异构车辆车队保持稳定的队形行驶,并具有良好的跟踪性能和鲁棒性。
  2. 弯道跟踪性能与稳定性验证:在弯道场景下,DMPC策略能够确保车辆车队平稳通过弯道,保持安全的跟车距离和稳定的行驶速度。
  3. 避障能力与安全性验证:当遇到障碍物时,DMPC策略能够及时调整车辆行驶轨迹,实现避障功能,确保行车安全。
  4. 通信时延影响分析:通信时延对DMPC策略的控制性能有一定影响,但通过合理设计信息共享策略和优化算法,可以降低通信时延对系统性能的影响。
六、研究展望与未来方向

尽管DMPC方法在单向拓扑结构下异构车辆车队的协同控制中取得了显著成果,但仍存在一些需要进一步研究的问题:

  1. 复杂拓扑结构下的DMPC策略:目前的研究主要集中于单向拓扑结构,未来的研究可以扩展到更复杂的拓扑结构,如双向拓扑结构和环形拓扑结构。
  2. 更复杂的交通场景:目前的研究主要考虑了简单的交通场景,未来的研究可以考虑更复杂的交通场景,如交通拥堵、车辆换道等。
  3. 车辆故障对控制性能的影响:实际道路环境中车辆可能会发生故障,未来的研究可以考虑车辆故障对控制性能的影响,并设计具有容错能力的DMPC策略。
  4. 安全验证:对所提出的DMPC策略进行严格的安全验证,确保其能够在各种情况下保证车辆车队的安全行驶。

📚2 运行结果

部分代码:

    Xend(i,5) = Pnp; Vend(i,5) = Vnp; Tnp = (Ca(5)*Vnp.^2 + Mass(5)*g*f)/Eta*R(5);
    % MPC 优化求解
    [u, Cost(i,5), Exitflg(i,5), output] = fmincon(@(u) Costfunction1( Np, Tim_step, X0 ,u, Vehicle_Type,Q3,Xdes,R3,F3,Xa,G3,Xnfa,Xnffa), ...
        u0, A, b, Aeq, beq, lb, ub, @(u) Nonlinearconstraints(Np, Tim_step, X0, u, Vehicle_Type,Pnp,Vnp,Tnp),options); 
    
    % 车辆往前走一步
    U(i,5) = u(1);
    [Postion(i,5),Velocity(i,5),Torque(i,5)] = VehicleDynamic(U(i,5),Tim_step,Postion(i-1,5),Velocity(i-1,5),Torque(i-1,5),Mass(5),R(5),g,f,Eta,Ca(5),Tao(5));
    
    % 这个地方需要注意,下一阶段的assumed state, 在t+1时刻预测Np自身的状态
    Temp = zeros(Np+1,3);
    Temp(1,:) = [Postion(i,5),Velocity(i,5),Torque(i,5)];   
    ua(1:Np-1,5) = u(2:Np);
    for j = 1:Np-1
        [Temp(j+1,1),Temp(j+1,2),Temp(j+1,3)] = VehicleDynamic(ua(j,5),Tim_step,Temp(j,1),Temp(j,2),Temp(j,3),Mass(5),R(5),g,f,Eta,Ca(5),Tao(5));
    end
    
    ua(Np,5) = (Ca(5)*Temp(Np,2).^2 + Mass(5)*g*f)/Eta*R(5);
    [Temp(Np+1,1),Temp(Np+1,2),Temp(Np+1,3)] = VehicleDynamic(ua(Np,5),Tim_step,Temp(Np,1),Temp(Np,2),Temp(Np,3),Mass(5),R(5),g,f,Eta,Ca(5),Tao(5));
    Pa_next(:,5) = Temp(:,1);
    Va_next(:,5) = Temp(:,2);

    toc
    
    %% vehicle six
    tic
    Vehicle_Type = [Mass(6),R(6),g,f,Eta,Ca(6),Tao(6)];                 % the vehicle parameters : Mass,R,g,f,Eta,Ca(i),Tao, 
    X0 = [Postion(i-1,6),Velocity(i-1,6),Torque(i-1,6)];                % the vehicle variable in the last time
    Pd = x0(i-1:i+Np-1) - 6*d;  Vd = v0(i-1:i+Np-1);                      % 共Np+1个点,注意下角标,i-1 代表上一时刻的状态, i代表当前需要优化求解的状态
    Xdes = [Pd,Vd];  % Udes = Td;                                       % 第一辆车的期望行为
    Xa = [Pa(:,6),Va(:,6)];                                             % 自己预期的行为,传递给下一辆车
    Xnfa = [Pa(:,5) - d, Va(:,5)];                                               % 1:为上一时刻的状态
    Xnffa = [Pa(:,4) - 2*d, Va(:,4)];
    
    u0 = ua(:,6);   % 起始搜索点    
    A = [];b = []; Aeq = []; beq = [];                                       % 没有线性约束
    lb = Torquebound(6,1)*ones(Np,1); ub = Torquebound(6,2)*ones(Np,1);      % 控制量上下界              
    Pnp = (Xnfa(end,1)+Xnffa(end,1)+Pd(end))/3; Vnp = (Xnfa(end,2)+Xnffa(end,2)+Vd(end))/3;   % 终端约束
    Xend(i,6) = Pnp; Vend(i,6) = Vnp; Tnp = (Ca(6)*Vnp.^2 + Mass(6)*g*f)/Eta*R(6);
    % MPC 优化求解
    [u, Cost(i,6), Exitflg(i,6), output] = fmincon(@(u) Costfunction1( Np, Tim_step, X0 ,u, Vehicle_Type,Q3,Xdes,R3,F3,Xa,G3,Xnfa,Xnffa), ...
        u0, A, b, Aeq, beq, lb, ub, @(u) Nonlinearconstraints(Np, Tim_step, X0, u, Vehicle_Type,Pnp,Vnp,Tnp),options); 
    
    % 车辆往前走一步
    U(i,6) = u(1);
    [Postion(i,6),Velocity(i,6),Torque(i,6)] = VehicleDynamic(U(i,6),Tim_step,Postion(i-1,6),Velocity(i-1,6),Torque(i-1,6),Mass(6),R(6),g,f,Eta,Ca(6),Tao(6));
    
    % 这个地方需要注意,下一阶段的assumed state, 在t+1时刻预测Np自身的状态
    Temp = zeros(Np+1,3);
    Temp(1,:) = [Postion(i,6),Velocity(i,6),Torque(i,6)]; 
    ua(1:Np-1,6) = u(2:Np);
    for j = 1:Np-1
        [Temp(j+1,1),Temp(j+1,2),Temp(j+1,3)] = VehicleDynamic(ua(j,6),Tim_step,Temp(j,1),Temp(j,2),Temp(j,3),Mass(6),R(6),g,f,Eta,Ca(6),Tao(6));
    end
     
    ua(Np,6) = (Ca(6)*Temp(Np,2).^2 + Mass(6)*g*f)/Eta*R(6);
    [Temp(Np+1,1),Temp(Np+1,2),Temp(Np+1,3)] = VehicleDynamic(ua(Np,6),Tim_step,Temp(Np,1),Temp(Np,2),Temp(Np,3),Mass(6),R(6),g,f,Eta,Ca(6),Tao(6));
    Pa_next(:,6) = Temp(:,1);
    Va_next(:,6) = Temp(:,2);

    toc
    
     %% vehicle seven
    tic
    Vehicle_Type = [Mass(7),R(7),g,f,Eta,Ca(7),Tao(7)];                 % the vehicle parameters : Mass,R,g,f,Eta,Ca(i),Tao, 
    X0 = [Postion(i-1,7),Velocity(i-1,7),Torque(i-1,7)];                % the vehicle variable in the last time
    Pd = x0(i-1:i+Np-1) - 7*d;  Vd = v0(i-1:i+Np-1);                      % 共Np+1个点,注意下角标,i-1 代表上一时刻的状态, i代表当前需要优化求解的状态
    Xdes = [Pd,Vd];  % Udes = Td;                                       % 第一辆车的期望行为
    Xa = [Pa(:,7),Va(:,7)];                                             % 自己预期的行为,传递给下一辆车
    Xnfa = [Pa(:,6) - d, Va(:,6)];                                               % 1:为上一时刻的状态
    Xnffa = [Pa(:,5) - 2*d, Va(:,5)];
    
    u0 = ua(:,7);   % 起始搜索点    
    A = [];b = []; Aeq = []; beq = [];                                       % 没有线性约束
    lb = Torquebound(7,1)*ones(Np,1); ub = Torquebound(7,2)*ones(Np,1);      % 控制量上下界              
    Pnp = (Xnfa(end,1)+Xnffa(end,1)+Pd(end))/3; Vnp = (Xnfa(end,2)+Xnffa(end,2)+Vd(end))/3;   % 终端约束
    Xend(i,7) = Pnp; Vend(i,7) = Vnp; Tnp = (Ca(7)*Vnp.^2 + Mass(7)*g*f)/Eta*R(7);
    % MPC 优化求解
    [u, Cost(i,7), Exitflg(i,7), output] = fmincon(@(u) Costfunction1( Np, Tim_step, X0 ,u, Vehicle_Type,Q3,Xdes,R3,F3,Xa,G3,Xnfa,Xnffa), ...
        u0, A, b, Aeq, beq, lb, ub, @(u) Nonlinearconstraints(Np, Tim_step, X0, u, Vehicle_Type,Pnp,Vnp,Tnp),options); 
    
    % 车辆往前走一步
    U(i,7) = u(1);
    [Postion(i,7),Velocity(i,7),Torque(i,7)] = VehicleDynamic(U(i,7),Tim_step,Postion(i-1,7),Velocity(i-1,7),Torque(i-1,7),Mass(7),R(7),g,f,Eta,Ca(7),Tao(7));
    
    % 这个地方需要注意,下一阶段的assumed state, 在t+1时刻预测Np自身的状态
    Temp = zeros(Np+1,3);
    Temp(1,:) = [Postion(i,7),Velocity(i,7),Torque(i,7)];
    ua(1:Np-1,7) = u(2:Np);
    for j = 1:Np-1
        [Temp(j+1,1),Temp(j+1,2),Temp(j+1,3)] = VehicleDynamic(ua(j,7),Tim_step,Temp(j,1),Temp(j,2),Temp(j,3),Mass(7),R(7),g,f,Eta,Ca(7),Tao(7));
    end

    ua(Np,7) = (Ca(7)*Temp(Np,2).^2 + Mass(7)*g*f)/Eta*R(7);
    [Temp(Np+1,1),Temp(Np+1,2),Temp(Np+1,3)] = VehicleDynamic(ua(Np,7),Tim_step,Temp(Np,1),Temp(Np,2),Temp(Np,3),Mass(7),R(7),g,f,Eta,Ca(7),Tao(7));
    Pa_next(:,7) = Temp(:,1);
    Va_next(:,7) = Temp(:,2);

    toc
    
    %% 跟新交换数据矩阵
    Pa = Pa_next;
    Va = Va_next;

🎉3 参考文献 

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)

🌈Matlab代码、数据、文章下载

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐