1. ROS2与自动驾驶概览

大家好,我是这门课的主讲。在自动驾驶这个圈子里摸爬滚打了快十年,从最早的ROS1玩到现在的ROS2,踩过的坑确实不少。今天咱们先聊聊整体框架,让你心里有个谱。

说实话,很多新手一上来就盯着某个算法猛学,结果发现跟实际工程脱节严重。我个人习惯是,先看全局,再抠细节。所以这一章,咱们把自动驾驶技术栈、ROS2的角色、还有整个课程的项目架构,一次性讲清楚。

1.1 自动驾驶技术栈简介

自动驾驶系统,说白了就是一辆车要能自己看路、自己判断、自己开。这背后涉及的技术栈,我习惯分成三层:

  • 感知层:车怎么“看”世界?摄像头、激光雷达、毫米波雷达、超声波,这些传感器就是车的眼睛。我记得2018年做项目时,激光雷达还贵得离谱,现在便宜多了。
  • 决策层:看到障碍物之后怎么办?是刹车还是绕行?这里涉及路径规划、行为预测、控制决策。说白了,就是让车学会“思考”。
  • 执行层:想好了怎么动,那就得让方向盘、油门、刹车听话。这层跟车辆底层硬件打交道最多,也是最容易出bug的地方。

你想想看,这三层缺一不可。感知不准,决策就是瞎蒙;决策不对,执行再快也没用。我在项目中遇到过最头疼的问题,就是感知和决策之间的延迟——传感器数据传过来,决策模块还没算完,车已经撞上了。

核心要点:自动驾驶不是单一技术,而是一个系统工程。每一层都有各自的难点,但层与层之间的接口设计,往往才是真正的坑。

1.2 ROS2在自动驾驶中的角色

ROS2是什么?很多人以为它只是个“机器人操作系统”,其实它更像一个通信框架。在自动驾驶里,它的角色可以概括为三点:

  1. 数据总线:各个传感器、算法模块、执行器之间怎么传数据?ROS2的发布-订阅模型,天然适合这种多对多的通信场景。
  2. 模块解耦:每个算法都可以独立开发、独立测试。我习惯把感知、规划、控制分别做成独立的ROS2节点,这样改一个模块不影响其他模块。
  3. 仿真与实车统一接口:这是我最看重的一点。在仿真里跑通的代码,换到实车上几乎不用改。嗯,这里要注意,前提是你得把硬件抽象层做好。

为什么会这样?因为ROS2的DDS(数据分发服务)天生支持分布式系统。你在笔记本上跑仿真,跟你在工控机上跑实车,通信机制完全一样。我曾经因为没注意这个,在仿真里一切正常,一上车就各种丢数据,后来发现是DDS的QoS配置没调好。

个人经验:ROS2的节点命名和命名空间设计,一定要在项目初期就规划好。否则后期几十个节点堆在一起,你连谁是谁都分不清。

1.3 课程项目总览:仿真与实车联调架构

这门课的核心,就是带你走通从仿真到实车的完整链路。咱们的项目架构,我画了一张图,你看一眼就明白了。

仿真与实车联调架构 仿真环境(PC/服务器) Gazebo/Unity 传感器仿真 ROS2 算法节点(感知/规划/控制) Rviz2 可视化 rosbag 数据录制 ROS2 DDS 同一套代码 实车环境(工控机) 实车传感器 CAN/以太网 ROS2 算法节点(完全一致) 车辆底层控制接口 远程监控/日志 仿真环境验证算法 → 实车环境直接部署,代码零修改

这张图其实就说了三件事:

  • 左边是仿真环境:我们用Gazebo或者Unity搭建场景,模拟传感器数据。所有算法都在这里先跑通。
  • 中间是ROS2桥梁:DDS负责数据传输。仿真和实车用的是同一套ROS2节点,接口完全一致。
  • 右边是实车环境:工控机上跑同样的算法,只是传感器数据换成了真实的。车辆底层通过CAN或者以太网控制。

避坑指南:我曾经在仿真里把控制频率设到100Hz,跑得飞起。结果一上车,工控机根本扛不住,CPU直接100%。所以仿真时就要考虑实车的算力限制,别太放飞自我。

这门课一共30章,咱们会从最基础的ROS2环境搭建开始,一步步走到实车联调。每一章我都会把当年踩过的坑、总结的经验,毫无保留地分享出来。

好了,概览就到这里。接下来,咱们开始动手。

课前准备:建议你提前装好Ubuntu 22.04和ROS2 Humble。如果还没装,别急,下一章我会手把手带你搞定。

可可精品资料库