4. 行为规划基础

在 Autoware 的规划栈中,行为规划位于全局路线规划与局部运动规划之间,承担“当前该做什么”的决策职责。它不直接计算方向盘转角或油门开度,而是把感知、地图、定位和任务信息综合成一组离散的行为意图,例如车道保持、跟车、变道、路口等待、靠边停车。运动规划再把这些意图翻译成平滑、可执行的轨迹。理解行为规划,核心是理解状态、条件、迁移与优先级。

一、核心原理:从状态到行为的映射

行为规划的本质是一个离散决策系统。系统在任意时刻处于某个行为状态,当满足特定条件时发生状态迁移。形式化地,可以表示为:

Behavior = f(State, Perception, Map, Mission)
Transition: State_i --[Condition]--> State_j

其中 State 是当前行为状态,Perception 提供动态障碍物、交通灯、行人等信息,Map 提供车道、路口、限速等静态语义,Mission 提供目的地与路线约束。行为规划的输出通常是一段带有时间戳和优先级的行为指令序列,供下游运动规划消费。

行为规划解决的是“做什么”,运动规划解决的是“怎么做”。二者边界清晰,但接口必须稳定:行为层输出语义化指令,运动层负责几何与动力学可行性。

二、有限状态机:直观但易膨胀

有限状态机(FSM)是最早被广泛采用的行为规划方法。它把驾驶任务拆成有限个状态,并用迁移条件连接。典型状态包括:

  • LANE_KEEP:沿当前车道行驶,保持横向偏差与速度约束。
  • FOLLOW:前方存在慢车,保持安全时距跟车。
  • LANE_CHANGE:满足间隙与安全条件后执行变道。
  • INTERSECTION_WAIT:接近路口,等待信号灯或让行。
  • PULL_OVER:到达目的地附近,靠边停车。

FSM 的优点是可解释性强、实现简单、调试直观。但缺点同样明显:当状态和条件增多时,迁移关系呈组合爆炸,容易出现“状态遗漏”或“条件冲突”。例如同时满足变道条件和跟车条件时,若优先级未定义,系统行为将不确定。

三、行为树:模块化与可组合的决策结构

行为树(Behavior Tree, BT)用树形结构组织决策逻辑,节点分为控制节点和执行节点。常见控制节点包括:

节点类型语义典型用途
Sequence顺序执行,全部成功才成功“先检查间隙,再变道”
Selector依次尝试,任一成功即成功“优先变道,否则跟车”
Parallel并行执行,按策略判定“同时监控障碍与车道”
Decorator修饰子节点,如取反、超时“条件不满足时重试”

行为树的优势在于模块化、可复用、可组合。每个子树可以独立测试,整棵树通过 tick 信号驱动,天然支持优先级与回退。Autoware 中常见的场景规划、路口决策、避障选择都可以用行为树表达。

四、场景理解与行为选择

行为选择不是孤立的条件判断,而是建立在场景理解之上。场景理解需要回答三个问题:

  1. 我在哪:定位与地图匹配,确定当前车道、路口、区域类型。
  2. 周围有什么:动态障碍物、交通参与者、信号灯、标志标线。
  3. 接下来会发生什么:基于预测轨迹判断交互风险与通行权。

在 Autoware 中,场景理解常通过场景模块实现,例如路口场景、人行横道场景、停车场景。每个场景模块负责识别触发条件、生成候选行为、评估代价并输出决策。行为选择则依据安全、效率、舒适、合规四个维度进行排序。

行为规划决策链:从场景理解到行为输出 感知与定位 障碍物 / 车道 / 信号 场景理解 路口 / 跟车 / 变道 行为选择 安全 / 效率 / 合规 行为指令 供运动规划 行为树结构示例 Selector Sequence 变道 Sequence 跟车 Sequence 停车 行为选择优先级 1. 安全避让 2. 合规通行 3. 效率优先 4. 舒适平顺

五、案例:无保护左转的行为决策

以无保护左转为例,行为规划需要综合对向直行车流、行人、信号灯和路口几何。一个简化的决策流程如下:

if 信号灯 == 绿灯 and 对向无冲突车辆:
    行为 = 左转通过
elif 对向有车辆 but 间隙足够:
    行为 = 左转通过
elif 对向有车辆 and 间隙不足:
    行为 = 路口等待
elif 行人正在横穿:
    行为 = 让行等待
else:
    行为 = 减速观察

在行为树中,这可以表达为 Selector 下的多个 Sequence:每个 Sequence 先检查条件,再执行动作。若条件不满足,则回退到下一个分支。这种结构比嵌套 if-else 更清晰,也更容易扩展新场景。

行为树的条件节点应尽量保持“无副作用”,只做判断;动作节点才改变车辆状态。这样便于单元测试和回放调试。

六、常见误区与复盘

  • 把行为规划写成巨型 if-else:短期可行,长期难以维护,条件冲突时行为不可预测。
  • 忽略优先级定义:多个条件同时满足时,必须明确安全优先于效率。
  • 场景理解不足:只依赖障碍物距离,不结合地图语义,容易在路口误判通行权。
  • 行为与运动规划耦合过紧:行为层输出过于具体的轨迹,失去语义抽象,难以复用。
  • 缺少回放与可视化:行为切换过程不可观测,排障成本极高。
行为规划的安全边界必须显式定义:任何行为选择都不能突破碰撞避免、交通法规和车辆动力学约束。优先级排序中,安全永远第一。

总结来看,有限状态机适合简单、确定性的场景;行为树适合复杂、可组合的决策逻辑;场景理解提供决策依据;行为选择则依据安全、合规、效率、舒适进行排序。在 Autoware 工程实践中,通常将三者结合:用场景模块识别当前场景,用行为树组织决策逻辑,用状态机管理底层行为状态,最终输出稳定、可解释、可测试的行为指令。