如何评价百度开放的Apollo计划源码?
AI科技大本营此前特别采访到宇通无人驾驶客车Team Leader,中科院微电子所副研究员韩威,CSDN主编孟岩,PerceptIn 联合创始人刘少山,深入详解百度开源的Apollo计划源码。
韩威:
百度这次开源的代码,架构设计合理,模块划分清晰,可扩展性较好,便于开发者维护和应用。代码质量较高,注释偏少,总体来说工程化思想不错。但功能叫较为单一和简单,只是寻迹行驶,复杂环境感知及定位等核心技术有待进一步开放。
孟岩:
1.跟 TensorFlow 一样,Apollo 整个项目使用 bazel 作为构建工具,以 docker 形式发布,并提供了安装构建的说明文档,有经验的开发者不难构建成功。但目前的文档还很不完善,很多模块中的文档是空的,仅靠阅读文档恐怕难有大的收获。如果想在 Apollo 这个方向上走得比较深入,必须进入代码层面。由于整个项目是用 C++ 写的,代码非常规范,熟悉 C++ 的人并不难读懂。但今天熟悉这种语言的人越来越少,实际上阅读 Apollo 源码的门槛还是比较高的。
2.代码主要是由 C++ 构成,大部分代码与 C++ 98 兼容,但也使用了 unique_ptr, unordered_map 等 C++ 11 组件。整个项目环境要求 boost 库,但仔细查看代码,发现真正对 boost 库的依赖只有寥寥几处,而且基本都为 C++ 11 所覆盖。由此可见,Apollo 还是希望尽可能降低对于 C++ 编译器的要求,允许使用仅满足 C++ 98 TR2的 C++ 编译器对项目进行编译。这对于智能驾驶系统的开发十分有意义,因为可能有些平台仍在使用老旧的 C++ 编译器。
3.核心代码位于 modules 子目录下,其中包含车载CAN总线系统 canbus,Web 显示系统 dreamview,全球定位系统驱动 gnss,人机交互系统 hmi,传感器数据处理系统 perception等重要模块。但目前放出的代码主要是框架和接口,使用 Apollo 的企业需要围绕这个框架和接口开发相应的驱动程序和接口程序。
4.C++代码质量上乘,单元测试使用 gtest,序列化采用 protobuf,数学计算使用 Eigen 库,都是各领域一流的库,可以看得出这支团队高超的代码素养。但同时,想要参与 Apollo 的代码贡献,其人的技术水平也必须要相当之高。
PerceptIn 联合创始人刘少山总体评价:
1)整体架构规划合理,层次清晰;2)模块化、封装隔离性方面的考虑周到 3)代码可扩展性比较好;4)代码风格良好且统一
1. 代码目录结构:1)建议增加exmaples文件夹,提供tutorial及程序样例
2. 代码使用:1)提供常见操作系统下的依赖库和安装方式;2)缺少详细的api文档;3)缺少样例,缺少文档支持,比较难上手
3. 代码质量:1)现有模块的代码风格符合规范;2)控制模块输入、输出规划和算法设计合理;3)Localization模块继承关系合理,代码可扩展性良好