一、课程导论:Apollo与Autoware的起源、发展历程与社区生态对比

大家好,我是你们这门课的老朋友。今天咱们正式开篇,聊聊自动驾驶领域两个绕不开的开源框架——Apollo和Autoware。

说实话,这两个框架我接触了快六年。从最早在实验室里跑仿真,到后来在量产项目里做集成,它们陪我踩过不少坑。今天这第一讲,我不打算上来就讲技术细节,而是先带大家看看它们是怎么来的,现在发展成什么样了,以及背后的社区生态到底谁更“香”。

1.1 为什么是Apollo和Autoware?

你想想看,现在市面上开源自动驾驶框架少说也有十几个。但真正能在工业界和学术界都站稳脚跟的,也就这两家。

Apollo背后是百度,2017年开源,一上来就带着“中国速度”。Autoware呢?它更早,2015年就从名古屋大学的实验室里长出来了,走的是纯学术路线。

我个人习惯把Apollo比作“正规军”,Autoware更像“游击队”。为什么这么说?

  • Apollo:代码规范、文档齐全、有商业公司背书。适合做量产落地。
  • Autoware:灵活、轻量、社区驱动。适合做算法研究和快速原型验证。

我在项目中遇到过这样的情况:客户要求快速出一个Demo,我第一反应就是用Autoware搭个原型,两天搞定。但真要上量产车,Apollo的工程化能力明显更靠谱。

1.2 起源与发展历程

Apollo:从“中国速度”到“全球生态”

Apollo的诞生其实挺有意思。2017年百度在上海车展上宣布开源,当时整个行业都震惊了——一家中国公司敢把完整的自动驾驶技术栈开源?

我记得那会儿我刚入行,第一反应是“这玩意儿能跑吗?”结果下载下来一编译,还真能跑。嗯,虽然第一次编译花了我整整一个下午。

Apollo的发展大致分三个阶段:

阶段 时间 核心特点
1.0 - 3.0 2017-2019 快速迭代,主打封闭场景和高速公路
3.5 - 5.0 2019-2021 引入V2X、高精地图,支持城市道路
6.0 至今 2021-现在 模块化重构,支持多传感器融合

说白了,Apollo的演进就是一条“从简单到复杂”的路。早期版本连Lidar都不支持,现在呢?激光雷达、毫米波、摄像头,全给你安排得明明白白。

Autoware:学术派的“小而美”

Autoware的故事就简单多了。它最早是名古屋大学加藤研究室的一个项目,初衷是给自动驾驶研究提供一个“能跑起来的参考实现”。

2015年刚开源时,Autoware只有几个核心模块:定位、感知、规划、控制。代码量不大,但胜在结构清晰。我那时候做毕设,就是拿Autoware改的——说实话,改起来比Apollo顺手多了。

Autoware的发展也分几个阶段:

阶段 时间 核心特点
Autoware AI 2015-2018 基于ROS1,学术风格浓厚
Autoware.Auto 2019-2021 转向ROS2,强调安全性和可靠性
Autoware Universe 2022至今 统一框架,支持更多硬件平台

这里有个坑我要提醒大家:Autoware的版本切换非常频繁。我曾经在项目中期从Autoware AI迁移到Autoware.Auto,结果发现API全变了,代码几乎重写。嗯,那段时间加班加得我怀疑人生。

1.3 社区生态对比

聊完历史,咱们看看现在。社区生态这东西,说白了就是“有多少人陪你一起玩”。

核心结论:Apollo的社区更“重”,Autoware的社区更“活”。

Apollo社区

  • 贡献者:以企业为主,百度、华为、滴滴等大厂都有参与
  • 代码质量:高,有严格的Code Review流程
  • 文档:中文文档齐全,但英文文档更新慢
  • Issue响应:官方响应快,但社区讨论较少

我个人觉得,Apollo社区最大的优势是“有组织”。你提个Issue,基本两天内有人回复。但缺点也很明显——你想参与核心代码开发?门槛不低。

Autoware社区

  • 贡献者:以高校和研究所为主,个人开发者多
  • 代码质量:参差不齐,但创新性强
  • 文档:英文为主,中文资料少
  • Issue响应:靠社区自发,有时快有时慢

Autoware社区更像一个“技术沙龙”。大家各写各的代码,然后往主干上合。我曾经在Autoware的Slack群里问过一个感知模块的问题,半小时内就有三个不同国家的开发者回复我——这种体验在Apollo社区里很少见。

1.4 一张图看懂整体对比

下面这张SVG图,是我自己画的。它把两个框架的核心差异都标出来了,你一看就明白。

Apollo vs Autoware 核心对比 Apollo Autoware 🏢 企业驱动(百度) 🎓 学术驱动(名古屋大学) 💻 主要语言:C++ / Python 💻 主要语言:C++ / ROS 🏗️ 架构:模块化 + 微服务 🏗️ 架构:节点式 + ROS 🗺️ 高精地图:强依赖 🗺️ 高精地图:可选 👥 社区:企业主导,规范 👥 社区:个人主导,活跃 🎯 适用:量产、封闭场景 🎯 适用:研究、快速原型 📈 学习曲线:陡峭 📈 学习曲线:平缓 选择哪个?看你的场景和团队

我的建议:如果你是学生或者做算法研究,从Autoware入手会更友好。如果你目标是进企业做量产,Apollo是必修课。

1.5 避坑指南

最后,分享几个我踩过的坑,希望能帮你少走弯路。

我曾经...在Apollo 3.5版本上花了两个月做二次开发,结果发现官方很快发布了5.0,API大改,之前的代码全废了。所以我的建议是:选一个长期维护的版本,别追新。

还有一点:Autoware的ROS依赖是个双刃剑。ROS让开发变得简单,但上了实车你会发现,ROS的实时性是个大问题。我见过不止一个团队在实车测试时因为ROS消息延迟导致车辆失控——嗯,还好只是测试场地里的桩桶。

好了,这一讲就到这里。记住一句话:没有最好的框架,只有最适合你的框架。下一讲,咱们深入代码层面,看看两个框架的架构设计到底差在哪。

可可精品资料库