☰
ACC自适应巡航直弯路控制策略:从目标筛选到弯道限速的标定实践
2026/10/19 5:59:17 网站建设 项目流程

很多人把ACC自适应巡航当成一个“跟车功能”,但真正拍过ACC标定的人才知道,直道跑得稳只能算及格,弯道不把乘客甩来甩去、不误切目标、不突然加速,才是真功夫。一个ACC自适应巡航控制模型,处理直路和弯路时的核心难点完全不同:直道比拼的是距离控制的细腻度,弯道比拼的是目标筛选与横向预判能力。这篇文章我想把自己在ACC控制模型和直弯路控制策略上的完整思路拆开讲清楚,从道路输入模型、控制器选型,到直道跟车距离策略、弯道限速规划以及直弯切换的落地标定,尽可能把能直接拿来用的经验都写出来。

这个内容适合正在做ADAS开发、底盘控制或自动驾驶规划控制的人参考,也适合车辆工程方向的研究生和刚入门控制策略的工程师作为一份工程导航图。我不打算堆公式,更不会只讲故事,所有关键参数和判断逻辑都会给出来,并解释我为什么这样选。

1. 项目核心到底在解决什么问题

1.1 直道与弯道的本质差异在哪里

直道上的ACC,从工程角度看其实是一个相对成熟的一维问题:自车和目标车都在同一条车道的直线上,纵向相对距离是唯一的决策变量,只要把“距离-车速”曲线标好,再把油门刹车过渡做平顺,基本就能满足日常使用。但这个问题一旦放进弯道,二维特性就立刻显现出来。

我记得第一次做弯道实测时,车辆以80km/h进入一个半径250m左右的弯道,系统突然把前面相邻车道上的一辆慢车当成目标,一脚重刹直接把后排乘客吓一跳。事后分析原因很简单:弯道里自车和旁车横向位置不断靠近,基于直线假设的目标筛选逻辑瞬间失效。这就是直弯策略必须单独设计的原因——弯道的核心不是“怎么跟车”,而是“到底哪辆车才是该跟的车”。

另外,直道策略里的加速度请求可以看作是纯纵向变量,弯道里则必须考虑横向加速度。同样以80km/h过半径250m的弯,侧向加速度大约在2m/s²左右,大多数乘客勉强能接受;但如果半径只有150m,侧向加速度直接跳到3.3m/s²以上,这个时候你再保持巡航速度,系统就很容易让驾驶员感到不安。

1.2 用“模式切换”而不是“两套系统”来设计策略

很多初做ACC的人会想:直道写一套逻辑,弯道再写一套逻辑,然后按道路曲率切换。但这样落地必踩坑。因为直弯之间不是一条清晰的线,而是一个连续的渐变过程。如果你维护两套完全独立的控制器参数,切换点的微小检测误差就会造成车速跳变、加速度突变,体感直接翻车。

所以我更推荐的做法是:一套控制框架,两套策略权重。也就是说,纵向距离规划和速度规划在直道和弯道共用主干,只是弯道模式下额外增加两个修正输入:一是曲率影响下的目标侧向偏移修正,二是弯道限速带来的速度约束。这样直弯切换就不再是“换控制器”,而是“切换约束条件和目标筛选窗口”,天然具备连续性。

从架构上说,ACC系统一般分为三层:感知层负责输出目标车相对位置、速度以及车道线信息;决策规划层负责判断目标、计算期望距离和期望车速;控制执行层负责把期望值换算成油门刹车请求。本文讨论的直弯路控制策略,主要落在决策规划层,同时会涉及感知层数据如何被工程化地使用。

2. 直弯路输入模型:道路环境怎么“看”进控制器

2.1 安全距离模型:车头时距与固定余量怎么配合

ACC的核心距离控制基础是安全距离模型,常见的有固定安全距离(Constant Distance,CD)、恒定车头时距(Constant Time Gap,CTG)和可变车头时距(Variable Time Gap,VTG)三类。量产ACC现在基本不用固定距离,主流是用CTG,公式是这样的:

