1. Apollo与Cyber RT初识:自动驾驶系统概览、Apollo开源平台介绍、Cyber RT通信框架核心概念、环境搭建与Demo运行
1.1 自动驾驶系统到底长什么样?
说实话,很多人一上来就问我:「自动驾驶是不是就是给车装个摄像头,然后让它自己跑?」嗯,如果真这么简单,我早就不在这写教程了。
一个完整的自动驾驶系统,说白了就是「感知→决策→控制」这三个环节的闭环。我当年刚入行时,以为核心是算法,后来踩了无数坑才明白——通信框架才是骨架。没有它,再牛的算法也只是孤岛。
来,先看一张图,帮你快速建立整体认知:
你看,感知层拿到数据,通过 Cyber RT 发给决策层,决策层算好路径再发给控制层。每一层内部还有多个子模块在并行跑。如果没有一个高效的通信框架,数据就会乱成一锅粥。
1.2 Apollo开源平台——为什么选它?
Apollo 是百度开源的自动驾驶平台。我为什么推荐它?因为它是目前市面上最完整、最接地气的开源方案。
我个人习惯把 Apollo 比作「自动驾驶的 Linux」——它不只是一个算法包,而是一整套工具链:
- 高精地图:HD Map 引擎,支持厘米级定位
- 定位模块:GPS + IMU + 激光雷达融合
- 感知模块:基于深度学习的目标检测、车道线识别
- 规划模块:路径规划、速度规划、行为决策
- 控制模块:横向/纵向控制,支持 PID 和 MPC
- Cyber RT:自研的高性能通信框架
核心观点:Apollo 的价值不在于某个算法多牛,而在于它把「感知-决策-控制」这条链路完整打通了。你拿过来就能跑,跑起来就能改。
1.3 Cyber RT 通信框架——到底在解决什么问题?
好,现在聊聊 Cyber RT。我记得第一次接触它时,心里想的是:「不就是个消息队列吗?ROS 不也能干?」
后来在项目中遇到一次真实场景:车在高速上跑,感知模块每秒要处理 20 帧激光雷达数据,每帧包含几十万个点。如果用 ROS,光是序列化/反序列化就能吃掉 30% 的 CPU。Cyber RT 用了共享内存 + 零拷贝,延迟直接降到微秒级。
嗯,这就是差距。
1.3.1 核心概念:Node
Node 是 Cyber RT 里的「工作单元」。每个模块通常对应一个 Node。比如感知模块是一个 Node,规划模块是另一个 Node。
// 创建一个 Node
auto node = cyber::CreateNode("perception_node");
你想想看,Node 就像一个个独立的小车间,各自干各自的活,互不干扰。
1.3.2 核心概念:Channel
Channel 是数据传输的「管道」。每个 Channel 有一个名字,比如 /apollo/sensor/lidar/pointcloud。模块之间通过 Channel 名字来订阅和发布数据。
小技巧:我建议你给 Channel 命名时,遵循 /模块/子模块/数据类型 的格式。这样后期调试时,一眼就能看出数据流走向。
1.3.3 核心概念:Reader / Writer
Writer 负责往 Channel 里写数据,Reader 负责从 Channel 里读数据。一个典型的发布-订阅模式:
// 创建 Writer
auto writer = node->CreateWriter<PointCloud>("/apollo/sensor/lidar/pointcloud");
// 创建 Reader
auto reader = node->CreateReader<PointCloud>("/apollo/sensor/lidar/pointcloud",
[](const std::shared_ptr<PointCloud>& msg) {
// 处理点云数据
AINFO << "收到点云数据,点数: " << msg->point_size();
});
我曾经犯过一个低级错误:Reader 和 Writer 的 Channel 名字拼写不一致,结果数据死活收不到。排查了整整两个小时……所以,命名一定要统一。
1.4 环境搭建——别怕,跟着我来
环境搭建是新手最容易卡住的地方。我当年第一次装 Apollo,光依赖就装了三天。现在好多了,官方提供了 Docker 镜像,基本上一键搞定。
1.4.1 硬件要求
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 4 核 | 8 核以上 |
| 内存 | 8 GB | 16 GB 以上 |
| GPU | NVIDIA GTX 1050 | NVIDIA RTX 3070 以上 |
| 硬盘 | 100 GB | 256 GB SSD |
| 操作系统 | Ubuntu 18.04 | Ubuntu 20.04 |
注意:如果你没有 NVIDIA 显卡,也可以跑 Apollo,但感知模块的深度学习部分会跑在 CPU 上,速度会慢很多。建议至少搞一张 GTX 1050 级别的卡。
1.4.2 安装步骤(精简版)
- 安装 Docker:
curl -fsSL https://get.docker.com | bash - 安装 NVIDIA Docker(如果有 GPU):
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list - 拉取 Apollo 镜像:
docker pull apolloauto/apollo:dev-latest - 启动容器:
bash docker/scripts/dev_start.sh - 进入容器:
bash docker/scripts/dev_into.sh - 编译 Apollo:
./apollo.sh build_opt
避坑指南:编译时如果报内存不足,可以加 --jobs 4 参数限制并行任务数。我曾经在 8GB 内存的机器上不加限制编译,结果直接 OOM 了。
1.5 跑一个 Demo——验证你的环境
环境搭好了,怎么知道它能不能用?跑一个 Demo 试试。
# 启动 Dreamview(Apollo 的可视化界面)
bash scripts/bootstrap.sh
# 在浏览器中打开 http://localhost:8888
# 播放示例数据
cyber_recorder play -f data/demo_3.5.record -l
如果一切正常,你会看到 Dreamview 界面上出现一辆车在跑,各种传感器数据实时显示。嗯,那一刻还是挺有成就感的。
我个人习惯在跑 Demo 时,同时打开终端用 cyber_monitor 查看各个 Channel 的数据流:
cyber_monitor
这个工具会列出所有活跃的 Channel,以及每个 Channel 的发布频率、数据大小。调试时特别有用。
1.6 本章小结
这一章我们走了一遍自动驾驶系统的全貌,认识了 Apollo 平台和 Cyber RT 的核心概念。说白了,Cyber RT 就是整个系统的「血管」,Node 是器官,Channel 是血管,Reader/Writer 是血液流动的机制。
环境搭建这块,我建议你跟着步骤一步步来,遇到问题不要慌。大部分坑我都踩过了,后面章节会专门讲常见问题的排查方法。
好,先到这。去跑一下 Demo,感受一下数据在 Cyber RT 里流动的感觉。
可可精品资料库