资讯动态

ACC弯道控制策略:从直道跟车道直弯平滑切换的工程实践

发布时间:2026/10/19 14:43:46 来源:尧图企业网站定制
1. 为什么直路上的ACC不能直接搬到弯道问题拆解先从我踩过的坑说起。早期我做一套ACC自适应巡航控制模型时直道跟车功能调得很顺前车加减速、切入切出都处理得不错。结果拉到带弯道的试验路段一试问题全出来了弯中突然加速、前车入弯后目标跟丢、驾驶员被顿挫吓一跳。那段时间我最大的感受是——ACC在直道上解决的问题和弯道完全不是同一个问题。1.1 直道场景本质上是一维纵向控制直道跟车时自车和前车基本都在同一条车道、同一个方向上运动。感知层输出的信息虽然多但真正参与纵向控制决策的只有三个量前车距离d、相对速度Δv、自车速度v。控制器要做的事也很单纯——根据这三个量回答一个问题现在该踩油门还是踩刹车踩多少。这种场景下经典的控制结构就够用了外层根据间距策略算一个期望距离内层把实际距离往期望距离上拉输出一个期望加速度。PID也好、简单的前馈加反馈也好都能跑得不错。因为控制的维度只有一个纵向加速度车辆横向运动几乎没有耦合进来模型误差也可以靠反馈去兜底。1.2 弯道给控制系统增加了三个新变量进弯之后问题开始变得棘手。我拆解下来弯道相对直道至少引入了三个必须处理的变量第一是前车的横向偏移。前车在弯道里不会一直停在自车正前方而是随着道路曲率持续向一侧偏。雷达如果只按正前方视锥去关联目标弯稍微急一点目标就会飘出波束范围导致丢失。第二是自车的横向加速度约束。过弯是有物理极限的车速越高、弯道半径越小横向加速度越大。横向加速度超过舒适阈值乘客会甩来甩去超过抓地极限就是失控。纵向控制必须把这个约束考虑进来不能在弯道里还按直道的目标车速傻跑。第三是弯道曲率本身是一个需要实时估计的输入量。直道策略完全不需要知道弯有多弯但弯道策略的所有决策——限速多少、什么时候开始制动、弯中能不能加速——全都系在曲率半径这一个变量上。曲率估计不准后面全盘皆输。1.3 直道策略直接搬到弯道的三个典型失败场景我在试验中反复遇到的就是那几种情况基本可以当作直道策略在弯道的典型死法急弯不减速。系统还在按设定的巡航速度跑弯道半径200米横向加速度已经逼近4m/s²驾驶员明显感觉到车身侧倾加重心里发慌。这是只做直道跟车逻辑、完全不管曲率的必然结果。前车入弯后目标跟丢。前车过了弯心开始加速出弯自车雷达因为角度偏差过大丢掉了目标。系统判定前方无车按定速巡航逻辑猛加速结果一加速又追上前车又紧急制动。这一顿一顿的体验非常糟糕。曲率突变路段的顿挫。在直弯衔接路段如果曲率估计跳变控制器的目标车速跟着跳制动指令忽大忽小整车前后俯仰特别明显。这些问题的根子都在同一个地方你把弯道当作直道来建模了。要解决它就得从控制模型架构上把直道纵向跟车和弯道安全通过两个问题分开处理再让它们平滑地衔接起来。2. 控制模型的三层架构感知、决策、执行如何分工一套能应付直弯路的ACC自适应巡航控制模型我习惯把它拆成三层感知层、决策层、执行层。每一层做自己的事输出清晰的接口这样出问题时能快速定位。很多初做ACC的同学喜欢把感知和控制揉在一个模块里调试的时候会非常痛苦。2.1 感知层到底要输出什么感知层不是把所有传感器数据都堆给控制器就够了。对ACC控制来说感知层真正要输出的核心信息就这几项自车速度v一般来自轮速传感器精度要求高的话融合惯导。目标前车信息相对距离d、相对速度Δv来自毫米波雷达和视觉的目标级融合。这里的关键不是检测到多少辆车而是选出当前车道内最相关的那一辆作为主目标。前方道路曲率κ或曲率半径ρ 1/κ来源可以是视觉车道线拟合、导航地图、也可以是两者的融合。自车横摆角速度和横向加速度来自IMU用于瞬时曲率校验和控制状态反馈。分层的好处在这里就体现出来了感知层只需要保证输出的目标车和曲率尽量准、尽量稳不需要关心控制器要怎么用这些量。控制器也只认这几个输入不关心它们是摄像头给的还是雷达给的。2.2 决策层从期望间距到期望加速度决策层是整套模型的核心它负责把感知输入换算成车辆需要执行的加速度指令。我习惯把它再拆成内外两个环外环——间距/速度规划根据当前的行驶状态和前方环境算出一个期望的跟车距离d_des或者一个期望的目标车速v_target。直道模式下这主要由间距策略决定弯道模式下要叠加曲率限速。内环——跟踪控制把实际距离d和车速v往期望值上拉输出期望加速度a_des。这层通常用PID或者带前馈的跟随控制器实现。内外环分离有一个实际好处外环变化慢、内环变化快两边可以独立调参。外环参数影响跟车风格——激进还是保守内环参数影响跟随精度——能不能贴住期望距离波动。2.3 执行层真实车辆不是给个加速度就动这里是我一开始最容易忽略的地方。模型算出一个期望加速度并不等于车真的能立刻按这个加速度响应。加速和制动是两个完全不同的执行器链路驱动发动机或电机有扭矩建立时间从需求扭矩发出到实际轮端扭矩上升通常有100~300ms的延迟涡轮增压发动机更明显。制动液压制动有建压时间电子制动助力器会快一些但也要几十到上百毫秒。紧急制动时还要考虑ESP的介入逻辑。所以执行层要做两件事一是做执行器响应补偿把延迟模型建进去提前对需求指令做修正二是做加减速切换的平滑处理避免驱动和制动同时请求、避免指令突变。执行层如果只做一个简单的油门开度比例×加速度需求实车跑起来会很生涩。层级核心职责典型输入典型输出感知层目标识别与道路环境建模雷达点迹、图像、IMU、轮速主目标距离/速度、曲率、自车状态决策层期望间距与期望车速规划目标距离/相对速度、曲率、设定车速期望加速度执行层加速度指令转化为执行器指令期望加速度、车速、踏板状态扭矩请求、制动压力请求这三层架构本身没有什么新奇之处但它是整套直弯路控制策略能够落地的骨架。后面讨论的直道策略、弯道策略、直弯切换本质上都是在这个骨架上的不同决策逻辑。3. 直道跟车策略间距策略与速度控制的协同直道跟车是ACC的基本功。虽然项目标题的重心在直弯路控制策略上但弯道策略其实是叠加在直道策略之上的。直道部分做不稳弯道就是空中楼阁。3.1 间距策略恒定车头时距是业界主流起点直道跟车的第一步是决定我应该跟多远。最常用的是恒定车头时距策略CTH公式很简单d_des v × thw d0其中thw是车头时距单位秒代表如果前车突然停下来你给自己留了多少秒的反应和处理时间d0是最小停车间距余量一般取2~5米。这套公式的核心思想是车速越快跟车距离按比例拉大保证不同车速下有相近的反应时间。车头时距取多少直接决定了ACC的性格thw 1.0s偏激进容易被加塞但跟车效率高。thw 1.5s比较均衡大多数量产ACC的默认区间。thw 2.0s偏保守低速拥堵场景下容易被频繁插入体验反而不好。实车调参时我一般先固定d0 3m然后从2.0s往小调一边调一边看实际跟车距离曲线和驾驶员主观感受。注意一点单一固定thw覆盖不了所有场景。高速工况下1.5s没问题但低速拥堵时前车频繁起停1.5s会留有太大空档容易被加塞。更完善的做法是做成可变车头时距在低速时适当减小thw但这属于进阶优化。3.2 速度控制环双层PID的整定思路有了期望间距d_des内环的任务就是让实际间距去逼近它。工程上最稳妥的还是双层PID结构外环以间距误差e_d d - d_des为输入输出一个期望相对速度或期望自车速度。内环以速度误差为输入输出期望加速度。我调试时的切入顺序是先把内环速度环调稳再调外环间距环。内环带宽要足够高至少跟上车辆的响应速度外环带宽要低一些不然前车一抖、自车就跟着抖舒适性很差。几个关键参数的实操经验比例增益间距误差 10m 时期望的修正加速度大约在 0.5~1.0 m/s² 比较合适。增益太大容易震荡太小又显得反应迟钝。积分项必须加抗饱和限幅防止长时间停车时积分无限累积起步时冲一下。微分项对传感器噪声非常敏感雷达测距噪声稍微大一点就会放大成加速度抖动建议微分项前加低通滤波或直接不用微分、改用前馈。还有个直道跟车的重要细节前车减速检测要快前车加速跟随要慢。这是ACC和人类驾驶员一致的逻辑——刹车要果断油门要柔和。实现上可以给加减速方向设置不同的控制带宽或者对加速度指令做非对称的斜率限制。3.3 一组直道跟车的实测数据参考我整理一组当时在试验场测出的数据给大家一个直观量级前车做匀减速初始间距约50m设定巡航80km/hthw取1.5s前车减速度自车最大减速度最小保持间距驾驶员主观感受1.0 m/s²约 1.2 m/s²约 22m平稳无明显点头2.0 m/s²约 2.5 m/s²约 15m可接受轻微前倾3.5 m/s²约 3.8 m/s²约 8m偏猛烈接近接管阈值这里要注意实际最大减速度往往比前车略大因为系统要先把间距从50m缩到期望间距附近如果初始间距太小而前车减速度又大系统会进入紧急制动模式这时舒适性优先级让位于安全优先级。4. 弯道控制的核心难点曲率估计与车速预判直道策略跑顺之后真正的重头戏来了。弯道控制没有一个统一的标准答案因为弯道这个词覆盖了太多场景高速匝道的缓弯、城市路口的直角弯、连续S弯、视野受限的山区弯道。我从工程角度拆出两个最核心的问题曲率怎么估计、目标车速怎么定。4.1 曲率半径的三路来源与融合原则弯道控制的一切决策都建立在曲率半径ρ上但ρ恰恰是最难测准的量。我在项目里能拿到三路曲率信息来源视觉车道线拟合摄像头识别车道线后用三次多项式拟合左右车道线从中解算出本车道曲率。优点是前瞻性好——能看到前方几十上百米的车道走向缺点也明显车道线不清晰、雨天反光、逆光、无车道线的乡村道路都会失效。导航/高精地图能给出前方道路的几何曲率不受光线和车道线质量影响。缺点是地图数据和实际道路有偏差施工改道时尤其不可靠而且需要定位精度配合。IMU瞬时曲率利用ρ ≈ v / ω车速除以横摆角速度算出来的曲率是当前时刻车辆实际走过的路径。它精度高、实时性好但只能代表现在不能代表前方。融合原则我总结成一句话横向加速度限制需要的是前方曲率不是当前曲率。所以要以前瞻信息为主——视觉和地图做前方曲率估计IMU做校验和兜底。当前方曲率来源不可用时退化成基于当前曲率的保守策略即已知弯道按已知弯道限速未知弯道按当前弯道限速。4.2 弯道安全车速物理约束下的上限弯道允许的安全车速核心约束是横向加速度不能超过阈值。公式是v_limit sqrt(a_lat_max × ρ)拿真实数值算一下如果曲率半径ρ 200m舒适横向加速度取a_lat_max 3.0 m/s²那么v_limit sqrt(3.0 × 200) ≈ 24.5 m/s也就是大约 88 km/h。如果这个弯的限速牌是60 km/h约16.7 m/s那横向加速度只有16.7²/200 ≈ 1.4 m/s²相当舒服。这里有个习惯性误区要提醒不要一进弯就把目标车速压到物理极限值附近。人类驾驶员过弯通常只用到 1.5~2.5 m/s² 的横向加速度超过3就明显有侧倾感了。ACC不是赛车手目标是舒适和安全所以a_lat_max我一般默认取2.5~3.0紧急情况下最多放宽到4.0。补充一个关键点弯道限速不仅要限制目标车速还要在决策中持续检查当前横向加速度。因为车速是动态变化的驾驶员也可以手动加速如果系统检测到当前横向加速度已经逼近阈值就要立即给出减速请求这属于弯道中的安全兜底逻辑。4.3 预瞄速度规划不要在弯道里急刹车确定了弯道目标车速之后下一个问题是什么时候开始减速。如果等车到了弯心才开始减横向加速度已经叠加上了纵向制动乘客会非常难受。正确的做法是预瞄——根据前方一段距离内的曲率分布提前规划速度曲线。我用的方法是梯形速度剖面从当前车速v_cur到弯道目标车速v_target以不超过舒适减速度a_brake_max一般取 1.5~2.0 m/s²紧急可取3为前提计算开始减速点。公式很简单L_brake (v_cur² - v_target²) / (2 × a_brake_max)在距离弯道入口约L_brake处开始平缓制动连续减速到目标车速弯中保持匀速或小幅度微调出弯后再按设定车速恢复加速。这套策略的关键是预瞄距离的获取——视觉和地图能提供多远的前方曲率决定了减速规划能多从容。预瞄逻辑处理完后还会遇到一个所有弯道控制器都绕不开的现实问题前车出弯后目标丢失。前车在弯道里持续侧偏出了弯道开始加速自车雷达很可能在某个时刻跟丢目标。这时的策略不能是前方没车就猛加速因为自车可能还在弯道中。我把这个情况放到下一节和直弯切换一起讲。5. 直弯切换的判断逻辑与平滑过渡刚开始做弯道控制的时候我以为只要把直道策略和弯道策略各自写好按曲率大小去切换就行。实际跑下来才发现切换本身才是事故高发区——策略逻辑切换快了控制输出突变切换慢了弯道限速来不及生效。5.1 弯道判定状态机曲率不是唯一的判据我把ACC的行驶状态拆成四个直道巡航、弯道进入、弯道内、弯道退出。每个状态的控制策略不同状态之间需要满足明确的条件才能转移。状态进入条件控制模式直道巡航前方曲率半径大于阈值如 ρ 800m持续1s以上标准间距跟车/定速弯道进入预瞄曲率半径小于阈值如 ρ 500m且持续0.5s弯道限速规划启动目标车速向 v_limit 靠拢弯道内当前曲率半径持续小于阈值保持弯道限速叠加横向加速度安全兜底弯道退出预瞄曲率半径恢复大于阈值目标车速向设定巡航车速恢复平缓加速阈值为什么要带持续时长因为视觉车道线曲率的单帧噪声很大偶尔一个跳变就可能触发误判。加一个0.3~0.5s的持续确认能滤掉绝大部分毛刺。这个处理看起来简单但如果没有做实车在直道带轻微弯度的路段会频繁进入弯道模式车速跟着曲率噪声来回波动体验非常差。5.2 平滑过渡限制加速度变化率比限制加速度本身更重要状态切好了输出还要平滑。很多ACC顿挫的根源不是加速度数值太大而是加速度变化率jerk太大。一个瞬时从0跳到3 m/s²的减速度虽然没超限人类的感受依然非常突兀。我在决策层输出之后做了一道防线对所有加速度指令做一阶惯性滤波和变化率限制。具体实现不复杂核心约束是Δa_lim ±2.0 m/s³舒适模式也就是说从0加速到3 m/s²需要一个半秒的过渡。弯道切换过程中这个限制尤其关键——直道巡航时目标车速可能是120 km/h进入弯道后目标车速可能降到60 km/h车速目标本身发生了巨大跳变如果不限制加速度变化率制动力会瞬间拉满。另一个值得注意的细节是目标车速的低通滤波。弯道预瞄的曲率是连续变化的目标车速也随之连续变化但视觉曲率难免有噪声目标车速就跟着微微抖动。我习惯对v_target做一次截止频率约0.5Hz的一阶低通让速度目标本身尽量稳定。5.3 目标丢失后的处理逻辑宁可保守不可冒进弯道场景最难处理的不是控制本身而是感知信息暂时丢失时怎么办。前车入弯后目标丢失是最典型的场景处理策略直接决定安全性。我的做法是引入一个弯道盲区补偿逻辑如果丢失目标时系统判定仍处于弯道内当前曲率小于阈值不退出ACC也不立即加速。继续保持当前的弯道限速目标维持合理的减速度或匀速行驶。如果前方弯道曲率预计还会持续超过一定距离则进入弯道巡航模式把主目标从前车暂时切换为道路曲率约束等新的目标车出现在合理预测区域后再重新建立跟车关系。如果目标丢失发生在直道上且没有弯道约束则可以按正常逻辑平稳加速到设定车速。这里的原则可以总结为一句大白话当系统对前方情况不确定时默认加速是危险方向保持或减速是安全方向。宁可让驾驶员觉得系统有点保守也不能让系统在信息缺失时贸然提速。目标重新获识时还要避免另一个问题新目标出现的瞬间如果间距突然从无目标变成很近控制器可能瞬间输出一大脚制动。我加了一个目标可信度确认机制——新目标必须在连续多帧比如5帧内被稳定关联且进入目标切换逻辑时间距误差的变化率也做平滑处理这样不会因为目标的突然换人产生突兀的制动。6. 曲率扰动、目标误识别等边界情况我实测踩过的坑最后分享一些我在这套模型实车测试中真实遇到的问题。这些内容不在教科书里也不太好从论文里找到但对正在做同类工作的同学应该有些参考价值。6.1 曲率跳变引起的整车速度震荡我遇到过一个很顽固的问题在一条直道→缓弯→直道的衔接路段车速总是在弯道入口出现小幅震荡幅度大概±3 km/h驾驶座能感觉到一收一放。刚开始以为是控制器参数问题把内外环增益调了好几轮都没用。后来把视觉曲率和IMU瞬时曲率同屏拉出来对比才发现视觉车道线在直弯衔接处拟合出的曲率存在阶跃式的超前跳变——车道线从直线段过渡到圆弧段多项式拟合会在衔接点附近算出一个偏大的曲率然后又回落到正常值。这个曲率尖峰导致目标车速先降后升速度就跟着荡。修复方案不是调参数而是给曲率信号加了中值滤波加低通滤波的组合并且把预瞄曲率和当前曲率的差值做了幅度限制——两个来源的曲率差值超过一定阈值时只允许缓慢跟随。这本质上是一个信号可信度约束不让曲率的短时突变直接影响车速规划。6.2 弯道中目标误关联到邻车道车辆弯道里目标选择比直道复杂很多。直道上前车基本在正前方选目标很直接弯道上前车持续侧偏容易跟丢而邻车道的车因为弯道几何关系反而可能短暂出现在自车正前方。我就遇到过自车在弯道中原本跟着一辆慢车这辆车入弯后侧偏出雷达波束主区系统短暂丢失目标恰好此时邻车道一辆车进入正前方范围目标关联逻辑把它当成新主目标然后做出了一脚不适时的制动。这个问题的根因是目标关联时没有充分利用车道信息和横向运动趋势。修复思路是目标选择模块里增加一个横向距离预测——结合自车横摆角速度和目标相对方位的变化率预估目标车在下一段时间是否仍处于自车规划路径上。预测偏差大的一律不选为主目标。这个修复之后弯道中误关联的情况大幅减少。6.3 雨雾天气感知降级下的保守策略试验中有一天下着小雨视觉车道线置信度明显下降但雷达目标还能稳定工作。这时候系统面临一个选择是继续依赖视觉曲率做弯道限速还是因为视觉不可信就退化成纯直道跟车逻辑我的处理原则是走降级链、不走极端视觉曲率置信度正常正常使用预瞄限速。视觉置信度下降但IMU瞬时曲率可用启用当前曲率限速模式按当前实际跑到的弯道曲率限制目标车速不许加速过猛。两个曲率来源都不可用时降低ACC允许的最大巡航速度保持比设定车速低一档的保守车速并提醒驾驶员接管。降级策略的核心思路是信息越是不完整系统的行为边界越是往保守方向收。这套逻辑不复杂但真正把它在代码里按优先级实现好的人不多。很多同学调试时只关注传感器都正常时表现好不好忽略了传感器都异常时安全不安全。对ACC这种安全相关功能来说后者才是决定量产与否的关键。6.4 实车调参的几个实操心得文章最后分享几条我做这套控制模型积累下来的调参感受第一调试顺序一定是从直道到缓弯再到急弯。直道都抖弯道肯定没法看。缓弯用来标定曲率阈值和切换逻辑急弯用来验证极限工况和降级策略一步步来不要跳步。第二同一段路多跑几遍看趋势不要只看单次曲线。视觉曲率带噪声单次试验的数据偶然性很大。我习惯把同一段路跑三遍把速度和加速度曲线叠图对比找一致性好的规律再动手调参。第三用乘客感受而不是指标数值来衡量顿挫。纵向加速度、jerk这些指标当然要记录但最终评价标准是驾驶员和乘客的主观体验。有一次我调出来的指标很好看——最大jerk只有1.5 m/s³——但驾驶员反馈明显有拖拽感。后来测下来是制动力在低速时响应太快跟加速度数值无关。这类问题必须靠主观评价才能发现。第四所有弯道参数尽量做成标定表不要写死常量。比如曲率阈值、a_lat_max、目标车速滤波系数这些值在不同车型、不同底盘、不同轴距下最优值都不一样。量产项目里这些参数最终都是通过标定工具调的。代码里写死常量的好处是前期调试快但后期适配别的车时每一个常量都改一遍代码你会非常痛苦。做弯道控制这几年我最大的体会是ACC的难点从来不在算法有多花哨而在系统能不能在信息不完整、环境变化的时候保持安全且可预期。直道策略是锦上添花弯道策略是雪中送炭而直弯切换和降级策略才是真正决定系统能不能量产上路的关卡。把这三层逻辑理清、做稳比堆再多的仿真工况都管用。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