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 中常见的场景规划、路口决策、避障选择都可以用行为树表达。
四、场景理解与行为选择
行为选择不是孤立的条件判断,而是建立在场景理解之上。场景理解需要回答三个问题:
- 我在哪:定位与地图匹配,确定当前车道、路口、区域类型。
- 周围有什么:动态障碍物、交通参与者、信号灯、标志标线。
- 接下来会发生什么:基于预测轨迹判断交互风险与通行权。
在 Autoware 中,场景理解常通过场景模块实现,例如路口场景、人行横道场景、停车场景。每个场景模块负责识别触发条件、生成候选行为、评估代价并输出决策。行为选择则依据安全、效率、舒适、合规四个维度进行排序。
五、案例:无保护左转的行为决策
以无保护左转为例,行为规划需要综合对向直行车流、行人、信号灯和路口几何。一个简化的决策流程如下:
if 信号灯 == 绿灯 and 对向无冲突车辆:
行为 = 左转通过
elif 对向有车辆 but 间隙足够:
行为 = 左转通过
elif 对向有车辆 and 间隙不足:
行为 = 路口等待
elif 行人正在横穿:
行为 = 让行等待
else:
行为 = 减速观察
在行为树中,这可以表达为 Selector 下的多个 Sequence:每个 Sequence 先检查条件,再执行动作。若条件不满足,则回退到下一个分支。这种结构比嵌套 if-else 更清晰,也更容易扩展新场景。
六、常见误区与复盘
- 把行为规划写成巨型 if-else:短期可行,长期难以维护,条件冲突时行为不可预测。
- 忽略优先级定义:多个条件同时满足时,必须明确安全优先于效率。
- 场景理解不足:只依赖障碍物距离,不结合地图语义,容易在路口误判通行权。
- 行为与运动规划耦合过紧:行为层输出过于具体的轨迹,失去语义抽象,难以复用。
- 缺少回放与可视化:行为切换过程不可观测,排障成本极高。
总结来看,有限状态机适合简单、确定性的场景;行为树适合复杂、可组合的决策逻辑;场景理解提供决策依据;行为选择则依据安全、合规、效率、舒适进行排序。在 Autoware 工程实践中,通常将三者结合:用场景模块识别当前场景,用行为树组织决策逻辑,用状态机管理底层行为状态,最终输出稳定、可解释、可测试的行为指令。