自动驾驶运动规划解读
运动规划问题可能看起来像是一组元素,如"贝塞尔曲线拟合"或"有限状态机",甚至是"A* 和 Dijkstra!!!",但实际上它比这更复杂。有两个主要的子主题需要处理:高级运动规划: 如何规划从 A 到 B 的路线。(战略家)低级运动规划: 如何超车、生成轨迹等——即战术家。
AI模型价格对比 | AI工具导航 | ONNX模型库 | Vibe Coding教程 | PLC在线仿真器 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo
麦当劳兄弟从车里出来,看着雷·克洛克: — "特许经营!"他喊道。 — "您说什么?"其中一人困惑地回答。
— "**特许经营!特许经营这该死的东西!**它太棒了,不能只在一个地方经营。**麦当劳应该无处不在!**横跨整个海岸。从这片海到那片海……当我看到这些队伍、你们的整个运营、品尝了你们的产品,我就知道该做什么了。特许经营!特许经营!特许经营!特许经营!特许经营!"
在电影《创始人》中,你可以看到这个场景,麦当劳背后的远见者雷·克洛克第一次向麦当劳兄弟推销特许经营的想法。然而,虽然这(显然)是正确的做法,但兄弟俩的第一反应是消极的,他们甚至说他们已经尝试过了。那么为什么雷能够实现它呢?
因为雷是战略家,而麦当劳兄弟是战术家。在许多商业课程中,我们学到技能应该是互补的——事实是,最佳组合是将战略家与战术家结合在一起,战略家对产品能带来什么有着不可思议的愿景,而战术家则拥有不可思议的专业知识。
这个想法,不仅是创业背后的理念,也是自动驾驶汽车大脑实现背后的理念:运动规划。
自动驾驶汽车建立在四大支柱之上:感知(观察物体、道路等)、定位(在地图中定位自己)、规划(在地图中行驶)和控制(移动车辆)。
运动规划问题可能看起来像是一组元素,如"贝塞尔曲线拟合"或"有限状态机",甚至是"A* 和 Dijkstra!!!",但实际上它比这更复杂。有两个主要的子主题需要处理:
- 高级运动规划: 如何规划从 A 到 B 的路线。(战略家)
- 低级运动规划: 如何超车、生成轨迹等——即战术家。
在本文中,我想谈谈路径规划的这两个要素,在第三点中,我将讨论边缘情况。
那么让我们开始吧:
1、高级运动规划
去任何地方的主要步骤是什么? 你拿出手机,使用 GPS 应用程序决定要走的主要街道,然后在每个时刻决定你的行驶速度、是否超车等……GPS 部分是高级的,但"超车"和"红灯停车"部分是低级的。
我们需要两样东西:
- 世界地图——即高清地图(HD Maps)。
- 一个运动规划算法,用于创建从 A 到 B 的路线
那么让我们从地图开始。
1.1 高清地图(HD Maps)
那么什么是高清地图? 它就像你在 Waze/Google 地图上看到的地图,但精度达到厘米级别。区别在于:一切都已映射。不仅仅是一条街道,还有它有多少车道、每条车道的宽度、每条车道上每个交通标志的位置、保险杠的位置等等。
我们通常使用 LiDAR 来构建这些地图,像 HERE 这样的公司专门从事地图制作,可以为你提供地图。需要注意的是:这是一个手动过程,只需要做一次,然后可以重复使用。
那么它看起来是什么样子? 我第一次进入自动驾驶汽车时,真的看到了一个。车上有一个屏幕,界面显示一个可视化程序,还有一个名为"QGIS"的软件。它是什么?它是一个卫星软件,你可以在其中打开地图,添加你的 GPS 位置,然后在地图中行驶。
让我们看看它的实际效果:

看到左边的红色区域了吗? 以及汽车在环岛行驶时的数值?地图包含的信息比这多 100 倍。每条车道都有一个理想轨迹,每隔 10 米就有一个节点或检查点。
如何在自动驾驶中使用它? 当你说"我想去咖啡店"时,实际上你说的是"我在节点 238,我想去节点 1129"。然后,算法规划从节点到节点的路线。
快速说明:地图也可以是动态的。 这就是 Mobileye 在他们的"AV Map"中所做的。他们不是一次性地进行地图绘制,而是让他们的车队持续进行。具体来说,他们向汽车制造商销售 ADAS 设备,数百万车辆都配备了他们的技术。然后,过程很简单:大量汽车收集信息,将其发送回服务器,然后所有数据被聚合在一起,以随机森林的方式合并成一个整体!

