单向拓扑结构下异构车辆编队的分布式模型预测控制(Matlab代码实现)

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

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

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

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

 ⛳️赠与读者

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

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

💥第一部分——内容介绍

单向拓扑结构下异构车辆编队的分布式模型预测控制研究

摘要:本文聚焦于单向拓扑结构下异构车辆编队的分布式模型预测控制(DMPC)问题。异构车辆编队在提升交通效率、增强行车安全性等方面具有巨大潜力,但车辆类型差异、通信限制等因素给其协同控制带来挑战。本文提出一种基于DMPC的协同控制策略,通过将整体控制问题分解为局部优化问题,并利用信息传递机制实现车辆间的协调。理论分析和仿真验证表明,该策略能有效控制异构车辆编队,适应不同交通状况和车辆特性,为异构车辆编队的协同控制提供了新思路。

关键词:单向拓扑结构;异构车辆编队;分布式模型预测控制;协同控制

一、引言

随着自动驾驶技术的飞速发展,多车辆协同控制成为未来交通系统的重要组成部分。多车辆协同控制旨在利用多个车辆之间的相互作用,提升整体交通效率、提高安全性,并实现更复杂的任务。然而,现实交通环境中车辆类型多样、性能差异显著,构成了异构车辆的协同控制问题。异构车辆编队作为多车辆协同控制的一种重要形式,在提高道路通行能力、降低能耗和提升行车安全性等方面具有显著优势。

在异构车辆编队中,车辆之间可能存在硬件、传感器特性和性能的不同,这些差异导致车辆的动力学特性不同,从而影响编队的稳定性和一致性。同时,实际道路环境中车辆间的通信带宽有限,通信时延不可避免,有限的通信资源限制了车辆间信息的交互,进而影响控制性能。此外,车辆模型与实际车辆之间存在偏差,环境因素如风阻、路面坡度等也会影响车辆的动力学特性,模型不确定性增加了控制器的设计难度。

传统的集中式模型预测控制(MPC)需要所有车辆的信息集中到一个中央控制器进行计算,这在实际应用中存在计算复杂度高、通信负担重、鲁棒性差等问题。因此,分布式模型预测控制(DMPC)应运而生。DMPC将控制任务分解到各个车辆,每个车辆仅利用局部信息进行控制决策,并通过车辆间的信息交互实现整体的协同控制,特别适用于单向拓扑结构下的异构车辆编队。

二、研究问题与挑战

2.1 车辆模型差异

不同类型的车辆拥有不同的动力学特性,例如动力系统、传动系统和制动系统等,导致其模型参数差异较大。以乘用车和重型卡车为例,乘用车通常具有较小的质量和较高的加速度,而重型卡车质量大、惯性大,加速和制动过程相对缓慢。这种差异使得在编队控制中,不同车辆对控制输入的响应不同,难以实现精确的协同运动。

2.2 信息交互限制

车辆间存在通信延迟和带宽限制,信息交互存在一定困难。在单向拓扑结构下,信息仅从领导者(如头车)流向跟随者,而不会反向流动。这种通信方式虽然简化了通信需求并保护了车辆隐私,但也导致跟随车获取信息的渠道有限。当通信延迟较大时,跟随车可能无法及时获取领导车的状态信息,从而影响其控制决策,导致编队的稳定性和一致性下降。

2.3 控制目标冲突

不同车辆可能拥有不同的控制目标,例如速度、路径、安全距离等。在编队行驶过程中,头车可能更关注整体的前进速度和路径规划,而跟随车则需要同时考虑与前车的安全距离和自身的行驶稳定性。这些不同的控制目标之间可能存在冲突,需要平衡不同目标之间的关系,以实现编队的整体协同控制。

三、分布式模型预测控制策略设计

3.1 车辆动力学模型建立

考虑异构车辆的动力学差异,采用包含车辆质量、空气阻力系数、滚动阻力系数等参数的非线性车辆动力学模型。对于不同类型的车辆,其动力学模型参数不同。以车辆纵向动力学为例,其模型可表示为:

3.2 预测状态估计

每个车辆基于自身的动力学模型、传感器信息和接收到的邻居车辆信息,预测未来一段时间内的自身状态和邻居车辆状态。采用扩展卡尔曼滤波(EKF)进行状态估计,能够有效地处理非线性动力学模型带来的不确定性。EKF通过线性化非线性模型,利用卡尔曼滤波的基本原理进行状态估计和更新。具体步骤如下:

3.3 分布式模型预测控制问题构建

每个车辆作为一个独立的智能体,利用预测状态信息,建立自身的优化问题。优化问题的约束包括车辆的动力学约束、控制输入约束和安全距离约束。

优化问题的目标函数可设计为:

3.4 信息共享策略

为提升控制性能,提出一种自适应的信息共享策略。每个车辆根据自身的控制性能和邻居车辆的控制性能,决定是否共享信息。如果某个车辆的控制性能较差,则可以向邻居车辆请求信息,以提高自身的控制精度。信息共享的内容可以包括预测状态、控制输入和车辆模型参数等。

具体而言,定义车辆i的控制性能指标Ji​,可根据其目标函数的值或其他相关指标进行计算。当Ji​大于一定阈值时,认为车辆i的控制性能较差,此时车辆i向邻居车辆发送信息请求。邻居车辆在接收到请求后,根据自身的通信能力和信息重要性,决定是否向车辆i发送所需信息。

四、稳定性分析

通过对成本函数权重的显式充分条件进行分析,证明在单向拓扑结构下,所提出的DMPC策略能够实现渐近稳定性。具体而言,当成本函数权重满足一定条件时,随着时间的推移,车辆的状态将逐渐趋近于期望状态,编队能够实现稳定的协同行驶。

五、仿真验证

为验证所提出的DMPC策略的有效性,进行了一系列仿真实验。仿真场景设置为高速公路上的异构车辆编队,编队中包含乘用车和重型卡车等不同类型的车辆。仿真参数设置如下:预测时域K=10,采样时间Ts​=0.1s,车辆质量、空气阻力系数、滚动阻力系数等参数根据不同类型车辆的实际参数进行设置。

5.1 加速性能和一致性验证

在仿真中,头车以一定的加速度进行加速,观察跟随车的加速性能和编队的一致性。仿真结果表明,所提出的DMPC策略能够使跟随车快速响应头车的加速指令,实现与头车相似的加速过程,同时保持编队中车辆之间的合适间距,具有良好的加速性能和一致性。

5.2 弯道跟踪性能和稳定性验证

设置弯道场景,头车按照预设的弯道路径行驶,观察跟随车的弯道跟踪性能和编队的稳定性。仿真结果显示,跟随车能够准确地跟踪头车的弯道路径,在弯道行驶过程中保持稳定的队形,未出现明显的偏离或抖动现象,表明所提出的策略具有良好的弯道跟踪性能和稳定性。

5.3 避障能力和安全性验证

在编队行驶过程中,突然出现障碍物,观察编队的避障能力和安全性。仿真结果表明,当检测到障碍物时,编队中的车辆能够及时做出反应,通过调整速度和行驶路径,安全地避开障碍物,同时保持编队的完整性,体现了所提出策略的避障能力和安全性。

5.4 通信时延影响验证

在仿真中引入通信时延,观察通信时延对控制性能的影响。仿真结果显示,随着通信时延的增加,编队的稳定性和一致性会有所下降,但所提出的自适应信息共享策略能够在一定程度上缓解通信时延带来的影响,通过车辆之间的信息交互和协同控制,保持编队的基本稳定行驶。

六、结论与展望

本文针对单向拓扑结构下异构车辆编队的协同控制问题,提出了一种基于分布式模型预测控制(DMPC)的策略。该策略将整体控制问题分解为局部优化问题,通过信息传递机制实现车辆间的协调,并采用自适应信息共享策略提升控制性能。理论分析和仿真验证表明,所提出的策略能够有效地控制异构车辆编队保持稳定的队形行驶,具有较好的跟踪性能、鲁棒性和安全性。

未来的研究可以扩展到更复杂的拓扑结构,例如双向拓扑结构和环形拓扑结构,以适应不同场景下的编队控制需求。同时,可以考虑更复杂的交通场景,如交通拥堵、车辆换道等,进一步验证所提出策略的实用性和有效性。此外,实际道路环境中车辆可能会发生故障,未来的研究可以设计具有容错能力的DMPC策略,以应对车辆故障对编队控制性能的影响,并对所提出的策略进行严格的安全验证,确保其能够在各种情况下保证车辆编队的安全行驶。

📚第二部分——运行结果

    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;

🎉第三部分——参考文献 

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

🌈第四部分——Matlab代码实现

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

                                                           在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值