d_des = v_ego * T_gap + d0

其中d_des是期望跟车距离,v_ego是自车速度,T_gap是车头时距,d0是停车时的最小间距。T_gap一般标定在1.0s到2.2s之间,舒适模式偏大,运动模式偏小。d0根据传感器安装位置和车辆尺寸,通常取2.5m到5m。

但CTG的最大问题在于,低速拥堵工况下,它对“加塞”非常敏感。车速20km/h时,T_gap=1.5s对应的距离只有8.3m左右,旁边车一脚油门就能塞进来。所以后来我倾向在低速段用VTG:40km/h以下时,T_gap随速度增大而从0.8s线性增长到1.5s,40km/h以上再维持恒定值。这样低速时跟车距离不会留出大空档被人频繁插入,高速时又保证安全余量。

弯道内这个模型还必须增加横向修正项。同样一个相对距离,在弯道里自车和前车的实际连线不再是沿车道线方向,而是沿着曲线路径,如果直接用直线距离作为控制量,在曲率较大的弯道中会出现“还没追上前车车尾,系统却以为已经追上了”的情况。修正方法一般是用道路曲率对纵向距离投影,把曲线距离换算成等效直线距离,再交给控制器。

2.2 曲率估计:三种来源,怎么融合最稳

弯道策略离不开道路曲率。曲率半径R是几乎所有弯道控制算法的核心输入。工程上曲率来源主要有三种:车道线拟合、高精地图/GPS、前车轨迹推算。我第一次做的时候天真地只相信视觉车道线,结果在车道线缺失、逆光、雨雾场景下,系统直接丢失曲率信息,弯道限速瞬间失效。

可靠的做法是分层融合。视觉车道线曲率作为主要来源,通过车道线三次多项式拟合后得到曲率值;高精地图在高速公路环境下提供前方200m以内的曲率查找表,作为前馈;当前方存在稳定目标车时,用历史轨迹点拟合目标车辆的运动圆弧,也可以得到一条冗余的曲率估计。三者都经过卡尔曼滤波平滑,并按照信号置信度加权。

需要注意,视觉车道线曲率一般需要经过时域平滑,否则每一帧拟合噪声都会让限速指令上下抖。时间常数我通常会取0.5s到1s,曲率变化快的匝道场景可以适当减小到0.3s,但不能低于0.2s,否则控制量抖动会反噬到油门刹车,让乘客感觉系统在“抽搐”。

3. 控制模型选型:从PID到MPC,选型逻辑与组合策略

3.1 三类控制器对比

ACC中常用的纵向控制器无非是PID/PI、模糊逻辑控制(FLC)和模型预测控制(MPC)。给一个横向对比表格:

控制方案实现成本实时性约束处理能力弯道适应性
PI/PID低极好弱,需额外设计抗积分饱和与限幅一般,需靠前馈补足
模糊控制中好中等,规则调整灵活较好,可把曲率直接做成输入论域
MPC较高取决于求解器强,可显式约束加速度、jerk、R边界好,能统一处理直弯约束

PID在距离差较大时很容易产生超调。我见过某方案把P参数标得偏大,前车减速时系统先重刹,对方加速之后又猛加油追上去,整个时距曲线像锯齿一样。模糊控制的好处是可以把“距离误差小但相对速度大”这类非线性特征直接用语言规则覆盖,调试手感更接近经验直觉。

MPC的优势在于它天然支持多约束优化。你可以把期望距离、期望速度、加速度限值、jerk限值、甚至弯道侧向加速度约束全部写进优化问题里,这样控制器在过弯时不会只盯纵向,而是自动协调纵向减速度和横向加速度。缺点是开发初期周期较长,对芯片算力和实时性要求高。一般车载域控制器跑一个5到10个预测步长的纵向MPC已经够用。

