自动驾驶技术旨在改变交通方式,在一套完整的自动驾驶系统中,如果将感知模块比作人的眼睛和耳朵,负责识别周围的车辆、行人、交通标志和障碍物,那么决策规划模块就是自动驾驶的“大脑”。这个大脑在接收到各种感知信息之后,需要对当前环境作出分析,进而决定“下一步该怎么做”,并最终对底层控制模块下达指令。
决策规划模块的能力,直接决定了自动驾驶车辆能否安全、舒适、高效地在复杂多变的交通环境中行驶,这也是衡量和评价自动驾驶系统智能化水平最核心的指标之一。本文将详细阐述决策与规划模块的层次结构,并对各层所涉及的常用算法进行分类、原理解析与优劣比较。
自动驾驶的决策规划过程通常并非由一个单一的算法完成,而是采用分层递阶的结构,将复杂问题分解为不同粒度的子任务。典型的架构包含以下三个层次 :
全局路径规划(Route Planning):这是最顶层的规划,类似于我们日常使用的“导航”。在给定车辆当前位置和终点目标后,结合地图信息(主要是高精地图),搜索一条最优的从起点到终点的宏观路径。这里的“最优”可以是路径最短、时间最快或者能耗最低等。这一层生成的结果是一条不包含时间信息、仅由道路序列组成的静态参考线。
行为决策(Behavioral Decision-Making):这一层接收全局路径作为参考,并结合实时感知的环境信息(如周围的动态障碍物、交通信号、道路结构等),做出具体的驾驶行为选择。例如,在高速公路上决定是否变道超车、在十字路口决定是停车等待还是通行、在面对行人时决定是让行还是绕行。这一层需要处理复杂的交互博弈和不确定性问题。
运动规划(Motion Planning):当上层的行为决策确定后(例如“变道”),运动规划层需要将这一行为转化为一条具体、平滑、可行的轨迹。这条轨迹不仅要满足车辆自身的运动学和动力学约束,还要确保在整个未来一段时间内都是无碰撞且舒适的。轨迹通常由一系列路径点组成,每个点包含了空间位置和时间信息(即速度和加速度)。
本文将按照这一逻辑脉络,深入探讨每一层的核心算法。
全局路径规划是自动驾驶旅程的起点,其核心是图搜索算法。我们将环境地图抽象为由节点(路口或道路曲率变化点)和边(连接节点的道路)构成的图,规划的目标就是在带权重的图中找到从起点节点到终点节点的最优路径 。
3.1 Dijkstra算法
原理:Dijkstra算法是经典的广度优先搜索策略。它从起点开始,逐步探索所有可能的节点,计算并记录从起点到每个节点的最小代价(如距离)。它使用一个优先队列,每次都从队列中选出当前累计代价最小的节点进行扩展,直到扩展到终点为止。
优点:保证在给定非负权重的图中找到最短路径。缺点:搜索没有方向性,是一种“地毯式”的搜索,因此在大型地图中计算效率较低,时间复杂度较高(如O(N²))。
3.2 A*算法
原理:A算法是Dijkstra算法的一种启发式改进,旨在提高搜索效率。它通过一个评估函数来引导搜索方向:f(n) = g(n) + h(n)。其中,g(n)是从起点到当前节点n的实际代价,而h(n)是一个启发式函数,估计从当前节点n到终点的最佳代价(例如,直线距离)。A算法在扩展节点时,优先选择f(n)值最小的节点,这使其能够朝着终点的方向“有目的地”搜索。
优点:结合了Dijkstra的最优性和启发式搜索的高效性,在路径规划中应用最为广泛。缺点:启发函数h(n)的设计至关重要,如果估计得过于乐观,可能导致搜索效率提升不明显;如果估计得过于悲观,则可能找不到最优解。
3.3 其他变种与总结
在实际应用中,还有针对动态环境的D*算法及其优化版D* Lite,它们能够在环境发生变化时(如遇到新障碍物)高效地重新规划路径,无需从头计算。全局路径规划技术已经非常成熟,为下游的行为决策和运动规划提供了必要的地理上下文信息。
| 算法 | 核心原理 | 优点 | 局限性 |
|---|
| Dijkstra | | | |
| A | | | |
| D*/D* Lite | | | |
行为决策层是自动驾驶智能化程度的关键。它需要处理高度交互、不确定和部分可观测的环境。早期的行为决策多基于规则,而近年来,数据驱动的方法逐渐成为研究热点 。
4.1 知识驱动型方法
这类方法依赖人类专家设计的先验知识,逻辑清晰,可解释性强。
有限状态机:这是早期和最广泛使用的决策模型。它将驾驶过程划分为一系列预定义的状态(如“巡航”、“跟车”、“变道”、“停车”),并根据特定的触发条件(如前车距离过近)在状态之间进行切换。
决策树/行为树:与状态机类似,通过树形结构组织决策逻辑。决策过程是从根节点开始,根据当前环境属性(如“是否左转车道?”、“是否有碰撞风险?”)自上而下遍历,直到找到应执行的叶节点动作。
基于博弈论的方法:将交通参与者视为博弈的局中人。自动驾驶车辆的决策不仅影响自身,也会影响其他车辆的行为。通过求解博弈均衡(如纳什均衡),可以生成更具交互性的驾驶策略,例如在匝道汇入或无保护左转场景中,通过细微的动作与对方车辆“协商”通行权。
4.2 数据驱动型方法
这类方法旨在通过学习人类驾驶数据或与环境交互来获得决策能力,更好地应对复杂性和不确定性。
模仿学习:这种方法通过让模型直接学习“专家”驾驶员的示范数据(状态-动作对),来模仿其驾驶行为。最经典的方法是行为克隆,即将决策建模为一个监督学习问题:输入是感知到的环境状态,输出是驾驶动作(如转向盘转角、油门/刹车开度)。
强化学习:强化学习通过智能体与环境的试错交互来学习最优策略。智能体执行一个动作,环境会反馈新的状态和一个奖励信号(如“到达目标+1”,“发生碰撞-1”)。强化学习的目标是学习一个策略,使得累积奖励最大化。在自动驾驶中,深度强化学习被广泛应用于解决复杂场景下的决策问题,如车道保持、超车、无保护左转等。
逆强化学习:逆强化学习旨在解决强化学习中“奖励函数难以设计”的问题。它通过观察人类专家的驾驶轨迹,反过来推断专家行为背后隐含的奖励函数。这个学习到的奖励函数可以被用于训练强化学习模型,使其行为既能模仿专家,又能适应新环境。
行为决策层给出了“做什么”的指令,而运动规划层则需要解决“具体怎么做”的问题。这是一个在连续空间中的优化问题,需要在满足动力学约束、避障和安全舒适的前提下,生成一条平滑的轨迹 。
5.1 基于搜索的规划算法
这类方法将连续的状态空间进行离散化,然后在离散空间中搜索可行路径。除了前文提到的A*算法,在运动规划中常用的是它的变种。
Hybrid A:传统的A算法在网格上搜索,生成的路径是由网格中心点连接而成的折线,车辆无法直接沿折线行驶。Hybrid A*算法在搜索时,考虑了车辆的连续状态空间(包括位置和航向角)和运动学约束(如最小转弯半径)。它将状态空间离散化,但在节点扩展时,不是简单地跳转到相邻网格,而是通过模拟符合车辆动力学的一系列动作(如“直行”、“以最小半径左转”等)来生成平滑的弧线,并将最终状态投影回离散网格。应用场景:泊车、掉头等对 maneuvering 要求高的低速场景(如DARPA挑战赛中的Junior赛车)。
5.2 基于采样的规划算法
当状态空间是高维的(例如考虑车辆的位姿、速度等),基于搜索的方法可能面临维度灾难。基于采样的方法通过在状态空间中随机采样来构建路径,提高了在高维空间中的规划效率。
快速探索随机树:RRT算法从起点开始,构建一棵随机树。每次迭代,算法在状态空间中随机采样一个点,然后找到树上最近的节点,尝试从该节点向采样点方向扩展一步(在满足动力学约束下)。如果没有碰撞,则将新节点加入树中。重复此过程,直到树的一个节点到达终点附近。
概率路线图:PRM分为两个阶段。学习阶段:在状态空间中随机采样大量点,并删除与障碍物碰撞的点,然后将邻近的点之间尝试用满足动力学约束的局部路径连接起来,形成一个无向图(路线图)。查询阶段:在路线图上使用A*等搜索算法,找到从起点到终点的路径。
5.3 基于优化的规划算法
这类方法将轨迹规划问题建模为一个带约束的优化问题,通过最小化一个代价函数来求解最优轨迹。
代价函数通常包含多个目标项:
约束条件包括:
模型预测控制是这类方法的集大成者。MPC利用一个简化的车辆动力学模型,在每一个控制周期,预测未来一段有限时间(预测时域)内车辆的状态。然后,它在预测时域内求解一个带约束的有限时域优化问题,得到一个最优的控制序列,但只执行序列中的第一个控制指令。到了下一个周期,它重复上述过程,即滚动优化,并根据最新的测量信息对未来的预测进行反馈校正 。
5.4 基于学习的规划算法
随着深度学习的发展,端到端或直接生成轨迹的方法也受到关注。例如,可以使用深度神经网络直接从感知信息中输出轨迹,或者使用强化学习直接优化轨迹以满足复杂目标。这些方法潜力巨大,但目前仍面临鲁棒性、可解释性等方面的挑战。
传统的分模块架构虽然清晰,但存在模块间信息损失和误差累积的问题。近年来,学术界和工业界开始探索更加一体化的方法。
端到端自动驾驶:这种方法试图用一个巨大的神经网络,将原始的传感器输入(图像、激光雷达点云)直接映射到最终的车辆控制信号(转向盘、油门、刹车)。它完全跳过了中间模块,理论上可以避免信息损失,实现全局最优。然而,这种方法存在“黑箱”问题,难以调试和验证,且安全性和可解释性面临巨大挑战。
多任务学习与联合优化:一个更务实的趋势是在一个统一的神经网络框架下,同时学习感知、预测和规划多个任务,但它们之间仍然保持一定的结构。例如,通过Transformer架构将多摄像头图像转换到鸟瞰视角空间,在此统一的空间中同时进行目标检测、地图元素识别、轨迹预测和本车轨迹规划。这种方式实现了模块间的信息共享和特征级别的交互,比纯端到端更具可控性和解释性。
交互式博弈规划:另一种融合思路是将决策的博弈论思想和规划的优化思想结合。例如,将本车的候选轨迹和周围车辆的预测轨迹构建成一个“场景树”,然后使用结合了神经网络的代价函数评估每一条联合轨迹的优劣,最终选择一条博弈最优的轨迹执行。这种方法很好地建模了多智能体之间的交互,使得规划出的轨迹本身就是一种交互决策的结果。
尽管决策规划算法取得了长足进步,但要实现L4/L5级别的高度自动驾驶,仍面临诸多挑战。
7.1 当前主要挑战
复杂交互行为建模:在拥挤的城区、无保护路口、匝道汇入等场景中,车辆与行人、其他车辆之间存在微妙的博弈。如何准确预测他人的意图,并做出既安全又高效的交互决策,是一个核心难题 。
长尾问题:现实世界无穷无尽,总有训练数据中未曾出现过的场景(如异形车辆、临时的道路施工、不守规则的交通参与者)。完全依赖数据驱动的方法难以穷尽所有情况,而基于规则的系统又可能因为规则冲突而失效 。
不确定性处理:感知模块存在噪声,目标物的意图和行为本身具有随机性,甚至通信也可能有延迟。决策规划系统必须具备处理这些不确定性的能力,例如通过概率预测和鲁棒规划来保证安全 。
计算效率与实时性:规划算法必须在毫秒级时间内给出结果。高精度的动力学模型、复杂的博弈求解、大规模的搜索都会带来巨大的计算负担。如何在有限的车载算力下实现算法的实时运行,是工程落地的关键 。
可解释性与验证:对于安全攸关的系统,决策的“黑箱”是不可接受的。当事故发生时,我们需要能够追溯是哪个决策导致了问题。这要求算法具备可解释性,并建立完善的仿真和实车测试验证体系 。
7.2 未来发展趋势
混合增强智能:未来的主流方向将是知识驱动与数据驱动的深度融合。利用数据驱动(如强化学习)处理复杂性和不确定性,同时利用规则或安全屏障函数作为“安全护盾”,确保学习策略在任何情况下都不会超出安全边界。这种“学习+规则”的混合架构兼具灵活性和安全性 。
预测-决策-规划的深度耦合:传统的“预测然后规划”流水线模式正在被打破。未来的系统将实现预测与规划的深度交互,即本车的规划会影响他人的行为,他人的预测也会反作用于本车的规划。通过博弈论或端到端的联合优化,实现协同一致的运动 。
大模型的应用:具有强大常识推理和泛化能力的大语言模型和视觉语言模型,有望被引入决策规划模块。它们可以帮助车辆理解复杂的、未见过的场景(例如,理解临时交通指挥手势),并根据常识做出合理的决策 。
形式化验证与安全论证:随着系统复杂度的提升,传统的测试方法已不足以证明其安全性。未来将有更多研究将注意力放在形式化验证、责任敏感安全模型等理论上,为自动驾驶的安全决策提供数学级别的保障。
自动驾驶的决策规划算法是一个由多学科交叉融合而成的复杂技术领域。从宏观的全局路径规划,到中观的行为决策,再到微观的运动规划,每一层都有其独特的作用和挑战 。
全局路径规划依赖A*等经典搜索算法,技术已相对成熟。
行为决策正从基于有限状态机的规则时代,迈向基于深度强化学习和博弈论的数据驱动与交互式决策时代,以应对高度交互和不确定的交通环境 。
运动规划则在追求实时性与最优性的平衡,Hybrid A*、RRT系列采样算法和基于优化的MPC方法各有所长 。
展望未来,解决复杂交互和长尾问题的关键在于混合智能——即数据驱动的学习能力与知识驱动的安全边界深度融合。同时,预测、决策与规划模块也将打破传统界限,向着更加一体化、交互式的方向发展。