基于前轮转向+转矩分配(AFS+DYC)+模型预测控制(MPC)+路径跟踪(PTC)+侧偏角软约束,目前的范例是72km/h,附着系数0.85双移线。 仿真使用的是MATLAB2020b版本和carsim2020。 MPC有两个:第一个为增量式方法编写,采用s-function实现,输入为跟踪误差、横摆角误差、侧向速度和横摆角速度,输出量为前轮转角和附加横摆力矩,仅考虑横向控制。 考虑了前后轮的侧偏角软约束,在侧偏角到约束边界时减小控制律,保证侧偏角的稳定。 第二个采用Apollo中的模型,基于MATLAB function编写,不包括侧偏角软约束,作为对比参考使用。 其中包含carsim的cpar文件、模型mdl文件、绘图m文件(运行后一键出图)、说明文档和中文文献。

最近在研究车辆控制相关的内容,基于前轮转向 + 转矩分配(AFS + DYC)结合模型预测控制(MPC)以及路径跟踪(PTC),还加入了侧偏角软约束,实现了一些有趣的成果,今天就来和大家分享分享。

基于前轮转向+转矩分配(AFS+DYC)+模型预测控制(MPC)+路径跟踪(PTC)+侧偏角软约束,目前的范例是72km/h,附着系数0.85双移线。 仿真使用的是MATLAB2020b版本和carsim2020。 MPC有两个:第一个为增量式方法编写,采用s-function实现,输入为跟踪误差、横摆角误差、侧向速度和横摆角速度,输出量为前轮转角和附加横摆力矩,仅考虑横向控制。 考虑了前后轮的侧偏角软约束,在侧偏角到约束边界时减小控制律,保证侧偏角的稳定。 第二个采用Apollo中的模型,基于MATLAB function编写,不包括侧偏角软约束,作为对比参考使用。 其中包含carsim的cpar文件、模型mdl文件、绘图m文件(运行后一键出图)、说明文档和中文文献。

本次仿真使用的是MATLAB 2020b版本搭配carsim 2020,这俩工具在车辆动力学仿真这块还是非常给力的。范例场景设定为车速72km/h,附着系数0.85的双移线工况,这个工况能较好地检验车辆在复杂转向情况下的控制性能。

MPC控制策略详解

这里面MPC有两种实现方式,挺有意思的,和大家唠唠。

增量式MPC(含侧偏角软约束)

第一种MPC采用增量式方法编写,通过s - function实现。它的输入参数包括跟踪误差、横摆角误差、侧向速度和横摆角速度,输出则是前轮转角和附加横摆力矩,主要专注于横向控制。

% 假设这里是s - function的部分关键代码框架
function [sys,x0,str,ts] = sfcn(t,x,u,flag)
    switch flag,
        case 0,
            [sys,x0,str,ts]=mdlInitializeSizes;
        case 2,
            sys=mdlUpdate(t,x,u);
        case 3,
            sys=mdlOutputs(t,x,u);
        case {1,4,9}
            sys = [];
        otherwise
            DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
    end
end

function [sys,x0,str,ts]=mdlInitializeSizes
    sizes = simsizes;
    % 设置输入输出端口数量等参数
    sizes.NumContStates  = 0;
    sizes.NumDiscStates  = 0;
    sizes.NumOutputs     = 2; % 前轮转角和附加横摆力矩
    sizes.NumInputs      = 4; % 跟踪误差、横摆角误差、侧向速度和横摆角速度
    % 其他参数设置...
    sys = simsizes(sizes);
    x0  = [];
    str = [];
    ts  = [0 0];
end

function sys=mdlOutputs(t,x,u)
    % 这里面根据输入的u(跟踪误差、横摆角误差、侧向速度和横摆角速度)
    % 通过MPC算法计算输出前轮转角和附加横摆力矩
    tracking_error = u(1);
    yaw_error = u(2);
    lateral_velocity = u(3);
    yaw_rate = u(4);
    % 简单示意,实际MPC计算很复杂
    front_wheel_angle = tracking_error * 0.1 + yaw_error * 0.2;
    additional_yaw_moment = lateral_velocity * 0.3 + yaw_rate * 0.4;
    sys = [front_wheel_angle; additional_yaw_moment];
end

这里还考虑了前后轮的侧偏角软约束。为啥要加这个呢?当侧偏角快到约束边界的时候,如果不做处理,车辆的稳定性就会受影响。加了软约束之后,一旦侧偏角接近边界,就减小控制律,这样能保证侧偏角稳定,车辆行驶也就更稳。

Apollo模型MPC(无侧偏角软约束)

第二种MPC采用Apollo中的模型,基于MATLAB function编写,这个就不包括侧偏角软约束啦,主要是作为对比参考用的。

function [front_wheel_angle, additional_yaw_moment] = apollo_mpc(tracking_error, yaw_error, lateral_velocity, yaw_rate)
    % 同样简单示意计算过程
    front_wheel_angle = tracking_error * 0.15 + yaw_error * 0.25;
    additional_yaw_moment = lateral_velocity * 0.35 + yaw_rate * 0.45;
end

通过对比这两个MPC,就能很直观地看出侧偏角软约束在车辆控制中的作用。

仿真资源说明

仿真项目里还包含carsim的cpar文件、模型mdl文件、绘图m文件(运行后一键出图,超方便),另外还有说明文档和中文文献。这些文件对于理解整个仿真流程和原理非常有帮助。比如说cpar文件里详细记录了车辆的各种参数,mdl文件搭建了整个仿真模型的架构,绘图m文件可以把仿真结果以直观的图形展示出来。

总之,通过这次研究,对基于多种控制策略的车辆路径跟踪有了更深入的认识,不同的MPC策略各有特点,侧偏角软约束也确实对车辆稳定性控制起到了关键作用。希望我的这些分享能给同样在研究相关方向的小伙伴一些启发。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