3.2 我最终采用的组合策略

在这类项目中,我不会从头到尾只用一种算法,而是做“主轴+辅助”的组合。直道工况主轴用PI控制,因为稳态误差小、实现简单、标定工程师上手快;同时加入基于加速度的前馈补偿——当前车加减速时,前馈项直接提供一部分基础请求,PI只负责修正误差,这样响应更快且超调小。

弯道工况则在PI主轴上叠加两层:第一层是弯道限速约束,我把基于曲率半径得到的允许最大车速作为速度上限,用逻辑维度去限幅;第二层是MPC可变增益,也就是弯道里把PI的输出作为MPC的参考轨迹初始解,再由MPC做带约束的滚动优化。这样部署,直线段基本不依赖MPC的算力,弯道段又能得到约束处理能力。

实际上,判断策略好坏不能只看算法“高不高大上”,还要看整个系统在代码里能不能稳定跑几百个小时不抽风。工程落地时,我见过不少项目组把MPC写得很漂亮,最后因为状态估计噪声大、约束硬边界频繁激活,导致车辆在匝道里一顿一顿的。所以算法选型脱离标定现实是最容易翻车的地方。

4. 直道控制策略:距离规划与速度调节的实操细节

4.1 跟车目标筛选:别让“旁边道的车”混进来

直道工况虽然一维,目标筛选依然有讲究。大多数量产方案用侧向距离阈值来判断目标是否在本车道内。这个阈值的标定直接决定误触发率。阈值太小,弯道和车道偏移时会把真实目标丢掉;阈值太大,相邻车道车辆会被误认成目标。

我给一个常用判断逻辑:当自车与潜在目标车的横向相对距离小于当前车道宽度的0.75倍时,将该目标纳入候选,然后结合车道线信息判断目标车是否与自车处于同一车道内。车道线置信度高时以车道线判断为主,置信度低时退化为横向距离阈值判断。

在主目标切换上,要特别处理“切入”和“切出”两个状态。前车切走时,系统不能立即猛加速到设定巡航速度,而应该等待一个确认时间,比如0.3s到0.5s,确认目标确实离开后再以受限加速度过渡。这个处理决定乘坐舒适性,我在标定时深有体会:确认时间太短,车身会“弹出去”;太长,后车又会觉得你犹豫。

4.2 直道速度控制的“三段式”请求曲线

纵向速度控制不要直接输出一个加速度阶跃。优秀做法的思路是规划一条平滑的速度轨迹,再让底层控制器去跟。通常把期望加减速请求限制在舒适范围内:正常加速不超过2.0m/s²,正常减速不超过-2.5m/s²,紧急制动时最大减速度可以到-4.0m/s²以上,但要区分激活条件。

加速度请求的变化率(jerk)是体感关键。我推荐的jerk上限是舒适模式下不超过1.5m/s³,运动模式不超过2.5m/s³。举个例子,如果你想让车辆从60km/h减到30km/h,以-2m/s²的减速度执行,理论上需要4.16s;如果jerk限制1.5m/s³,那么从0到-2m/s²需要1.33s,实际减速度曲线就是一个斜坡而不是阶跃,乘客感受会明显好于直接踩下去。

低速拥堵路段还要增加“蠕动跟车”逻辑。当前方目标静止且自车也接近停止时,系统应该以不超过1m/s²的微加速度前移,并在距目标车约3m处完全停止。这里d0的设定非常关键,因为传感器在近距离时测距噪声比例会变大,留太近容易触发紧急制动,留太远又容易被加塞,我一般标到2.8m到3.5m之间。

这里额外提醒一个容易踩的坑:直道巡航遇到前车急刹时,很多策略只关注当前目标车加速度,忽略了前前车状态。如果系统没接入V2V或多目标跟踪,至少要在算法里做一个“前车加速度变化率过大即触发预减速”的逻辑,否则大概率出碰撞预判过晚的问题。

