本文来源:智车科技


在自动驾驶的“驾驶技能”里,横向控制算法就像司机的双手——它决定车辆能否精准沿着规划好的路线行驶。

而在众多横向控制算法中,纯跟踪算法(PurePursuit)凭借“简单好用”的特质,成为低速场景(比如园区物流车、自动泊车)的首选方案。今天我们就用最通俗的语言,拆解这个算法的底层逻辑:它如何模仿人类驾驶?工程落地时要避开哪些坑?又适合哪些场景?



从人类驾驶到算法:

纯跟踪的“模仿秀”


人类开车时,从不会死盯着车头,而是会看向前方几十米的目标点,然后自然转动方向盘对准它。纯跟踪算法的核心逻辑,就是把这个过程“数学化”。


先给汽车“瘦身”:从四轮到两轮的简化


真实汽车的转弯原理很复杂(比如阿克曼转向,四个车轮绕同一圆心转动,内侧车轮转角更大),但纯跟踪算法用了个“偷懒”的办法——自行车模型:



图 真实车辆的阿克曼转向几何(上)及其简化的自行车模型(下)


把汽车简化成“两个轮子”(前轴和后轴各一个),只考虑平面运动。这样一来,前轮转角δ和转弯半径R的关系就变得简单:tan(δ)=轴距L/转弯半径R


也就是说,只要算出目标转弯半径R,就能直接得到需要转多少方向盘(δ=arctan(L/R))。


这个模型在60km/h以下的低速场景非常好用,实测横向偏差能控制在15cm以内(相当于一个拳头的宽度)。




核心操作:

盯准目标点,画个圆弧冲过去


纯跟踪算法的工作步骤,像极了新手司机练车:

选目标点:以车辆后轴为起点,沿规划路线向前找一个“预瞄点”(距离自己ld米)


算转弯半径:计算从当前位置到目标点,需要画一个多大半径的圆弧


打方向盘:根据圆弧半径,用上面的公式算出前轮该转多少角度


整个过程就像用圆规画圆——后轴是圆心,预瞄距离ld是半径,目标点是圆上的一点。


图 纯跟踪算法的几何关系推导





工程落地:

把公式变成“能跑的代码”


理论好懂,但落地时藏着不少细节。我们按算法运行的步骤,一步步拆解关键操作。


第一步:给目标点“定位


规划好的路线坐标是“全局地图”里的(比如经纬度),而车辆需要知道目标点在“自己的坐标系”里的位置(比如“前方5米,偏右0.3米”)。这就需要做坐标转换:



简单说,就是把“地图上的点”转化成“相对于自己的位置”,这样才能算清楚“该往左转还是右转”。


图 坐标转化


第二步:预瞄距离怎么定?


速度快就看远点预瞄距离ld(就是看前方多远的点)是个关键参数,直接影响控制效果:


太慢的车(比如泊车时<5km/h):看1-2米就行

园区里跑的车(30-40km/h):看3-5米

速度再快?抱歉,纯跟踪算法不太擅长(后面会说原因)


工程上常用速度自适应策略:速度v越快,预瞄距离ld越远(比如ld=k×v,k取1.1-1.5)。但要注意:


车速单位要转成m/s(CAN总线常给km/h,别忘除以3.6)

最低预瞄距离留3-5米(防止车速为0时出错)


图 预瞄距离与速度关系


第三步:目标点怎么选?别找错了!


选目标点时,要找到“刚好超过预瞄距离ld”的那个点,步骤很简单:


1.先在规划路线上,找到离自己最近的点(相当于“当前位置”)

2.从这个点往前数,累加路线长度,直到超过ld,这个点就是目标点



最后一步:方向盘转角怎么算?还要做什么处理?


有了目标点,用下面的公式直接算前轮转角:


转向角δ=arctan(2×轴距L×sin(α)/预瞄距离ld)

(α是车辆当前航向与目标点方向的夹角,用坐标转换后的局部坐标就能算)


但工程落地时,这一步还要做两件事:


转成方向盘角度:前轮转角×转向传动比(比如传动比16,就是前轮转1度,方向盘要转16度)

平滑处理:用一阶低通滤波消除抖动(比如滤波系数0.2,新角度=0.8×旧角度+0.2×计算值)




纯跟踪算法:哪些场景“能用”,

哪些场景“头疼”?


优势:简单就是王道


计算快:单帧处理<5ms,普通单片机都能跑

鲁棒性强:定位有小误差(比如10cm)也不影响

参数少:主要调预瞄距离相关的2-3个参数,新手也能上手


缺点:高速场景“hold不住”


忽略动力学:没考虑轮胎打滑(比如雨天路面滑,算法算出来的转角会不准)

高速易跑偏:车速超过60km/h后,稳定性明显下降(急弯容易“切弯”)

参数敏感:预瞄距离差1米,控制效果可能天差地别


最适合的场景


低速园区车:厂区、校园里的配送车(速度<40km/h)

自动泊车:10km/h以内的泊车场景,短预瞄距离能精准入位

农业机械:农田里直线作业,结合PID补偿能提高精度


工程落地避坑指南


预瞄距离不是越大越好:


低速(<20km/h):3-5米

中速(20-40km/h):5-8米

急弯处:比直道缩短20%(防止切弯)


滤波参数别乱调:


抑制抖动选强滤波(系数0.1-0.3)

高速场景选弱滤波(系数0.5-0.8),避免响应滞后


别忽略单位转换:


车速单位:km/h→m/s(除以3.6)

角度单位:弧度→度(算法算的是弧度,CAN总线发的是度)




简单算法的“生存智慧”


纯跟踪算法就像自动驾驶领域的“老黄牛”——它不算最先进,但胜在简单可靠。在低速封闭场景里,它的表现甚至不输复杂的模型预测控制(MPC)。


理解它的原理,不仅能帮你快速实现一个可用的横向控制模块,更能让你明白:好的算法不是越复杂越好,而是能在特定场景下解决问题。


下次坐园区无人车时,不妨观察一下它过弯的路线——说不定,你就能看出纯跟踪算法的“影子”呢。

END




最后提一句,21ic论坛(bbs.21ic.com)正在招募原创作者,单篇文章奖励最高500元,欢迎广大网友踊跃投稿! 点击了解活动详情

往期精选:

扫描二维码,关注视频号

请点下【♡】给小编加鸡腿