整个openpilot项目可以分为以下几个模块:定位、决策、控制。
openpilot对于感知的实现原理类似于特斯拉,靠的是纯视觉的解决方案,但因为camera只有两颗(一颗用于拍摄实现的路况,另一颗用于监控驾驶员),所以openpilot支持也比较有限, 主要支持车道保持 、ACC巡航、自动辅助变道这三个功能。
其代码目录如下:
├── cereal # 用于所有日志的消息规范和LIB ├── common # openpilot中开发的类库功能 ├── docs # 文档 ├── opendbc # 显示如何解释汽车数据的文件,并以人类可读的方式对理解车辆CAN总线流量所需的信息进行编码。 ├── panda # CAN通信的代码 ├── third_party # 扩展第三方文件包 ├── pyextra # 扩展第三方python文件包 └── selfdrive # 驾驶汽车所需的代码 ├── assets # 用于用户界面的字体、图像和声音 ├── athena # 允许与应用程序app实现通信 ├── boardd # 守护进程与面板的通信 ├── camerad # 通过驱动程序从摄像头传感器捕获图像 ├── car # 用于读取状态和控制执行器的车辆特定代码 ├── common # 用于守护程序的共享C/C++代码 ├── controls # 规划和控制 ├── debug # 帮助您调试和执行汽车端口的工具 ├── locationd # 精确定位与车辆参数估计 ├── logcatd # Android logcat作为服务 ├── loggerd # 汽车数据记录器和上传器 ├── modeld # 驾驶和监控模型 ├── proclogd # 从proc记录信息 ├── sensord # IMU接口代码 ├── test # 单元测试、系统测试和汽车模拟器 └── ui # 用户界面
其结构如下:
其中,感知算法位于模型的modeld部分的supercombo文件,文件形式为thneed/onnx/dlc格式,OpenPilot并未为对此做详细介绍;
根据网上对此开源代码中感知算法模型文件的解析,可知网络的backbone部分采用了Google团队的EfficientNet-B2结构。