5. 弯道控制策略:曲率限速、目标修正与平顺切换

5.1 弯道目标误判的三大来源与剔除方法

弯道目标误判是我在实车测试中花时间最多的地方。排前三的来源是:相邻车道弯道内车辆切入视野、护栏和静止障碍物被当目标、前方目标车辆实际在弯道出口已经换道但轨迹预测滞后。

第一个来源需要做目标轨迹的“弯道一致性”判断。不要只看当前时刻的横向位置,要看目标车过去1到2秒的横向运动趋势。如果目标车横向位置随时间持续向自车靠近,且靠近速率在设计阈值之内,才认为它是真正的切入目标;如果只是弯道几何导致的相对横移,它的横向位置应该在车道边界内稳定波动。

第二个来源需要结合感知的物体类别置信度。毫米波雷达很容易把金属护栏识别为静态点,视觉分类器又可能把阴影当障碍物。解决办法是采用“雷达+视觉”融合策略,只有当两种模态输出一致时才对静止物体做响应,单一模态的可信度要打五折。另外,对静止目标要增加时间持续性判断,连续多帧存在才激活防撞逻辑,避免瞬时的感知噪声引起误刹。

前车换道的预测滞后问题则依靠道路模型修正。弯道里目标的纵向位置应当投影到自车所在车道的中心线上来换算“曲率距离”,这样一来,前车即便已经开始向出口变道,只要还没完全跨线,系统依然能稳定跟踪。

5.2 弯道限速规划:侧向加速度是硬约束

弯道限速的核心约束是侧向加速度a_y。物理公式很朴素:

v_max = sqrt(a_y_max * R)

假设弯道半径R=200m,如果系统允许的最大舒适侧向加速度a_y_max=2.0m/s²,那么该弯道的允许最大车速v_max=sqrt(2.0*200)=20m/s,也就是72km/h。如果同样的弯道半径下你想保持90km/h通过,需要的侧向加速度会达到3.1m/s²,这个值已经超出多数乘客的舒适区。

量产标定时,不同场景下推荐限速目标值可以参考这个表格:

场景舒适侧向加速度上限紧急情况下限
高速公路主路弯道1.8~2.2 m/s²≤3.0 m/s²
城市快速路弯道1.5~2.0 m/s²≤2.5 m/s²
匝道/连续弯道1.2~1.5 m/s²≤2.0 m/s²

这里要特别注意,限速规划必须留出“提前量”。如果只按当前位置的曲率限速,等你发现曲率已经增大再减速,横向加速度早就超标了。我习惯读取前方50到80m处的预估曲率来计算目标车速,而不是只看自车正下方的曲率。直道突然接急弯的场景,提前量不够就是典型的“高速冲进弯再重刹”体验。

5.3 弯道限速的平顺过渡:从“限制”到“请求”

弯道限速不是简单地给一个v_max然后让系统强制跟随,否则会从直线段舒适加速状态瞬间变成弯道重刹状态,驾驶员会被吓一跳。正确做法是把v_max作为速度轨迹规划的一个动态约束输入,通过一阶惯性环节让速度目标缓慢逼近限速值。

我常用一个时间常数可变的低通滤波器处理弯道入口的限速值,时间常数与曲率变化率负相关:曲率变化越快,时间常数越小;变化越缓慢,平滑性越自然。但时间常数不能设得过大,否则出现“舍不得减速”的观感,系统会觉得你磨叽。这个标定需要一遍遍实车试,最终我落地的参数是入口段时间常数0.6s,出口恢复段时间常数1.5s,理由是减速阶段要及时响应物理约束,加速恢复阶段则可以让系统表现得更有“耐心”一点。

弯道中方向盘的转向动作如果和纵向减速度完全解耦,体感就会割裂。比较有效的技巧是让ACC的制动请求与EPS的转向阻尼补偿做好通信,弯道内适度增加转向阻尼,驾驶员会感觉车身更稳定。这不是控制策略的主流功能,但很多调校团队会悄悄加这一类手感优化。

