第一课:课程导论与环境搭建

1.1 规划控制模块在自动驾驶中的角色

说实话,很多人一上来就问我:“规划控制到底干点啥?”

我习惯这么解释:如果把自动驾驶汽车比作一个人,那感知模块是眼睛和耳朵,定位模块是大脑里的地图,而规划控制就是手和脚。眼睛看到了障碍物,大脑知道自己在哪,但最终能不能安全地开过去,全靠规划控制。

规划控制模块内部又分三层:

  • 全局规划(Route Planning):从A点到B点的宏观路径。说白了就是导航,告诉你走哪条路、哪个路口转弯。
  • 行为规划(Behavior Planning):决定“下一步该干什么”。是跟车?是变道?还是停车让行?我在项目中见过最头疼的就是这里——行为决策一旦出错,后面的控制再精准也没用。
  • 运动规划(Motion Planning):生成具体的轨迹。包括路径(去哪里)和速度(多快去)。嗯,这里要特别注意,轨迹不仅要平滑,还得满足车辆的运动学约束。
  • 控制(Control):把规划好的轨迹变成油门、刹车、方向盘的实际指令。我常用的就是PID和MPC,后面会详细讲。

核心观点:规划控制是自动驾驶的“最后一公里”。感知再准、定位再精,如果规划控制拉胯,车照样开不了。

1.2 联合调试的意义

你想想看,每个模块单独跑都没问题,一合起来就崩。这种事我遇到过太多次了。

为什么会这样?因为模块之间有接口依赖和时序耦合。比如:

  • 规划模块需要感知模块的障碍物列表,但感知延迟了200ms,规划还在用旧数据——结果就是轨迹跟障碍物“撞上了”。
  • 控制模块收到的轨迹频率是20Hz,但控制指令输出频率是50Hz——中间差了30次插值,处理不好车就会抖。

联合调试的意义就在于:提前暴露这些接口和时序问题。我曾经在一个项目里,单模块测试跑了两个月,一联调就发现规划输出的坐标系跟控制模块用的坐标系差了90度。嗯,这种低级错误,单测根本发现不了。

我的建议:不要等到所有模块都开发完了再联调。每完成一个子模块,就尽早跟上下游做一次“小联调”。哪怕只是发个假数据,也能提前踩坑。

1.3 ROS2与仿真环境搭建

工欲善其事,必先利其器。我们这门课主要用ROS2(Humble版本) + Carla模拟器 + Autoware(基于ROS2的版本)。

为什么选这套组合?

  • ROS2:相比ROS1,它解决了实时性、多机通信、安全性等问题。说白了,ROS1是玩具,ROS2才是能上车的。
  • Carla:开源模拟器里最成熟的之一。支持传感器仿真、天气变化、交通流。我习惯用它来做感知和规划的联合测试。
  • Autoware:开源的自动驾驶软件栈。它把感知、规划、控制都集成好了,我们可以直接拿它的规划模块来改,省去从零造轮子的时间。

环境搭建步骤(快速版)

  1. 安装ROS2 Humble:按照官方文档走,注意选Ubuntu 22.04。我踩过的坑:一定要先装好依赖库,否则编译到一半报错很烦人。
  2. 安装Carla:下载预编译包即可。记得把Python API路径加到环境变量里。
  3. 安装Autoware:用vcs工具拉取所有依赖包。编译时间比较长,建议用ccache加速。
  4. 验证联调:启动Carla服务端,再启动Autoware的规划模块,看能否收到Carla发来的车辆状态信息。

注意:ROS2的DDS配置可能会跟Carla的通信冲突。我曾经遇到过话题收不到的问题,最后发现是DDS的Domain ID没设置一致。解决办法:在启动脚本里显式设置ROS_DOMAIN_ID环境变量。

知识体系结构图

下面这张图展示了本章的核心逻辑:从感知到控制的完整链路,以及联合调试的切入点。

规划控制模块联合调试知识体系 感知模块 摄像头/激光雷达 定位模块 GPS/IMU/高精地图 规划控制模块 全局规划 → 行为规划 运动规划 → 控制 执行器 联合调试关键点 接口一致性 | 时序对齐 | 坐标系统一 | 消息频率匹配 ROS2 Humble 通信中间件 Carla模拟器 仿真环境 Autoware 开源自动驾驶软件栈

1.4 环境验证与常见问题

搭建完环境后,我建议你跑一个最简单的测试:让Carla里的一辆车直行,同时用Autoware的规划模块订阅它的位置信息。

验证步骤:

  1. 启动Carla服务端:./CarlaUE4.sh
  2. 启动Autoware的规划模块:ros2 launch autoware_launch planning_simulator.launch.xml
  3. 用ros2 topic list查看是否有/carla/ego_vehicle/vehicle_status和/planning/trajectory话题
  4. 用ros2 topic echo /planning/trajectory查看轨迹数据是否正常输出

常见问题速查表:

问题现象 可能原因 解决办法
Carla启动后黑屏 显卡驱动或Vulkan未安装 安装NVIDIA驱动,并验证vulkaninfo命令可用
ROS2收不到Carla话题 DDS Domain ID不一致 在启动脚本中设置export ROS_DOMAIN_ID=0
Autoware编译报错 依赖包版本不匹配 使用vcs工具重新拉取依赖,确保所有包版本与Humble兼容
规划轨迹不更新 Carla时间步长与ROS2时间不同步 设置Carla的fixed_delta_seconds为0.05(20Hz)

避坑指南:我曾经在搭建环境时,因为Carla和Autoware用了不同版本的Boost库,导致编译通过但运行时崩溃。后来我统一用系统包管理器安装所有依赖,再也没出过类似问题。嗯,有时候“偷懒”用系统包反而更稳。

好了,环境搭好之后,下一章我们就要开始真正动手了——从最简单的直行控制开始,一步步把规划控制模块跑起来。


可可精品资料库