1. 课程导入

欢迎进入《Autoware行为与运动规划工程》课程。本课程面向已经具备一定自动驾驶基础、希望深入掌握 Autoware 规划栈的工程师与研究人员。行为规划与运动规划是自动驾驶系统从“感知世界”走向“控制车辆”的关键桥梁:感知模块回答“周围有什么”,定位模块回答“我在哪里”,而规划模块回答“我接下来该怎么走”。本课程的目标,就是让你能够读懂、修改、调试并扩展 Autoware 的规划模块,最终具备独立完成城市道路与园区场景规划任务的能力。

一、学习目标:从“会用”到“会改”

本课程不满足于让你会启动一个 demo,而是希望你在完成 30 章学习后,能够达到以下四个层次的目标:

  • 理解架构:说清 Autoware 规划栈中 mission planning、behavior planning、motion planning 三层的职责边界与数据接口。
  • 掌握算法:理解行为决策中的状态机与场景树、运动规划中的采样、优化与搜索三类方法及其适用条件。
  • 具备工程能力:能够配置规划参数、阅读规划日志、定位规划失败原因,并完成插件式扩展。
  • 形成系统思维:理解规划与感知、定位、控制之间的耦合关系,避免“只调规划不看全局”的局部优化陷阱。
学习主线可以概括为一句话:先建立分层框架,再逐层深入算法,最后用真实场景串联调试。任何跳过框架直接背参数的做法,都会在遇到新场景时失效。

二、核心概念:三层规划与一条数据链

Autoware 的规划体系可以抽象为三层结构。最上层是任务规划(Mission Planning),它关注“从 A 到 B 的全局路线”,输出一条参考路径,典型模块包括路线规划与全局路径生成。中间层是行为规划(Behavior Planning),它关注“在当前交通环境中如何安全合规地行动”,例如变道、跟车、避障、通过路口、靠边停车,典型实现是场景树与行为状态机。最下层是运动规划(Motion Planning),它关注“未来几秒内具体的轨迹、速度与加速度”,输出带时间戳的轨迹点,供控制模块跟踪。

三层之间通过一条清晰的数据链连接:地图与路由提供全局参考,感知与预测提供动态障碍物信息,行为层据此选择场景与约束,运动层在约束下生成可行轨迹,最终由控制层执行。理解这条数据链,是后续所有调试工作的基础。

Autoware 规划栈三层结构与数据链 任务规划 Mission Planning 输入:地图、起点、终点、路由请求 输出:全局参考路径(Lanelet / Route) 关注:从 A 到 B 行为规划 Behavior Planning 输入:全局路径、动态障碍物、交通规则、场景语义 输出:行为决策、场景约束、目标车道与速度意图 典型:场景树、状态机、变道/跟车/避障/路口通行 关注:如何安全合规行动 运动规划 Motion Planning 输入:行为约束、参考路径、车辆运动学模型 输出:带时间戳的轨迹(位置、速度、加速度、曲率) 方法:采样、优化、搜索(如 Hybrid A*、MPC、样条) 关注:未来几秒怎么走 感知 / 预测 / 定位 地图 / 路由 / 交通规则 控制 / 车辆执行

三、整体框架:模块、接口与运行机制

在工程实现上,Autoware 规划栈由多个 ROS 2 节点组成,节点之间通过话题与服务通信。任务规划通常由路线规划节点完成,行为规划由场景树节点与行为插件共同实现,运动规划则由多个规划器插件按场景选择执行。每个规划器都遵循统一的输入输出接口:输入参考路径、障碍物、车辆状态与地图,输出轨迹或规划结果状态。

这种插件化设计带来两个重要特性。第一,可替换性:你可以用新的规划算法替换默认插件,而不影响其他模块。第二,可组合性:不同场景可以激活不同插件组合,例如高速场景使用车道跟随,园区场景使用避障与窄道通行。理解插件注册与场景选择机制,是后续实战的关键。

层级 核心职责 典型输入 典型输出 常见模块
任务规划 全局路线生成 地图、起终点 参考路径 路线规划、全局路径
行为规划 场景决策与约束 路径、障碍物、规则 行为指令、场景约束 场景树、状态机、变道
运动规划 轨迹生成与优化 约束、车辆模型 带时间轨迹 采样、优化、搜索规划器

四、实战路线:从环境搭建到场景调优

本课程的实战路线遵循“由静到动、由简到繁”的原则。第一阶段完成环境搭建与规划栈启动,确认各节点正常通信;第二阶段深入行为规划,理解场景树如何根据交通环境选择行为;第三阶段进入运动规划,掌握轨迹生成与参数调优;第四阶段进行综合场景调试,包括跟车、变道、避障、路口通行与靠边停车。

# 典型规划栈启动与调试命令示例
ros2 launch autoware_launch planning_simulator.launch.xml \
  map_path:=/path/to/map \
  vehicle_model:=sample_vehicle \
  sensor_model:=sample_sensor_kit

# 查看规划相关节点
ros2 node list | grep -E "planning|behavior|motion"

# 查看轨迹输出话题
ros2 topic echo /planning/trajectory --once
建议在每章学习时同步打开 Autoware 的可视化工具,观察规划轨迹、行为状态与场景树节点的变化。规划是“看得见”的算法,只看代码不观察轨迹,很难建立直觉。

五、常见误区与复盘建议

初学者最容易陷入三个误区。第一,把行为规划与运动规划混为一谈,导致调试时不知道问题出在决策层还是轨迹层。第二,只调参数不理解约束,例如盲目增大最大速度或减小安全距离,短期看似有效,遇到复杂场景必然失效。第三,忽略感知与预测的不确定性,把障碍物位置当作精确真值,导致规划过于激进。

复盘时请始终问三个问题:当前场景由哪个行为插件负责?运动规划器收到的约束是否合理?如果规划失败,是约束不可行、求解超时,还是输入数据异常?把这三个问题形成检查清单,能显著提升排障效率。

本课程后续每一章都会围绕一个具体能力点展开,并配有可运行的配置、代码与调试方法。请带着“分层框架”和“数据链”这两个核心视角进入学习,你会在 30 章之后获得一套完整、可迁移的 Autoware 规划工程能力。