6. 直弯控制策略落地:仿真场景搭建与实车标定难点实录

6.1 仿真场景覆盖哪些才算合格

在我做过的项目里,控制策略的验证不能只靠一两段典型弯道。至少要把三类场景跑透:定半径长弯、连续S弯、直道接急弯。

定半径长弯主要验证稳态性能,看跟车距离是否收敛、限速是否波动;连续S弯重点看目标切换和曲率方向反转时,限速输出是否出现抖动;直道接急弯是事故高发场景,要专门验证预减速的介入时机。每个场景下还要叠加交通流变量:前面有没有车、车距多大、目标车是否在弯道内变道、旁车道是否有慢车干扰。

仿真工具方面,我习惯用Simulink搭建控制策略原型,结合车辆动力学仿真平台做闭环验证。感知层的目标输出则可以用场景仿真工具注入。整车级测试之前,HIL(硬件在环)是必须的一步,因为控制器实物的通信延迟、消息丢帧和信号跳变只有HIL才能提前暴露。

6.2 常见问题与排查速查表

以下问题是实车路测里出现频率比较高的,我整理成速查表:

故障现象可能原因排查方法解决建议
过弯时突然重刹目标误判为相邻车道车回放目标轨迹和车道线数据增加弯道一致性校验、收紧侧向位置阈值
弯道内跟车距离过大横向投影距离未修正检查CurveDistance计算曲线对纵向距离按R做投影修正
出弯后不加速曲率恢复判断滞后检查曲率滤波时间常数减小恢复段时间常数或加前馈
直弯切换点车速跳动两套参数切换过陡检查切换逻辑是否有缓变改为约束渐变或新增过渡状态
目标丢失后突然加速确认时间不足检查目标丢失状态机增加确认时间和受限加速度

6.3 独门避坑经验:三件没人写进论文的事

第一件事,EPS角度信号是弯道策略里最容易被忽略的信息。很多论文聊弯道限速都在谈曲率估计,但实车上视觉曲率一帧抖动几十毫秒可能就让加速度请求乱了。我后来把方向盘转角信号经归一化后作为一个辅助的曲率置信开关:转角超过阈值时,系统强制启用弯道模式,哪怕视觉暂时丢了也能维持限速。

第二件事,标定油门刹车MAP时要注意目标车加速度的平滑性。ACC控制的是自车,但很多纵向控制器会直接用目标车加速度作为前馈。目标车加速度信号如果没滤波,毛刺会被前馈直接放大,表现在车上就是油门一耸一耸。给目标加速度加一个2Hz到3Hz的低通滤波,体感立竿见影。

第三件事,弯道内的预警和制动的介入阈值应该有别于直道。直道中前车静止而你高速接近,AEB介入相对晚一点可能还来得及;弯道中感知距离会被压缩,制动的有效窗口更短,介入阈值应该更早、更强。这个阈值如果和直道完全一致,很容易出现弯道中接管过晚的险情。

7. 一点实测体会

整个直弯路策略调下来,我最深的体会是:ACC弯道控制的难点不在于写出一个多么精巧的算法,而在于让系统在直道、弯道之间的过渡尽量“无感”。乘客不会夸你MPC解得多好,只知道过弯的时候有没有被吓到。所以给刚入行的人一个建议:哪怕模型再简单,先把弯道目标筛选、曲率提前量、限速平滑过渡这三件基础事做到位,这个ACC的体验已经能超过市面上不少方案。

另外,后续往高阶扩展时,这套直弯路框架可以顺滑承接领航辅助中的自动变道和匝道汇入逻辑,曲率估计和目标筛选都不用推翻重来,只需要把规划维数从一维变成二维。这也是我当时坚持“一套框架、两套权重”的原因——架构上留好余地,后面功能演进才能真正提速。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询