这些数据会汇入我之前展示的地图中。现在让我们看看实际的算法。
1.2 高级规划算法
把地图看作一个带有节点的图。 要从 A 到 B,首先想到的"最短路径"算法是什么?你猜对了!Dijkstra!Dijkstra 是一种搜索算法,它可能是每个人在学校和计算机课程中学到的第一个算法。
人们使用 3 类搜索算法:
- 离散规划器: 将环境离散化为单元,然后从 A 到 B 创建轨迹的算法。Dijkstra、广度优先搜索(BFS)、深度优先搜索(DFS)或 A* 和 Hybrid A* 等算法是主要的。我认为大多数已实现的机器人运动规划算法都使用 A* 的某个版本作为 v1(并在此基础上迭代)。
- 基于采样的规划器: 基于采样的算法不探索整个地图,而是生成足够的"样本"(或节点),以便你可以创建一条从 A 到 B 的足够好的路径,经过生成的节点。像概率路线图(PRM)和快速探索随机树(RRT)或其演进版本(如 RRT*)等算法在该领域非常流行。
- 概率规划器: 任何基于 AI、强化学习(Q 学习、值迭代/策略迭代等)的算法都属于这一类。这些算法利用经验和神经网络来规划高级路线。
在一篇关于特斯拉端到端算法的文章中,我分享了他们在 FSD11 规划器中使用的"蒙特卡洛"方法。直观地说,你会把它放在哪里?因为它创建了一个"树",我们可以将其归入 #2 基于采样的方法。但值得注意的是,它也使用了神经网络,也可以归入第 #3 类。

如果你想要一个很酷的可视化效果,还有这个 Github 仓库实现了许多算法,我们可以用来可视化它们。

现在我们知道了如何构建地图、生成样本并从 A 行驶到 B。接下来让我们看看低级规划。
2、低级规划
高级规划告诉我们,我们应该从节点 238 行驶到节点 255,经过 239、240 等……低级规划告诉我们如何做到这一点。有几种方法可以实现,其中一些方法在我关于机器人路径规划的文章中有所解释(该文章主要涉及低级规划)。
2.1 GPS 驾驶 📍
理论上,如果你有准确的 GPS 位置和良好的目标检测系统,你可以仅靠 GPS 在地图中行驶。你甚至不需要检测停车标志等……因为所有信息都已手动标注。
你的 GPS 和地图会告诉你,如果你在节点 238,你应该以 30 公里/小时的速度行驶;在节点 239,你会遇到减速带,应减速到 25;然后从 239 到 288,你可以以 50 公里/小时的速度行驶,等等。
👉
运动规划只是拼图的一部分——但整个行业正在重新思考整个技术栈。我整理了一份免费指南,介绍工程师如何从模块化自动驾驶架构迁移到端到端系统,以及这对运动规划意味着什么。在这里免费获取 E2E 迁移指南。

你仍然需要一些要素,例如:
- 车道检测算法。即使你使用 GPS,你仍然希望在车道中间行驶,车道检测算法将帮助你在左右方向上转向以保持在车道中央。你可以通过这篇文章了解一些非 OpenCV 的车道检测方法。
- 障碍物检测算法,或至少一个 LiDAR 避障系统。这主要用于遇到障碍物或任何动态情况(如交通信号灯,与停车标志不同)。
现在,这不会让你走得很远,这是自动驾驶的"级别 1", 但仅凭这些就可以实现最后一英里的配送机器人出租车或穿梭巴士。然而,如果你进入隧道,或者无法使用带 RTK 校正的 GPS(这意味着精度非常低),一切都会失败。
那么让我们看看级别 2,即从 GPS 转向轨迹规划。
2.2 成本函数 📉
GPS 驾驶的问题是,它严重依赖 GPS,而且有点笨。 如果你堵在一辆停着的车前面,那就完了。因此,此时你会开始添加一个"超车"功能,帮助你生成绕过停驶车辆的路径,但随着"异常情况"数量的增加,它会变得越来越复杂。
这时,你会从基本的 GPS 跟随切换到成本函数方法。 这通过 3 个步骤完成:
- 路径预测: 预测感知系统检测到的每一辆车的路径。这是纯粹的运动预测。可以使用卡尔曼滤波器或深度学习算法等技术来实现。Waymo 等公司每年都会发布几篇相关论文。
- 轨迹生成: 从你所在位置开始,生成一组可能的轨迹。例如,如果你想超车,需要遵循许多"规则",如为相邻车道上的现有车辆让行、决定采用的速度等……你将为每个选项生成一条轨迹(是的,可能有几十条)。
- 决策制定: 在这一步,每条轨迹都会有一个与之关联的"成本",你的工作是选择成本最低的轨迹。这个成本是一个加权函数,考虑的因素包括舒适度、碰撞概率、人工干预可能性、速度(在可能的情况下最好以最高速度行驶)等。
例如,这就是在慢速车辆前的超车情况。 这个示意图实际上缺少了一个关键选项——保持在原车道(这可能是更优的选择),但它至少说明了问题:

为什么我们的运动规划器没有上百万条轨迹? 因为除了成本函数之外,我们还可以直接排除大量成本必然最高的轨迹。例如,我们需要无碰撞运动,任何"绕到"其他车辆附近的轨迹都不被容许。我们还需要遵守物理定律——我们需要在定义的配置空间内实现一个技术上可行的路径(我们不能将车轮旋转 90°、倒车等)。
所以我们有这些静态约束,还有动态约束, 如变化的最大速度、带有移动物体的动态环境、交通灯变化等……这就是为什么从上百万种运动规划策略中,实际上可以减少到 3 或 4 条实际路径。
然后,每条轨迹都有一个与之关联的成本, 运动规划算法的作用是选择成本最低的轨迹。完成后,将该信息(一条连续路径)传递给控制模块,用于控制车辆移动。
然而,这不是我们能做到的最先进的……
2.3 端到端与另类方法 ⛔️
大多数初创公司从 GPS 方案开始,由于客户需求或希望处理更复杂的任务(环岛、隧道等),或希望在更多地区行驶,它们很快演进到成本函数方案。
然后是另类方法, 要么实现成本函数的硬核版本(像特斯拉那样——这里解释),要么使用强化学习或端到端学习等方法(如 Wayve),这完全改变了整个局面。
在这些方法中,你不需要手工编写任何规则。 原始地图和高级部分仍然存在,但低级部分完全使用 AI 完成。这意味着你不需要告诉汽车"你应该以最高速度行驶",而是让它根据其他车辆的做法自行学习。
以 Wayve 的"MILE"(基于模型的模仿学习)算法为例,它将所有数据作为输入,同时包括 GPS 信息,并直接输出驾驶决策:

说到另类方法,我实际指的是端到端学习,有 2 种类型:
- 模仿学习: 通过行为克隆或逆最优控制从示范中学习。
- 强化学习: 通过 Q 学习、值迭代/策略迭代或其他强化学习方法从经验中学习。
我可能会在另一篇关于模仿学习和强化学习的文章中详细介绍这些内容。如果你已经在阅读我的私人邮件,你已经可以接触到我将要写的内容。
我们已经了解了高级和低级规划,现在让我们看看如何将它们结合起来使用……
3、边缘情况
在最后这一点上,我想强调使这些方法工作的困难。确实,任何高级和低级策略都会遇到难以克服的问题。我们通常称这些为边缘情况。
有数百种边缘情况和失败的可能性。 这些可能来自任何地方,无论是感知问题(幻影障碍物、误分类等),还是定位错误(GPS 偏移、云层遮挡等)。了解使用某种规划方法的局限性非常重要。
例如,如果你使用成本函数方法, 你可能需要一个接一个地处理边缘情况。Waymo 在 2019 年的一个例子中,他们讨论了解决反射问题。

考虑一下,行人可能手持停车标志,道路可能被封锁,或者人类可能代替标志进行交通管理,所有这些都需要处理。很难估计每个边缘情况的"根源",这意味着你需要逐个处理它们。
另一方面,特斯拉和 Wayve 的新方法(端到端)将尝试用数据来解决。如果你遇到从未见过的情况,你会尝试将其匹配到数据集中最接近的元素(有点像人类在国外驾驶时的方式)。
好了,以上就是关于边缘情况的简要说明。我们还可以说得更多,但我可能会专门写一篇文章来讨论。
让我们总结一下:
4、结束语
- 自动驾驶汽车建立在四大支柱之上:感知、定位、规划和控制。
- 规划分为高级和低级运动规划。 高级规划是从 A 到 B 规划路线的任务,低级规划更像是规划该路线内的每个子轨迹(使用什么速度、如何超越障碍物等)。
- 高级运动规划涉及两个要素:高清地图和算法。 高清地图可以一次完成,也可以由车队持续更新。
- 高级规划器有 3 种类型: 离散型(Dijkstra、A* 等)、基于采样型(RRT*、PRM 等)和概率型(强化学习等)。
- 低级规划有 3 个难度级别: GPS(1)、成本函数(2)和另类端到端(3)。GPS 是跟随 GPS 线并在物体前停车。成本函数是生成轨迹并选择成本最低的轨迹。端到端是模仿之前驾驶者的数据集。
- 问题越简单,低级规划的级别就越低。 如果你在有有限选项的限定路线上行驶,GPS 驾驶可能效果很好。在大多数情况下,成本函数可能足够。在复杂且不断变化的环境中,你可能需要研究端到端方法。
实现汽车大脑的任务可能非常困难。 这篇文章介绍了两种方法:战略家和战术家。有趣的是,我们每个人通常要么是战略家(更多的思考者、规划者,关注高级、基于愿景),要么是战术家(非常注重实现,想要做更多任务等)。当两者结合在一起时,奇迹就会发生。
原文链接: Motion Planning for Self-Driving Cars Explained
汇智网翻译整理,转载请标明出处