ACC巡航控制分层控制:上层PID与下层PID的奇妙组合

ACC巡航控制分层控制(上层pid下层pid) 软件使用:Matlab/Simulink2018b+Carsim2020(必须一样的版本+远程调试需格外200) 适用场景:采用模块化建模方法,搭建联合仿真模型,适用于直线工况。 包含模块:其中包含单独的Carsim配置文件,电机驱动模块,车辆巡航模块,车辆跟踪模块,切换逻辑,速度跟踪模块,联合仿真模块。 包含:Matlab/Simulink源码文件,详细建模说明文档,对应参考资料及相关文献,

在自动驾驶领域,ACC(自适应巡航控制)系统扮演着关键角色,今天咱们就来唠唠基于Matlab/Simulink 2018b和Carsim 2020的ACC巡航控制分层控制,上层PID与下层PID的协同运作。

软件选择与版本要求

为啥非得是Matlab/Simulink 2018b搭配Carsim 2020呢?版本兼容性是个大问题。这俩版本配合起来,能为开发ACC巡航控制模型提供稳定且高效的环境。要是用其他版本,说不定就会遇到各种莫名其妙的兼容性错误,比如数据传输不畅,模型参数无法正确加载等等。这里要提一嘴,如果需要远程调试,还得额外加200,这是使用特定功能的代价啦。

适用场景与建模方法

采用模块化建模方法搭建联合仿真模型,而且特别适用于直线工况。模块化建模就像是搭积木,每个模块各司其职,最后组合在一起完成复杂的任务。比如对于ACC巡航控制来说,直线工况相对简单,更适合我们先把基础模型搭建好,调试各个模块的功能。

模型中的关键模块

  1. 单独的Carsim配置文件:这就像是汽车的"说明书",里面详细记录了汽车的各种参数,包括底盘特性、轮胎参数、动力系统参数等等。这些参数是整个模型运行的基础,直接影响到车辆在仿真中的表现。
  2. 电机驱动模块:它负责模拟电机如何为车辆提供动力。在Matlab/Simulink中,我们可以这样简单实现一个电机驱动模块的基本逻辑(以直流电机为例):
matlab 复制代码
% 定义电机参数
R = 1; % 电机内阻
L = 0.1; % 电机电感
Kt = 0.1; % 转矩常数
Ke = 0.1; % 反电动势常数
J = 0.1; % 转动惯量
b = 0.01; % 粘性摩擦系数

% 时间步长
dt = 0.01;
t = 0:dt:10;

% 初始化变量
i = zeros(size(t));
w = zeros(size(t));
theta = zeros(size(t));

% 输入电压
V = 10*ones(size(t));

for k = 2:length(t)
    % 电机电流微分方程
    di = (V(k-1) - Ke*w(k-1) - R*i(k-1))/L;
    i(k) = i(k-1) + di*dt;
    
    % 电机转速微分方程
    dw = (Kt*i(k-1) - b*w(k-1))/J;
    w(k) = w(k-1) + dw*dt;
    
    % 电机角度
    theta(k) = theta(k-1) + w(k-1)*dt;
end

这段代码简单模拟了直流电机在给定电压下的电流、转速和角度变化。在实际的ACC巡航控制中,电机驱动模块要与其他模块协同工作,根据车辆的速度需求调整输出动力。

  1. 车辆巡航模块:这个模块就是整个ACC系统的"大脑"之一,上层PID控制就主要在这里发挥作用。上层PID根据目标速度和当前车辆速度的偏差,计算出一个期望的加速度。这里用Matlab代码简单示意一下PID控制的核心部分:
matlab 复制代码
% 初始化PID参数
Kp = 1;
Ki = 0.1;
Kd = 0.01;

% 目标速度和当前速度
target_speed = 30; % m/s
current_speed = 0;

% 积分和微分初始化
integral = 0;
previous_error = 0;

for k = 1:length(time)
    % 计算速度偏差
    error = target_speed - current_speed;
    
    % 积分项
    integral = integral + error*dt;
    
    % 微分项
    derivative = (error - previous_error)/dt;
    
    % PID输出
    output = Kp*error + Ki*integral + Kd*derivative;
    
    % 更新当前速度
    current_speed = current_speed + output*dt;
    
    % 更新上一次的误差
    previous_error = error;
end

这段代码展示了PID控制器如何根据速度偏差不断调整输出,以让车辆达到目标速度。在车辆巡航模块中,这个输出会传递给下层的控制模块。

  1. 车辆跟踪模块:主要负责让车辆尽可能精确地跟踪目标轨迹,在直线工况下,就是保持直线行驶。它会根据上层模块传来的指令,对车辆的转向等进行微调。
  2. 切换逻辑:在不同的工况或者系统状态下,可能需要切换不同的控制策略或者模块工作模式。比如当检测到前方有车辆时,ACC系统可能要从定速巡航模式切换到跟车模式,这就需要切换逻辑来合理安排。
  3. 速度跟踪模块:下层PID控制主要在这个模块体现。它根据上层PID传来的期望加速度,进一步精确控制车辆的速度。例如通过调节油门开度或者刹车力度来实现。
  4. 联合仿真模块:它把Matlab/Simulink和Carsim连接起来,实现数据交互。让Matlab/Simulink中计算出来的控制指令能传递给Carsim中的车辆模型,同时Carsim中的车辆实时状态数据也能反馈回Matlab/Simulink进行分析和进一步调整。

模型资源

我们的模型还包含Matlab/Simulink源码文件,方便大家深入研究每个模块的具体实现。同时配备详细建模说明文档,从整体架构到每个模块的细节,都有清晰的阐述,就算是新手也能快速上手。另外还有对应参考资料及相关文献,方便大家进一步拓展知识,了解该领域的前沿研究。

ACC巡航控制分层控制是一个复杂但有趣的领域,通过Matlab/Simulink和Carsim的联合仿真,我们能更好地探索和优化这一系统,为未来自动驾驶技术的发展添砖加瓦。

相关推荐
CodeZ-Hao10 天前
gitea启用状态检查结合jenkins工作流实现pr门禁
servlet·jenkins·gitea
玩电脑的辣条哥1 个月前
绿联NAS怎么部署Gitlab或Gitea?
gitlab·gitea
逍遥浪子~3 个月前
搭建本地gitea服务器
运维·服务器·gitea
rivercoder3 个月前
Gitea:轻量级的自托管Git服务
git·gitlab·gitea
Clownseven3 个月前
Gitea Webhook教程:实现git push后自动部署更新网站 (CI/CD入门)
git·ci/cd·gitea
Clownseven4 个月前
如何搭建私有Git服务器?Gitea安装与配置超详细教程 (替代GitHub/Gitee)
服务器·git·gitea
马特说4 个月前
macOS 搭建 Gitea 私有 Git 服务器教程
git·macos·gitea
第四维度44 个月前
【Debian】4-‌1 Gitea简介以及与其他git方案差异
git·gitea
第四维度44 个月前
【Debian】4-‌2 Gitea搭建
运维·debian·gitea